

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Lex V2 ボットの AWS Lambda関数の作成
<a name="lambda-attach"></a>

Amazon Lex V2 ボットの Lambda 関数を作成するには、AWS マネジメントコンソールAWS Lambdaから にアクセスし、新しい関数を作成します。詳細については、 デ[AWS Lambdaベロッパーガイド](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)を参照してくださいAWS Lambda。

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) でAWS Lambdaコンソールを開きます。

1. 左側のサイドバーで **[関数]** を選択します。

1. **[Create Function]** (関数を作成) を選択します。

1. **[一から作成]** を選択して最小限のコードから始めるか、**[ブループリントの使用]** を選択してリストから一般的なユースケースのサンプルコードを選択するか、**[コンテナイメージ]** を選択して関数にデプロイするコンテナイメージを選択できます。**[一から選択]** を選択した場合は、次の手順に進んでください。

   1. 関数には、その機能を説明するわかりやすい**関数名**を付けてください。

   1. **[ランタイム]** の下のドロップダウンメニューから、関数を記述する言語を選択します。

   1. 関数の命令セット **[アーキテクチャ]** を選択します。

   1. デフォルトでは、Lambda は基本的なアクセス許可でロールを作成します。既存のロールを使用するか、AWS ポリシーテンプレートを使用してロールを作成するには、**デフォルトの実行ロールの変更**メニューを展開し、オプションを選択します。

   1. **[詳細設定]** メニューを展開して、その他のオプションを設定します。

1. **[Create Function]** (関数を作成) を選択します。

次の図は、新しい関数を最初から作成したときに表示される内容を示しています。

![\[新しい Lambda 関数。\]](http://docs.aws.amazon.com/ja_jp/lexv2/latest/dg/images/lambda/lambda-new-function.png)


Lambda ハンドラー関数は、使用する言語によって異なります。少なくとも因数として `event` JSON オブジェクトを取ります。フィールドは、Amazon Lex V2 が [AWS LambdaLex V2 の入力イベント形式](lambda-input-format.md) で提供する `event` にあります。「[AWS LambdaLex V2 のレスポンス形式](lambda-response-format.md)」で説明されている形式と一致する `response` JSON オブジェクトが最終的に返されるように、ハンドラー関数を変更します。
+ 関数を記述し終えたら、**[デプロイ]** を選択して関数を使用できるようにします。

各ボットエイリアスは、最大で 1 つの Lambda 関数に関連付けられることに注意してください。ただし、Lambda コード内でボットに必要な数だけ関数を定義し、これらの関数を Lambda ハンドラー関数で呼び出すことができます。たとえば、同じボットエイリアスのすべてのインテントは同じ Lambda 関数を呼び出す必要がありますが、インテントごとに個別の関数を有効にするルーター関数を作成できます。次に、アプリケーションで使用または変更できるサンプルルーター関数を示します。

```
import os
import json
import boto3

# reuse client connection as global
client = boto3.client('lambda')

def router(event):
    intent_name = event['sessionState']['intent']['name']
    fn_name = os.environ.get(intent_name)
    print(f"Intent: {intent_name} -> Lambda: {fn_name}")
    if (fn_name):
        # invoke lambda and return result
        invoke_response = client.invoke(FunctionName=fn_name, Payload = json.dumps(event))
        print(invoke_response)
        payload = json.load(invoke_response['Payload'])
        return payload
    raise Exception('No environment variable for intent: ' + intent_name)

def lambda_handler(event, context):
    print(event)
    response = router(event)
    return response
```

**Amazon Lex V2 ボット会話でAWS Lambda関数を使用するタイミング**

Lambda 関数はユーザーとの会話の次の時点で使用できます。
+ インテントが認識された後の最初の応答。たとえば、ユーザーがピザを注文したいと言った後です。
+ ユーザーからスロット値を誘発した後。たとえば、ユーザーが注文したいピザのサイズをボットに伝えた後などです。
+ スロットを誘発するための各再試行の間。たとえば、認識しているサイズのピザを顧客が使用していない場合などです。
+ インテントを確認する時点。たとえば、ピザの注文を確認する場合などです。
+ インテントを達成するため。たとえば、ピザを注文する場合などです。
+ インテントの達成後、ボットが会話を終了する前。たとえば、飲み物を注文するインテントに切り替える場合などです。

**Topics**
+ [コンソールを使用して Amazon Lex V2 ボットに AWS Lambda関数をアタッチする](lambda-attach-console.md)
+ [API オペレーションを使用して Amazon Lex V2 ボットに AWS Lambda関数をアタッチする](lambda-attach-api.md)

# コンソールを使用して Amazon Lex V2 ボットに AWS Lambda関数をアタッチする
<a name="lambda-attach-console"></a>

呼び出す前に、まず Lambda 関数を Amazon Lex V2 ボットエイリアスにアタッチする必要があります。1 つのボットエイリアスにアタッチできる Lambda 関数は 1 つだけです。以下の手順を実行して、AWS コンソールを使用して Lambda 関数をアタッチします。

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/) で Amazon Lex コンソールを開きます。

