2016年12月13日

建立自己的Channel與LUIS Action Binding整合

在上一篇中,我們展示了如何透過LUIS Action Binding & Action Fulfillment整合Bot Framework建立一個不需要寫程式也能運作的Chat Bot;不必寫程式碼雖然很吸引人,但是必要的複雜邏輯勢必還是要透過萬能的程式解決。

LUISAction Binding機制中,也允許我們寫自己的Channel,在ActionTrigger之後,LUIS可以去呼叫我們自己的API取得回應。下面我們用一個很簡單的範例說明。

l   首先,我們先建立一個C#API App

n   事實上,任何形式的REST API都可以;這裡只是為了簡單使用API APP。你可以使用任何熟悉的語言建立REST API

l   在這個範例中,我的API會接受LUIS判斷出來的Entity,並產生回應;因此,我先定義兩個Class,一個是DEMO.cs,代表LUIS呼叫我時的傳入參數;另一個是DemoResponse,代表我的API的回應。

n   Demo.cs

    [Serializable]

    public class Demo

    {

        public string demotype;

    }

n   DemoResponse.cs

    [Serializable]

    public class DemoResponse

    {

        public string Message;

        public DateTime Time;

    }

l   新增一個DEMOController.cs

public class DMEOController : ApiController

    {

       

 

        // POST api/DoDemo

       [SwaggerOperation("DoDemo")]

        [SwaggerResponse(HttpStatusCode.OK)]

        [HttpPost]

        public Models.DemoResponse DoDemo([FromBody]Models.Demo demotype)

        {

            return new Models.DemoResponse

            {

                Message = $"so be it:{demotype.demotype}!!",

                Time = DateTime.Now

            };

        }

       

    }

l   發布之後,記錄下網址。

l   接著,回到LUIS Portal,建立一個新的IntentDEMO;建立一個新的Entitydemotype並開始訓練模型。

l   完成後,點開DEMO Intent的設定頁面

l   新增Action Fulfillment其型別為JsonRequest;必要輸入項為demotype Entity

l   接著,在Body欄位,我們需要把LUIS辨別出來的Entity傳給API;而先前我們的API已經定義了一個DEMO Class作為傳入參數;因此,這裡我們需要輸入一個JSON Template如下:

{{"demotype":"{DEMOTYPE}"}}

n   {DEMOTYPE}就是LUIS辨別出來的Entity值,在剛剛我們指定它的名稱為DEMOTYPE,這裡用{DEMOTYPE}變數的形式帶入。

n   整個字串其實就是剛剛DEMO ClassJson型式;與一般Json的差別僅僅在於物件需要用兩個"{"包住

l   Response Template中,我們可以提供一個回應給前端的句型;如果沒有指定,則會直接把我們的API的回應回給Bot Client

n   在這裡我們先前已經定義過一個DemoResponse class,他有兩個屬性:MessageTime,在這裡我們用{{Message}}{{Time}}變數代表

n   URL的部分填上剛剛發布的API AppController網址

l   完成之後發布新的LUIS application,然後回到Bot Portal測試看看

 

 

沒有留言:

About Me