使用C#開發LineBot(12) – 在連續對話中加入ButtonsTemplate訊息

如果你實際開發過Chat bot,就會發現NLP(自然語言分析)本身就是一個很大的問題,即便現在有LUIS可以幫助我們做語意分析,但實務上分析結果要100%符合用戶(或開發人員)的心意不是易事,倘若可行,在商務應用時,Chat bot與用戶之間的一問一答對談,想要提高可用率,讓用戶以選項的方式回答還是比自然語言對談來的好很多。

舉例來說,在上一篇我們介紹的CIC類別當中,如果我們的chat bot要問用戶要請哪一種假別,與其讓用戶自己回答,不如讓用戶用選的乾脆一些。

原本對談的設計是:

但這風險很高,因為我們開放用戶自己用輸入的方式回答。

如果用戶偏偏要回答:
我今天想請事假
    或
請婚假
    或
什麼根本沒聽過的假…

對Chat bot來說都要做自然語言分析,就算分析的再正確,在開發上難度也提升不少,但如果用底下這樣的ButtonsTemplated Message詢問用戶,用戶只能在底下的選項中擇一回答,那就容易多了:

上一篇說過,我們要透過繼承自ConversationEntity的LeaveReuqest類別來處理這對話邏輯,而這一版我們加上了支援ButtonsTemplate Message,你只需要使用ButtonsTemplateQuestion這個Attribute即可(注意第3行):

我們新建立的這個LeaveRequestV2,跟上一篇的LeaveRequest很像,但第一個詢問假別的問題,改用了ButtonsTemplateQuestion Attribute(注意,你必須把LineBotSDK升級至 0.5.7-beta),程式碼就只需要做這一個小小的調整即可。

由於加上了ButtonsTemplate Message,chat bot WebApi Controller主程式碼也小幅修改一下:


只需要配合ButtonsTemplate Message在59-59行針對CIC的Process result,取得ResponseButtonsTemplateCandidat(64行)進行Reply即可。

其他的程式碼跟上一版幾乎完全一樣沒變。

而24-29行只是加了一小段判斷,規定用戶只能選擇事假、病假、公假其中之一…純粹只是寫著玩測試一下。

執行這段對話之後,chat bot可以蒐集用戶的回答,結果如下:

想要在ConversationEntity中使用ButtonsTemplate也沒有問題囉 Smile

完整程式碼請參考:
https://github.com/isdaviddong/LinebotConversationExample/blob/master/LinebotConversationExample/Controllers/CICTest2Controller.cs

------------------
相關課程: http://www.studyhost.tw/NewCourses/LineBot
LineBotSDK : https://www.nuget.org/packages/LineBotSDK
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

留言

Unknown寫道…
老師太棒了...
正在想要實作一個應用情境,是需要Buttons Templat的訊息
沒想到CIC已經可以實作了....
isDavid寫道…
@姜小志,

enjoy it~ :)
阿豪寫道…
這個功能真是不錯,最近也在利用line bot試著寫一個問卷系統,不過客戶要求是根據前一題的回答決定下一題的問題題目,可措沒辦法利用這個CIC來做。
isDavid寫道…
@阿豪,

其實也可以喔...
阿豪寫道…
那這樣是我沒試出來了,看來還是要再多試試功能才行
isDavid寫道…
@阿豪,

過陣子寫一篇給你...
阿豪寫道…
試了一陣子,結果還是沒弄出來 >.<
Unknown寫道…
老師 您好
最近看到您的Line Bot深感興趣,
目前對於使用者的回答來決定下一題的題目,
這項功能不曉得該怎麼實做出來呢?
carlshen寫道…
老師您好
請問ButtonsTemplateQuestion中,如果imageurl不要使用,該如何寫。我有試著留空值但不行,謝謝。
匿名表示…
想問一下
如果我請假流程有一個要上傳假單

class LeaveRequest

要怎樣做到丟圖

這個網誌中的熱門文章

使用LM Studio輕鬆在本地端以API呼叫大語言模型(LLM)

VS Code的字體大小

使用 Dify 建立企業請假機器人

使用Qdrant向量資料庫實作語意相似度比對

使用C#開發LineBot(3) - 使用LineBotSDK發送Line訊息