Багатопротокольний бот через Microsoft Bot Connector REST API v3.0

У цій статті я хочу описати простий приклад роботи мультипротокольной бота через Microsoft Bot Connector API — v3.0. На тему skype подібних ботів вже є статті на Хабре: «Як створити свого бота для Skype. Що не написано в документації» and7ey і «Hello, Bot! Чат-боти – наступне покоління додатків?» shwars. Але в першій йде мова про роботу через apis.skype і описаний там варіант не багатопротокольний, а в другій описана реалізація через C#, а я в нього не вмію.

Кому і навіщо потрібна ця стаття
По-перше, «того хлопця», який хоче зробити свого бота, але не вміє в C#, а вміє REST.

По-друге, мені, так як я витратив неабияку кількість часу на розбір декількох версій API і розуміння того, який API і як мені потрібно використовувати. Тому я хотів би закріпити свій досвід на папері у статті (ок, я більше не буду використовувати фішку з закреслення тексту).

Авторизація
Повною мірою (на скільки я зміг оцінити) розглянута в статті, яку я згадав вище — в цієї. Робимо як описано, отримуємо token і початок покладено — ми «на першій базі» (це не загальноприйнята аналогія про бази, де на третій нам дадуть жмакнуть цицьку, ні, це не вона).

Отримання повідомлень
У бота повинен бути endpoint, куди будуть приходити запити з json-тілом. Наприклад, відправлений для бота повідомлення через skype з текстом «привіт, бот» прийде таким:

json{
"type":"message",
"id":"1q80QckzCi3wL6zg",
"timestamp":"2016-08-16T12:56:16.49 Z",
"serviceUrl":"https://skype.botframework.com",
"channelId":"skype",
"з":{
"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":[

]

}

Що нам особливо важливо в цьому запиті:

  • conversation.id — ідентифікатор бесіди
  • channelId — ідентифікатор каналу
Ці два параметри особливо важливі, тому що на основі їх визначається url для надсилання запитів до botframework. При цьому, роль conversationId згадана в описі APIswagger), а от з channelId не все так очевидно, точніше ніфіга (технічний термін) не очевидно. Наприклад, повідомлення від бота для каналу skype належний піти сюди:

https://skype.botframework.com/v3/conversations/{conversationId}/activities,

А для telegram сюди:

https://telegram.botframework.com/v3/conversations/{conversationId}/activities.

В документації я цього не побачив і це погано, так як на виявлення цієї особливості було витрачено основний час.

Відправка повідомлень
Для skype мінімальне тіло запиту буде таким:

json{
"type":"message",
"text":"привіт"
}


А для telegram таким (потрібен об'єкт from):

json{
"type":"message",
"з":{
"id":"avvero_notify_bot",
"name":"avvero"
},
"text":"привіт"
}

Картки
Не єдиними текстами. Можна відправляти і картки (тут наведено приклад повідомлення для telegram, для skype можна без from):

json{
"type":"message",
"з":{
"id":"avvero_notify_bot",
"name":"avvero"
},
"text":"привіт",
"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":"ні"
},
{
"type":"openUrl",
"title":"Загугліть",
"value":"https://disney.radisson.com"
}
]
}
}
]
}

В skype це виглядає так:



У telegram так:



Кінець
Ну ось в принципі і все, що я хотів розповісти. Варто згадати проблеми при використанні такого бота.

Для skype:

  • потрібна свіжа версія клієнта (на linux зовсім стара і боти там не підуть)
  • одного бота я додав як простий контакт — через пошук, другого бота так додати не вийшло, вийшло тільки через посилання типу такий join.skype.com/bot/6877d5c8-dc4f-4eda-9aac-29b19e1761f0
Для telegram:

  • Не виходить звертатися до боту в групі через знак @, повідомлення боту не йдуть, повідомлення йдуть боту якщо перед повідомленням ставити знак /, тобто так "/привіт бот"
Спасибі за увагу!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.