Согласно политики мессенджеров, боты не могут отправлять сообщения первыми. Чтобы пользователь мог получать нотификации из бота, он должен как-то повзаимодействовать с ботом, и отправить ему хоть какое-то начальное сообщение.
Самый простой способ такое сделать, это на стороне сайта/приложения нужно создать кнопочку "хочу получать уведомления в мессенджер" (или "следить за статусом заказа в мессенджер", "выбрать канал поддержки" и так далее), которую человек будет нажимать и инициировать контакт с ботом.
В этой кнопке стартовый параметр может содержать customer_id клиента в вашей CRM/ERP и обратно бот будет возвращать chat_id и выбранный клиентом канал коммуникации для того чтобы вы и дальше могли отправлять ему нотификации. Бот по этому сценарию не делает ничего кроме того что говорит "Отлично, теперь я буду сообщать вам все новости по вашему заказу, если хотите помощи - нажмите "соединить с оператором"
В мессенджерах существуют механизмы, которые позволяют передавать в бот входные параметры. Эти механизмы называются deeplink и представляют собой способ зашить параметр в ссылку которая откроет бот.
Viber https://developers.viber.com/docs/tools/deep-links/
Пример viber://pa?chatURI=<URI>&context=<UserID>&text=<Start!>
Параметр text
не обязательный, если его передать, он будет подставлен в строку ввода пользователя в таком виде:
Если его не передавать, переход по ссылке все равно будет считаться началом беседы и достаточен для подписки на нотификации
Telegram https://core.telegram.org/bots#deep-linking
Пример: [https://telegram.me/<Имя_бота>?start=<UserID>
](https://telegram.me/<Имя_бота>?start=<UserID>)
Для подписки на нотификации перейти по ссылке недостаточно, нужно нажать кнопку Начать
Facebook https://developers.facebook.com/docs/messenger-platform/discovery/m-me-links/
Пример: http://m.me/<PAGE_NAME>?ref=<UserID>
В стартовый параметр можно передавать id клиента, заказа, и так далее. В общем что угодно, что позволит вам потом сопоставить данные из вашего сайта/приложения с парой chat_id + канал из бота.
Таким образом вам нужно сформировать ссылки на свои боты с указанием входящего параметра и просить пользователя нажать на ссылку и начать общение с ботом.
Если вам не нужно использовать в боте id пользователя во внешней системе (например идентифицировать), вы можете не передавать никаких параметров а просто отправлять пользователя в бот делать первые шаги и сохранять chat_id + канал в CRM/приложении.
<aside>
⚠️ При использовании deeplink'а Facebook, Viber передается команда start
. Учтите это если вы используете ветвление сценария с помощью action'а get_command
</aside>
Если вы хотите использовать в сценарии стартовый параметр, используйте действие get_command
Он обработает команду вида /commandname
или переданную через deeplink, если передан параметр, устанавливает константу {{messenger_input_param}}
После первого же сообщения от пользователя, например нажатия кнопки "Начать" в Telegram, бот должен вернуть обратно в приложение (сайт, CRM, и тп) пару параметров, а именно
chat_id
- уникальный в пределах мессенджера id чата. Обычно это букво-символьная строка.channel
- название канала (telegram, viber, facebook и так далее)