Loyalty Platform — руководство пользователя

Telegram

Содержание раздела
  1. Зачем это
  2. Как это устроено
  3. Подключение Telegram
  4. Карточка «Telegram»
  5. Несколько ботов и основной бот
  6. Группы и каналы
  7. Импорт подписчиков
  8. Клиент и Telegram
  9. Рассылки и уведомления в Telegram
  10. Что видно в журнале сообщений
  11. Telegram: если что-то не работает
  12. Кто что может

← Оглавление

Telegram на платформе работает через ботов организации: администратор подключает одного или нескольких ботов, созданных в @BotFather, и с этого момента рассылки, цепочки и уведомления о бонусах уходят клиентам в Telegram. Клиент подключается сам — нажимает в боте «Старт» и делится номером телефона, — по персональной ссылке или импортом подписчиков из прежнего бэкенда бота. Боты подключаются на странице «Каналы», а Telegram каждого клиента виден в его карточке.

Зачем это#

  • Бесплатный канал с высоким охватом. Сообщение в Telegram ничего не стоит организации, в отличие от SMS, и приходит в мессенджер, которым клиент пользуется каждый день.
  • Подписчики уже есть. Если у организации был свой бот, его подписчиков не нужно собирать заново: файл из прежнего бэкенда загружается импортом, и подписчики сразу становятся клиентами программы лояльности.
  • Клиент сам называет номер. Кнопка «Поделиться номером» в боте присылает настоящий номер из Telegram — платформа находит по нему клиента или регистрирует нового.
  • Уведомления о бонусах доходят надёжнее. Telegram встаёт в каскад каналов: клиент без приложения получит бесплатное сообщение в Telegram, а SMS уйдёт только тем, кому Telegram недоступен.
  • Один кабинет для всего. Подписчики, их чаты с ботами, блокировки и отказы видны в карточке клиента рядом с остальными контактами.

Как это устроено#

Боты организации#

Бот — это аккаунт организации в Telegram, например @acme_bonus_bot. Организация создаёт его в @BotFather (сервисном боте Telegram) и получает токен — ключ, по которому платформа отправляет сообщения от имени бота. Токен вставляется на странице «Каналы»; платформа проверяет его в Telegram и хранит в зашифрованном виде — ни целиком, ни частью он больше нигде не показывается.

У организации может быть несколько ботов — например, бот бонусов и бот акций. Один из них — основной: через него уходят сообщения, если в кампании или цепочке бот не выбран явно. Один бот подключается только к одной организации платформы.

Каждый бот работает в одном из двух режимов:

  • «Только отправка» — платформа отправляет сообщения, а нажатия «Старт», номера и блокировки бота получает прежний сервер организации, если он есть. Новых подписчиков платформа в этом режиме не видит.
  • «Перехват обновлений» — всё, что люди делают в боте, приходит на платформу: она сама привязывает подписчиков к клиентам и узнаёт о блокировках.

Подробнее о режимах и переходе с прежнего бэкенда — в «Перехват обновлений и прежний бэкенд».

Кто кому может писать#

  • Бот пишет только тем, кто нажал в нём «Старт» и не заблокировал его. Это правило Telegram: первым начать переписку бот не может. Поэтому у клиента есть чат с каждым ботом отдельно: с ботом бонусов он может переписываться, а бота акций — заблокировать.
  • Человек в Telegram — это Telegram-аккаунт с числовым Telegram ID. Аккаунт привязывается к клиенту программы; у одного клиента может быть несколько аккаунтов (например, рабочий и личный телефон).
  • Чат бывает в трёх состояниях: «Активен» — бот может писать; «Заблокировал бота» — человек остановил бота в Telegram; «Недоступен» — Telegram не даёт писать: аккаунт удалён или человек не нажимал «Старт» в этом боте (так бывает с подписчиками из импорта, если файл прежнего бэкенда неточен).
  • Группы и каналы, куда добавлен бот, — адреса организации, а не клиентов. Платформа их хранит, но публиковать в них пока нельзя (см. «Группы и каналы»).
  • Telegram не сообщает о доставке и прочтении. «Отправлено» означает, что Telegram принял сообщение; статуса «Доставлено» у Telegram нет.

Как клиенты подключаются#

Есть три способа связать Telegram-аккаунт с клиентом. Если способы расходятся, номер, присланный самим человеком, важнее персональной ссылки, а ссылка важнее импорта.

1. Номер в боте. Человек нажимает в боте «Старт» — бот отвечает: «Здравствуйте! Это бот {название организации}. Чтобы получать сообщения о бонусах и акциях, поделитесь номером телефона кнопкой ниже» и показывает кнопку «Поделиться номером». Человек нажимает её, Telegram присылает номер, и платформа:

  • находит клиента с этим номером и привязывает к нему аккаунт;
  • если такого клиента нет — регистрирует нового с номером и именем из Telegram (источник «Telegram-бот»: по нему цепочка на событие «Клиент создан» отличит таких клиентов);
  • если аккаунт был привязан к клиенту «только с Telegram» (без телефона), а клиент с этим номером уже есть — объединяет их; в журнале объединений инициатор — «Telegram-бот» (см. «Журнал объединений»).

Бот отвечает «Готово! Сообщения {название организации} будут приходить в этот чат». Чужой контакт, пересланный в бот, не принимается: «Отправьте свой номер кнопкой «Поделиться номером»». Тексты бота — платформенные, на русском, узбекском или английском по языку Telegram человека (иначе — по языку организации). На прочие сообщения бот не отвечает.

