Коллеги, изучаю чат-боты. Пытаюсь понять логику работы. Вопросов много.
Если нужно связать чат-бот, например, с CRM по API, то в CRM создают вебхук с api token. Собственно какой процесс происходит?
Для предметности: допустим, пользователь хочет оставить заказ. CRM при этом должен создать лид, а затем предложить заполнить поле фио и телефон. Какие команды происходят на стороне CRM, а какие на стороне мессенджера?
P.S. Вопрос возник из того, что меня сегодня спросили, можно ли сделать прямую интеграцию CRM и мессенджера без платных конструкторов чат-ботов?
Конечно можно. У CRM есть API. Вы в чат-боте делаете обработчики разных команд и сообщений. Когда разузнаете у пользователя всё необходимое - дёргаете с помощью библиотеки requests API своей CRM'ки и в ответ она вам (боту в смысле) статус операции. Ответ парсите, анализируете, если всё норм, то пишете об этом человеку. Если процесс покупки многоступенчатый, то держите у бота в памяти словарь пользователей и для каждого помните состояние анкетирования. На каждом шаге делаете нужные запросы к CRM.
ну значит, я ещё из ума не выжил. А то меня пытались убедить, что нужен веб-сервер, хотя в нашем случае облачная CRM вполне себе веб-сервер.
Вы в чат-боте делаете обработчики
Я попробую для себя это перевести на бытовой уровень. В коде чата пишем такую инструкцию на языке бота: "слышь, если юзер нажмет на кнопку "старт", то спроси вопросы один, два и три, а затем передай по этому адресу (хуку) то, что он написал. И добавь кодовое слово (команда-обработчик из обоймы API CRM) - для первого ответа кодовое слово одно, для второго второе... Короче, как только скажешь, там поймут, что с этим делать."
Но это получается односторонняя интеграция - чат передает, CRM принимает. А если CRM, например, должна что-то ответить, напомнить через бот, то это бот уже должен слушать по хуку, что скажет CRM? Вот и вопрос, а в каком месте прописывается поведение CRM, логично же, что не в коде чата, или нет?
pilotus, может быть вам пытались сказать немного не это?
меня пытались убедить, что нужен веб-сервер, хотя в нашем случае облачная CRM вполне себе веб-сервер.
Может имелось в виду, что в штатном API CRM недостаточно методов для функциональности вашего бота и речь шла о том, что нужно делать веб-сервер с расширенным API? Такое бывает.
Может быть возникло недопонимание и в какой-то момент речь шла о голосовом помощнике? Кастомные скиллы сейчас принято реализовывать в виде веб-сервиса, который реализует специфический API и регистриуется с ним у сервиса вроде АЛисы от Яндекса.
Ещё мог иметься в виду, всё-таки, не веб-сервис, а какой-то сервер в интернете, где будет работать код, осуществляющий логику бота. Вы же не с домашнего или рабочего офисного компьютера будете запускать бота. Его программа должна работать 24/7, иметь надёжное интернет-соединение, резервирование, мониторинг работоспособности...
перевести на бытовой уровень
Не путайте бот и чат. Бот - это программа, которая постоянно работает и постоянно спрашивает у Телеграмма не случилось ли чего. А что может случиться?
бота могут добавить в чат (личный или общий)
в чате с ботом могут что-то написать (или прислать фоточку, или голосовое сообщение и т.д.)
бота могут кикнуть из чата, чат могут удалить
Это основное. Сам бот тоже может прислать что-то в чат. Этим чем-то может быть и кнопка. Нажатие кнопки равносильно отсылке боту какого-то специфического текста, настроенного в кнопке.
Теперь как будет работать ваша логика.
Обычно бот реагирует на перечисленные события в чатах, где добавлен.
В ответ на некоторые события он меняет своё внутреннее состояние (что-то запоминает про кого-то).
Поведение может зависеть от внутреннего состояния. К примеру, если вы пишете боту в первый раз, он здоровается, если он вас уже помнит, то здороваться не станет.
В ответ на некоторые события (например сообщение "хочу купить тапки") бот пойдёт по отдельной цепочке состояний в ходе которых спросит и запомнит в контексте конкретного контакта адрес, номер телефона, цвет желаемых тапок, способ оплаты и доставки. В какие-то моменты бот будет получать доп-данные из CRM (какие цвета тапок бывают, какие есть в наличии, и т.д.). Иногда бот будет отсылать для CRM данные (факт желания клиента купить тапки, какие тапки, ну и всё выясненное).
Ваша CRM приняла к исполнению обработку заказа и он будет отправлен через пару-тройку дней. В какой-то момент нужно будет сообщить пользователю, что его заказ улетел на почту, но бот пока не знает когда это сделать.
А дальше есть два варианта:
Бот будет, скажем, каждые 5 минут дёргать CRM с вопросом: "Есть чо для кого?", и, если есть, будет рассылать кому что надо.
У бота будет специальная отдельная "ручка" (скрипт, команда или свой WebAPI) для того, чтобы CRM дёргал за эту ручку и заставлял бота немедленно сказать клиенту, что его товар ушел. API телеграмма позволяет отсылать сообщения от имени бота простым HTTP-запросом. Это запрос даже CURL-ом дёрнуть можно. Основной код бота (который работает постоянно) даже знать об этом не будет.
Может быть убеждая вас в необходимости нового веб-сервиса кто-то там имел в виду именно второй вариант? Выбор варианта зависит от того, как именно устроен API вашей CRM.
Если ваша CRM поддерживает только веб-хуки, то отсылать сообщения пользователям от имени бота но по своей инициативе она не сможет по первому варианту.
Для второго нужен веб-сервис, который будет отвечать на эти веб-хуки.
Сергей Паньков, ох! спасибо за развернутый и в целом понятны, как мне кажется, ответ.
Я пытаюсь новые знания от вас примагнитить к тому, что имею. Правильно ли понял, что CRM, соединенная только хуком по своей инициативе ничего отправить боту не может Это вариант, который я описал в своем первом ответе. получается, что бот просто использует CRM как справочник для данных, которых у него нет.
Про второй вариант работы можно подробнее? я так понял, что при коннекте бота и CRM вебхуками этот вариант работает только на отдельном сервере, (на котором кроме хуков есть работа по API. Если по вебхукам и API, то CRM может сама писать, чтобы запрашивать доп. данные у клиента через бота напрямую. Или я все неверно понимаю?)
pilotus, почти правильно.
Есть аспекты, которых вы, кажется, не поняли.
Две отдельные программы могут писать сообщения в чаты от имени одного бота.
Вот это сущность абстрактное. От её имени можно откуда угодно послать сообщение дёрнув для этого API телеграма.
Чтобы создать интерактивное общение в чате с абстрактным ботом, нужно написать специальную программу которая будет пользоваться API телеграма и получать через него информацию о том что происходит в чате.
чтобы ваша CRM дергала вебхуки нужно чтобы их кто-то слушал - это отдельная программа которая на них реагирует - это web service.
Вот это сущность абстрактное. От её имени можно откуда угодно послать сообщение дёрнув для этого API телеграма.
То есть сущность бота определяется и ограничивается наличием имени-адреса и возможности к нему обращаться через вебхуки и сторонние API в рамках программных возможностей платформы, на которой бот создан (телеграма, вацапа, вайбера и так далее)?
Чтобы создать интерактивное общение в чате с абстрактным ботом...
Это то, что делают и чем являются сервисы конструкторы чат-ботов?
В целом стало что-то понятно, надеюсь правильно. Спасибо.
То есть сущность бота определяется и ограничивается наличием имени-адреса и возможности к нему обращаться через вебхуки и сторонние API в рамках программных возможностей платформы, на которой бот создан (телеграма, вацапа, вайбера и так далее)?
Я не берусь говорить за другие платформы, но в телеграмме бот - это абстрактная сущность. Любой программный код, который "знает" секретный цифровой ключ бота, может сказать от его имени в те чаты, в которых этот бот добавлен, а также запросить у платформы информацию из этих чатов.
Это то, что делают и чем являются сервисы конструкторы чат-ботов?
Честно говоря, не пользовался ни разу конструкторами, но представляю себе что бы они могли собой представлять.
Они сделали универсальную программу, которая обрабатывает события от большого числа различных ботов. Эти события и реакция на них гибко и детально настраиваются.
Всё что там происходит можно сделать самостоятельно.