Skip to main content
У вас есть собственный бот — заказы, поддержка, уведомления, — и в том же мессенджере вы хотите вход и подтверждение через Veriqa. Совместить одно с другим можно несколькими способами: три работают уже сейчас, ещё три планируются. Эта страница их сравнивает и ведёт на страницу, где каждый описан подробно.
Не вписывайте токен уже работающего бота в настройки встроенного адаптера. Встроенный адаптер, который сам регистрирует вебхук у платформы, — это MAX, Telegram и Viber — при старте приложения регистрирует на этот токен свой вебхук, а при остановке снимает его. В Telegram и Viber вебхук вашего бота окажется занят, и бот перестанет получать свои события; после остановки приложения вебхука у токена не останется вовсе. Адаптер MAX при старте подписывает у платформы свой адрес, а при остановке снимает эту подписку.Когда это происходит: MAX и Telegram — в режиме UpdateMode: Webhook, а это значение по умолчанию; Viber — всегда. В режиме Polling адаптер MAX вебхук не подписывает, но обновления забирает сам — токеном бота. В режиме Polling адаптер Telegram вебхук не регистрирует, но действует другое ограничение — один опрашивающий на бота, см. раздел Telegram в настройке каналов.Чтобы один бот работал и на ваш код, и на Veriqa, возьмите один из двух вариантов общего бота ниже: в обоих входящие события принимает ваша сторона, а не встроенный адаптер.

Какой вариант выбрать

Выбор в один проход:
  • Можете завести второго бота, и отдельный бот входа пользователей не смущает — два бота. В уже работающем боте меняется одно: он учится принимать стартовый параметр.
  • Пользователь должен оставаться в одном боте, и вы готовы держать ещё один сервис — внешний HTTP-адаптер, на любом языке.
  • Пользователь должен оставаться в одном боте, а ваш хост — на .NET — свой адаптер в процессе.

Кто владеет токеном и входящими событиями

Два бота

Когда выбирать. Отдельный бот для входа вас устраивает, а менять уже работающего бота хочется как можно меньше. Что делаете вы. Ставите плейсхолдер handle в адрес кнопки, которую бот входа показывает после входа; ваш бот получает handle стартовым параметром; ваш сервер меняет его на идентичность пользователя и хранит привязку «пользователь моего бота ↔ sub» у себя. Veriqa привязок не хранит. Известные ограничения:
  • Вход завершается и без нажатия кнопки. Если переход в ваш бот обязателен, обеспечивает это ваше приложение.
  • Handle одноразовый и живёт недолго.
  • При нескольких репликах для handle нужен общий стор.
  • Написать первым ваш бот может только тому пользователю, который его уже открывал.
  • Кнопку можно переслать, и handle вашему боту принесёт тот, кто её нажал: проверяйте, кто нажал кнопку. Где сверять не с чем, связку получает тот, кто нажал первым.
Подробности, запрос с ответом и рецепт обязательного перехода — Два бота: передача пользователя вашему боту.

Общий бот через внешний HTTP-адаптер

Когда выбирать. Один бот и для входа, и для ваших сценариев, а к .NET вы не привязаны — либо запускаете стандартный образ Veriqa и пересобирать его не хотите. Что делаете вы. Поднимаете рядом с Veriqa внешний адаптер — свой сервис — и регистрируете его конфигурацией как HTTP-канал. Адаптер принимает события платформы, события Veriqa отправляет в Veriqa, остальное пересылает вашему боту. Референсный адаптер Telegram на Python, samples/python/custom-channel-telegram/, делает именно это: TELEGRAM_BOT_FORWARD_URL задаёт адрес, на котором слушает ваш бот, а какой апдейт куда уходит — в таблице маршрутизации его README. Известные ограничения:
  • Это отдельный сервис: его нужно запускать и защищать.
  • У канала собственный тип, отличный от встроенного: в референсном адаптере — telegram-http, а не telegram.
  • В референсном адаптере апдейт, который не удалось переслать, только пишется в лог — ни очереди, ни повторов нет.
  • В референсном адаптере бот с адресом пересылки отдаёт вашему боту и присланный контакт, поэтому телефон по запросу объявляется только для бота без такого адреса.
Подробнее — HTTP-адаптер канала на любом языке и его референсные адаптеры.

Общий бот в процессе, свой адаптер на .NET

Когда выбирать. Один бот, ваш хост — на .NET, и ни ещё одного сервиса, ни лишнего сетевого шага вы не хотите. Что делаете вы. Пишете собственный адаптер канала и оставляете транспорт бота в своём коде: он принимает каждое событие и спрашивает у OwnsInboundEvent адаптера, принадлежит ли оно Veriqa. События Veriqa уходят в Veriqa, всё остальное — вашему боту. Известные ограничения:
  • Только .NET.
  • OwnsInboundEvent — дешёвая подстрочная проверка, и ответ у неё односторонний: если ложное срабатывание вам чем-то стоит, переопределите её точной проверкой своего wire-формата.
  • Если адаптер объявляет телефон по запросу, OwnsInboundEvent нужно переопределить, сохранив проверку маркеров CallbackDataPrefixes.ContainsAnyMarker: тело по умолчанию узнаёт маркеры кнопок, а у присланного контакта маркера нет.
  • У кнопки шага телефона, которая отправляет обычный текст, маркера нет вовсе, поэтому её нажатие уходит вашему боту, а не Veriqa: необязательный номер тогда пропускается по истечении окна, а обязательный ждёт, пока не истечёт транзакция. Кнопку с payload — с маркером CallbackDataPrefixes.PhoneSkip или CallbackDataPrefixes.PhoneCancel — проверка маркеров узнаёт. См. телефон по запросу; у встроенного адаптера Telegram то же ограничение — номер телефона в Telegram.
Подробнее — Свой канальный адаптер и телефон по запросу.

Планируется

Ни один из трёх вариантов пока не доступен; каждый снимает одно из ограничений выше.
  • Встроенный адаптер, который не трогает транспорт бота. Токен уже работающего бота можно будет вписать в настройки встроенного адаптера, и адаптер не займёт его вебхук.
  • Шлюз для встроенного адаптера. Veriqa будет принимать входящие события общего бота, своё обрабатывать, а остальное доставлять вашему боту — со встроенным каналом и без собственного адаптера. Боту на поллинге достаточно будет сменить адрес API, к которому он обращается.
  • Подтверждение вашим ботом. Ваш бот сам покажет вопрос подтверждения и сообщит решение пользователя в Veriqa одним вызовом. Вариант рассчитан на ботов, собранных в конструкторах: там между платформой и ботом ничего поставить нельзя.

Поддерживаемые каналы

Какие каналы входят в поставку — MAX, Telegram, WhatsApp, другие мессенджеры и Email — и что возвращает каждый.