

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

# StartBotConversation
<a name="start-bot-conversation"></a>

`StartBotConversation` 動作會在最終使用者和 Amazon Lex v2 機器人之間建立語音對話。使用者提供所需的資訊給機器人。機器人接著會將資訊傳回至公有交換電話網路 (PSTN) Audio Lambda 函數，該函數會執行請求的任務。

例如，機器人可以在對話開始時播放選用的歡迎訊息，以簡短描述 PSTN 音訊 Lambda 函數可執行的任務。使用者和機器人之間的對話會來回進行，直到機器人收集必要的資訊為止。對話結束後，Amazon Chime SDK 會使用動作成功事件叫用您的 PSTN 音訊 Lambda 函數，其中包含機器人收集的資訊。您的 PSTN 音訊 Lambda 函數會處理資訊並執行請求的任務。

Audio Service 與您的使用者提供逼真的對話互動。例如，使用者可以中斷機器人並在音訊提示完成之前回答問題。更重要的是，使用者可以使用語音和 DTMF 數字的任意組合來提供資訊。機器人會等待使用者提供輸入再回應。您可以設定機器人在解譯任何語音輸入之前，等待使用者完成說話的時間。使用者也可以指示機器人在通話期間需要時間擷取其他資訊時等待，例如信用卡號碼。

