本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
啟動對 Amazon Lex V2 機器人的對話串流
您可以使用 StartConversation 操作,在您的應用程式中啟動使用者與 Amazon Lex V2 機器人之間的串流。來自應用程式的POST
請求會在您的應用程式與 Amazon Lex V2 機器人之間建立連線。這可讓您的應用程式和機器人開始透過事件互相交換資訊。
只有下列 SDKs 支援StartConversation
此操作:
您的應用程式必須傳送至 Amazon Lex V2 機器人的第一個事件是 ConfigurationEvent。此事件包含回應類型格式等資訊。以下是您可以在組態事件中使用的參數:
-
responseContentType – 決定機器人是否使用文字或語音回應使用者輸入。
-
sessionState – 與機器人串流工作階段相關的資訊,例如預先定義的意圖或對話方塊狀態。
-
welcomeMessages – 指定使用者在與機器人對話開始時播放的歡迎訊息。這些訊息會在使用者提供任何輸入之前播放。若要啟用歡迎訊息,您還必須為
sessionState
和dialogAction
參數指定值。 -
disablePlayback – 決定機器人是否應該等待用戶端的提示,然後再開始接聽來電者輸入。根據預設,會啟用播放,因此此欄位的值為
false
。 -
requestAttributes – 提供請求的其他資訊。
如需有關如何指定上述參數值的資訊,請參閱 StartConversation 操作的 ConfigurationEvent 資料類型。
機器人和應用程式之間的每個串流只能有一個組態事件。在您的應用程式傳送組態事件之後,機器人可以從您的應用程式進行額外的通訊。
如果您已指定使用者使用音訊與 Amazon Lex V2 機器人通訊,您的應用程式可以在該對話期間將下列事件傳送至機器人:
-
AudioInputEvent – 包含大小上限為 320 個位元組的音訊區塊。您的應用程式必須使用多個音訊輸入事件,將訊息從伺服器傳送至機器人。串流中的每個音訊輸入事件都必須具有相同的音訊格式。
-
DTMFInputEvent – 將 DTMF 輸入傳送至機器人。每個 DTMF 按鍵對應至單一事件。
-
PlaybackCompletionEvent – 通知伺服器已將來自使用者輸入的回應播放給他們。如果您要傳送音訊回應給使用者,則必須使用播放完成事件。如果您的
disablePlayback
組態事件是true
,則無法使用此功能。 -
DisconnectionEvent – 通知機器人使用者已中斷與對話的連線。
如果您已指定使用者使用文字與機器人通訊,您的應用程式可以在該對話期間將下列事件傳送至機器人:
-
TextInputEvent – 從您的應用程式傳送至機器人的文字。文字輸入事件中最多可有 512 個字元。
-
PlaybackCompletionEvent – 通知伺服器使用者輸入的回應已播放給他們。如果您要將音訊播放回使用者,則必須使用此事件。如果您的
disablePlayback
組態事件是true
,則無法使用此功能。 -
DisconnectionEvent – 通知機器人使用者已中斷與對話的連線。
您必須以正確的格式編碼您傳送給 Amazon Lex V2 機器人的每個事件。如需詳細資訊,請參閱事件串流編碼。
每個事件都有一個事件 ID。為了協助疑難排解串流中可能發生的任何問題,請為每個輸入事件指派唯一的事件 ID。然後,您可以使用機器人對任何處理失敗進行故障診斷。
Amazon Lex V2 也會針對每個事件使用時間戳記。除了事件 ID 之外,您還可以使用這些時間戳記來協助疑難排解任何網路傳輸問題。
在使用者與 Amazon Lex V2 機器人之間的對話期間,機器人可以傳送下列傳出事件以回應使用者:
-
IntentResultEvent – 包含 Amazon Lex V2 從使用者表達式中決定的意圖。每個內部結果事件包括:
-
inputMode – 使用者表達用語的類型。有效值為
Speech
、DTMF
或Text
。 -
解譯 – Amazon Lex V2 從使用者表達式決定的解譯。
-
requestAttributes – 如果您尚未使用 lambda 函數修改請求屬性,這些屬性與對話開始時傳遞的屬性相同。
-
sessionId – 用於對話的工作階段識別符。
-
sessionState – 使用者使用 Amazon Lex V2 的工作階段狀態。
-
-
TranscriptEvent – 如果使用者提供應用程式輸入,則此事件會包含使用者對機器人表達用語的文字記錄。
TranscriptEvent
如果沒有使用者輸入,您的應用程式不會收到 。傳送至應用程式的轉錄事件值取決於您是否已將音訊 (語音和 DMTF) 或文字指定為對話模式:
-
語音輸入的轉錄 – 如果使用者正在與機器人說話,則轉錄事件是使用者音訊的轉錄。這是從使用者開始說話到他們結束說話時間的所有語音文字記錄。
-
DTMF 輸入的文字記錄 – 如果使用者在鍵盤上輸入,文字記錄事件會包含使用者在輸入中按下的所有數字。
-
文字輸入的文字轉錄 – 如果使用者提供文字輸入,文字記錄事件會包含使用者輸入中的所有文字。
-
-
TextResponseEvent – 包含文字格式的機器人回應。預設會傳回文字回應。如果您已設定 Amazon Lex V2 傳回音訊回應,則此文字會用來產生音訊回應。每個文字回應事件都包含一組訊息物件,機器人會傳回給使用者。
-
AudioResponseEvent – 包含從 中產生的文字合成的音訊回應
TextResponseEvent
。若要接收音訊回應事件,您必須設定 Amazon Lex V2 以提供音訊回應。所有音訊回應事件都具有相同的音訊格式。每個事件都包含不超過 100 個位元組的音訊區塊。Amazon Lex V2 會傳送空的音訊區塊,並將bytes
欄位設定為null
,以指出音訊回應事件的結尾會傳送到您的應用程式。 -
PlaybackInterruptionEvent – 當使用者中斷機器人傳送至應用程式的回應時,Amazon Lex V2 會觸發此事件以停止播放回應。
-
HeartbeatEvent – Amazon Lex V2 會定期傳送此事件,以防止應用程式與機器人之間的連線逾時。
使用 Amazon Lex V2 機器人時音訊對話的事件時間序列
下圖顯示使用者與 Amazon Lex V2 機器人之間的串流音訊對話。應用程式會持續將音訊串流至機器人,機器人會從音訊尋找使用者輸入。在此範例中,使用者和機器人都使用語音進行通訊。每個圖表對應使用者表達式,以及機器人對該表達式的回應。
下圖顯示應用程式與機器人之間的對話開始。串流從零 (t0) 開始。