Человек, который нажал «Старт», но не поделился номером, — подписчик без клиента: чат с ботом есть, а клиента нет, и сообщения программы ему не уходят. Такие подписчики видны в карточке бота строкой «из них без клиента».

2. Персональная ссылка. Ссылка вида t.me/acme_bonus_bot?start=… привязывает к клиенту того, кто откроет её и нажмёт «Старт». Её выдаёт кнопка «Персональная ссылка» в карточке клиента (см. «Клиент и Telegram») или переменная {{telegram.link}} в SMS, письме или push: например, «Подключите Telegram и получайте уведомления о бонусах бесплатно: {{telegram.link}}». Ссылка ведёт на основного бота (если он в режиме перехвата, иначе — на первого такого бота) или на бота, выбранного в карточке клиента, действует 30 дней и одноразовая: после того как по ней подключился один Telegram-аккаунт, другой аккаунт по ней уже не привяжется. Устаревшую ссылку бот встречает словами «Эта ссылка устарела» и просит поделиться номером.

Ссылки работают только с ботами в режиме «Перехват обновлений»: иначе «Старт» получил бы прежний сервер организации. Если ссылку выдать нельзя — нет бота в режиме перехвата или персональные ссылки выключены на платформе, — переменная {{telegram.link}} подставляется пустой. Пишите текст так, чтобы он читался и без ссылки.

3. Импорт. Подписчики прежнего бэкенда бота загружаются файлом (см. «Импорт подписчиков»): строка с телефоном привязывается к клиенту с этим номером или создаёт клиента, строка без телефона создаёт клиента «только с Telegram».

Клиенты «только с Telegram» — обычные клиенты без телефона и email: они попадают в сегменты, кампании и цепочки, но SMS и письма им не уходят. Когда такой человек поделится номером в боте, клиент получит телефон, а если клиент с этим номером уже есть — профили объединятся.

Блокировка бота и согласие#

Сообщения в Telegram, как в любой канал, уходят по согласию клиента на канал «Telegram» (вкладка «Подписки» карточки клиента). Согласие меняется само, действиями человека в боте:

  • «Старт», номер, персональная ссылка, разблокировка бота — согласие на Telegram включается, если аккаунт привязан к клиенту;
  • блокировка бота — чат переходит в «Заблокировал бота»; если у клиента не осталось ни одного активного чата с ботами организации, записывается отказ клиента от канала. Блокировка второстепенного бота при активном чате с основным согласие не снимает;
  • импорт включает согласие, только если клиент ещё не принимал решения: отказ клиента импорт не перекрывает;
  • отвязка аккаунта администратором согласие не меняет.

Если канал «Telegram» выключен в справочнике «Каналы», согласия на него не выдаются — карточка «Telegram» предупреждает об этом.

Платформа узнаёт о блокировке двумя путями: из обновлений бота (в режиме перехвата) и из ответа Telegram при отправке сообщения. Второй путь работает и в режиме «Только отправка»: сообщение получает причину «Клиент заблокировал бота», а чат — состояние «Заблокировал бота».

Подключение Telegram#

Ботов подключает Администратор организации на странице «Каналы»: карточка «Telegram» — четвёртая в блоке «Подключения», после push, email и SMS.

Что подготовить в @BotFather#

Все действия — в Telegram, в диалоге с @BotFather:

  • /newbot — создать бота: имя, которое увидят клиенты (например, «Acme Бонусы»), и адрес, заканчивающийся на bot (acme_bonus_bot). В ответ @BotFather пришлёт токен вида 123456789:AA… — его и вставляют в админке.
  • /token — показать токен существующего бота: так подключают бота, который уже работает у организации.
  • /revoke — выпустить новый токен, если прежний утёк. Старый токен сразу перестаёт работать: на платформе бот получит метку «Токен отклонён», пока новый токен не вставят кнопкой «Заменить токен».
  • /setjoingroups — разрешить или запретить добавлять бота в группы.
  • Имя, описание и картинку бота организация меняет там же, в @BotFather (/setname, /setdescription, /setuserpic): платформа их не задаёт.

Токен — ключ ко всему боту: кто его знает, тот пишет от имени организации. Не пересылайте токен почтой и в мессенджерах; после вставки в админку удалите его копии.

Добавление бота#

Пока ботов нет, карточка показывает «Подключите бота, созданного в @BotFather: администратор вставляет токен, платформа проверяет его в Telegram», ссылку «Как подключить бота» и кнопку «Добавить бота».

  1. Нажмите «Добавить бота» — откроется окно «Добавить бота» с напоминанием «Платформа проверит токен в Telegram — это занимает до 20 секунд».
  2. «Токен бота» — вставьте токен из @BotFather (подсказка под полем — «@BotFather → /newbot или /token»). Поле скрывает ввод, браузер его не запоминает. Если токен вставлен не полностью или с лишними символами, под полем сразу появится «Формат токена неверный: нужен токен вида 123456789:AA… из @BotFather».
  3. «Перехватывать обновления бота» — включено по умолчанию. Под включённым переключателем — что произойдёт с прежним сервером организации (см. «Перехват обновлений и прежний бэкенд»). Если бот ещё обслуживает прежний бэкенд, выключите переключатель: бот подключится в режиме «Только отправка». Если переключатель неактивен с подсказкой «Адрес платформы для обновлений не настроен — обратитесь к администратору платформы», перехват на этой платформе недоступен — бот подключается только для отправки.
  4. «Сделать основным» — у первого бота организации включено и неактивно («Первый бот организации всегда основной»), у следующих — по выбору.
  5. Нажмите «Подключить» или Enter. Платформа проверяет токен в Telegram и, если включён перехват, устанавливает адрес обновлений. Пока идёт проверка, окно не закрыть.

