Какой вариант выбрать
Выбор в один проход:
- Можете завести второго бота, и отдельный бот входа пользователей не смущает — два бота. В уже работающем боте меняется одно: он учится принимать стартовый параметр.
- Пользователь должен оставаться в одном боте, и вы готовы держать ещё один сервис — внешний 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. - В референсном адаптере апдейт, который не удалось переслать, только пишется в лог — ни очереди, ни повторов нет.
- В референсном адаптере бот с адресом пересылки отдаёт вашему боту и присланный контакт, поэтому телефон по запросу объявляется только для бота без такого адреса.
Общий бот в процессе, свой адаптер на .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 — и что
возвращает каждый.