Что делает бот в скайпе. Создание бота для Skype и его публикация

О запуске ботов в Skype - самое время изучить как это работает. Под катом - небольшое описание возможных проблем. Кому не терпится посмотреть результат, вот он - MetricsBot .

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 и для . Их я тоже не использовал, т.к. писал бота на Python.

Полезные ссылки

Для начала небольшой набор полезных ссылок (все ссылки - на английском языке):
  • Свои приложения (тут необходимо создать новое приложение и получить app id и client secret)
  • Управление своими ботами (здесь необходимо создать нового бота, указав app id полученный ранее)
В принципе, из документации понятно как работает бот и как он взаимодействует со 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=&client_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 достаточно удобным средством для общения с родными, друзьями или коллегами. Но вынужден использовать его в тех случаях, когда адресат на второй стороне не предлагает альтернативные варианты - хотя бы тот же WhatsApp .

Чтобы разнообразить общение с помощью Skype, воспользуйтесь набором фишек, которые надо знать каждому .

1. Добавьте контакты телефонной книги в список друзей

Чтобы добавить контакты телефонной книги в список друзей, перейдите в меню настроек в разделе профиля и передвиньте соответствующий выключатель в активное положение.

Теперь увидите в перечне контактов Skype все записи телефонной книги, которые пользуются сервисом.

И эта возможность появилась только в последних обновлениях мобильного приложения для iOS.

2. Отправляйте местоположение, чтобы сэкономить время

Эту фишку мы с друзьями активно используем через WhatsApp, когда пытаемся найти друг друга в родном городе или в поездке. И она есть и в Skype.

Просто нажмите на соответствующую кнопку над клавиатурой, скорректируйте местоположение и подтвердите выбор. Профит.

3. Отметьте избранных собеседников из общего перечня

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

Таким образом сэкономите время на их поиск в будущем - избранные записи всегда отображаются в верхней части телефонной книги Skype.

4. Просматривайте время отправления сообщений свайпом

Проведите справа налево в меню общения с кем-либо и увидите время отправления каждого сообщения в диалоге.

5. Используйте скрытые смайлы из перечня лучших ниже

Чтобы отправить скрытый смайлик, нужно прописать его текстом согласно представленным ниже таблицам.

Слева - изображение, в центре - название, справа - код (скобки тоже часть кода ).

Пожалуйста.

6. Передавайте контакты Skype собеседникам в пару тапов

Для этого у мобильного приложения сервиса предусмотрена специальная кнопка, которая доступна во время переписки.

С помощью этой возможности сможете посоветовать друзьям контакты из телефонной книги для решения вопросов или состыкуете вместе близких родных.

7. Устанавливайте статусы в Skype по личным потребностям

Используйте статусы сервиса с умом :

  • В сети - пользователь готов к общению
  • Не в сети - Skype выключен или нет сети
  • Нет на месте - готов прочитать сообщения, когда вернется
  • Не беспокоить - пользователь занят и не получит уведомление о вашем сообщении
  • Невидимый - для всех этот статус будет выглядеть как не в сети

Это упростит жизнь.

8. Попробуйте общение с ботами, чтобы оценить их лично

Актуальный список ботов Skype доступен на официальном сайте сервиса - вот ссылка . Чтобы начать общение с роботом, его достаточно просто добавить в список друзей.

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

Жаль, большинство ботов общаются только на английском языке. Но вы все-таки сможете найти какого-то интересного именно для себя.

9. Создавайте групповые видеозвонки вместе с друзьями

В одном из последних обновлений Skype появилась возможность групповых видеозвонков до 25 пользователей в одном таком чате.

Чтобы активировать возможность, достаточно создать групповой чат и нажать на привычную кнопку для совершения видеозвонка.

10. Записывайте видеосообщения для передачи контактам

Боты – это виртуальные собеседники, которые сегодня присутствуют во многих мессенджерах. Skype не исключение. В последних версиях программы также появились эти полезные и уникальные приложения, каждое из которых обладает собственным «характером». Боты полезны не только для общения. С их помощью можно искать нужную информацию, играть в мини-игры, заводить новых друзей и т.д. Чтобы разговаривать с ботом в Скайпе, достаточно просто нажать на выбранного персонажа и начать писать ему.

Что такое боты в Скайпе

Боты для Skype – это совсем не новинка. Подобные программы появились еще в более ранних мессенджерах и компьютерных играх, чтобы составить компанию в виртуальных баталиях. Эти приложения имитируют поведение живого человека в виртуальном пространстве. Первые боты мало напоминали человеческое общение, однако со временем они стали приносить очевидную пользу, и сегодня каждый человек может создать личного бота под заказ. Чаще всего такие программы отвечают на звонки, являются виртуальными справочниками, приглашают людей в группы и сообщества.

Зачем нужны боты в Skype

