Bot Framework v3.0부터 시작 BOT 개발 : 0 브웨이가 BOT에서 주문을 받으면 - FormFlow (1)

FormFlow를 사용하여 정형 목록 질문을 수행하는 BOT 동작 개발



이번은, 선택사항에 의한 질문(복수)을 실시하는 정형으로 프로세스를 FormFlow 클래스를 이용해 작성합니다. 이를 통해 Bot Framework에서만 사용할 수 있습니다. 예를 들어 패스트 푸드 및 택배 피자 주문과 같이 몇 가지 일반적인 질문을 기반으로 주문을 수락하는 흐름을 만들 수 있습니다.
그래서 타이틀대로 「〇브웨이가 BOT에서 주문을 접수하면」이라는 취지로 간단한 샌드위치 주문 BOT를 작성해 갑니다.

Visual Studio 템플릿에서 새 BOT 응용 프로그램 만들기 - 아래 준비



Bot Framework를 사용하기 위한 개발 환경 을 참고로 개발 환경을 작성해, Visual Studio 템플릿에서 Bot 응용 프로그램 만들기 와 같은 프로세스로 신규 어플리케이션을 작성합니다. 이번에는 SandwichBot이라는 이름으로 작성하고 있습니다.
Visual Studio テンプレートから Bot アプリケーションの作成

템플릿에서 만든 MessageController.cs (Controller 폴더 아래에 있음)를 편집합니다.
이번에는 메시지를 보내고 받는 Microsoft.Bot.Builder.Dialogs 외에도 Bot.Builder.FormFlow에 대한 참조를 추가합니다. 또한 System.Collections.Generic도 함께 추가합니다.
MessageController の編集

MessageController.cs
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder.FormFlow;
using System.Collections.Generic;

질문 항목 설정



템플릿에 디폴트로 작성되고 있는 MessageController 클래스내에, 우선은 질문 항목과 그 응답 리스트를 enum (열거형)로 정의합니다. 이번에는 샌드위치를 ​​만드는데 필요한 ①SandwichOptions(샌드위치의 종류), ②LengthOptions(사이즈), ③BreadOptions(빵 종류), ④ToppingsOptions(토핑), ⑤VegetableLessOption(감소 야채), ⑥Vege 를 만들었습니다.

MessageController.cs
[BotAuthentication]
    public class MessagesController : ApiController
    {
        :
        //質問項目と回答
        public enum SandwichOptions
        { 
            RoastBeef, BLT, SubwayClub, RoastChicken,
            TeriyakiChicken, TurkeyBreast, Ham, Tuna, VeggieDelite
        }
        public enum LengthOptions
        { 
            Regular, Footlong
        }
        public enum BreadOptions
        {
            Flatbread, White, Wheat, Sesame, HoneyOats
        }
        public enum ToppingsOptions
        {
            SliceCheese, CreamCheese, Bacon, Tuna, Avocado, Jalapeno, None
        }
        public enum VegetableLessOptions
        {
            All, Lettuce, Tomato, Pement, Onion, Pickles, Olives, None
        }
        public enum VegetableMoreOptions
        {
            All, Lettuce, Tomato, Pement, Onion, Pickles, Olives, None
        }
        public enum SauseOptions
        {
            Caesar, HoneyMustard,  WasabiSoy, Basil, Balsamico, Mayonnaise, OilVinegar
        }


질문 양식 작성 및 호출



"Form Definition"(양식 정의) 인터페이스를 SandwichOrder라는 이름으로 만들고 위에서 만든 질문 항목을 추가합니다. 답변 목록에서 하나만 선택하고 싶은 경우는 그대로, 복수 선택 가능한 경우는 System.Collections.Generic.List<>를 사용합니다.
그런 다음 SandwichOrder 클래스에 Microsoft.Bot.Builder.FormFlow.IForm을 추가하고 FormBuilder에서 이러한 항목을 호출하여 질문하는 양식을 구성합니다. FormBuilder.Message에서 초기 메시지를 설정합니다.

MessageController.cs
[BotAuthentication]
public class MessagesController : ApiController
{
    :
    [Serializable]
    public class SandwichOrder
    {
        public SandwichOptions? 種類;
        public LengthOptions? サイズ;
        public BreadOptions? パンの種類;
        public List<ToppingsOptions> オプション追加;
        public List<VegetableLessOptions> 抜きたい野菜;
        public List<VegetableMoreOptions> 増やしたい野菜;
        public List<SauseOptions> ソース;

        public static IForm<SandwichOrder> BuildForm()
        {
            return new FormBuilder<SandwichOrder>()
                .Message("こんにちは! 野菜の○ブウェイです。ご注文をどうぞ!")
                .Build();
        }
    }

Microsoft.Bot.Builder.Dialogs.IDialog에서 "Chainable"(사슬처럼 연결된) 인터페이스를 만듭니다.

MessageController.cs
[BotAuthentication]
public class MessagesController : ApiController
{
    :
    internal static IDialog<SandwichOrder> MakeRootDialog()
    {
        return Chain.From(() =>         
            FormDialog.FromForm(SandwichOrder.BuildForm));
    }

그리고는, 무언가 메세지를 수신하면, 이 MakeRootDialog 를 호출하도록(듯이) 설정하면 완성입니다. 일단 템플릿의 Post 부분을 다음과 같이 수정하면 OK입니다.

메시지 송수신에 대한 자세한 내용은 커뮤니케이션의 기본 클래스 - Dialog(1)을 확인하십시오.

MessageController.cs
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
        {
            if (activity.Type == ActivityTypes.Message)
            {
                await Conversation.SendAsync(activity, MakeRootDialog);
            }
            else
            :

Emulator로 동작 확인



지금까지의 내용으로 동작을 확인합니다. Bot 애플리케이션 로컬 실행 및 에뮬레이터 액세스 마찬가지로 Visual Studio에서 F5에서 빌드 및 디버그 실행을 시작하고 Bot Framework Channel Emulator에서 메시지를 보냅니다.
작성한 7개의 질문 항목과 목록이 표시되고 각 항목을 입력하면 마지막에 확인 메시지가 표시되는지 확인합니다.
Bot Framework Channel Emulator による定型リスト質問

좋은 웹페이지 즐겨찾기