Итог:

  • «Бот @acme_bonus_bot подключён» — бот появился в карточке с меткой «Работает».
  • «Бот @… подключён, но перехват не включён: … Платформа повторит попытку через 10 минут» — бот подключён и уже отправляет сообщения, а адрес обновлений Telegram не принял; платформа повторяет установку сама (см. «Состояния обновлений»).
  • «Telegram не принял токен» с причиной и ответом Telegram («Ответ Telegram: …») — бот не подключён. Причины: «Telegram отклонил токен» (токен отозван или с ошибкой — возьмите новый в @BotFather), «Telegram ответил неожиданно» (токен не от бота), «Нет связи с Telegram или он не ответил вовремя», «Telegram временно недоступен». Поле токена не очищается: исправьте и нажмите «Подключить» снова.
  • «Этот бот уже подключён — @…» с кнопкой «Заменить токен у @…» — бот уже есть в карточке; кнопка заменит его токен на введённый, без повторного ввода.
  • «Бот подключён в другой организации платформы» — один бот работает только в одной организации. Подробностей платформа не раскрывает.
  • «Достигнут предел числа ботов организации (N подключено) — отключите ненужного бота» — у организации не больше 10 ботов. При достигнутом пределе кнопка «Добавить бота» неактивна с подсказкой «Подключено ботов: 10 из 10. Чтобы добавить нового, отключите ненужного бота».
  • «Не дождались ответа Telegram; бот мог подключиться — список ботов перечитан» — ответа не было 40 секунд; посмотрите карточку.

Добавление, «Проверить» и замена токена вместе — не больше 10 в минуту на организацию. После «Слишком много запросов» кнопка показывает «Повторить через N с» (у «Проверить» — «Проверить через N с»).

Перехват обновлений и прежний бэкенд#

Обновления — это всё, что люди делают в боте: нажатия «Старт», присланные номера, блокировки и разблокировки бота, добавление бота в группы и каналы. Telegram отдаёт обновления бота только одному получателю — либо прежнему серверу организации, либо платформе.

Режим (метка у бота) Кто получает обновления Что умеет платформа
«Только отправка» Прежний сервер организации, если он есть Отправлять сообщения тем, кто уже привязан (импортом или раньше). Новые подписчики, номера и блокировки ей не видны — блокировку она узнаёт только при неудачной отправке
«Перехват обновлений» Платформа Всё: привязка по номеру и персональной ссылке, регистрация новых клиентов, блокировки, группы и каналы

Как перейти с прежнего бэкенда без потерь:

  1. Подключите бота с выключенным перехватом — прежний бэкенд работает как раньше, платформа может отправлять сообщения.
  2. Выгрузите из прежнего бэкенда подписчиков и загрузите их импортом.
  3. Нажмите «Включить перехват» у бота и подтвердите. С этого момента «Старт», номера и блокировки получает платформа.

Окно подтверждения «Включить перехват обновлений @…?» предупреждает: «Обновления бота будут приходить на платформу. Прежний сервер организации (bot.acme-legacy.uz) перестанет их получать; если он читает обновления опросом (getUpdates), он начнёт получать ошибку. Отправка сообщений прежним сервером продолжит работать». Адрес прежнего сервера платформа узнаёт при проверке бота; если он неизвестен, текст без адреса. Обновления, которые Telegram накопил к моменту перехвата, не теряются — они придут на платформу.

«Выключить перехват» возвращает бота в «Только отправка»: «Платформа снимет свой адрес обновлений. Подключите прежний сервер заново — платформа перестанет узнавать о новых подписчиках и блокировках». Прежний сервер сам адрес обратно не получит — его заново подключает тот, кто обслуживает прежний бэкенд.

Пока прежний сервер продолжает отправлять сообщения через того же бота, он делит с платформой лимит Telegram — около 30 сообщений в секунду на бота (см. «Ограничения Telegram»).

Состояния обновлений#

Строка «Обновления» в сведениях бота показывает, кто получает обновления сейчас. Ботов в режиме перехвата платформа проверяет у Telegram раз в 10 минут; кнопка «Проверить» делает то же сразу.

Строка «Обновления» Что значит Что делать
«Приходят на платформу» (бывает «…, в очереди Telegram: N») Перехват работает Ничего. Небольшая очередь у Telegram разбирается сама
«Telegram не может доставить обновления» Платформа не отвечает Telegram или отвечает ошибкой. Над сведениями — предупреждение «Telegram не может доставить обновления: …» со временем ошибки и числом обновлений в очереди: «Telegram повторяет доставку сам и хранит обновления до суток» Подождать и нажать «Проверить». Если состояние не проходит — сообщить технической команде платформы: это сбой на её стороне
«Перехват не включён» Telegram не принял адрес обновлений платформы. Предупреждение «Перехват не включён: …» — «Платформа повторяет попытку раз в 10 минут» «Повторить сейчас». Если не помогает — сообщить технической команде платформы
«Получает другой сервер (хост)» Другой сервер — обычно прежний бэкенд — поставил свой адрес обновлений и забрал их у платформы. Предупреждение «Обновления бота получает другой сервер (хост)» — «Платформа не узнаёт о новых подписчиках и блокировках бота. Если адрес вернул прежний сервер организации, договоритесь, кто получает обновления» Выяснить, кто сменил адрес, договориться и нажать «Включить перехват снова» — после подтверждения с адресом этого сервера
«Адрес обновлений снят» Адрес обновлений удалили (например, командой прежнего бэкенда) «Включить перехват снова»
«Получает прежний сервер организации (хост)» Режим «Только отправка»: обновления получает указанный сервер Ничего — это обычный режим до перехода
«Платформа не получает обновления бота» Режим «Только отправка»; кто получает обновления, платформе неизвестно — у бота нет адреса обновлений или его ещё не проверяли «Проверить» покажет прежний сервер, если он есть; если бот должен привязывать подписчиков — «Включить перехват»

