Создание бота для 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<string, itool="">();
            }
            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

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

 

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

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

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

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

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

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

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

Андрей 12.05.2016 15: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 "

Андрей 01.11.2017 13:19:31

Здравствуйте
Подскажите, пожалуйста, сколько времени занимает процесс публикации ботов? У меня второй день статус "InReview" и тишина

Андрей 01.11.2017 15:27:58

Здравствуйте.
К сожалению, о точных сроках ничего сказать не могу, так как валидация происходит вручную(или частично вручную)
Но если у Вас нет цели попасть в каталог ботов (https://dev.skype.com/bots), то с публикацией вполне можно повременить, так как использовать его в Skype вы можете уже сразу после подключения.

Федор 23.11.2017 12:01:49

Подскажите пжл. Как заставить бот понимать кириллицу ?

Спасибо заранее

Андрей 23.11.2017 16:42:45

Используйте кодировку UTF-8.
Вы можете включить автоматическое сохранение новых файлов в UTF-8:
Tools > Options > Environment > Documents > Save documents as Unicode when data cannot be saved in codepage
Если проблема не пропадает, свяжитесь со мной, постараюсь помочь.

Федор 26.11.2017 20:25:09

Доброй ночи. Отправил вам сообщение с подробностями проблемы с Кириллицей

Дмитрий 12.12.2017 19:03:57

Добрый день!
Создал бота в Скайп, он отражается в списках контактов, но в статусе "не активен" (красного цвета). Сообщения не отправляются. Не подскажете, что сделать?

Андрей 13.12.2017 4:07:37

Здравствуйте.
Попробуйте посмотреть статус подключения на странице с каналами для подключения (https://dev.botframework.com/bots) Если там всё корректно, сделайте вывод логов или подключитесь в режиме отладки и проверьте, всё ли корректно принимает и отдаёт.
Если ничего не поможет, можете связаться со мной, постараюсь помочь.

Подскажите пожалуйста, Microsoft всех созданных ботов будет переносить на Axure? С ботами теперь можно работать только на платных тарифах?

Андрей 28.12.2017 16:41:55

Здравствуйте. Вы вполне можете работать с чат-ботами и на бесплатных тарифах. При условии, что они выдерживают уровень нагрузки на Ваш чат-бот. А так по сути нет разницы, где вы его разместите. Это всего лишь WEB API приложение, главное чтобы оно где-то работало и Вы могли добавить адрес в Bot Connector.

А, я могу разместить и зарегистрировать бота для skype на своем сервере?
Я почему-то думал, что нет, что он привязан к microsoft

Андрей 28.12.2017 16:47:24

Можете. Само место размещения кода в данном случае значения не имеет. На серверах Microsoft будут происходить вызовы Bot Framework. Который обеспечит Вашему чат-боту работу во множестве имеющихся мессенжеров.

У меня задача с битрикс24 соединить бота для скайпа. Раньше все работало, но сейчас пришло письмо, что боты переносятся на azure. А там чет так все сложно, не понятно, да и платно))  Вот думаю как лучше сделать

Андрей 28.12.2017 17:00:46

Видимо, вы имеете ввиду что в Azure переносятся какие-то боты самого битрикс24. Так как для Bot Framework не имеет значение его расположение. Оно ведь работает только как прослойка, для коммуникации с мессенджерами. Либо вы не Bot Framework используете. Точно его?

helpdesk.bitrix24.ru/open/3601867/?sphrase_id=74600333
Создавал бота по мануалу Битрикс24
"С помощью Microsoft Bot Framework можно подключить Skype, Slack, Kik, GroupMe, SMS, email   других каналов к Открытым линиям в Битрикс24 и принимать обращения ваших клиентов них. "
на botframefork создавал бота, а регистрационные данные подвязывал к битрикс24

Андрей 29.12.2017 3:49:29

Я понял, о чем Вы. Сейчас сам Bot Framework мигрирует в Azure.
Но там так же есть бесплатный тариф, поддерживающий 10000 сообщений в месяц. Если этого мало, тогда нужно использовать платный тариф. (тарифы можно увидеть здесь azure.microsoft.com/.../)
Но сам код чат-бота вы по-прежнему можете запускать на любом сервере, будь то Azure или что-то другое.

Андрей 29.12.2017 3:51:10

И то, ограничение в 10,000 сообщений в месяц относится к "Premium channels". Для обычных они по-прежнему без ограничений.

Спасибо!) Зарегистрируюсь в Azure Smile
Блин, Amazon AWC, Azure.. .Куда мне ... солить ... Smile)

Вадим 04.01.2018 11:40:42

Андрей, существует ли шаблон разработки бота под NodeJS?

Андрей 06.01.2018 5:28:58

Здравствуйте. Здесь: docs.microsoft.com/.../bot-builder-nodejs-quickstart
Можно увидеть пример создания первого бота на Node.js

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