`StartBotConversation` 動作會在機器人對話期間使用 Amazon Lex 和 Amazon Polly。適用標準 Amazon Lex 和 Amazon Polly 成本。如需定價詳細資訊，請參閱 [Amazon Lex 串流對話定價](https://aws.amazon.com/lex/pricing/)和 [Amazon Polly 定價](https://aws.amazon.com/polly/pricing/)頁面。

**注意**  
您無法在橋接通話或已參加 Amazon Chime SDK 會議的通話上執行此動作。

**重要**  
Amazon Lex 和 Amazon Polly 的使用受[AWS 服務條款 ](https://aws.amazon.com/service-terms/)的約束，包括 AWS Machine Learning和人工智慧服務的特定條款。

**Topics**
+ [StartBotConversation 語法](#startbot-syntax)
+ [使用 StartBotConversation動作](#using-startbot)
+ [處理ACTION\$1SUCCESSFUL事件](#bot-action-success)
+ [處理ACTION\$1FAILED事件](#bot-action-fail)
+ [授予使用機器人的許可](#bot-permissions)
+ [設定語音和 DTMF 逾時](#bot-timeouts)
+ [在對話期間使用 DTMF 輸入](#bot-dtmf)
+ [帳單和服務配額](#bot-billing)

## StartBotConversation 語法
<a name="startbot-syntax"></a>

下列範例顯示典型`StartBotConversation`語法。

```
{
  "SchemaVersion": "1.0",
  "Actions":[
    {
      "Type": "StartBotConversation",
      "Parameters": {
        "CallId": "string",
        "ParticipantTag": "string",
        "BotAliasArn": "string",
        "LocaleId": "string",
        "Configuration": {
          "SessionState": {
             "SessionAttributes": {
                "string": "string" 
             },
             "DialogAction" : {
               "Type": "string"
             }
          },
          "WelcomeMessages": [
            {
              "Content": "string",
              "ContentType": "string" 
            }
          ]
        }
      }
    }
  ]
}
```

**CallId**  
*描述* – AWS Lambda 函數調用 `CallID` 中參與者`CallDetails`的 。`StartBotConversation` 動作使用此 ID 做為機器人的 `SessionId`。在通話上進行的所有機器人對話都會共用相同的對話工作階段。您可以使用 [Amazon Lex API PutSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PutSession.html)修改使用者和機器人之間的工作階段狀態。如需詳細資訊，請參閱《[Amazon Lex 開發人員指南》中的使用 Amazon Lex v2 API 管理工作階段](https://docs.aws.amazon.com/lexv2/latest/dg/using-sessions.html)。 *Amazon Lex *  
*允許的值* – 有效的呼叫 ID。  
*必要* – 否，如果 `ParticipantTag` 存在。  
*預設值* – 無。

**ParticipantTag**  
*描述* – 中其中一個已連線參與者`ParticipantTag`的 `CallDetails`。  
*允許的值* – `LEG-A`。  
*必要* – 否，如果 `CallId` 存在。  
*預設值* – 調用 `ParticipantTag` 的 `callLeg`。如果您指定 ，則忽略`CallDetails`。

**BotAliasArn**  
*描述* – Lex 機器人的機器人別名 ARN。您必須在與 PSTN 音訊應用程式相同的 AWS 區域中建立機器人。有效的 Amazon Lex 機器人別名具有此格式：`arn:aws:lex:region:awsAccountId:bot-alias/botId/botAliasId`，其中 *`region`*是機器人所在的 AWS 區域。`awsAccountId` 是建立 Amazon Lex 機器人的 AWS 帳戶 ID。`botId` 值是建立機器人時指派給機器人的識別符。您可以在機器人詳細資訊頁面的 Amazon Lex 主控台中找到機器人 ID。 ****`botAliasId` 是建立機器人別名時指派給機器人別名的識別符。您可以在別名****頁面的 Amazon Lex 主控台中找到機器人別名 ID。  
*允許的值* – 有效的機器人 ARN。  
*必要* - 是。  
*預設值* –無。

**LocaleId**  
*描述* – 您用於機器人的地區設定識別符。如需地區設定和語言代碼的清單，請參閱 [Amazon Lex 支援的語言和地區設定](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html)。  
*允許的值* – [ Amazon Lex 支援的語言和地區設定。](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html)  
*必要* – 否。  
*預設值* – `en_US`。

**Configuration**  
*描述* – 對話組態，包括工作階段狀態和歡迎訊息。`Configuration` 物件的 JSON 字串表示法總大小限制為 10 KB。  
*允許的值* – `Configuration` 物件。  
*必要* – 否。  
*預設值* – 無。

**Configuration.SessionState**  
*描述* – 使用者使用 Amazon Lex v2 的工作階段狀態。  
*允許的值* – `SessionState` 物件。  
*必要* – 否。  
*預設值* – 無。

**Configuration.SessionState.SessionAttributes**  
*描述* – 代表工作階段特定內容資訊的鍵/值對映射。此映射包含 Amazon Lex v2 與用戶端應用程式之間傳遞的應用程式資訊。  
*允許的值* – 字串對字串映射。  
*必要* – 否。  
*預設值* – 無。

**Configuration.SessionState.DialogAction.Type**  
*描述* – 機器人在與使用者互動時採取的下一個動作。可能的值如下：  
+ *委派* Amazon Lex v2 決定下一個動作。
+ *ElicitIntent* 下一個動作會從使用者引發意圖。
*允許的值* – `Delegate` \$1 `ElicitIntent`。  
*必要* – 否。  
*預設值* – 無。

**Configuration.WelcomeMessages**  
*描述* – 在對話開始時傳送給使用者的訊息清單。如果您設定 `welcomeMessage` 欄位，則必須將 `DialogAction.Type`值設定為 `ElicitIntent`。  
*允許的值* – 訊息物件  
*必要* – 否。  
*預設值* – 無。

**Configuration.WelcomeMessages.Content**  
*描述* – 歡迎訊息文字。  
*允許的值* – 字串。  
*必要* – 否。  
*預設值* – 無。

**Configuration.WelcomeMessages.ContentType**  
*描述* – 指出歡迎訊息類型。  
*允許的值* –` PlainText` \$1 `SSML`  
+ *PlainText* – 訊息包含純 UTF-8 文字。
+ *SSML* – 訊息包含語音輸出的文字格式。
*必要* – 是。  
*預設值* – 無。

## 使用 StartBotConversation動作
<a name="using-startbot"></a>

下列範例顯示典型`StartBotConversation`的動作。

```
{
  "SchemaVersion": "1.0",
  "Actions":[
    {
      "Type": "StartBotConversation",
      "Parameters": {
        "CallId": "call-id-1",
        "BotAliasArn": "arn:aws:lex:us-east-1:123456789012:bot-alias/ABCDEFGHIH/MNOPQRSTUV",
        "LocaleId": "en_US",
        "Configuration": {
          "SessionState": {
             "SessionAttributes": {
                "mykey1": "myvalue1" 
             },
             "DialogAction" : {
               "Type": "ElicitIntent"
             }
          },
          "WelcomeMessages": [
            {
              "Content": "Welcome. How can I help you?",
              "ContentType": "PlainText" 
            }
          ]
        }
      }
    }
  ]
}
```

## 處理ACTION\$1SUCCESSFUL事件
<a name="bot-action-success"></a>

下列範例顯示 `StartBotConversation`動作的典型`ACTION_SUCCESSFUL`事件。

```
{
    "SchemaVersion": "1.0",
    "Sequence": number,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData":
    {
        "CallId": "string",
        "Type": "StartBotConversation",
        "Parameters": {
            // parameters provided in the StartBotConversation action.
        },
        "CallDetails": {
            // Information about the call associated with the AWS Lambda invocation.
        },
        "IntentResult": {
            "SessionId": "string",
            "SessionState": {
                "SessionAttributes": {
                    "string": "string"
                },
                "Intent": {
                    "Name": "string",
                    "Slots":  {
                        "string": {
                            "Value": {
                                "OriginalValue": "string",
                                "InterpretedValue": "string",
                                "ResolvedValues": ["string"]
                            },
                            "Values": []
                        }
                    },
                    "State": "string",
                    "ConfirmationState": "string"
                }
            },
            "Interpretations": [
                {
                    "NluConfidence": {
                        "Score": number
                    },
                    "Intent": {
                        "Name": "string",
                        "Slots": {
                            "string": {
                                "Value": {
                                    "OriginalValue": "string",
                                    "InterpretedValue": "string",
                                    "ResolvedValues": ["string"]
                                },
                                "Values": []
                            }
                        },
                        "State": "string",
                        "ConfirmationState": "string"
                    }
                }
            ]
        }
    }
}
```

**IntentResult**  
使用者與機器人之間的對話結果。

**SessionId**  
機器人對話工作階段的識別符。當使用者開始與您的機器人對話時，Amazon Lex 會建立工作階段。工作階段會封裝使用者與機器人之間交換的資訊。`StartBotConversation` 動作會使用呼叫 ID 做為機器人的 `SessionId`。您可以使用 Lex [https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_PutSession.html](https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_PutSession.html) API 修改使用者和機器人之間的工作階段狀態。如需詳細資訊，請參閱《[Amazon Lex 開發人員指南》中的使用 Amazon Lex V2 API 管理工作階段](https://docs.aws.amazon.com/lexv2/latest/dg/using-sessions.html)。 *Amazon Lex *

**SessionState**  
使用者 Amazon Lex v2 工作階段的狀態。

**SessionState.SessionAttributes**  
代表工作階段特定內容資訊的金鑰/值對映射。映射包含在連接至機器人的 Lambda 函數與 PSTN 音訊 Lambda 函數之間傳遞的機器人對話資訊。

**解譯**  
Amazon Lex 衍生的意圖清單，可滿足客戶的表達用語。`NluConfidence` 得分最高的意圖會成為 的意圖`SessionState`。

**Interpretations.NluConfidence.Score**  
指出 Amazon Lex v2 對意圖滿足使用者意圖的可信度的分數。範圍介於 0.00 到 1.00 之間。分數越高表示可信度越高。

**Intent**  
使用者想要執行的動作。

**Intent.Name**  
意圖的名稱。

**Intent.Slots**  
意圖的所有槽映射。槽的名稱會映射到槽的值。如果尚未填充插槽，則值為 null。

**Intent.Slots.Value**  
槽的值。

**Intent.Slots.Values**  
使用者為插槽提供的一或多個值清單。

**Intent.Slots.Value.OriginalValue**  
使用者回覆的文字，針對槽輸入。

**Intent.Slots.Value.InterpretedValue**  
*描述* – Amazon Lex v2 為插槽決定的值。實際值取決於機器人的值選擇策略設定。您可以選擇使用使用者輸入的值，也可以讓 Amazon Lex v2 選擇`resolvedValues`清單中的第一個值。

**Intent.Slots.Value.ResolvedValues**  
Amazon Lex v2 為插槽識別的其他值清單。

**Intent.State**  
*描述* – 意圖的履行資訊。可能的值如下：  
+ `Failed` – Lambda 函數無法滿足意圖。
+ `Fulfilled` – Lambda 函數實現了意圖。
+ `ReadyForFulfillment` – 意圖的資訊存在，您的 Lambdafunction 可以滿足意圖。

**Intent.ConfirmationState**  
*描述* – 表示意圖的確認。可能的值如下：  
+ *已確認* – 已滿足意圖。
+ *拒絕* – 使用者回應「否」確認提示。
+ *無* – 未提示使用者進行確認，或提示使用者但未確認或拒絕提示。

## 處理ACTION\$1FAILED事件
<a name="bot-action-fail"></a>

下列範例顯示 `StartBotConversation`動作的典型`ACTION_FAILED`事件。

```
{
    "SchemaVersion": "1.0",
    "Sequence": number,
    "InvocationEventType": "ACTION_FAILED",
    "ActionData":{
        "CallId": "string",
        "Type": "StartBotConversation",
        "Parameters": {
            // parameters provided in the StartBotConversation action
        },
        "ErrorType": "string",
        "ErrorMessage": "string"
    },
    "CallDetails":{
    }
}
```

**ErrorType**  
唯一識別錯誤條件的字串。

**ErrorMessage**  
錯誤條件的一般描述。

### 錯誤代碼
<a name="action-errors"></a>

下表列出 Lambda 函數可在`ACTION_FAILED`事件中傳回的錯誤訊息。


| 錯誤 | Description | 
| --- | --- | 
|  `InvalidActionParameter` | 一或多個動作參數無效。錯誤訊息說明無效的參數。 | 
| `SystemException` | 執行 動作時發生系統錯誤。 | 
| `ResourceNotFound` | 找不到指定的機器人。 | 
| `ResourceAccessDenied` | 對機器人的存取遭拒。 | 
| `ActionExecutionThrottled` | 超過機器人對話服務限制。錯誤訊息說明超過的特定服務限制。 | 

## 授予使用機器人的許可
<a name="bot-permissions"></a>

下列範例授予 Amazon Chime SDK 呼叫 Amazon Lex [https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_StartConversation.html](https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_StartConversation.html) APIs許可。您必須明確授予 Audio Service 許可才能使用您的機器人。服務主體需要 條件區塊。條件區塊必須使用全域內容索引鍵 `AWS:SourceAccount`和 `AWS:SourceArn`。`AWS:SourceAccount` 是您的 AWS 帳戶 ID。`AWS:SourceArn` 是叫用 Lex 機器人的 PSTN 音訊應用程式的資源 ARN。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowChimePstnAudioUseBot",
      "Effect": "Allow",
      "Principal": {
        "Service": "voiceconnector.chime.amazonaws.com"
      },
      "Action": "lex:StartConversation",
  "Resource": "arn:aws:lex:us-east-1:123456789012:bot-alias/botId/aliasId",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "123456789012"
        },
        "ArnEquals": {
        "AWS:SourceArn": "arn:aws:chime:us-east-1:123456789012:sma/smaId"
        }
      }
    }
  ]
}
```

------

## 設定語音和 DTMF 逾時
<a name="bot-timeouts"></a>

您可以在擷取使用者輸入時設定語音和 DTMF 逾時。您可以在與機器人開始對話時，透過工作階段屬性設定逾時，並視需要在 Lex 機器人的 Lambda 函數中覆寫逾時。Amazon Lex 可讓您為意圖或機器人設定多個插槽。因為您可以指定工作階段屬性套用至意圖和插槽層級，所以您可以指定只有在收集特定類型的輸入時才設定屬性。例如，您可以在收集帳戶號碼時指定比收集日期更長的逾時時間。您可以在工作階段屬性索引鍵中使用萬用字元。

例如，若要將所有意圖的所有插槽語音逾時設定為 4000 毫秒，您可以使用 提供工作階段屬性： `x-amz-lex:start-timeout-ms:*:*`作為工作階段屬性名稱， `4000`作為工作階段屬性值。如需詳細資訊，請參閱《*Amazon Lex 開發人員指南*》中的[設定擷取使用者輸入的逾時](https://docs.aws.amazon.com/lexv2/latest/dg/session-attribs-speech.htm)。

## 在對話期間使用 DTMF 輸入
<a name="bot-dtmf"></a>

Amazon Lex 機器人在對話期間支援語音和鍵盤輸入。機器人會將鍵盤輸入解譯為 DTMF 數字。您可以提示聯絡人以井字號 (\$1) 結束輸入，並使用星號鍵 (\$1) 取消對話。如果您未提示客戶以井字號結束輸入，則 Lex 會在 5 秒後停止等待額外的按鍵。

## 帳單和服務配額
<a name="bot-billing"></a>

AWS 會向您收取下列費用：
+ 呼叫的 Amazon Chime SDK 用量。如需詳細資訊，請參閱 [Amazon Chime SDK 定價](https://aws.amazon.com/chime/chime-sdk/pricing/)。
+ 用於解譯使用者語音的 Amazon Lex 用量。如需詳細資訊，請參閱 [Amazon Lex 串流對話定價](https://aws.amazon.com/lex/pricing/)。
+ 從機器人合成文字回應的 Amazon Polly 用量。如需詳細資訊，請參閱 [ Amazon Polly 定價](https://aws.amazon.com/polly/pricing/)。

您也需要注意下列服務配額：
+ Amazon Chime SDK 具有可搭配 PSTN 音訊[StartBotConversation](#start-bot-conversation)動作使用的 Amazon Lex 機器人數量上限的服務配額。如需詳細資訊，請參閱《 *AWS 一般參考*》中的 [SIP 中繼和語音配額](https://docs.aws.amazon.com/general/latest/gr/chime-sdk.html#chm-sdk-pstn-quotas)。
+ Amazon Lex 對於每個 Lex 機器人的並行語音對話數量上限具有服務配額。您可以聯絡 Amazon Lex 服務團隊以增加配額。如需詳細資訊，請參閱《Amazon Lex *開發人員指南》中的 Amazon Lex *[指導方針和配額](https://docs.aws.amazon.com/lexv2/latest/dg/quotas.html)。
+ Amazon Polly 具有用於合成文字回應的服務配額。您可以聯絡 Amazon Polly 服務團隊以增加配額。如需 Amazon Polly 服務配額的詳細資訊，請參閱《[Amazon Polly 開發人員指南》中的 Amazon Polly 中的配額](https://docs.aws.amazon.com/polly/latest/dg/limits.html)。 *Amazon Polly *