Платформа никогда не забирает обновления обратно сама: если другой сервер перехватил их, решение — за администратором («Включить перехват снова»). Иначе платформа и прежний бэкенд перехватывали бы бота друг у друга. Если адрес платформы для обновлений не настроен, кнопки «Повторить сейчас» и «Включить перехват снова» неактивны с подсказкой «Адрес платформы для обновлений не настроен — обратитесь к администратору платформы».

Карточка «Telegram»#

Заголовок карточки — «Telegram», под ним — «Боты организации» (пока ботов нет) или «Ботов: 2 из 10». Метка карточки: «Не подключено» — ботов нет, «Работает» — хотя бы один бот работает, «Токен отклонён» — Telegram отклонил токены всех ботов.

Над списком ботов — предупреждения карточки:

  • «Канал «Telegram» выключен в справочнике каналов» — «Согласия на Telegram не выдаются, рассылки с согласием не дойдут. Включите канал в таблице каналов ниже».
  • «Основной бот не выбран: сообщения уходят через бота, с которым клиент связался последним» — основного бота отключили; назначьте нового кнопкой «Сделать основным».

У каждого бота — @адрес (ссылка открывает бота в Telegram), имя из @BotFather и метки: «Основной», «Работает» или «Токен отклонён», «Перехват обновлений» или «Только отправка». Под ними — предупреждения бота (если есть) и сведения:

Строка Что показывает
Подписчики «Активны: 1 250 (из них без клиента: 40) · заблокировали бота: 85 · недоступны: 12» — личные чаты с этим ботом по состояниям. «Без клиента» — нажали «Старт», но не поделились номером
Группы и каналы «Групп: 2, каналов: 1» — ссылка открывает их список; «, бот удалён из: N» — если бота удалили из групп или каналов
Обновления Кто получает обновления бота (см. «Состояния обновлений»)
Последняя проверка «дата · успешно» или «дата · причина (шаг: проверка токена / адрес обновлений)» и «Ответ Telegram: …»
Ошибка отправки Только если за последние сутки Telegram отказал при отправке: «Telegram отклонил токен при отправке (дата)» или «Telegram ограничил скорость отправки, бот на паузе (дата)»
Изменил Кто и когда последним менял бота

Предупреждения бота, самые важные — сверху: «Telegram отклонил токен бота — сообщения через него не уходят» («Получите новый токен в @BotFather (/token) и замените его», кнопка «Заменить токен»), затем проблема обновлений (таблица выше).

Кнопки бота:

  • «Проверить» — платформа запрашивает у Telegram данные бота (токен, имя, можно ли добавлять бота в группы) и кто получает его обновления. Сообщения при этом не отправляются. Итог — «Бот @… работает» или «Проверка не прошла: причина (шаг: …)». Проверка возвращает метку «Работает» боту с отклонённым токеном, если токен снова действует.
  • «Сделать основным» — есть у всех, кроме основного.
  • «Включить перехват» / «Выключить перехват» — с подтверждением (см. «Перехват обновлений и прежний бэкенд»).
  • Меню «Ещё»: «Заменить токен», «Импорт подписчиков», «История импортов», «Отключить».

«Заменить токен» — окно «Заменить токен @…» с подсказкой «Новый токен нужен после /revoke в @BotFather или утечки токена». Токен должен быть от того же бота: токен другого бота окно не примет — «Это токен другого бота». После замены метка «Работает» возвращается, а сообщения в очереди уходят уже с новым токеном.

«Отключить» — после подтверждения «Отключить бота @…?»: «Бот перестанет отправлять сообщения организации. Подписчики и их привязки сохранятся и вернутся, если подключить этого бота снова». Сообщения этого бота, которые ещё ждут отправки, завершатся ошибкой «Бот не подключён», а уведомления о бонусах уйдут в резервный канал. Если отключили основного бота, основного не остаётся до следующего «Сделать основным».

Под ботами — кнопка «Добавить бота» и строки «За 24 часа: отправлено N, ошибок M, в повторе K» и «Последнее сообщение: дата» по всем ботам организации.

Если карточка показывает «Сервис сообщений недоступен», ботов сейчас нельзя ни посмотреть, ни изменить — это сбой на стороне платформы: повторите позже.

Несколько ботов и основной бот#

Несколько ботов нужны, когда у организации разные бренды или разные задачи: бот бонусов для уведомлений и бот акций для рассылок. У каждого бота свои подписчики — человек, подписанный на бота бонусов, не получит сообщения бота акций, пока сам не нажмёт в нём «Старт».

