Пуши: повторная монетизация аудитории бота

База подписчиков бота - самое близкое к «своему» активу, что есть в арбитраже трафика: за этих пользователей вы уже заплатили один раз, а написать им ещё раз можно бесплатно. Пуши - это и есть рычаг: разослать новый оффер всей аудитории бота по расписанию или автоматически догнать конкретного пользователя, который только что зарегистрировался, но не внёс депозит. Каждый пуш - ещё одна попытка заработать на трафике, который вы уже купили.

Два типа пушей

  • «По расписанию» - рассылка по всей аудитории бота в выбранные дату и время.
  • «По событию» - взведённое сообщение, которое срабатывает, когда пользователь триггерит событие воронки (например, регистрацию или депозит). Уходит именно этому пользователю, а не всей базе.

Создание пуша

  1. Откройте «Пуши» и нажмите «Создать пуш».
  2. Впишите ID нужного бота в поле «ID бота» - это внутренний ID бота, а не его @username. Аудитория берётся из подписчиков именно этого бота, ничьих больше.
  3. Задайте название пуша (внутреннее, подписчики его не увидят) и текст сообщения - до 4096 символов. Текст отправляется с включённым Telegram HTML, так что <b>, <i> и <a href=""> работают - следите за балансом тегов: случайный неэкранированный < или & сорвёт отправку целиком.
  4. При желании прикрепите одно изображение в поле «Изображение (необязательно)». Когда изображение прикреплено, текст сообщения уходит как подпись к фото, а не как обычное сообщение.
  5. Выберите триггер: «По расписанию» или «По событию». Для «По расписанию» дату и время нужно указать до отправки формы.
  6. Нажмите «Создать пуш».

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

Форма создания пуша с вариантами «по расписанию» и «по событию»Форма создания пуша с вариантами «по расписанию» и «по событию»

Откуда берётся аудитория

Подписчик попадает в базу в один-единственный момент - когда человек сам отправляет боту /start. Активный флоу для этого не нужен: запись подписчика идёт выше проверки на флоу, так что бот без единого флоу всё равно копит аудиторию.

Сегодня новую строку в базе создаёт только /start, и это главное ограничение пушей: Telegram не разрешает боту писать первым тому, кто ему не отвечал, а нажатие инлайн-кнопки ответом НЕ считается. Поэтому в аудиторию не попадают ни те, кто вступил в канал по ссылке, ни те, кто открыл Mini App (при её запуске /start не приходит), ни те, кто просто нажал кнопку под сообщением. Пока человек не отправил /start, отправить ему пуш нельзя.

«Сегодня» здесь не оговорка. Когда база подписчиков только появилась, её один раз досыпали из истории флоу: туда попал каждый чат, который когда-либо проходил флоу этого бота, - а флоу запускается от любого сообщения или нажатия кнопки, не только от /start. Такие строки в базе есть, а разрешения писать за ними нет, и именно из них берётся исход «диалога не было никогда» в разделе ниже.

Как только подписчик отслежен, аудитория пуша - это активные подписчики бота: те, у кого Telegram ещё принимает сообщения от этого бота.

Статусы и статистика отправки

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

Колонка «Охват» показывает доставлено/всего за прогон.

  • Чат, который Telegram отказался принять, определяется прямо во время отправки, автоматически выключается и пропускается в следующих рассылках. Отказы у Telegram разные, и платформа запоминает, какой именно случился, - см. следующий раздел.
  • Один мёртвый чат не валит всю рассылку - ошибки считаются по каждому получателю отдельно. Статус «Ошибка» пуш получает, только если у него была аудитория, а не дошло ни до кого; пустая аудитория - это честный «Отправлен» с охватом 0/0.

Почему чат перестаёт получать пуши

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

  • Человек заблокировал бота. Разрешение у нас было, и мы его потеряли. Вернуть чат может только он сам: разблокировать бота и снова отправить /start. Это честный отток.
  • Диалога не было никогда. Разрешения не было ни секунды - чат оказался в базе не через /start. Это не отток, а дефект воронки: человека надо довести до /start кнопкой в канале, ссылкой в креативе, первым шагом флоу.
  • Аккаунт удалён. Человек удалил Telegram. Единственный случай, для которого «мёртвый чат» - правда: сделать нельзя ничего.
  • Бота выгнали из группы или канала. Речь уже не про человека, а про членство бота в чате, и штатного ремонта у платформы для этого исхода нет. Админ вернёт бота в чат - членство восстановится, а строка подписчика останется выключенной: включает её обратно только /start, пришедший из этого же чата. Такой /start платформа примет и из группы - на тип чата она нигде не смотрит, - но сама она никого об этом не попросит: ни кнопки, ни подсказки для этого в продукте нет.

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

Как ведут себя пуши по событию

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

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

Частые грабли

  • Редактировать или ставить на паузу после создания нельзя - доступны только создание, список и удаление. Чтобы поменять время, текст или триггер, удалите пуш и создайте новый; удаление живого пуша «по событию» - это же и есть способ его остановить.
  • Поле «ID бота» принимает именно внутренний ID бота, а не @username, и Боты его нигде не показывают - записывайте ID сразу при подключении бота или спрашивайте у поддержки.
  • Для «По расписанию» дату и время нужно указать до отправки формы - варианта «сохранить сейчас, запланировать позже» нет.
  • Пуши достают только тех, кто сам отправил боту /start. Активный флоу для этого не нужен - если охват мал, ищите место, где человек должен был написать боту и не написал, а не сломанный флоу.
  • Telegram ограничивает обычный текст сообщения 4096 символами. Если прикрепить изображение, текст уходит подписью к фото, а её Telegram ограничивает 1024 символами - и слишком длинную подпись он не обрезает, а отвергает целиком, так что рассылка не дойдёт ни до кого. Теперь работают оба предела: форма переключается на лимит 1024, как только вы прикрепили картинку, и показывает счётчик символов, а API отбивает ту же комбинацию - пуш, созданный мимо панели, тоже не проскочит.
  • Охват ниже числа подписчиков - не обязательно отток. Отток - это «заблокировал бота» и «аккаунт удалён». «Диалога не было никогда» - дефект воронки, и он чинится. А «бота выгнали из чата» не чинится ни тем, ни другим: строка остаётся выключенной и после того, как админ вернёт бота. Разбирайтесь с разрывом по причине отказа, а не списывайте его целиком.
  • Нужен массовый анонс? Это «По расписанию». «По событию» уходит только тому пользователю, который триггернул событие.