Авторизация

Это оказалось самой трудоемкой для меня частью. В документации говорится, что для авторизации необходимо получить токен, а затем использовать его в заголовке 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

Запросы отправляются на apis. skype. com. В документации забыли указать, что запросы должны уходить по https .

В тексте можно использовать html-теги. Какие точно — пока неизвестно (в документации списка нет).

Есть интересные и неописанные ограничения на отправляемый текст. Например, в тексте нельзя использовать символы &. < и >. Отсутствие возможности передать символ & создает проблему при передаче ссылок. Еще одна проблема при передаче ссылок — автоматически создаваемые превью для каждой ссылки. В моем боте MetricsBot в тексте приглашения три ссылки, Skype создает три превью. Отключить это пока нельзя.

Публикация бота

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

Обратите внимание, что для публикации бота надо отключить использование бота в групповых чатах.

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