Создание чат-ботов используя Bot Builder SDK 4 — часть 1

Всем привет. Это первый видеоурок из курса «Создание чат-ботов используя Bot Builder SDK 4». Здесь я буду публиковать помимо самого видео так же подробное текстовое описание и примеры кода. На данном уроке мы познакомимся с платформой Microsoft Bot Framework и узнаем об особенностях Bot Builder SDK четвёртой версии, так же создадим и запустим первого чат-бота.

Сперва давайте разберёмся с тем, что же такое Microsoft Bot Framework и так ли он хорош чтобы, читать данный урок дальше и создавать своих чат-ботов, используя его...

Microsoft Bot Framework представляет из себя набор инструментов и сервисов для быстрого и удобного создания и использования чат-ботов.

В Bot Framework можно выделить 3 основные части:

  1. Bot Connector — позволяет привязать чат-бот к одному или нескольким каналам общения, таким как Skype, Telegram, Slack. Помимо мессенджеров поддерживается работа через СМС, Email и с обычных страниц сайта, средствами iframe. Позже я расскажу об этом всём более детально.
  2. Cognitive Services — предоставляют API для работы с сервисами анализа текста, изображений, эмоций, речи и многого другого. Позволяя внедрять искусственный интеллект в ваши приложения без глубоких знаний в данной области.
  3. Bot Builder SDK — предоставляет SDK для создания чат-ботов. Включает в себя все ключевые элементы, необходимые для работы с чат-ботами.

В рамках данного курса будет рассматриваться версия SDK 4 и выше. Четвёртая версия существенно отличается от третьей, поэтому здесь стоит быть внимательными.

Сейчас давайте перейдём к практической части. Для начала, установим шаблон проекта Bot Builder SDK 4 для Visual Studio.

Установка шаблона чат-бота Bot Builder SDK 4 для Visual Studio

Перейдя по ссылке, скачаем необходимый шаблон и установим его. Установленный шаблон можно увидеть среди доступных шаблонов при создании нового проекта. Давайте создадим новый проект используя шаблон Bot Framework.

Создание нового проекта Bot Builder SDK 4 в Visual Studio

Созданный из шаблона чат-бот имеет необходимый функционал для запуска вашего первого чат бота. Давайте посмотрим, что он содержит:

Файл appsettings.json сейчас содержит 2 параметра, которые будут необходимы на этапе публикации чат-бота.

Содержимое файла appsettings.json

В файле с расширением *.bot описаны данные, необходимые для подключения к чат-боту используя эмулятор.

Содержимое файла *.bot

EchoBot — описывает логику чат-бота. В данном случае именно здесь реализуется весь функционал взаимодействия с пользователем.

EchoState — используется для сохранения состояния полученных данных.

Program — представляет из себя обычный файл для .NET Core приложения.

Startup — в данном файле записана вся необходимая для работы чат-бота конфигурация.

Для работы с чат-ботами удобнее всего использовать эмулятор. Найти и установить его можно по ссылке https://github.com/Microsoft/BotFramework-Emulator

BotFramework Emulator

Установив эмулятор, давайте проверим, как сейчас работает чат-бот. Запустим приложение и эмулятор, откроем в эмуляторе адрес чат-бота. Отправим несколько сообщений. В ответ мы получаем номер нашего сообщения и его текст.

Запуск чат-бота из шаблона

Так как четвёртая версия Bot Builder SDK работает с .NET Core, наверняка многие из вас будут использовать для разработки чат-ботов что-то отличное от Visual Studio, ведь вы можете работать и в Linux и в macOS. Сейчас я покажу как можно сделать заготовку для чат-бота, используя Bot Builder SDK 4 в Visual Studio Code.

Откроем Visual Studio Code, затем откроем терминал. Выполним команду: dotnet new web -o BotBuilder4

Это создаст новый пустой проект .NET Core.

Откроем каталог с созданным проектом. Вы можете убедиться, что это пустое .NET Core приложение. Сейчас давайте подключим пакеты необходимые для работы чат-бота. Я буду использовать консоль, но сделать это можно и через любой NuGet менеджер.

Так как сейчас еще нет стабильной четвёртой версии SDK, я буду указывать конкретный номер версии пакета, а именно 4.0.1-preview

dotnet add package Microsoft.Bot.Builder.Core -v 4.0.1-preview
dotnet add package Microsoft.Bot.Builder.Core.Extensions -v 4.0.1-preview
dotnet add package Microsoft.Bot.Builder.Integration.AspNet.Core -v 4.0.1-preview
dotnet add package Microsoft.Bot.Builder.Dialogs -v 4.0.1-preview