Скайп-боты, как и другие подобные программы, созданы для справки и развлечения пользователей. С ними можно познакомиться, завязать разговор, сыграть в онлайн-игру, спросить прогноз погоды или последние новости. Популярные боты в Skype пока работают только в некоторых странах – США, Австралия, Великобритания, Канада, Ирландия, Индия, Новая Зеландия и Сингапур. Большинство программ-ботов – англоязычные, хотя уже в ближайшем будущем могут появиться и аналоги на русском. Должны отметить, что боты могут работать только в последних версиях Скайпа для Windows, Android и MacOS.

Как можно добавить ботов в Скайп? Сделать это несложно – достаточно в разделе «Контакты» найти вкладку «Боты» и выбрать понравившегося персонажа. В браузерной версии нужно открыть вкладку «Обзор ботов». После этого достаточно выбрать пункт «Начать» или «Добавить бота», и можно приступать к общению. Если бот не понравится или надоест, его в любое время можно удалить или заблокировать.

Популярные боты в Скайпе

Вот список наиболее популярных Скайп-ботов:

  • ОРПО Rammas – интересный и умный собеседник, способных общаться на английском и арабском языке.
  • vertical.consulta – англоязычный бот для медицинских и других консультаций.
  • Davó – англоязычный бот-справочник.
  • В OKPAY БОТ – бот по вопросам платежной системы Скайпа.
  • Allai – официальный Скайп-бот Великобритании.
  • Едимыч Интернет-гипермаркет – англоязычный бот гипермаркета «Едимыч».

Как видите, боты для Skype – чрезвычайно удобные и полезные помощники. В скором времени добавлять ботов и общаться с ними можно будет во многих других странах, в том числе и России.

Я давно хотел попробовать написать какого-нибудь простого бота, чтобы разобраться в этом процессе. Сейчас я в отпуске и у меня есть достаточно свободного времени, чтобы начать писать в своё удовольствие в этом направлении…

Я решил начать с простого бота, который может работать только с текстом. Бот будет на недавно анонсированной платформе для ботов от Microsoft (Microsoft Bot Framework ). Мне она приглянулась тем, что теоретически, один реализованный бот может работать и для Skype и для Telegram и для веба и еще много всяких вариантов. Чтобы не писать совсем уж бесполезное приложение, я буду делать бота-помощника для разработчика, который может выполнить такие действия как:

  • Приведение строки к верхнему регистру
  • Приведение строки к нижнему регистру
  • Получение нового Guid
  • Конвертация числа из любой системы счисления в любую
  • Перевод Base64 строки в обычный текст
  • Обычный текст в Base64 строку
  • Получить дату из строки в UNIX формате
  • Перевести дату в UNIX формат
  • Сгенерировать пароль заданной длины

Для подобных действий, я, обычно, пишу сниппеты, которые при необходимости удобно использовать. Для их организации и запуска я использую LINQPad . Но иногда я могу что-то делать не за своим компьютером или же вообще со смартфона, в таком случае мой бот может быть полезен. Если есть еще идеи, какой функционал можно добавить данному боту, пишите мне, с удовольствием их реализую…

В бот, на вход, будет поступать строка. Будем разделять команду и её параметры пробелами. Сама команда будет либо до первого пробела, либо вся строка, если пробелов нет.

Не буду описывать процесс обработки команд и того, как они исполняются, так как там всё предельно просто, да и весь написанный код я опубликую на GitHub .

Перейдём к более интересному, а именно, к созданию самого бота. Для работы нужна Visual Studio 2015 , рекомендую установить доступные обновления. Воспользуемся готовым шаблоном для создания ботов «Bot Application template », скачать его можно по этой ссылке aka.ms/bf-bc-vstemplate

Полученный zip архив нужно скопировать в директорию «%USERPROFILE%\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C# » После этого, мы уже можем создавать нового бота из данного шаблона.

Сразу после создания проект имеет следующую структуру

Мы можем запустить его и проверить, что он уже умеет. Для тестирования существует отдельное приложение «Bot Framework Emulator », сказать его можно отсюда http://download.botframework.com/botconnector/tools/emulator/publish.htm

Запустим наше приложение и эмулятор.

По умолчанию, бот умеет возвращать длину полученного сообщения, данный функционал реализован в MessagesController :


Теперь добавлю боту ранее описанный функционал. Для этого я добавлю новый проект “DeveloperToolsPack ” который будет представлять из себя Class Library и также добавлю проект для Unit тестов.

Класс DeveloperTools представляет из себя следующее:

Public class DeveloperTools { private Dictionary _tools; public DeveloperTools() { AddTool(new ToUpper()); AddTool(new ToLower()); AddTool(new NewGuid()); AddTool(new ConvertTo()); AddTool(new FromBase64()); AddTool(new ToBase64()); AddTool(new FromUnixTime()); AddTool(new ToUnixTime()); AddTool(new Password()); } private void AddTool(ITool tool) { if (_tools == null) { _tools = new Dictionary(); } if (!_tools.ContainsKey(tool.CommandName.ToLower())) { _tools.Add(tool.CommandName.ToLower(), tool); } } public string Run(string str) { if (!System.String.IsNullOrEmpty(str)) { str = str.Trim(); var indexOfSpace = str.IndexOf(" ", StringComparison.Ordinal); string command; var commandText = ""; if (indexOfSpace != -1) { command = str.Substring(0, indexOfSpace).ToLower(); commandText = str.Substring(indexOfSpace+1, str.Length - indexOfSpace-1); } else { command = str.ToLower(); } if (_tools.ContainsKey(command)) { return _tools.Run(commandText); } else { if (command == "help") { var returnString = new StringBuilder(); foreach (var tool in _tools) { returnString.Append(tool.Value.Description + "\n\r"); } return returnString.ToString(); } return $"Command \"**{command}**\" not found. See \"**help**\" command."; } } return "Please input a string"; } }

В самом боте, в «MessagesController » обработку полученного сообщения заменим на

Var developerTools = new DeveloperToolsPack.DeveloperTools(); return message.CreateReplyMessage(developerTools.Run(message.Text));

Можно запускать и тестировать данного бота.


Если всё работает как надо, можно перейти непосредственно к публикации. Создадим в Azure обычное web приложение, можно использовать бесплатный тариф, так как для тестирования мощности хватит вполне.

Теперь щелкаем по проекту правой кнопкой мыши и выбираем Publish

Теперь необходимо выбрать «Microsoft Azure Web Apps »


И найти там ранее созданное приложение. После этого можно нажать кнопку «Publish » и приложение будет опубликовано.

Несомненно, боты очень перспективное направление. Платформа от Microsoft очень удобная и позволяет интегрироваться с другими сервисами, что, несомненно является огромным плюсом. Создаваемые боты, естественно, не ограничиваются только обработкой текста, они могут выполнять гораздо более сложные функции. В данной статье я показал, как можно сделать простого, но в тоже время полезного бота для Skype и опубликовать его. Созданный бот, ко всему прочему, может работать на множестве других платформ, таких как Telegram , Facebook Messenger, GroupMe , Slack .

Приятного программирования.

P.S. Код бота изменялся под новую версия Bot Framework

Простите меня пожалуйста, но я опять про ботов. Понимаю, что инфополе забито под завязку, но тут реально полезная инфа 100%! Мы вчера всем чатиком тестили, вот это была феерия

Вобщем, рассказываю. Есть боты, с которыми надо открыть отдельное диалоговое окно и задать ему вопрос или выбрать команду, которую он должен выполнить. Такие боты называются чат‑ботами. А есть боты, которых не надо добавлять в список контактов, и разговаривать с ними не надо, достаточно упомянуть его в сообщении и он выполнит свою функцию. Так вот, мы тестили три таких бота - по поиску картинок, по поиску гифок и по поиску видео. Подробнее про каждого из них:

@bing - бот, который ищет картинки по запросу. Если ввести @bing в поле ввода сообщения, то вы увидите рядом надпись «search images», то есть «искать изображения». Все что вам надо сделать - это написать слово или фразу для поиска тут же в поле ввода. Затем, в зависимости от скорости интернета, дождаться пока бот подгрузит картинки по запросу и выбрать ту, которая отправится сообщением в чат или диалог. Попробуйте!

@gif работает точно по такому же принципу как и бинг, только ищет гифки

@imdb ищет фильмы, присылает по запросу описание фильма с картинкой, ссылкой на трейлер и ссылкой для просмотра «легальной» версии (то есть не рутрекер совсем). Очень полезен когда кто‑то спрашивает «что посмотреть?» а вы ему не просто название, но и дискрипшн и трейлер с постером в одном сообщении)

Тестирование таких ботов‑помощников навело на мысли о том, каких еще ботов нам не хватает? Ребята выдвинули смелые предположения, что было бы здорово запилить бота, который присылает пуш‑уведомления по ключевым словам. Настроил бота на упоминание в чате своего имени или компании, и замьютил все чаты, получая уведомления только когда обсуждают то, что важно для тебя.

От себя добавлю, что мне очень хочется такого же бота как @bing, только чтобы выдавал по запросу ссылку из яндекса. А то приходится идти в браузер, копировать линк и вставлять в сообщение. Часто ошибаемся, когда пишем названия сайтов от руки, а так был бы бот‑гугл или бот‑яндекс и он за нас находил бы нужные сайты также, как находит картинки и гифки. Я знаю, что есть , но сейчас говорю именно о ботах‑помощниках.

Также были пожелания по поводу ботов, которые скрывают определенные сообщения и бота‑вики, который работал бы также, как поиск по картинкам, только по статьям из википедии.

Если вы вполне можете в разработку ботов‑помощников, то напишите мне как сделаете одного из тех, которых мы ждем, и я запилю на него обзор, а вам будет слава, почет и вечные ништяки