

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 啟動對 Amazon Lex V2 機器人的對話串流
<a name="start-stream-conversation"></a>

您可以使用 [StartConversation](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_StartConversation.html) 操作，在您的應用程式中啟動使用者與 Amazon Lex V2 機器人之間的串流。來自應用程式的`POST`請求會在您的應用程式與 Amazon Lex V2 機器人之間建立連線。這可讓您的應用程式和機器人開始透過事件互相交換資訊。

**注意**  
使用 StartConversation 時，如果表達用語音訊持續時間超過 的設定值`max-length-ms`，Amazon Lex V2 會在指定的持續時間中斷音訊。

只有下列 SDKs 支援`StartConversation`此操作：
+ [適用於 C\+\+ 的 AWS SDK](https://docs.aws.amazon.com/goto/SdkForCpp/runtime.lex.v2-2020-08-07/StartConversation)
+ [適用於 Java 的 AWS SDK 第 2 版](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/lexruntimev2/LexRuntimeV2AsyncClient.html)
+ [適用於 JavaScript v3 的 AWS 開發套件](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-lex-runtime-v2/index.html#aws-sdkclient-lex-runtime-v2)
+ [適用於 Ruby V3 的 AWS 開發套件](https://docs.aws.amazon.com/goto/SdkForRubyV3/runtime.lex.v2-2020-08-07/StartConversation)

您的應用程式必須傳送至 Amazon Lex V2 機器人的第一個事件是 [ConfigurationEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_ConfigurationEvent.html)。此事件包含回應類型格式等資訊。以下是您可以在組態事件中使用的參數：
+ **responseContentType** – 決定機器人是否使用文字或語音回應使用者輸入。
+ **sessionState** – 與機器人的串流工作階段相關的資訊，例如預先決定的意圖或對話方塊狀態。
+ **welcomeMessages** – 指定使用者在與機器人對話開始時播放的歡迎訊息。這些訊息會在使用者提供任何輸入之前播放。若要啟用歡迎訊息，您還必須為 `sessionState`和 `dialogAction` 參數指定值。
+ **disablePlayback** – 決定機器人是否應該等待用戶端的提示，然後再開始接聽來電者輸入。根據預設，會啟用播放，因此此欄位的值為 `false`。
+ **requestAttributes** – 提供請求的其他資訊。

如需有關如何為上述參數指定值的資訊，請參閱 [StartConversation](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_StartConversation.html) 操作的 [ConfigurationEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_ConfigurationEvent.html) 資料類型。

機器人和應用程式之間的每個串流只能有一個組態事件。在您的應用程式傳送組態事件後，機器人可以從您的應用程式進行額外的通訊。

如果您已指定使用者使用音訊與 Amazon Lex V2 機器人通訊，您的應用程式可以在該對話期間將下列事件傳送至機器人：
+ [AudioInputEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_AudioInputEvent.html) – 包含大小上限為 320 個位元組的音訊區塊。您的應用程式必須使用多個音訊輸入事件，將訊息從伺服器傳送至機器人。串流中的每個音訊輸入事件都必須具有相同的音訊格式。
+ [DTMFInputEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_DTMFInputEvent.html) – 將 DTMF 輸入傳送至機器人。每個 DTMF 按鍵對應至單一事件。
+ [PlaybackCompletionEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PlaybackCompletionEvent.html) – 通知伺服器使用者輸入的回應已播放給他們。如果您要傳送音訊回應給使用者，則必須使用播放完成事件。如果您的`disablePlayback`組態事件是 `true`，則無法使用此功能。
+ [DisconnectionEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_DTMFInputEvent.html) – 通知機器人使用者已中斷與對話的連線。

如果您已指定使用者使用文字與機器人通訊，您的應用程式可以在該對話期間將下列事件傳送至機器人：
+ [TextInputEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_TextInputEvent.html) – 從您的應用程式傳送至機器人的文字。文字輸入事件中最多可有 512 個字元。
+ [PlaybackCompletionEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PlaybackCompletionEvent.html) – 通知伺服器使用者輸入的回應已播放給他們。如果您要將音訊播放回使用者，則必須使用此事件。如果您的`disablePlayback`組態事件是 `true`，則無法使用此功能。
+ [DisconnectionEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_DTMFInputEvent.html) – 通知機器人使用者已中斷與對話的連線。

您必須以正確的格式對傳送至 Amazon Lex V2 機器人的每個事件進行編碼。如需詳細資訊，請參閱[事件串流編碼](event-stream-encoding.md)。

每個事件都有事件 ID。為了協助疑難排解串流中可能發生的任何問題，請為每個輸入事件指派唯一的事件 ID。然後，您可以使用機器人對任何處理失敗進行疑難排解。

Amazon Lex V2 也會針對每個事件使用時間戳記。除了事件 ID 之外，您還可以使用這些時間戳記來協助疑難排解任何網路傳輸問題。

在使用者與 Amazon Lex V2 機器人之間的對話期間，機器人可以傳送下列傳出事件以回應使用者：
+ [IntentResultEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_IntentResultEvent.html) – 包含 Amazon Lex V2 從使用者表達用語中確定的意圖。每個內部結果事件包括：
  + **inputMode** – 使用者表達用語的類型。有效值為 `Speech`、`DTMF` 或 `Text`。
  + **解**譯 – Amazon Lex V2 從使用者表達用語中決定的解譯。
  + **requestAttributes** – 如果您尚未使用 lambda 函數修改請求屬性，這些屬性與對話開始時傳遞的屬性相同。
  + **sessionId** – 用於對話的工作階段識別符。
  + **sessionState** – 使用者使用 Amazon Lex V2 的工作階段狀態。
+ [TranscriptEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_TranscriptEvent.html) – 如果使用者為您的應用程式提供輸入，則此事件包含使用者對機器人表達用語的文字記錄。`TranscriptEvent` 如果沒有使用者輸入，您的應用程式不會收到 。

  傳送至應用程式的轉錄事件值取決於您是否已指定音訊 （語音和 DMTF) 或文字做為對話模式：
  + 語音輸入的文字記錄 – 如果使用者正在與機器人說話，文字記錄事件就是使用者音訊的文字記錄。這是從使用者開始說話到他們結束說話時所有語音的文字記錄。
  + DTMF 輸入的文字記錄 – 如果使用者在鍵盤上輸入，文字記錄事件會包含使用者在輸入中按的所有數字。
  + 文字輸入的文字記錄 – 如果使用者提供文字輸入，文字記錄事件會包含使用者輸入中的所有文字。
+ [TextResponseEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_TextResponseEvent.html) – 包含文字格式的機器人回應。預設會傳回文字回應。如果您已設定 Amazon Lex V2 傳回音訊回應，則此文字會用來產生音訊回應。每個文字回應事件都包含機器人傳回給使用者的一系列訊息物件。
+ [AudioResponseEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_AudioResponseEvent.html) – 包含從 中產生的文字合成的音訊回應`TextResponseEvent`。若要接收音訊回應事件，您必須設定 Amazon Lex V2 以提供音訊回應。所有音訊回應事件都具有相同的音訊格式。每個事件都包含不超過 100 個位元組的音訊區塊。Amazon Lex V2 會傳送空的音訊區塊，並將 `bytes` 欄位設定為 `null`，以表示音訊回應事件結束到您的應用程式。
+ [PlaybackInterruptionEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PlaybackInterruptionEvent.html) – 當使用者中斷機器人傳送至應用程式的回應時，Amazon Lex V2 會觸發此事件以停止播放回應。
+ [HeartbeatEvent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_HeartbeatEvent.html) – Amazon Lex V2 會定期傳送此事件，以防止應用程式與機器人之間的連線逾時。

## 使用 Amazon Lex V2 機器人時音訊對話的事件時間序列
<a name="audio-conversation-sequence"></a>

下圖顯示使用者與 Amazon Lex V2 機器人之間的串流音訊對話。應用程式會持續將音訊串流至機器人，而機器人會從音訊尋找使用者輸入。在此範例中，使用者和機器人都使用語音進行通訊。每個圖表對應於使用者表達用語，以及機器人對該表達用語的回應。

下圖顯示應用程式與機器人之間的對話開始。串流從時間零 (t0) 開始。

![時間軸顯示使用者觸發機器人回應事件的音訊輸入事件，例如活動訊號和文字記錄。](http://docs.aws.amazon.com/zh_tw/lexv2/latest/dg/images/Streaming-Page-1.png)


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

下圖是上一個圖表的接續。它會顯示應用程式傳送播放完成事件至機器人，以指出其已停止播放使用者的音訊回應。應用程式會播放*對使用者表達用語 1 的機器人回應*。使用者使用*使用者表達用語 2 回應對使用者表達用語 1 的機器人回應*。 **

![顯示機器人和應用程式事件的時間軸，包括音訊輸入、播放完成和回應。](http://docs.aws.amazon.com/zh_tw/lexv2/latest/dg/images/Streaming-Page-2.png)


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

下圖顯示*機器人對使用者表達用語 3 的回應*，以及在機器人回應使用者表達用語之後繼續對話。

![機器人回應序列顯示音訊回應、文字回應、意圖結果、文字記錄、活動訊號和播放中斷事件。](http://docs.aws.amazon.com/zh_tw/lexv2/latest/dg/images/Streaming-Page-3.png)