Теперь добавим класс EchoBot, давайте в этом же файле добавим класс EchoState, который будет служить для сохранения состояния данных чат-бота.

public class EchoState
{
    public int TurnCount { get; set; } = 0;
}

Класс EchoBot наследуем от интерфейса IBot и запишем реализацию метода OnTurn. В самом методе убеждаемся что полученные данные являются сообщением от пользователя, и отправляем ответ, используя метод context.SendActivity

public async Task OnTurn(ITurnContext context)
{
    if (context.Activity.Type == ActivityTypes.Message)
    {
        var state = context.GetConversationState<EchoState>();

        state.TurnCount++;
        await context.SendActivity($"Turn {state.TurnCount}: You sent '{context.Activity.Text}'");
    }
}

Перейдём в класс Startup. Создадим класс для работы с конфигурацией чат-бота. В классе зададим 2 свойства: MicrosoftAppId и MicrosoftAppPassword.

public class ApplicationConfiguration
{
    public string MicrosoftAppId { get; set; }
    public string MicrosoftAppPassword { get; set; }
}

В классе Startup добавим свойство для хранение конфигурации типа IConfiguration и добавим конструктор. В конструкторе добавим чтение файлов конфигурации и сохранения их в свойство Configuration.

public IConfiguration Configuration { get; }

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();
}

В методе ConfigureServices добавим работу с конфигурацией, подключим MVC и добавим работу с чат-ботом EchoBot. В параметрах зададим обработку ошибок и место для хранения состояния чат-бота. Так же не забываем добавлять не достающие пространства имён.

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<ApplicationConfiguration>(Configuration);

    services.AddMvc();

    services.AddBot<EchoBot>(options =>
    {
        options.CredentialProvider = new ConfigurationCredentialProvider(Configuration);

        options.Middleware.Add(new CatchExceptionMiddleware<Exception>(async (context, exception) =>
        {
            await context.TraceActivity("EchoBot Exception", exception);
            await context.SendActivity("Sorry, it looks like something went wrong!");
        }));

        IStorage dataStore = new MemoryStorage();
        options.Middleware.Add(new ConversationState<UserInfo>(dataStore));
    });
}

Сейчас в методе Configure добавим конфигурацию для работы с имеющимися файлами и подключим BotFramework

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseDefaultFiles()
     .UseStaticFiles()
     .UseBotFramework();
}

После этого можно зайти в терминал, записать dotnet run и запустить созданного чат-бота. После запуска откроем эмулятор и убедимся, что всё работает. После того как мы завершаем работу с эмулятором, не забываем остановить работу чат бота, нажав в терминале сочетанием клавиш Ctrl+C

Сейчас давайте я покажу как можно использовать состояние чат-бота для сбора простых пользовательских данных. Переименуем класс EchoState на UserInfo. Добавим свойства для хранения имени пользователя и его телефона. В методе OnTurn уберём старую логику.

public class UserInfo{
    public string UserName{get;set;}
    public string Phone{get;set;}
}

При получении чат-ботом данных типа ConversationUpdate (это событие происходит, например, когда пользователь присоединяется к чат-боту) чат-бот приветствует пользователя и попросит ввести его имя. После того как имя пользователя было получено оно записывается в состоянии и просит пользователя ввести телефон. После того как пользователь вводит телефон, чат-бот отображает данные, полученные от пользователя.

public async Task OnTurn(ITurnContext context)
{
    if (context.Activity.Type == ActivityTypes.ConversationUpdate)
    {
        var newUserName = context.Activity.MembersAdded.FirstOrDefault()?.Name;
        if (!string.Equals("Bot", newUserName))
        {
            await context.SendActivity($"Hello, {newUserName}, set your name");
        }
    }
    if(context.Activity.Type == ActivityTypes.Message){
        var state = context.GetConversationState<UserInfo>();
        var message = context.Activity.Text;
        if (string.IsNullOrEmpty(state.UserName))
        {
            state.UserName = message;
            await context.SendActivity($"Now set your phone");
            return;
        }

        if (string.IsNullOrEmpty(state.Phone))
        {
            state.Phone = message;
        }

        await context.SendActivity($"Thanks, your datas: {state.UserName} - {state.Phone}");
    }
}

Запустим эмулятор и убедимся, что всё работает так, как мы ожидали.

С выходом Bot Builder SDK 4, работающей на .NET Core вы можете создавать чат-ботов практически использую любые операционные системы и выбирать подходящую именно вам среду для разработки. Запускаться ваши чат-боты смогут также практически везде.


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

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