Документация для разработчиков

Код на сайте

Один тег включает на сайте трекер событий, виджеты и веб-пуш. Эта страница — про него: что ставить, как слать события с фронтенда и с бэкенда.

Код на сайте и управляющее API — разные вещи. Тег собирает события и показывает виджеты посетителю; API читает и настраивает сайты, виджеты и заявки из вашей системы. Ключ API на сайте не нужен и ставить его туда нельзя.

Тег #

Один тег перед закрывающим </head> на всех страницах. Он включает трекер, виджеты и веб-пуш по настройкам сайта — отдельных кодов больше нет.

<script async src="https://w.dashamail.ru/s/<sk>.js"></script>

<sk> — ключ сайта. Готовый тег отдаёт код установки, он же лежит в личном кабинете на вкладке «Код установки»:

curl 'https://api.dashamail.com/v2/sites/100842/install' \
  -H 'Authorization: Bearer YOUR_API_KEY'

После тега на странице доступна функция dashamail(…) — ею и шлются события. Увидели ли мы тег на страницах, видно в том же ответе, в поле script_status.

Как это работает #

Если событие шлёт авторизованный посетитель или трекер уже знает его идентификаторы, оно сразу уходит в DashaMail. Если посетитель анонимен, трекер копит его шаги и склеивает их с контактом, как только тот назовётся — например, оформит заказ.

Вызовы асинхронные: в ответе приходит результат отправки, а не обработки. Сессия заканчивается через 30 минут после последней активности посетителя.

Какие поля передавать в конкретном событии — в его карточке в личном кабинете, на вкладке «События» сайта. Список событий сайта вместе с базой, в которую они складываются, отдаёт API.

События с фронтенда #

Товарные события ссылаются на товары идентификатором из товарного каталога: productId — это offer из YML-фида, categoryId — его category.

Просмотр товара и категории

dashamail("async", {
    "operation": "ViewProduct",
    "data": {
        "product": {
            "productId": "4412",
            "price": "2490"
        }
    }
});
dashamail("async", {
    "operation": "ViewCategory",
    "data": {
        "category": {
            "categoryId": "14"
        }
    }
});

Корзина

quantity — количество SKU или товара, если SKU не передан.

dashamail("cart.addProduct", { "productId": "4412", "quantity": "1", "price": "2490" });
dashamail("cart.removeProduct", { "productId": "4412", "quantity": "1" });
dashamail("cart.setProductQuantity", { "productId": "4412", "quantity": "3" });
dashamail("cart.clear");

Заказы #

status — текущий статус заказа: created, processing или finished. totalPrice — финальная цена со всеми скидками.

dashamail("async", {
    "operation": "OrderCreate",
    "data": {
        "order": {
            "orderId": "A-10492",
            "totalPrice": "4380",
            "status": "created",
            "lines": [
                { "productId": "4412", "quantity": "1", "price": "2490" },
                { "productId": "4413", "quantity": "1", "price": "1890" }
            ]
        }
    }
});

Так же устроены OrderPaid — заказ оплачен и OrderDone — заказ закрыт.

Быстрый заказ присылает покупателя вместе с заказом: в форме он называет себя сам.

dashamail("async", {
    "operation": "OneClickOrder",
    "data": {
        "customer": {
            "name": "Иван Петров",
            "email": "ivan@example.ru",
            "mobilePhone": "+79160000000"
        },
        "order": {
            "totalPrice": "2490",
            "status": "created",
            "lines": [ { "productId": "4412", "quantity": "1", "price": "2490" } ]
        }
    }
});

Покупатель #

dashamail("async", {
    "operation": "UserRegistration",
    "data": {
        "customer": {
            "name": "Иван Петров",
            "email": "ivan@example.ru",
            "mobilePhone": "+79160000000"
        }
    }
});

Вход в личный кабинет — это опознание: событие не копится, а сразу склеивает прошлые шаги анонимного посетителя с этим контактом.

dashamail("identify", {
    "operation": "Authorization",
    "identificator": { "provider": "email", "identity": "ivan@example.ru" }
});

Подписка и промокод #

pointOfContact — идентификатор точки подписки. UserSubscriberNoConfirmBTN — подписка, которую не довели до подтверждения.

dashamail("async", {
    "operation": "UserSubscribe",
    "data": {
        "customer": { "email": "ivan@example.ru" },
        "pointOfContact": "footer"
    }
});
dashamail("async", {
    "operation": "PromoActivated",
    "data": {
        "promocode": { "name": "AUTUMN", "discount": "10", "amount": "249" }
    }
});

События с бэкенда #

То, что знает только ваш сервер — например, что заказ дошёл до базы, — отправляется с бэкенда. Адрес тот же для всех событий, само событие задаётся параметром operation.

POST https://directcrm.dashamail.com/v3/operations/sync?endpointId=<endpointId>&operation=OrderCreate

Content-Type: application/json; charset=utf-8
Accept: application/json
Authorization: Dashamail secretKey="<ключ точки интеграции>"
{
    "customer": {
        "email": "ivan@example.ru",
        "mobilePhone": "+79160000000"
    },
    "order": {
        "orderId": "A-10492",
        "totalPrice": "4380",
        "lines": [ { "productId": "4412", "quantity": "1", "price": "2490" } ]
    },
    "executionDateTimeUtc": "2026-10-28 09:15:00"
}

endpointId — точка интеграции сайта; её отдаёт список событий. executionDateTimeUtc нужен, когда событие отправляется задним числом. Ключ secretKey выдаёт ваш менеджер: в API он не отдаётся и с ключом API не совпадает.

Запрос с бэкенда приходит с адреса вашего сервера, а не посетителя. Чтобы в событии оказались его данные, передайте их заголовками Custom-IP, Custom-User-Agent и Custom-Accept-Language.

Тестовый режим #

Это настройка аккаунта, а не сайта: в тестовом режиме триггерные письма уходят не клиентам, а на ваш адрес. Включается в личном кабинете, в разделе «Аккаунт».

DashaMail хранит и защищает ваши данные на территории Российской Федерации

Подробнее...