Chat bot
KITT.AI
ChatFlow
ChatFlow對話生命周期控制及變數使用
2018/10/17 23:00:15
1
1362
ChatFlow對話生命周期控制及變數使用
簡介 |
用ChatFlow開發聊天機器人時,必需要知道ChatFlow的對話生命周期,以及使用變數,便可以幫助記得對話中的資訊,以達成控制並維持有意義的對話。 |
作者 |
葉文華 |
1、前言
從開始跟聊天機器人說話到結束,可定義成進行了一輪對話的完整生命周期,在ChatFlow中即為一個session的對話。在一個session中通常會有多次的問答來回,而由使用者發出的訊息到聊天機器人的回覆可視為一次transaction。在多次的transaction過程中,可利用ChatFlow收集使用者資訊,並回覆且達成使用者對話的目的,即完成一輪有意義的對話。
2、開始前準備
- Google Chrome
- ChatFlow開發帳號
3、ChatFlow中session的控制
3.1、一輸對話session的有效性,有以下兩種方式可以控制:
- router 節點設置Timeout
- state 節點勾選Dialogue ends here
3.2、如下圖中設置了router中的Timeout,預設值是1800秒,當該輪對話session閒置超過設定時間後即對話session結束。

3.3、如下圖state中勾選Dialogue ends here。

- 勾選了Dialogue ends here後的state將會提示如下圖呈現。

4、ChatFlow中變數的使用
4.1、ChatFlow中常用的變數,以使用時機區分來看,有以下4個用法:
- 一個transaction內有效:在input時存在的參數msg,除了msg.kitt或msg.payload(輸入訊息及其他http response...輸入、輸出)等保留用變數外,皆可自行定義msg.變數名稱使用。
- 一個session內有效:msg.kitt.變數名稱(在訊息進入router處理開始生效)。
- 一個ChatFlow app內有效:App variables節點設定變數,並以msg._config.變數名稱方式使用。
- 全域有效:以global.set(變數名稱,變數值)、global.get(變數名稱)方式使用,由於會建立後持續存在,任何情況下都可以存取到,必須慎用避免不斷擴充膨脹影響系統效能。
4.2、一個transaction內有效的變數,可以在function、state節點如下圖方式設定:

4.3、一個session內有效的變數,必須在訊息進入router後開始使用
,一樣可以在function、state節點內
如下圖方式設定:

4.4、一個ChatFlow app內有效的變數,必須在專屬的App variables節點內設定:

- App variables節點設定的變數,將以msg._config.變數名稱方式使用:

4.5、全域有效的變數,
可以在function、state節點如下圖方式設定:

5、設計一個測試用ChatFlow對話流程
設計以下流程(針對調整節點說明由左往右、由上到下):
- 流程設計圖

- 設定App variables變數

- 設定router中Timeout為30秒

- 在initial state後初始化各變數

- 設定對話中enter節點規則

- 在對話中取得各變數值

- 設定Session結束enter節點規則

- 對話結束後取得各變數值

6、測試對話流程及說明
6.1、以下連續經4次問答來回:
- localCode在第1次問答initial state初始化時可取得,第2次問答後即無法取得
- kittCode在4次問答中皆可取得並累加
- appCode皆可取得
- globalCode皆可取得

6.2、以下2次連續問答,並超過30秒後接續問答:
- 2次問答連續,該輪session對話是連貫的
- 第3次問答與前次已過Timeout設定30秒,已經變成了另一輪session對話的開始
