Создание бота для 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<string, ITool> _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[command].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» и приложение будет опубликовано.

Теперь идем на сайт https://dev.botframework.com авторизуемся и нажимаем «Register a bot»

Заполняем все необходимые поля

В поле Endpoint нужно указать адрес к опубликованному приложению. Сразу указывайте HTTPS адрес.

Теперь необходимо взять App Id и Primary app secret и вписать их в Web.config бота.

После этого бота нужно пере опубликовать с новыми ключами. Опубликованный бот можно протестировать в «Bot Framework Emulator», не забыв указать новые App Id и App Secret.

Получившегося бота можно связать с многими платформами.
В том числе использовать в web.


Вы можете опробовать данного бота в браузере прямо сейчас:


Ссылка на исходный код: https://github.com/flash2048/SkypeBot_DeveloperTools


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

Бот в Telegram

Бот в Skype

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

Комментарии (4) -

Дмитрий Потапов 05.05.2016 22:24:16

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

Андрей 06.05.2016 5:16:47

Напишите что именно не понятно, постараюсь описать это более доступно.

Как я понял добавить этого "друга" в чат нет возможности?

Андрей 12.05.2016 14:16:08

Сейчас данная возможность только на стадии "limited preview for developer accounts only". Чтобы это включить, при создании бота Skype (https://developer.microsoft.com/en-us/skype/bots) нужно выбрать параметр "Send and receive messages and content in a group chat "

Добавить комментарий