Проверка интеграции
Проверяйте сайт с тестовым пользователем. Откройте DevTools → Network, включите сохранение журнала и перезагрузите страницу. Не вставляйте в Console реальные email, ID, пароли или токены.
| Признак | Что проверить и сделать |
|---|---|
window.FlowtomateWidget отсутствует | Найдите widget.js в Network, проверьте CSP и число тегов: document.querySelectorAll('script[data-flowtomate-key]').length должно быть 1. Для async, GTM и React дождитесь загрузки скрипта. |
| Виджет есть, но контента нет | Выполните await window.FlowtomateWidget.ready(), затем await window.FlowtomateWidget.refresh() и посмотрите новую загрузку в Network. Сам ready() не подтверждает успешное получение контента. Проверьте ключ, опубликованный материал и ошибки сети. |
| CORS или отказ из-за адреса сайта | Сравните location.origin с полем «Разрешённые адреса сайтов». Для рабочего сайта нужен точный HTTPS-origin, без пути и маски. |
identify отклонён или профиль анонимный | После согласия передайте непустой строковый ID и только строковые поля. Проверьте «Собирать данные о посетителях», режим согласия и выбранный проект. Затем найдите ID в «Аудитории». |
track не дал событие | Проверьте имя, свойства, согласие и сетевые ошибки. track ничего не возвращает; найдите запись в «Событиях» после отправки пакета. |
| Ручной материал не открылся | Дождитесь ready() и проверьте ID опубликованного материала. Для поп-апа включите «Из кода сайта». Разберите false у поп-апа или status у тура по правилам ручного запуска. |
| Iframe журнала не меняет высоту | Проверьте embed=1 в адресе и обработчик message из примера встраивания. Он должен сверять точный origin и источник сообщения. |
| Ответ формы есть, но его нет во внешней системе | В Network откройте ответ на отправку тестовой формы: при первой попытке поле externalDelivery может быть delivered, failed или disabled. Проверьте HTTPS и журнал своего получателя. Постоянного журнала доставки и автоматических повторов нет. |
Код установки и CSP приведены в инструкции. Для обработки ошибок методов с Promise используйте try/catch; не добавляйте таймеры с произвольной задержкой.