Какой бот отправит сообщение клиенту:

  1. Бот, выбранный явно в кампании или в узле «Отправить сообщение» цепочки. Выбор строгий: если у клиента нет активного чата именно с этим ботом, сообщение завершится ошибкой «У клиента нет активного чата с ботом» — другой бот не подставляется, и рассылка «от бота акций» не придёт от бота бонусов.
  2. Иначе — основной бот, если у клиента с ним активный чат.
  3. Иначе — бот, с которым клиент связался последним.

Учитываются только боты с меткой «Работает». Уведомления о бонусах всегда выбирают бота по правилам 2–3. Первый подключённый бот становится основным сам; сменить основного — кнопкой «Сделать основным» у другого бота. Снять отметку «Основной», не назначив другого, нельзя — основного не остаётся, только если его отключить.

Группы и каналы#

Если бота добавили в группу, супергруппу или канал Telegram, платформа это запоминает — из обновлений бота (в режиме перехвата) или из импорта. Ссылка в строке «Группы и каналы» сведений бота открывает список «Группы и каналы @…» с пояснением «Бот хранит группы и каналы, куда его добавили. Публикация в них появится позже».

В таблице — «Название» (и @адрес второй строкой, если он есть), «Тип» (группа, супергруппа, канал), «Состояние», «С какого времени» и «Источник» («Бот» — узнала из обновлений, «Импорт» — из файла). Фильтры — по типу и состоянию.

Состояние Что значит
«Бот в чате» Бот в группе или администратор канала с правом публикации
«Бот без права публикации» Бот в канале как обычный участник или администратор без права публикации, либо в группе, где ему запрещено писать
«Бот удалён» Бота удалили из группы или канала

Если в @BotFather запрещено добавлять бота в группы, над списком — «Бота нельзя добавить в группы: разрешите это в @BotFather (/setjoingroups)». Пока бота никуда не добавляли — «Бот пока не добавлен ни в одну группу или канал».

Импорт подписчиков#

Импорт переносит подписчиков прежнего бэкенда бота на платформу: строка файла — подписчик, группа или канал. Загружается в конкретного бота: меню «Ещё» → «Импорт подписчиков» у этого бота открывает окно «Импорт подписчиков @…».

Файл и колонки#

Файл CSV или XLSX — до 20 МБ и 200 000 строк. Первая строка — заголовок с именами колонок; регистр и пробелы по краям не важны, незнакомые колонки пропускаются. Ссылка «Скачать шаблон CSV» в окне даёт файл с правильным заголовком и тремя строками-примерами.

Колонка Другие имена Что в ней
chat_id (обязательна) id, telegram_id, user_id Telegram ID чата: положительное число — личный чат человека (он же его Telegram ID), отрицательное — группа, супергруппа или канал
phone phone_number, телефон Телефон в любом написании: +998 90 123-45-67, 998901234567
first_name name, имя Имя
last_name фамилия Фамилия
username login Имя пользователя Telegram, с @ или без
chat_type type private (или user), group, supergroup, channel. Пусто — по знаку chat_id: положительный — личный чат, отрицательный длинный (-100…) — супергруппа, прочий отрицательный — группа
title chat_title Название группы или канала
status blocked blocked, kicked, true или 1 — человек заблокировал бота у прежнего бэкенда; пусто — активен
language_code lang Язык Telegram человека: по нему бот выбирает язык ответов
  • CSV — только в кодировке UTF-8. Разделитель — запятая, точка с запятой или табуляция: платформа определяет его по строке заголовка. В Excel выбирайте при сохранении «CSV UTF-8»: обычный «CSV» сохраняется в другой кодировке, и файл не примется.
  • XLSX — читается первый лист. Номера телефонов и Telegram ID в числовых ячейках читаются как есть, даже если Excel показывает их как 7,71E+09.
  • Телефон, имена, язык и status учитываются только у личных чатов, title — только у групп и каналов.

Файл проверяется при выборе: «Нужен файл CSV или XLSX», «Файл пустой», «Файл больше 20 МБ». Остальное проверяет сервер при загрузке, ошибка — под полем файла: «Файл не читается как CSV в кодировке UTF-8», «Файл не читается как книга XLSX», «В файле нет колонки chat_id. Найдены колонки: …» (видно, что переименовать), «В файле больше 200 000 строк», «В файле нет строк».

Предупреждение о цепочках и согласиях#

Над выбором файла — постоянное предупреждение «Новые клиенты будут созданы с источником «Импорт»»:

  • «Цепочки на событие «Клиент создан» сработают для каждого — чтобы исключить их, добавьте в цепочку условие «источник ≠ импорт»». Импорт создаёт клиентов обычным путём: срабатывают цепочки, вебхуки во внешние системы customer.created, пересчёт сегментов и автоматическое объединение дублей. Загрузка 10 000 подписчиков — это 10 000 приветственных сообщений, если у организации есть цепочка «Клиент создан → Отправить сообщение». До загрузки добавьте в такие цепочки условие «Источник создания клиента» не равно «Импорт» (см. «Цепочки») или приостановите их.
  • «Подписчики с активным чатом получат согласие на канал Telegram, если клиент от него не отказывался». Отказ клиента импорт не перекрывает.

Что получится#