1. 左側のパネルで **[ボット]** を選択し、ボットのリストから Lambda 関数を割り当てるボットの名前を選択します。

1. 左側のパネルから、**[デプロイ]** メニューの **[エイリアス]** を選択します。

1. エイリアスのリストから、Lambda 関数をアタッチするエイリアスの名前を選択します。

1. **[言語]** パネルで、Lambda 関数に使用する言語を選択します。言語がパネルに表示されていない場合は、**[エイリアスの言語を管理]** を選択して言語を追加します。

1. **[ソース]** ドロップダウンメニューで、アタッチする Lambda 関数の名前を選択します。

1. **[Lambda 関数のバージョンまたはエイリアス]** ドロップダウンメニューで、使用する Lambda 関数のバージョンまたはエイリアスを選択します。次に、[**保存**] を選択します。ボットがサポートする言語のすべてのインテントに同じ Lambda 関数が使用されます。

**コンソールを使用して Lambda 関数を呼び出すための Amazon Lex V2 インテントの設定**

1. ボットを選択したら、左側のメニューで Lambda 関数を呼び出すボットの言語の下にある **[インテント]** を選択します。

1. Lambda 関数を呼び出しインテントを選択し、インテントエディターを開きます。

1. Lambda コードフックを設定するためには 2 つのオプションがあります。

   1. 会話の各ステップ後に Lambda 関数を呼び出すには、以下の画像のように、インテントエディターの下部にある **[コードフック]** セクションまでスクロールし、**[初期化と検証に Lambda 関数を使用する]** チェックボックスを選択します。  