下列清單說明上圖的事件。
-
t0:應用程式會將組態事件傳送至機器人以啟動串流。
-
t1:應用程式串流音訊資料。此資料會從應用程式分成一系列的輸入事件。
-
t2:對於使用者用語 1,機器人會在使用者開始說話時偵測到音訊輸入事件。
-
t2:當使用者正在說話時,機器人會傳送活動訊號事件來維持連線。它會間歇性傳送這些事件,以確保連線不會逾時。
-
t3:機器人會偵測使用者表達用語的結尾。
-
t4:機器人將傳回文字記錄事件,其中包含使用者語音的文字記錄,傳送至應用程式。這是機器人對使用者表達式 1 的回應開始。
-
t5:機器人會傳送意圖結果事件,以指出使用者想要執行的動作。
-
t6:機器人開始在文字回應事件中提供其回應做為文字。
-
t7:機器人會傳送一系列音訊回應事件到應用程式,以供使用者播放。
-
t8:機器人會傳送另一個活動訊號事件來間歇性維護連線。
下圖是上一個圖表的延續。它顯示應用程式傳送播放完成事件至機器人,以指出其已停止播放使用者的音訊回應。應用程式會播放使用者對使用者表達用語 1 的機器人回應。使用者使用使用者用語 2 回應機器人對使用者用語 1 的回應。

下列清單說明上圖的事件:
-
t10:應用程式會傳送播放完成事件,指出已完成播放機器人的訊息給使用者。
-
t11:應用程式會將使用者回應傳回給機器人,做為使用者表達式 2。
-
t12:對於對使用者用語 2 的機器人回應,機器人會等待使用者停止說話,然後開始提供音訊回應。
-
t13:當機器人將機器人回應傳送至使用者用語 2 至應用程式時,機器人會偵測使用者用語 3 的開始。機器人會停止對使用者表達式 2 的機器人回應,並傳送播放中斷事件。
-
t14:機器人會傳送播放中斷事件至應用程式,以表示使用者已中斷提示。
下圖顯示機器人對使用者表達詞 3 的回應,以及在機器人回應使用者表達詞後對話繼續。