Строка файла Что делает платформа Счётчик отчёта
Личный чат с телефоном, клиент с этим номером есть Привязывает Telegram-аккаунт к клиенту и заводит чат с ботом «Привязано к клиентам»
Личный чат с телефоном, клиента с таким номером нет Создаёт клиента с телефоном и именем из файла (источник «Импорт») и привязывает к нему аккаунт «Созданы клиенты»
Личный чат без телефона, аккаунт ещё не привязан Создаёт клиента «только с Telegram» — без телефона и email «Созданы клиенты только с Telegram»
Личный чат без телефона, аккаунт уже привязан Заводит чат с этим ботом, если его не было «Привязано к клиентам» или «Без изменений»
Группа, супергруппа, канал Добавляет в «Группы и каналы» бота «Группы и каналы» или «Без изменений», если уже был
Всё это уже есть на платформе Ничего «Без изменений»
Строка с ошибкой Ничего «Ошибки»

Состояние нового чата — из колонки status: «Заблокировал бота» или «Активен». Импорт не перебивает того, что платформа уже знает: чат, который уже есть, не меняется (данные прежнего бэкенда старше), а аккаунт, привязанный номером, ссылкой или прошлым импортом к другому клиенту, остаётся у него — строка получает ошибку. Повторная загрузка того же файла безопасна: обработанные строки дают «Без изменений».

Ход и отчёт#

Нажмите «Загрузить»: файл сохраняется на сервере («Сохраняем файл…», до двух минут), после чего окно показывает ход — имя файла, «Начат …», «Обработано строк: N из M» и живые счётчики. Обработка идёт в фоне — 150–300 строк в секунду: 100 000 строк — 6–11 минут. «Окно можно закрыть: импорт продолжится, ход виден в «Истории импортов»». Повторное открытие окна сразу покажет ход идущей загрузки; если сервер перезапустился, импорт продолжится с того же места.

У одного бота одновременно идёт одна загрузка: пока она не закончилась, окно показывает её ход («Загрузка этого бота уже идёт — ниже её ход»). Отменить начатую загрузку нельзя.

Когда импорт закончится, окно показывает отчёт: «Импорт завершён …» и шесть счётчиков — «Привязано к клиентам», «Созданы клиенты», «Созданы клиенты только с Telegram», «Группы и каналы», «Без изменений», «Ошибки». Если есть ошибки — кнопка «Скачать ошибки (CSV)»: файл с колонками row (номер строки в вашем файле), chat_id и error (код). Телефонов и имён в файле ошибок нет. Кнопки внизу — «Загрузить ещё файл» и «Закрыть».

«Импорт остановлен из-за сбоя сервера» — «Обработанные строки сохранены; загрузите файл снова — они дадут «Без изменений»». Строка «Подробности для поддержки» — для технической команды.

Коды ошибок в файле#

Код Что значит
CHAT_ID_INVALID chat_id пуст или не целое число
CHAT_TYPE_INVALID незнакомый chat_type или тип противоречит знаку chat_id
PHONE_INVALID телефон не похож на номер (не 10–15 цифр)
DUPLICATE_ROW тот же chat_id уже был выше в файле
ACCOUNT_LINKED_ELSEWHERE Telegram-аккаунт уже привязан к другому клиенту
CUSTOMER_CONFLICT клиента с этим телефоном не удалось ни найти, ни создать — загрузите файл снова
UNEXPECTED внутренняя ошибка — подробности в журнале сервера по номеру строки

Строки с ACCOUNT_LINKED_ELSEWHERE — обычно люди, которые уже сами поделились номером в боте или перешли по персональной ссылке: их привязку платформа считает надёжнее файла.

История импортов#

Меню «Ещё» → «История импортов» у бота — загрузки этого бота: «Файл», «Загружен» (когда и кем), «Статус» («В очереди», «Обрабатывается N%», «Завершён», «Сбой»), «Итог» («привязано · создано · ошибок») и действия «Отчёт» и «Ошибки (CSV)». Записи хранятся 30 дней, затем удаляются вместе с файлом ошибок.

Телефоны и имена из файла хранятся только на время обработки: после импорта остаются клиенты, их Telegram-аккаунты и чаты, а у строк с ошибками — только номер строки и chat_id.

Клиент и Telegram#

В карточке клиента на вкладке «Идентификаторы» над таблицей идентификаторов — раздел «Telegram». Если аккаунтов нет — «Клиент не подключал Telegram» и пояснение «Клиент подключится, поделившись номером в боте организации или открыв персональную ссылку».

По каждому привязанному Telegram-аккаунту видно:

  • имя и @имя пользователя из Telegram;
  • «Telegram ID» с кнопкой копирования — по нему аккаунт находят в выгрузках прежнего бэкенда;
  • как подключён — «поделился номером», «по персональной ссылке» или «импорт» — и с какого времени;
  • чаты с ботами: @бот и состояние — «Активен», «Заблокировал бота» или «Недоступен» — с датой; у чата из импорта — пометка «импорт». Если бота отключили, строка серая: «@бот · бот не подключён».

Персональная ссылка#

Кнопка «Персональная ссылка» создаёт ссылку для этого клиента — её отправляют клиенту любым способом (в SMS, по почте, в чате поддержки). Если у организации два и более ботов в режиме «Перехват обновлений», администратор выбирает бота в окне (первым в списке — «Основной бот»); иначе — и у Оператора всегда — ссылка ведёт на бота по правилам: основной бот в режиме перехвата, иначе первый такой бот. Результат — ссылка с кнопкой копирования, бот и «Действует до …» (30 дней) с пояснением: ссылка одноразовая, после подключения по ней другой Telegram-аккаунт её не использует; номер, которым поделился клиент, важнее ссылки.