![\[Amazon Lex V2 インテントエディタの [コードフック] セクション\]](http://docs.aws.amazon.com/ja_jp/lexv2/latest/dg/images/lambda/lambda-code-hooks-all.png)

   1. または、会話ステージの **[ダイアログコードフック]** セクションを使用して Lambda 関数を呼び出します。**[ダイアログコードフック]** セクションは次のように表示されます。  
![\[Amazon Lex V2 インテントエディタの [コードフック] セクション\]](http://docs.aws.amazon.com/ja_jp/lexv2/latest/dg/images/lambda/lambda-code-hook-step.png)

      Amazon Lex V2 がレスポンスのコードフックを呼び出す方法を制御する方法は 2 つあります。
      + **[アクティブ]** ボタンを切り替えて、*アクティブ*または*非アクティブ*とマークします。コードフックが*アクティブ*になると、Amazon Lex V2 はコードフックを呼び出します。コードフックが*非アクティブ*の場合、Amazon Lex V2 はコードフックを実行しません。
      + **[Lambda ダイアログのコードフック**] セクションを展開し、**[Lambda 関数を呼び出す]** チェックボックスを選択して、*有効*または*無効*のマークを付けます。コードフックは、アクティブとマークされている場合にのみ有効化または無効化できます。*有効*とマークされると、コードフックは通常どおり実行されます。*無効*にすると、コードフックは呼び出されず、Amazon Lex V2 はコードフックが正常に返されたかのように動作します。ダイアログコードフックが成功、失敗、またはタイムアウトした後のレスポンスを設定するには、**[詳細オプション]** を選択します。

      Lambda コードフックは、以下の会話段階で呼び出すことができます。
      + この関数を**初期レスポンス**として呼び出すには、**[初期応答]** セクションまでスクロールし、**[ユーザーの要求を確認するための応答]** の横にある矢印を展開し、**[詳細オプション]**を選択します。ポップアップメニューの下部にある **[ダイアログコードフック]** セクションを探してください。
      + **スロット誘発**後に関数を呼び出すには、**[スロット]** セクションまでスクロールし、該当する **[スロットのプロンプト]** の横にある矢印を展開して、**[詳細オプション]** を選択します。ポップアップメニューの下部、**[デフォルト値]** のすぐ上にある **[ダイアログコードフック]** セクションを見つけてください。

        また、誘発のたびに関数を呼び出すこともできます。これを行うには、**[スロットプロンプト]** セクションの **[ボット誘発情報]** を展開し、**[その他のプロンプトオプション]** を選択し、**[誘発のたびに Lambda コードフックを呼び出す]** の横にあるチェックボックスを選択します。
      + **インテント確認**用の関数を呼び出すには、**[確認]** セクションまでスクロールし、**[インテントを確認するプロンプトを表示]** の横にある矢印を展開してインテントを確認し、**[詳細オプション]** を選択します。ポップアップメニューの下部にある **[ダイアログコードフック]** セクションを探してください。
      + **インテントフルフィルメント**用の関数を呼び出すには、**[フルフィルメント]** セクションまでスクロールします。**[アクティブ]** ボタンを切り替えて、コードフックを**アクティブに設定します。**[フルフィルメントが成功した場合]** の横にある矢印を展開し、**[詳細オプション]** を選択します。**[フルフィルメント Lambda コードフック]** セクションの下にある **[フルフィルメントに Lambda 関数を使用]** の横にあるチェックボックスを選択して、コードフックを*有効*に設定します。

1. Lambda 関数を呼び出す会話ステージを設定したら、ボットを再度 **[構築]** して関数をテストします。

# API オペレーションを使用して Amazon Lex V2 ボットに AWS Lambda関数をアタッチする
<a name="lambda-attach-api"></a>

呼び出す前に、まず Lambda 関数を Amazon Lex V2 ボットエイリアスにアタッチする必要があります。1 つのボットエイリアスに関連付けることができる Lambda 関数 は 1 つだけです。以下の手順を実行して、API オペレーションを使用して Lambda 関数をアタッチします。

新しいボットエイリアスを作成する場合は、[CreateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBotAlias.html) オペレーションを使用して Lambda 関数をアタッチします。Lambda 関数を既存のボットエイリアスにアタッチするには、[UpdateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateBotAlias.html) オペレーションを使用します。正しい設定を含むように `botAliasLocaleSettings` フィールドを変更します。

```
{
    "botAliasLocaleSettings" : {
        locale: {
            "codeHookSpecification": {
                "lambdaCodeHook": {
                    "codeHookInterfaceVersion": "1.0",
                    "lambdaARN": "arn:aws:lambda:region:account-id:function:function-name"
                }
            },
            "enabled": true
        },
        ...
    }
}
```

1. `botAliasLocaleSettings` フィールドは、Lambda 関数をアタッチするロケールをキーとするオブジェクトにマップされます。サポートされているロケールと有効なキーとなるコードのリストについては、「[サポートされている言語とロケール](how-languages.md#supported-languages)」を参照してください。

1. Lambda 関数`lambdaARN`の を検索するには、[https://console.aws.amazon.com/lambda/home](https://console.aws.amazon.com/lambda/home) でAWS Lambdaコンソールを開き、左側のサイドバーで**関数**を選択し、ボットエイリアスに関連付ける関数を選択します。**[関数概要]** の右側にある **[関数 ARN]** の下の `lambdaARN` を確認します。リージョン、アカウント ID、関数名が含まれている必要があります。

1. Amazon Lex V2 がエイリアスの Lambda 関数を呼び出せるようにするには、`enabled` フィールドを `true` に設定します。

**API オペレーションを使用して Lambda 関数を呼び出すための Amazon Lex V2 インテントの設定**

インテント中に Lambda 関数の呼び出しを設定するには、新しいインテントを作成する場合は [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) オペレーションを使用し、既存のインテントで関数を呼び出す場合は [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html) オペレーションを使用します。インテントオペレーションでの Lambda 関数の呼び出しを制御するフィールドは、`dialogCodeHook`、`initialResponseSetting`、`intentConfirmationSetting`、および `fulfillmentCodeHook` です。

スロットの誘発中に関数を呼び出す場合、新しいスロットを作成する場合は [CreateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateSlot.html) オペレーションを使用し、既存のスロットで関数を呼び出すには [UpdateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateSlot.html) オペレーションを使用します。スロットオペレーションでの Lambda 関数の呼び出しを制御するフィールドは `valueElicitationSetting` オブジェクトの `slotCaptureSetting` フィールドです。

1. 会話が終わるたびに Lambda ダイアログコードフックが実行されるように設定するには、`enabled` フィールド内の次の [DialogCodeHookSettings](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogCodeHookSettings.html) オブジェクトの `dialogCodeHook` フィールドを `true` に設定します。

   ```
   "dialogCodeHook": {
       "enabled": boolean
   }
   ```

1. または、関数を呼び出す会話ステージに対応する構造内の `codeHook` および/または `elicitationCodeHook` フィールドを変更して、会話の特定の時点でのみ実行されるように Lambda ダイアログコードフックを設定することもできます。Lambda ダイアログのコードフックをインテントフルフィルメントに使用するには、[CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) オペレーションまたは [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html) オペレーションの `fulfillmentCodeHook` フィールドを使用します。これら 3 種類のコードフックの構造と用途は次のとおりです。

## codeHook
<a name="lambda-code-hook"></a>

`codeHook` フィールドは、会話の特定の段階で実行されるコードフックの設定を定義します。このオブジェクトは [DialogCodeHookInvocationSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogCodeHookInvocationSetting.html) オブジェクトで、次のような構造になっています。

```
"codeHook": {
    "active": boolean,
    "enableCodeHookInvocation": boolean,
    "invocationLabel": string,
    "postCodeHookSpecification": [PostDialogCodeHookInvocationSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostDialogCodeHookInvocationSpecification.html),
}
```
+ Amazon Lex V2 の `active` フィールドを `true`に変更して、会話のその時点でコードフックを呼び出します。
+ Amazon Lex V2 の `enableCodeHookInvocation` フィールドを `true` に変更して、コードフックが正常に動作するようにします。`false` をマークすると、Amazon Lex V2 はコードフックが正常に返されたかのように動作します。
+ `invocationLabel` は、コードフックが呼び出されるダイアログステップを示します。
+ `postCodeHookSpecification` フィールドを使用して、コードフックの成功、失敗、またはタイムアウトの後で発生するアクションとメッセージを指定します。

## elicitationCodeHook
<a name="lambda-elicitation-code-hook"></a>

`elicitationCodeHook` フィールドは、1 つまたは複数のスロットを再利用する必要がある場合に実行するコードフックの設定を定義します。このシナリオは、スロットの誘発に失敗したり、インテントの確認が拒否されたりした場合に発生する可能性があります。`elicitationCodeHook` フィールドは、次の構造を持つ [ElicitationCodeHookInvocationSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ElicitationCodeHookInvocationSetting.html) オブジェクトです。

```
"elicitationCodeHook": {
    "enableCodeHookInvocation": boolean,
    "invocationLabel": string
}
```
+ Amazon Lex V2 の `enableCodeHookInvocation` フィールドを `true` に変更して、コードフックが正常に動作するようにします。`false` をマークすると、Amazon Lex V2 はコードフックが正常に返されたかのように動作します。
+ `invocationLabel` は、コードフックが呼び出されるダイアログステップを示します。

## fulfillmentCodeHook
<a name="lambda-fulfillment-code-hook"></a>

`fulfillmentCodeHook` フィールドは、インテントを達成するために実行するコードフックの設定を定義します。このフィールドは次の [FulfillmentCodeHookSettings](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentCodeHookSettings.html) オブジェクトにマップされます。

```
"fulfillmentCodeHook": {
    "active": boolean,
    "enabled": boolean,
    "fulfillmentUpdatesSpecification": [FulfillmentUpdatesSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentUpdatesSpecification.html),
    "postFulfillmentStatusSpecification": [PostFulfillmentStatusSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostFulfillmentStatusSpecification.html)
}
```
+ Amazon Lex V2 の `active` フィールドを `true`に変更して、会話のその時点でコードフックを呼び出します。
+ Amazon Lex V2 の `enabled` フィールドを `true` に変更して、コードフックが正常に動作するようにします。`false` をマークすると、Amazon Lex V2 はコードフックが正常に返されたかのように動作します。
+ `fulfillmentUpdatesSpecification` フィールドを使用して、インテントのフルフィルメント中にユーザーに最新情報が表示されるメッセージと、それに関連するタイミングを指定します。
+ `postFulfillmentStatusSpecification` フィールドを使用して、コードフックの成功、失敗、またはタイムアウトの後で発生するメッセージとアクションを指定します。

`active` および `enableCodeHookInvocation`/`enabled` フィールドを `true` に設定することで、会話の次の時点で Lambda コードフックを呼び出すことができます。

## 初期応答中
<a name="lambda-hook-initial-response"></a>

インテントが認識された後の初期応答で Lambda 関数を呼び出すには、[CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) または [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html) オペレーションの `initialResponse` フィールドにある `codeHook` 構造を使用します。`initialResponse` フィールドは次の [InitialResponseSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_InitialResponseSetting.html) オブジェクトにマップされます。

```
"initialResponse": {
    "codeHook": {
        "active": boolean,
        "enableCodeHookInvocation": boolean,
        "invocationLabel": string,
        "postCodeHookSpecification": [PostDialogCodeHookInvocationSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostDialogCodeHookInvocationSpecification.html),
    },
    "initialResponse": [FulfillmentUpdatesSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentUpdatesSpecification.html),
    "nextStep": [PostFulfillmentStatusSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostFulfillmentStatusSpecification.html),
    "conditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html)
}
```

## スロット誘発後、またはスロット再誘発中
<a name="lambda-hook-elicit-slot"></a>

スロット値を取得した後に Lambda 関数を呼び出すには、[CreateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateSlot.html) または [UpdateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateSlot.html) オペレーションの `valueElicitation` フィールド内の `slotCaptureSetting` フィールドを使用します。`slotCaptureSetting` フィールドは次の [SlotCaptureSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_SlotCaptureSetting.html) オブジェクトにマップされます。

```
"slotCaptureSetting": {
    "captureConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "captureNextStep": [DialogState object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogState.html),
    "captureResponse": [ResponseSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ResponseSpecification.html),
    "codeHook": {
        "active": true,
        "enableCodeHookInvocation": true,
        "invocationLabel": string,
        "postCodeHookSpecification": [PostDialogCodeHookInvocationSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostDialogCodeHookInvocationSpecification.html),
    },
    "elicitationCodeHook": {
        "enableCodeHookInvocation": boolean,
        "invocationLabel": string
    },
    "failureConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "failureNextStep": [DialogState object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogState.html),
    "failureResponse": [ResponseSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ResponseSpecification.html)
}
```
+ スロットの誘発が成功した後に Lambda 関数を呼び出すには、`codeHook` フィールドを使用します。
+ スロットの引き出が失敗し、Amazon Lex V2 がスロットの誘発を再試行した後に Lambda 関数を呼び出すには、`elicitationCodeHook` フィールドを使用します。

## インテントの確認または拒否後
<a name="lambda-hook-confirm-intent"></a>

インテントを確認するときに Lambda 関数を呼び出すには、[CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) オペレーションまたは [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html) オペレーションの `intentConfirmationSetting` フィールドを使用します。`intentConfirmation` フィールドは次の [IntentConfirmationSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_IntentConfirmationSetting.html) オブジェクトにマップされます。

```
"intentConfirmationSetting": {
    "active": boolean,
    "codeHook": {
        "active": boolean,
        "enableCodeHookInvocation": boolean,
        "invocationLabel": string,
        "postCodeHookSpecification": [PostDialogCodeHookInvocationSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostDialogCodeHookInvocationSpecification.html),
    },
    "confirmationConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "confirmationNextStep": [DialogState object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogState.html),
    "confirmationResponse": [ResponseSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialResponseSpecificationogState.html),
    "declinationConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "declinationNextStep": [FulfillmentUpdatesSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentUpdatesSpecification.html),
    "declinationResponse": [PostFulfillmentStatusSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostFulfillmentStatusSpecification.html),
    "elicitationCodeHook": {
        "enableCodeHookInvocation": boolean,
        "invocationLabel": string,
    },
    "failureConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "failureNextStep": [DialogState object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogState.html),
    "failureResponse": [ResponseSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ResponseSpecification.html),
    "promptSpecification": [PromptSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PromptSpecification.html)
}
```
+ ユーザーがインテントとそのスロットを確認した後に Lambda 関数を呼び出すには、`codeHook` フィールドを使用します。
+ ユーザーがインテント確認を拒否し、Amazon Lex V2 がスロット誘発を再試行した後に Lambda 関数を呼び出すには、`elicitationCodeHook` フィールドを使用します。

## インテントフルフィルメント中
<a name="lambda-hook-fulfill-intent"></a>

インテントを確認するために Lambda 関数を呼び出すには、[CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) オペレーションまたは [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html) オペレーションの `fulfillmentCodeHook` フィールドを使用します。`fulfillmentCodeHook` フィールドは次の [FulfillmentCodeHookSettings](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentCodeHookSettings.html) オブジェクトにマップされます。

```
{
    "active": boolean,
    "enabled": boolean,
    "fulfillmentUpdatesSpecification": [FulfillmentUpdatesSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentUpdatesSpecification.html),
    "postFulfillmentStatusSpecification": [PostFulfillmentStatusSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostFulfillmentStatusSpecification.html)
}
```

3. Lambda 関数を呼び出す会話ステージを設定したら、`BuildBotLocale` オペレーションを使用して関数をテストするためにボットを再構築します。