- PVSM.RU - https://www.pvsm.ru -
В этой статье я хочу описать простой пример работы мультипротокольного бота через Microsoft Bot Connector API — v3.0 [1]. На тему skype подобных ботов уже есть статьи на Хабре: «Как создать своего бота для Skype. Что не написано в документации» [2] от and7ey [3] и «Hello, Bot! Чат-боты – следующее поколение приложений?» [4] от shwars [5]. Но в первой идёт речь про работу через apis.skype и описанный там вариант не мультипротокольный, а во второй описана реализация через C#, а я в него не умею.
Во-первых, «тому парню», который хочет сделать своего бота, но не умеет в C#, а умеет в REST.
Во-вторых, мне, так как я потратил изрядное кол-во времени на разбор нескольких версий API и понимание того, какой API и как мне нужно использовать. Поэтому я хотел бы закрепить свой опыт на бумаге в статье (ок, я больше не буду использовать фишку с зачеркиванием текста).
В полной мере (на сколько я смог оценить) рассмотрена в статье, которую я упомянул выше — в этой [2]. Делаем как описано, получаем token и начало положено — мы «на первой базе» (это не общепринятая аналогия про базы, где на третьей нам дадут жмакнуть сиську, нет, это не она).
У бота должен быть endpoint, куда будут приходить запросы с json-телом. Например, отправленное для бота сообщение через skype с текстом «Привет» придет таким:
{ "type":"message", "id":"1q80QckzCi3wL6zg", "timestamp":"2016-08-16T12:56:16.49Z", "serviceUrl":"https://skype.botframework.com", "channelId":"skype", "from":{ "id":"29:1Phe2HAxz6CD9uc1O_PVl_Zih6doxIe_KuyrQ9eANUbs", "name":"avvero" }, "conversation":{ "id":"29:1Phe2HAxz6CD9uc1O_PVl_Zih6doxIe_KuyrQ9eANUbs" }, "recipient":{ "id":"28:300cbb48-78e0-4998-8e85-4f4c7ccb5aee", "name":"notify_bot" }, "text":"привет, бот", "entities":[ ]
}
Что нам особенно важно в этом запросе:
Эти два параметра особенно важны, потому что на основе их определяется url для отправки запросов в botframework. При этом, роль conversationId упомянута в описании [1] API (swagger [6]), а вот с channelId не все так очевидно, точнее нифига (технический термин) не очевидно. Например, сообщения от бота для канала skype должный пойти сюда:
https://skype.botframework.com/v3/conversations/{conversationId}/activities,
А для telegram сюда:
https://telegram.botframework.com/v3/conversations/{conversationId}/activities.
В документации я этого не увидел и это плохо, так как на выявление этой особенности было потрачено основное время.
Для skype минимальное тело запроса будет таким:
{ "type":"message", "text":"hello" }
А для telegram таким (нужен объект from):
{ "type":"message", "from":{ "id":"avvero_notify_bot", "name":"avvero" }, "text":"hello" }
Не текстами едиными. Можно отправлять и карточки (здесь приведен пример сообщения для telegram, для skype можно без from):
{ "type":"message", "from":{ "id":"avvero_notify_bot", "name":"avvero" }, "text":"hello", "attachments":[ { "contentType":"application/vnd.microsoft.card.hero", "content":{ "title":"title", "subtitle":"subtitle", "text":"text", "images":[ { "url":"https://pp.vk.me/c7011/v7011856/3160d/HVELORSo5KM.jpg", "alt":"hello thumb" } ], "buttons":[ { "type":"imBack", "title":"Да", "value":"yes <context offer="..."/>" }, { "type":"imBack", "title":"Нет", "value":"no" }, { "type":"openUrl", "title":"Загуглить", "value":"https://disney.radisson.com" } ] } } ] }
В skype это выглядит так:
В telegram так:
Ну вот в принципе и все, что я хотел рассказать. Стоит упомянуть проблемы при использовании такого бота.
Для skype:
Для telegram:
Спасибо за внимание!
Автор: Avvero
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/api/174883
Ссылки в тексте:
[1] Microsoft Bot Connector API — v3.0: https://docs.botframework.com/en-us/restapi/connector/#navtitle
[2] «Как создать своего бота для Skype. Что не написано в документации»: https://habrahabr.ru/post/281296/
[3] and7ey: https://habrahabr.ru/users/and7ey/
[4] «Hello, Bot! Чат-боты – следующее поколение приложений?»: https://habrahabr.ru/company/microsoft/blog/281459/
[5] shwars: https://habrahabr.ru/users/shwars/
[6] swagger: https://docs.botframework.com/en-us/restapi/connector/ConnectorAPI.json
[7] join.skype.com/bot/6877d5c8-dc4f-4eda-9aac-29b19e1761f0: https://join.skype.com/bot/6877d5c8-dc4f-4eda-9aac-29b19e1761f0
[8] Источник: https://habrahabr.ru/post/308036/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox
Нажмите здесь для печати.