Если ссылку создать нельзя — «Ссылку не выпустить: нет бота с включённым перехватом обновлений или персональные ссылки выключены на платформе»: нужен хотя бы один бот в режиме «Перехват обновлений». Если вместо кнопки — «Персональные ссылки выключены на платформе», обратитесь к технической команде платформы.

Тестовое сообщение#

Кнопка «Отправить тест» отправляет клиенту настоящее сообщение в Telegram — сразу, мимо очереди. В окне выбирается бот («По правилам» или один из ботов, с которыми у клиента активный чат) и содержимое: активный Telegram-шаблон или свой текст с теми же правилами разметки и счётчиком, что у шаблона. Итог — «Telegram принял сообщение (бот @…)» или «Сообщение не отправлено: причина» с ответом Telegram.

Если у клиента нет активных чатов с ботами, кнопка неактивна. Тестовое сообщение попадает в журнал сообщений клиента с источником «Вручную (тест)»; если клиент заблокировал бота, тест это покажет — чат перейдёт в «Заблокировал бота». Не больше 5 тестовых сообщений в минуту на организацию.

Отвязка#

«Отвязать» у аккаунта — после подтверждения «Отвязать Telegram-аккаунт?»: сообщения в Telegram этому клиенту перестанут уходить через этот аккаунт. Согласие на канал не меняется. Аккаунт снова привяжется, когда человек поделится номером в боте или откроет персональную ссылку. Отвязка нужна, если аккаунт привязался не к тому клиенту — например, по пересланной персональной ссылке.

Рассылки и уведомления в Telegram#

Telegram — такой же канал, как SMS и email: шаблон с каналом «Telegram» выбирается в кампании, в узле «Отправить сообщение» цепочки и в карточке уведомления о бонусах.

  • Кому уходит. Клиентам с согласием на канал «Telegram» и активным чатом хотя бы с одним ботом организации. У клиента без активного чата сообщение завершается ошибкой «У клиента нет активного чата с ботом» (в уведомлениях о бонусах такой клиент сразу пропускает Telegram и получает следующий канал).
  • Какой бот. В форме кампании и в узле цепочки при канале «Telegram» появляется выбор бота: «По правилам: основной бот, иначе тот, с которым клиент связался последним» или конкретный бот (см. «Несколько ботов и основной бот»). Бот с отклонённым токеном выбрать нельзя. Уведомления о бонусах выбирают бота по правилам.
  • Предупреждения в формах. Если Telegram не подключён, у выбранного бота отклонён токен или он отключён, форма кампании, узел цепочки и строка Telegram в уведомлениях предупреждают: «Telegram не подключён — сообщения по этому каналу завершатся ошибкой «Бот не подключён»», «Выбранный бот не подключён — сообщения завершатся ошибкой «Бот не подключён»», «Telegram отклонил токен выбранного бота — сообщения через него не уходят», «Telegram отклонил токены всех ботов — сообщения по этому каналу не уходят». Справкой — о проблемах с обновлениями основного бота: «Обновления основного бота получает другой сервер: сообщения уходят, но новые подписчики не привязываются». Администратор организации видит ссылку «Открыть «Каналы»», остальные — «Обратитесь к администратору организации».

Разметка текста#

Текст Telegram-шаблона может содержать разметку Telegram — часть тегов HTML:

Что нужно Как записать
Жирный <b>Скидка 20%</b>
Курсив <i>только сегодня</i>
Подчёркнутый, зачёркнутый <u>…</u>, <s>…</s>
Ссылка <a href="https://acme.uz/promo">Подробнее</a> — адрес http://, https:// или tg://; в адресе можно использовать переменные
Моноширинный текст (промокод, номер карты) <code>{{promo.code}}</code>
Скрытый текст — открывается по нажатию <tg-spoiler>…</tg-spoiler>
Цитата, свёрнутая цитата <blockquote>…</blockquote>, <blockquote expandable>…</blockquote>

Нельзя: другие теги (<p>, <div>, <br>, <img>, заголовки) — новую строку дают переводом строки, а картинки и кнопки в сообщениях пока не поддерживаются; теги внутри <code> и <pre>; переменные внутри тега, кроме адреса ссылки. Символы <, > и & в обычном тексте писать можно («Скидка 10% & подарок», «< 5 минут»): платформа сама их экранирует, а значения переменных никогда не ломают разметку. Подробно — в «Telegram-шаблон».

Ограничения Telegram#

  • 4096 символов видимого текста в сообщении (без тегов). Шаблон, в котором текст без переменных длиннее, не сохранится; сообщение, которое вышло длиннее после подстановки значений клиента, не отправится — ошибка «Текст длиннее 4096 символов». Эмодзи считаются за два символа, как в Telegram.
  • Скорость. До 25 сообщений в секунду на бота и не чаще одного сообщения в 1,1 секунды в один чат: рассылка на 100 000 клиентов через одного бота идёт около 67 минут, через двух ботов (если клиенты подписаны на разных) — быстрее. Если Telegram попросил подождать, на паузу встаёт только этот бот — остальные боты организации продолжают отправку. Сообщения цепочек и уведомлений уходят раньше кампаний.
  • Нет статуса доставки. «Отправлено» — Telegram принял сообщение; прочитал ли его клиент, не видно.
  • Повторы. Если Telegram временно недоступен, сообщение повторяется по расписанию очереди, до 4 часов.
  • Превью ссылок Telegram строит сам: под сообщением со ссылкой появится карточка сайта.

