Telegram
Содержание раздела
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», ссылку «Как подключить бота» и кнопку «Добавить бота».
- Нажмите «Добавить бота» — откроется окно «Добавить бота» с напоминанием «Платформа проверит токен в Telegram — это занимает до 20 секунд».
- «Токен бота» — вставьте токен из @BotFather (подсказка под полем — «@BotFather → /newbot или /token»). Поле скрывает ввод, браузер его не запоминает. Если токен вставлен не полностью или с лишними символами, под полем сразу появится «Формат токена неверный: нужен токен вида 123456789:AA… из @BotFather».
- «Перехватывать обновления бота» — включено по умолчанию. Под включённым переключателем — что произойдёт с прежним сервером организации (см. «Перехват обновлений и прежний бэкенд»). Если бот ещё обслуживает прежний бэкенд, выключите переключатель: бот подключится в режиме «Только отправка». Если переключатель неактивен с подсказкой «Адрес платформы для обновлений не настроен — обратитесь к администратору платформы», перехват на этой платформе недоступен — бот подключается только для отправки.
- «Сделать основным» — у первого бота организации включено и неактивно («Первый бот организации всегда основной»), у следующих — по выбору.
- Нажмите «Подключить» или 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 отдаёт обновления бота только одному получателю — либо прежнему серверу организации, либо платформе.
| Режим (метка у бота) | Кто получает обновления | Что умеет платформа |
|---|---|---|
| «Только отправка» | Прежний сервер организации, если он есть | Отправлять сообщения тем, кто уже привязан (импортом или раньше). Новые подписчики, номера и блокировки ей не видны — блокировку она узнаёт только при неудачной отправке |
| «Перехват обновлений» | Платформа | Всё: привязка по номеру и персональной ссылке, регистрация новых клиентов, блокировки, группы и каналы |
Как перейти с прежнего бэкенда без потерь:
- Подключите бота с выключенным перехватом — прежний бэкенд работает как раньше, платформа может отправлять сообщения.
- Выгрузите из прежнего бэкенда подписчиков и загрузите их импортом.
- Нажмите «Включить перехват» у бота и подтвердите. С этого момента «Старт», номера и блокировки получает платформа.
Окно подтверждения «Включить перехват обновлений @…?» предупреждает: «Обновления бота будут приходить на платформу. Прежний сервер организации (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» и «Последнее сообщение: дата» по всем ботам организации.
Если карточка показывает «Сервис сообщений недоступен», ботов сейчас нельзя ни посмотреть, ни изменить — это сбой на стороне платформы: повторите позже.
Несколько ботов и основной бот#
Несколько ботов нужны, когда у организации разные бренды или разные задачи: бот бонусов для уведомлений и бот акций для рассылок. У каждого бота свои подписчики — человек, подписанный на бота бонусов, не получит сообщения бота акций, пока сам не нажмёт в нём «Старт».
Какой бот отправит сообщение клиенту:
- Бот, выбранный явно в кампании или в узле «Отправить сообщение» цепочки. Выбор строгий: если у клиента нет активного чата именно с этим ботом, сообщение завершится ошибкой «У клиента нет активного чата с ботом» — другой бот не подставляется, и рассылка «от бота акций» не придёт от бота бонусов.
- Иначе — основной бот, если у клиента с ним активный чат.
- Иначе — бот, с которым клиент связался последним.
Учитываются только боты с меткой «Работает». Уведомления о бонусах всегда выбирают бота по правилам 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», без имени.