Як створити свого бота для Skype. Що не написано в документації



Деякий час назад я розповідав своєму боті для Telegram, який вміє дані з Google Analytics показувати. А тут Microsoft оголосила про запуск ботів Skype — саме час вивчити як це працює. Під катом — невеликий опис можливих проблем. Кому не терпиться подивитися результат, ось він — MetricsBot Add Bot to Skype.

Bot Framework vs. Skype Bot API
Для початку варто зрозуміти, що є Bot Framework, який дозволяє створювати ботів для багатьох месенджерів, в т. ч. і для Skype, а є Skype Bot API, який дозволяє створювати ботів саме для Skype. У кожного своя документація, свій каталог ботів (?) і своя реєстрація ботів. Начебто очевидно, що це різні речі, але я витратив досить багато часу, намагаючись розібратися в документації Bot Framework'a і реєстрації бота в ньому, коли очікував, що створюю бота без фрейворка. Далі мова буде йти саме про Skype Bot API, Bot Framework нам не потрібен, реєструвати там теж нічого не треба. Є Skype SDK для Node.js і C#. Їх я теж не використовував, т. к. писав бота на Python.

Корисні посилання
Для початку невеликий набір корисних посилань (посилання — англійською мовою):
В принципі, з документації зрозуміло як працює бот і як він взаємодіє з Skype'ом, тому цю частину описувати не буду — розповім про складнощі.

Авторизація
Це виявилося найбільш трудомісткою для мене частиною. У документації зазначено, що для авторизації необхідно отримати токен, а потім використовувати його в заголовку HTTP при кожному зверненні:

Authorization: Bearer oauth2-token
 

Однак у документації чомусь забули вказати який scope необхідно використовувати для одержання сертифіката. Правильну відповідь можна знайти в коді Node.js SDK) —
https://graph.microsoft.com/.default
.
Але тут починається найцікавіше — якщо створювати URL для підтвердження користувачем (=власником бота), потім отримувати auth_code, а потім спробувати обміняти цей код на access token, то проблема виникне на першому ж кроці — при відкритті створеного URL, Microsoft лається на неправильний scope. Правильного scope, до речі, немає в списку можливих варіантів документації Microsoft. Я намагався вказувати іншій scope —
openid offline_access https://graph.microsoft.com/user.read
, в цьому випадку мені вдавалося отримати token, тільки от з ним взаємодіяти зі Skype не вдавалося.
Рішення виявилося несподіваним для отримання access_token, необхідно було відправити звичайний POST запит:

curl -X POST -H "Cache-Control: no-cache" -H "Content-Type: application/x-www-form-urlencoded" -d 'client_id=<your-app-id>&client_secret=<your-app-secret>&grant_type=client_credentials&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default' 'https://login.microsoftonline.com/common/oauth2/v2.0/token'
 

У відповідь повертається access_token expires_in (без якого-небудь refresh_token). Такого OAuth я ще не зустрічав.

Відправка повідомлень
Відправлення повідомлень досить проста —

POST /v2/conversations/8:alice/activities HTTP/1.1
 
Host: apis.skype.com
 
Authorization: Bearer oauth2-token
 
{
 
"message": {"content" : "Hi! (wave)"}
 
}


Запити надсилаються на apis.skype.com. В документації забули вказати, що запити повинні йти по https.
В тексті можна використовувати html-теги. Які точно — поки невідомо (в документації списку немає).
Є цікаві та неописані обмеження на запропонований текст. Наприклад, в тексті можна використовувати символи &, < >. Відсутність можливості передати символ & створює проблему при передачі посилань. Ще одна проблема при передачі посилань — автоматично створювані превью для кожного посилання. У моєму боті MetricsBot у тексті запрошення три посилання, Skype створює три превью. Відключити це поки не можна.

Публікація бота
Після створення бота можна спробувати його опублікувати (до цього кількість користувачів бота обмежено — ним може користуватися лише 100 чоловік). Скільки часу займає процес публікації — не ясно, документації цього немає. Мого бота поки так і не опублікували. На офіційному форумі моє запитання на цю тему оминають стороною (хоча на інші мої запитання співробітники Microsoft відповідають).
Зверніть увагу, що для публікації бота треба відключити використання бота в групових чатах.

В іншому — створення бота для Skype досить просто.

Боти для Skype

/>
/>


<input type=«radio» id=«vv72506»
class=«radio js-field-data»
name=«variant[]»
value=«72506» />
потрібні, піду робити свій
<input type=«radio» id=«vv72508»
class=«radio js-field-data»
name=«variant[]»
value=«72508» />
потрібні
<input type=«radio» id=«vv72510»
class=«radio js-field-data»
name=«variant[]»
value=«72510» />
не потрібні

Проголосувало 67 осіб. Утрималося 19 осіб.


Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.


Джерело: Хабрахабр

0 коментарів

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