Что видно в журнале сообщений#

На вкладке «Сообщения» карточки клиента и в блоке «Сообщения» карточки кампании у сообщения Telegram:

  • на вкладке клиента под каналом — бот, через который ушло сообщение: «Telegram · @acme_bonus_bot» (бот без известного имени — «Telegram · бот 7712345678»); в карточке кампании бот указан в «Сведениях» самой кампании;
  • статус «Отправлено» с подсказкой «Telegram принял сообщение и не сообщает о доставке и прочтении» — «Доставлено» у Telegram не бывает;
  • причина у ошибки:
Причина Что значит и что делать
«Клиент заблокировал бота» Человек остановил бота в Telegram. Чат переходит в «Заблокировал бота»; если других активных чатов с ботами нет, записывается отказ клиента от Telegram. Уведомление о бонусах уходит в резервный канал. Писать снова можно, когда клиент сам разблокирует бота
«У клиента нет активного чата с ботом» Клиент не нажимал «Старт» в этом боте, удалил аккаунт или Telegram не даёт писать (бывает у подписчиков из импорта). У явно выбранного бота кампании — нет чата именно с ним. Чат переходит в «Недоступен»
«Бот не подключён» У организации нет ботов, или бот кампании либо узла отключён — см. «Подключение Telegram»
«Telegram отклонил токен бота» Токен отозван в @BotFather — замените его в карточке «Telegram»
«Текст длиннее 4096 символов» После подстановки значений клиента сообщение вышло длиннее предела Telegram — сократите шаблон
Прочие отказы Telegram, исчерпанные повторы, неверная разметка Редкие: разметку и длину платформа проверяет заранее. Если повторяется — сообщите технической команде платформы

Telegram: если что-то не работает#

Симптом Причина Что делать
У бота метка «Токен отклонён», предупреждение «Telegram отклонил токен бота — сообщения через него не уходят» Токен отозван (/revoke) или бот удалён в @BotFather Получить токен в @BotFather (/token) и нажать «Заменить токен»
«Обновления»: «Telegram не может доставить обновления» Платформа не отвечает Telegram Подождать и нажать «Проверить»; если держится — сообщить технической команде платформы. Обновления Telegram хранит до суток
«Обновления»: «Перехват не включён» Telegram не принял адрес обновлений платформы «Повторить сейчас»; если не помогает — техническая команда платформы
«Обновления»: «Получает другой сервер (…)» или «Адрес обновлений снят» Прежний бэкенд или кто-то ещё сменил адрес обновлений Договориться, кто получает обновления, и нажать «Включить перехват снова»
Подписчиков 0, новые клиенты из бота не появляются Бот в режиме «Только отправка» — «Старт» и номера получает прежний сервер Загрузить подписчиков импортом и включить перехват
«Канал «Telegram» выключен в справочнике каналов» Канал выключен на странице «Каналы» Включить канал в таблице каналов: иначе согласия на Telegram не выдаются
Клиент не получает сообщения Нет согласия на Telegram, нет активного чата с ботом или клиент заблокировал бота Проверить «Подписки» и раздел «Telegram» на вкладке «Идентификаторы»; в кампании с явным ботом — чат именно с этим ботом
«Персональная ссылка»: «Ссылку не выпустить: нет бота с включённым перехватом обновлений или персональные ссылки выключены на платформе» Нет бота в режиме перехвата или ссылки выключены на платформе Включить перехват у бота; если перехват включён — обратиться к технической команде платформы
«Адрес платформы для обновлений не настроен — обратитесь к администратору платформы» На платформе не задан публичный адрес для обновлений ботов Обратиться к технической команде платформы; до этого боты работают только на отправку
«Бот подключён в другой организации платформы» Этот бот уже подключён к другой организации Отключить его там или создать для организации своего бота
«Ошибка отправки: Telegram ограничил скорость отправки, бот на паузе» Через бота одновременно отправляет прежний сервер или идёт очень большая рассылка Ничего: пауза проходит сама, сообщения уходят после неё
Импорт: «Файл не читается как CSV в кодировке UTF-8» Файл сохранён в другой кодировке Сохранить заново как «CSV UTF-8» или загрузить XLSX
Импорт: много ошибок ACCOUNT_LINKED_ELSEWHERE Аккаунты уже привязаны к другим клиентам номером или ссылкой Ничего: привязка номером надёжнее файла

Кто что может#

Действие Администратор организации Администратор платформы Маркетолог Оператор Поддержка Наблюдатель
Карточка «Telegram» на «Каналах»: добавление, проверка, перехват, замена токена, отключение ботов, группы и каналы, импорт подписчиков и его история Да — — — — —
Выбор бота и предупреждения о Telegram в кампаниях, цепочках и уведомлениях Да Да Да — — —
Раздел «Telegram» в карточке клиента — просмотр Да Да — Да Да Да
«Персональная ссылка», «Отвязать» Да Да — Да — —
«Отправить тест» Да Да — — — —

Страница «Каналы» видна только Администратору организации — даже Администратору платформы она не показывается. Тестовое сообщение отправляют только администраторы: оно уходит настоящему клиенту. В карточке кампании и узле цепочки Поддержка и Наблюдатель видят бота числом — «Бот 7712345678», без имени.


← Оглавление

Loyalty Platform — руководство пользователя