Код на сайте
Один тег включает на сайте трекер событий, виджеты и веб-пуш. Эта страница — про него: что ставить, как слать события с фронтенда и с бэкенда.
Код на сайте и управляющее 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.
Тестовый режим #
Это настройка аккаунта, а не сайта: в тестовом режиме триггерные письма уходят не клиентам, а на ваш адрес. Включается в личном кабинете, в разделе «Аккаунт».