[Bot Framework V4][10]在Dialog裡面做Branching以及Looping把不同功能更加模組化
![[Bot Framework V4][10]在Dialog裡面做Branching以及Looping把不同目的更加模組化.jpg](/posts/2018/11/2018-11-13-bot-framework-v4-10-use-branching-and-looping-in-dialogset-to-modularise-logic/63169a8f-2f10-48f8-83e2-e42d57488a1b.jpg)
在上一篇([09]使用waterfall建立表單式填寫)介紹了使用watfall的方式達到建立一個表單式搜集的chatbot。
裡面爲了簡化把取得姓名的部分暫時拿掉了,但是在實務上不同邏輯的dialog可能會存在,那怎麽辦呢?
這篇將介紹透過Dialog來做Branching以及Looping。
![[Bot Framework V4][10]在Dialog裡面做Branching以及Looping把不同目的更加模組化.jpg](/posts/2018/11/2018-11-13-bot-framework-v4-10-use-branching-and-looping-in-dialogset-to-modularise-logic/63169a8f-2f10-48f8-83e2-e42d57488a1b.jpg)
在上一篇([09]使用waterfall建立表單式填寫)介紹了使用watfall的方式達到建立一個表單式搜集的chatbot。
裡面爲了簡化把取得姓名的部分暫時拿掉了,但是在實務上不同邏輯的dialog可能會存在,那怎麽辦呢?
這篇將介紹透過Dialog來做Branching以及Looping。
![[Bot Framework V4][09]使用waterfall建立表單式填寫.jpg](/posts/2018/10/2018-10-25-bot-framework-v4-9-use-waterfall-dialog-to-gather-form-like-information/f07016ea-406f-404f-b47e-9006a05a7db9.jpg)
在上一篇([08]改用TextPrompt詢問使用者姓名)使用TextPrompt來取得使用者的姓名,感覺起來好像和自己維護狀態沒什麽兩樣,因爲還是需要透過if else來呼叫。
這樣Dialogs還有意義嗎?
這篇將會介紹另外一種使用情景,有時候需要搜集使用者的資料,例如説他要訂房的話會需要搜集他要訂什麽時間,住幾個晚上等等,這個時候Dialog就變得更加方便。
這篇將介紹如何透過waterfall來達到這個效果。
FormFlow,waterfall dialog做出來有點類似一樣的概念,有興趣可以看看:[07]使用FormFlow讓Chatbot搜集表單資訊更容易![[Bot Framework V4][08]改用TextPrompt詢問使用者姓名.jpg](/posts/2018/10/2018-10-24-bot-framework-v4-8-use-textprompt-to-ask-user-name/a8745d79-3d4d-4dfc-a079-33c327f0ab43.jpg)
在上一篇([07]Dialog - 控制流程的元件介紹)介紹了Dialog的原件之後,接下來就是要實際使用看看是什麽感覺。
這篇先用最基本的TextPrompt,看看如何簡化詢問姓名的邏輯。
![[Bot Framework V4][07]Dialog - 控制流程的元件介紹.jpg](/posts/2018/10/2018-10-23-bot-framework-v4-7-intro-to-dialog-used-for-conversation-flow/42bf72a1-f5c7-4c6e-9d12-26eff95cf5e5.jpg)
在上一篇([06]使用BotState儲存使用者的相關信息)透過ConversationState記錄狀態的方式,來控制整個對話流程,然後透過把使用者信息儲存在UserState達到可以記錄每個使用者的個人信息。
開發當然可以透過這個方式繼續做下去,但是一個問題就冒出來,簡單的流程用這種方式當然沒問題,但是當流程很複雜怎麽辦?是不是變成需要自己建立一個機制能夠知道目前在整個流程的那個部分?
這個問題肯定Framework有考量到,那這個機制是什麽?作爲開發者怎麽使用呢?
這篇將介紹V4裡面的機制,Dialog。
![[Bot Framework V4][06]使用BotState儲存使用者的相關信息.jpg](/posts/2018/10/2018-10-22-bot-framework-v4-6-use-userbot-in-code-for-storing-user-info/ceebd578-d0fd-4910-830c-b51bad990e04.jpg)
上一篇([05]搞懂Bot的State Management - 怎麽儲存信息)看完了一堆理論了之後,相信對於整個V4的BotState有個比較清楚的概念 - 爲什麽要用Accessor,整體的串接以及需要哪些原件。
這一篇將在加深這個部分的印象,如果Bot能夠記得使用者的姓名將會給一個不同的使用者體驗。
看看怎麽在UserState裡面儲存内容。
![[Bot Framework V4][05]搞懂Bot的State Management - 怎麽儲存信息.jpg](/posts/2018/10/2018-10-21-bot-framework-v4-5-how-to-manage-state/7346d0a4-5460-46d7-b7f0-4c9ba33fb260.jpg)
在上一篇([04]瞭解EchoBot的程式碼結構)看了整個EchoBot的骨架之後,相信對於整個Chatbot的撰寫有了一些基本的概念了。
接下來要做的就是進入細部看細節。看看每一個環節實際怎麽撰寫。
先從State開始,如果説Bot沒辦法記得使用者的習慣以及設定,那麽整個使用體驗會很差。舉例來説,如果沒有state,那麽每一次都要問使用者的姓名,就太笨了。
這篇來看看V4裡面的Bot State Management。
![[Bot Framework V4][04]瞭解EchoBot的程式碼結構.jpg](/posts/2018/10/2018-10-20-bot-framework-v4-4-see-how-echobot-is-constructed/aa57b3ef-71d0-43fb-9e3c-8543fbd0b543.jpg)
在上一篇([03]搞懂關鍵字以及信息的處理流程)瞭解了整個V4版本的關鍵字以及信息是怎麽流動。
這篇來看看實際code的結構 - 使用之前建立出來的EchoBot,看一下整體的結構。
![[Bot Framework V4][03]搞懂關鍵字以及信息的處理流程.jpg](/posts/2018/10/2018-10-19-bot-framework-v4-3-know-keywords-and-how-activity-is-processed/9fb16360-7db6-4d7f-9549-3a8f29dff024.jpg)
在上一篇([02]建立第一個V4 Chatbot - EchoBot)看了如何建立出一個Hello World等級的Chatbot:EchoBot并且使用了Bot Emulator對他做了測試,看起來也沒什麽問題。
那麽下一個問題就來了,Bot Framework到底是怎麽組成的?整個信息的流是怎麽動起來?
這篇將來介紹Bot Framework裡面用到的一些關鍵字,以及整個是如何搭起來,未來不管是在看文件還是深入研究才不會搞得糊里糊塗。
![[Bot Framework V4][02]建立第一個V4 Chatbot - EchoBot.jpg](/posts/2018/10/2018-10-18-bot-framework-v4-2-create-your-first-v4-chatbot-echobot/bb5271b7-6456-405c-8a0c-d55a506f073a.jpg)
上一篇([01]開篇)快速的介紹了這個系列的目的以及内容。
這篇就來實際看一下建立一個V4的Hello World Bot,EchoBot,看看如何建立并且怎麽透過Emulator做測試。
![[Bot Framework V4][01]開篇.jpg](/posts/2018/10/2018-10-17-bot-framework-v4-1-introduction/5b1b59dc-2b26-479e-beb1-8d6c7c8e9a51.jpg)
還記得沒多久之前介紹的另外一個系列(「chatbot + AI = 下一代操作模式」),那個時候介紹了新一代的操作模式俗稱的Chatbot,以及看Chatbot結合Cognitive Service這種AI API所帶來的另外一種使用者體驗。
那時候因爲V4還在Preview,所以介紹了使用Bot Framework V3(準確一點說是Bot Builder SDK V3)。
而V4在9月底的時候正式發佈GA了(進入Stable),因此有了這個系列的開始,來看看V4改變了什麽。