

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Intégration d'une AWS Lambda fonction dans votre bot Amazon Lex V2
<a name="lambda"></a>

Grâce aux [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)fonctions, vous pouvez étendre et mieux contrôler le comportement de votre bot Amazon Lex V2 grâce à des fonctions personnalisées que vous définissez. Amazon Lex V2 utilise une fonction Lambda par alias de bot par langue au lieu d'une fonction Lambda pour chaque intention. Avant de commencer, déterminez les champs de l'[événement d'entrée](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-input-format) dont vous souhaitez tirer des informations et les champs de la [réponse](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-response-format) que vous souhaitez manipuler et renvoyer à partir de votre fonction Lambda

Pour intégrer une fonction Lambda à votre bot Amazon Lex V2, effectuez les étapes suivantes :

1. [Créez une fonction](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach) en AWS Lambda utilisant le langage de programmation de votre choix et rédigez votre script.

1. Assurez-vous que la fonction renvoie une structure correspondant au [format de réponse](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-response-format).

1. Déployez la fonction Lambda.

1. Associez la fonction Lambda à un alias de bot Amazon Lex V2 aux opérations de [console](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach-console) ou d'[API](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach-api).

1. Sélectionnez les étapes de conversation au cours desquelles vous souhaitez appeler votre fonction Lambda avec les opérations de [console](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach-console) ou d'[API](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach-api).

1. Créez votre bot Amazon Lex V2 et vérifiez que la fonction Lambda fonctionne comme prévu. [Déboguez](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-debug) votre fonction à l'aide d'Amazon CloudWatch.

**Topics**
+ [AWS Lambdaformat d'événement d'entrée pour Lex V2](lambda-input-format.md)
+ [AWS Lambdaformat de réponse pour Lex V2](lambda-response-format.md)
+ [Structures communes d'une AWS Lambda fonction pour Amazon Lex V2](lambda-common-structures.md)
+ [Création d'une AWS Lambda fonction pour votre bot Amazon Lex V2](lambda-attach.md)
+ [Débogage d'une fonction CloudWatch Lambda à l'aide des journaux](lambda-debug.md)

# AWS Lambdaformat d'événement d'entrée pour Lex V2
<a name="lambda-input-format"></a>

La première étape de l'intégration d'une fonction Lambda dans votre bot Amazon Lex V2 consiste à comprendre les champs de l'événement Amazon Lex V2 et à déterminer les informations de ces champs que vous souhaitez utiliser lors de l'écriture de votre script. L'objet JSON suivant montre le format général d'un événement Amazon Lex V2 transmis à une fonction Lambda :

**Note**  
Le format d'entrée peut changer sans qu'une modification correspondante ne soit apportée au`messageVersion`. Votre code ne devrait pas générer d'erreur si de nouveaux champs sont présents.

```
{
    "messageVersion": "1.0",
    "invocationSource": "DialogCodeHook | FulfillmentCodeHook",
    "inputMode": "DTMF | Speech | Text",
    "responseContentType": "audio/mpeg | audio/ogg | audio/pcm | text/plain; charset=utf-8",
    "sessionId": string,
    "inputTranscript": string,
    "invocationLabel": string,
    "bot": {
        "id": string,
        "name": string,
        "localeId": string,
        "version": string,
        "aliasId": string,
        "aliasName": string
    },
    "interpretations": [
        {
            "interpretationSource": "Bedrock | Lex",
            "intent": {
                // see Intention for details about the structure
            },
            "nluConfidence": number,
            "sentimentResponse": {
                "sentiment": "MIXED | NEGATIVE | NEUTRAL | POSITIVE",
                "sentimentScore": {
                    "mixed": number,
                    "negative": number,
                    "neutral": number,
                    "positive": number
                }
            }
        },
        ...
    ],
    "proposedNextState": {
        "dialogAction": {
            "slotToElicit": string,
            "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot"
        },
        "intent": {
            // see Intention for details about the structure
        },
        "prompt": {
            "attempt": string 
        }
    },
    "requestAttributes": {
        string: string,
        ...
    },
    "sessionState": {
        // see État de la session for details about the structure
    },
    "transcriptions": [
        {
            "transcription": string,
            "transcriptionConfidence": number,
            "resolvedContext": {
                "intent": string
            },
            "resolvedSlots": {
                slot name: {
                    // see Emplacements for details about the structure
                },
                ...
            }
        },
        ...
    ]
}
```

Chaque champ de l'événement d'entrée est décrit ci-dessous :

## messageVersion
<a name="lambda-input-messageversion"></a>

Version du message qui identifie le format des données d'événement entrées dans la fonction Lambda et le format attendu de la réponse d'une fonction Lambda.

**Note**  
Vous configurez cette valeur lorsque vous définissez une intention. Dans l'implémentation actuelle, Amazon Lex V2 ne prend en charge que la version 1.0 des messages. Par conséquent, la console prend la valeur par défaut 1.0 et n'affiche pas la version de message.

## invocationSource
<a name="lambda-input-invocationsource"></a>

Le crochet de code qui a appelé la fonction Lambda. Les valeurs suivantes sont possibles :

`DialogCodeHook`— Amazon Lex V2 a appelé la fonction Lambda après une entrée de l'utilisateur.

`FulfillmentCodeHook`— Amazon Lex V2 a appelé la fonction Lambda une fois que tous les emplacements requis ont été remplis et que l'intention est prête à être exécutée.

## Mode d'entrée
<a name="lambda-input-inputmode"></a>

Mode d'énoncé de l'utilisateur. Les valeurs possibles sont les suivantes :

`DTMF`— L'utilisateur saisit l'énoncé à l'aide d'un clavier tactile (double tonalité multifréquence).

`Speech`— L'utilisateur a prononcé l'énoncé.

`Text`— L'utilisateur a saisi l'énoncé.

## responseContentType
<a name="lambda-input-responsecontenttype"></a>

Mode de réponse du bot à l'utilisateur. `text/plain; charset=utf-8`indique que le dernier énoncé a été écrit, tandis qu'une valeur commençant par `audio` indique que le dernier énoncé a été prononcé.

## sessionId
<a name="lambda-input-sessionid"></a>

Identifiant de session alphanumérique utilisé pour la conversation.

## inputTranscript
<a name="lambda-input-inputtranscript"></a>

Une transcription de l'entrée de l'utilisateur.
+ Pour la saisie de texte, il s'agit du texte saisi par l'utilisateur. Pour l'entrée DTMF, il s'agit de la clé saisie par l'utilisateur.
+ Pour la saisie vocale, il s'agit du texte en lequel Amazon Lex V2 convertit l'énoncé de l'utilisateur afin d'invoquer une intention ou de remplir un espace.

## Étiquette d'invocation
<a name="lambda-input-invocationlabel"></a>

Une valeur qui indique la réponse qui a appelé la fonction Lambda. Vous pouvez définir des étiquettes d'appel pour la réponse initiale, les créneaux et la réponse de confirmation.

## bot
<a name="lambda-input-bot"></a>

Informations sur le bot qui a traité la demande, comprenant les champs suivants :
+ **id** — L'identifiant attribué au bot lorsque vous l'avez créé. Vous pouvez voir l'ID du bot dans la console Amazon Lex V2 sur la page des **paramètres** du bot.
+ **name** — Le nom que vous avez donné au bot lorsque vous l'avez créé.
+ **LocaleID** — L'identifiant de la localisation que vous avez utilisée pour votre bot. Pour obtenir la liste des paramètres régionaux, voir[Langues et paramètres régionaux pris en charge par Amazon Lex V2](how-languages.md).
+ **version** — Version du bot qui a traité la demande.
+ **AliasID** — Identifiant attribué à l'alias du bot lorsque vous l'avez créé. Vous pouvez voir l'ID d'alias du bot dans la console Amazon Lex V2 sur la page **Alias**. Si vous ne voyez pas l'identifiant d'alias dans la liste, cliquez sur l'icône en forme de roue dentée en haut à droite et activez l'**identifiant d'alias**.
+ **aliasName** — Le nom que vous avez donné à l'alias du bot.

## interprétations
<a name="lambda-input-interpretations"></a>

Une liste d'informations sur les intentions qu'Amazon Lex V2 considère comme possibles correspond à l'énoncé de l'utilisateur. Chaque élément est une structure qui fournit des informations sur la correspondance de l'énoncé avec une intention, au format suivant :

```
{
    "intent": {
        // see Intention for details about the structure
    },
    "interpretationSource": "Bedrock | Lex",
    "nluConfidence": number,
    "sentimentResponse": {
        "sentiment": "MIXED | NEGATIVE | NEUTRAL | POSITIVE",
        "sentimentScore": {
            "mixed": number,
            "negative": number,
            "neutral": number,
            "positive": number
        }
    }
}
```

Les champs de la structure sont les suivants :
+ **intention** — Structure contenant des informations sur l'intention. Voir [Intention](lambda-common-structures.md#lambda-intent) pour plus de détails sur la structure.
+ **NLUConfidence** : score qui indique dans quelle mesure Amazon Lex V2 est certain que l'intention correspond à celle de l'utilisateur.
+ **SentimentResponse** — Analyse du sentiment de la réponse, contenant les champs suivants :
  + **sentiment** — Indique si le sentiment de l'énoncé est`POSITIVE`, `NEGATIVE``NEUTRAL`, ou. `MIXED`
  + **SentimentScore** : structure associant chaque sentiment à un chiffre indiquant dans quelle mesure Amazon Lex V2 est sûr que l'énoncé exprime ce sentiment.
+ **InterpretationSource** — Indique si un emplacement est résolu par Amazon Lex V2 ou Amazon Bedrock.

## proposedNextState
<a name="lambda-input-proposednextstate"></a>

Si la fonction Lambda définit le `dialogAction` `sessionState` à`Delegate`, ce champ apparaît et indique la proposition d'Amazon Lex V2 pour l'étape suivante de la conversation. Dans le cas contraire, l'état suivant dépend des paramètres que vous renvoyez dans la réponse de votre fonction Lambda. Cette structure n'est présente que si les deux affirmations suivantes sont vraies :

1. La `invocationSource` valeur est `DialogCodeHook`

1. La prédiction `type` de `dialogAction` est`ElicitSlot`.

Vous pouvez utiliser ces informations pour les ajouter `runtimeHints` au bon moment de la conversation. Voir [Amélioration de la reconnaissance des valeurs des créneaux grâce à des indications d'exécution lors de la conversation](using-hints.md) pour plus d'informations. `proposedNextState`est une structure contenant les champs suivants :

La structure de `proposedNextState` est la suivante :

```
"proposedNextState": {
    "dialogAction": {
        "slotToElicit": string,
        "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot"
    },
    "intent": {
        // see Intention for details about the structure
    },
    "prompt": {
        "attempt": string 
    }
}
```
+ **DialogAction** : contient des informations sur la prochaine étape proposée par Amazon Lex V2. Les champs de la structure sont les suivants : 
  + **slotToElicit**— L'emplacement à sélectionner ensuite, tel que proposé par Amazon Lex V2. Ce champ n'apparaît que si `type` c'est le cas`ElicitSlot`.
  + **type** — L'étape suivante de la conversation telle que proposée par Amazon Lex V2. Les valeurs suivantes sont possibles :

    `Delegate`— Amazon Lex V2 détermine l'action suivante.

    `ElicitIntent`— L'action suivante consiste à obtenir une intention de la part de l'utilisateur.

    `ElicitSlot`— L'action suivante consiste à obtenir une valeur d'emplacement auprès de l'utilisateur.

    `Close`— Met fin au processus de réalisation des intentions et indique qu'il n'y aura pas de réponse de la part de l'utilisateur.

    `ConfirmIntent`— L'action suivante consiste à demander à l'utilisateur si les créneaux sont corrects et si l'intention est prête à être remplie.
+ **intention** — L'intention que le bot a déterminée et que l'utilisateur essaie de réaliser. Voir [Intention](lambda-common-structures.md#lambda-intent) pour plus de détails sur la structure.
+ **prompt** — Structure contenant le champ`attempt`, qui correspond à une valeur indiquant le nombre de fois où Amazon Lex V2 a demandé à l'utilisateur de choisir l'emplacement suivant. Les valeurs possibles concernent `Initial` la première tentative`Retry1`,,`Retry2`, `Retry3``Retry4`, et `Retry5` les tentatives suivantes. 

## requestAttributes
<a name="lambda-input-requestattributes"></a>

Structure contenant les attributs spécifiques à la demande que le client envoie dans la demande. Utilisez les attributs de demande pour transmettre des informations qui n'ont pas besoin de persister pendant la totalité de la session. S'il n'y a pas d'attributs de demandes, cette valeur est null. Pour de plus amples informations, veuillez consulter [Configuration des attributs de demande pour votre bot Lex V2](context-mgmt-request-attribs.md).

## sessionState
<a name="lambda-input-sessionstate"></a>

État actuel de la conversation entre l'utilisateur et votre bot Amazon Lex V2. Voir [État de la session](lambda-common-structures.md#lambda-session-state) pour plus de détails sur la structure.

## transcriptions
<a name="lambda-input-transcriptions"></a>

Une liste de transcriptions considérées comme possibles par Amazon Lex V2 correspond à l'énoncé de l'utilisateur. Pour de plus amples informations, veuillez consulter [Utiliser les scores de fiabilité de la transcription vocale pour améliorer les conversations avec votre robot Lex V2](using-transcript-confidence-scores.md). Chaque élément est un objet au format suivant, contenant des informations sur une transcription possible :

```
{
    "transcription": string,
    "transcriptionConfidence": number,
    "resolvedContext": {
        "intent": string
    },
    "resolvedSlots": {
        slot name: {
            // see Emplacements for details about the structure
        },
        ...
    }
}
```

Les champs sont décrits ci-dessous :
+ **transcription** : transcription considérée par Amazon Lex V2 comme pouvant correspondre à l'énoncé audio de l'utilisateur.
+ **TranscriptionConfidence** : score qui indique dans quelle mesure Amazon Lex V2 est certain que l'intention correspond à celle de l'utilisateur.
+ **ResolvedContext** — Structure contenant le champ`intent`, qui correspond à l'intention à laquelle se rapporte l'énoncé.
+ **ResolvedSlots** — Structure dont les clés sont les noms de chaque emplacement résolu par l'énoncé. Le nom de chaque emplacement correspond à une structure contenant des informations sur cet emplacement. Voir [Emplacements](lambda-common-structures.md#lambda-slot) pour plus de détails sur la structure.

# AWS Lambdaformat de réponse pour Lex V2
<a name="lambda-response-format"></a>

La deuxième étape de l'intégration d'une fonction Lambda dans votre bot Amazon Lex V2 consiste à comprendre les champs de la réponse de la fonction Lambda et à déterminer les paramètres que vous souhaitez manipuler. L'objet JSON suivant montre le format général d'une réponse Lambda renvoyée à Amazon Lex V2 :

```
{
    "sessionState": {
        // see État de la session for details about the structure
    },
    "messages": [
        {
            "contentType": "CustomPayload | ImageResponseCard | PlainText | SSML",
            "content": string,
            "imageResponseCard": {
                "title": string,
                "subtitle": string,
                "imageUrl": string,
                "buttons": [
                    {
                        "text": string,
                        "value": string
                    },
                    ...
                ]
            }
        },
        ...
    ],
    "requestAttributes": {
        string: string,
        ...
    }
}
```

Chaque champ de la réponse est décrit ci-dessous :

## sessionState
<a name="lambda-response-sessionstate"></a>

État de la conversation entre l'utilisateur et votre bot Amazon Lex V2 que vous souhaitez renvoyer. Voir [État de la session](lambda-common-structures.md#lambda-session-state) pour plus de détails sur la structure. Ce champ est toujours obligatoire.

## messages
<a name="lambda-response-messages"></a>

Liste des messages qu'Amazon Lex V2 renvoie au client pour la prochaine étape de la conversation. Si le message `contentType` que vous fournissez est `PlainText``CustomPayload`, ou`SSML`, écrivez le message que vous souhaitez renvoyer au client dans le `content` champ. Si c'est le `contentType` cas`ImageResponseCard`, donnez les détails de la carte dans le `imageResponseCard` champ. Si vous ne fournissez aucun message, Amazon Lex V2 utilise le message approprié défini lors de la création du bot.

Le `messages` champ est obligatoire s'il s'`dialogAction.type`agit de `ElicitIntent` ou`ConfirmIntent`.

Chaque élément de la liste est une structure au format suivant, contenant des informations sur un message à renvoyer à l'utilisateur. Voici un exemple :

```
{
    "contentType": "CustomPayload | ImageResponseCard | PlainText | SSML",
    "content": string,
    "imageResponseCard": {
        "title": string,
        "subtitle": string,
        "imageUrl": string,
        "buttons": [
            {
                "text": string,
                "value": string
            },
            ...
        ]
    }
}
```

Une description de chaque champ est fournie ci-dessous :
+ **ContentType** — Type de message à utiliser.

  `CustomPayload`— Chaîne de réponse que vous pouvez personnaliser pour inclure des données ou des métadonnées pour votre application.

  `ImageResponseCard`— Une image avec des boutons que le client peut sélectionner. Pour plus d’informations, consultez [ImageResponseCard](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_ImageResponseCard.html).

  `PlainText`— Chaîne de texte brut.

  `SSML`— Chaîne qui inclut le langage de balisage de synthèse vocale pour personnaliser la réponse audio.
+ **content** — Le message à envoyer à l'utilisateur. Utilisez ce champ si le type de message est `PlainText``CustomPayload`, ou`SSML`.
+ **imageResponseCard**— Contient la définition de la carte-réponse à montrer à l'utilisateur. Utilisez ce champ si le type de message est`ImageResponseCard`. Correspond à une structure contenant les champs suivants :
  + **title** — Le titre de la carte-réponse.
  + **sous-titre** : invite l'utilisateur à choisir un bouton.
  + **imageURL** — Lien vers l'image de la carte.
  + **boutons** : liste de structures contenant des informations sur un bouton. Chaque structure contient un `text` champ contenant le texte à afficher et un `value` champ contenant la valeur à envoyer à Amazon Lex V2 si le client sélectionne ce bouton. Vous pouvez inclure jusqu'à trois boutons.

## requestAttributes
<a name="lambda-response-requestattributes"></a>

Structure contenant des attributs spécifiques à la demande pour la réponse au client. Pour plus d’informations, consultez [Configuration des attributs de demande pour votre bot Lex V2](context-mgmt-request-attribs.md). Ce champ est facultatif.

## Champs obligatoires dans la réponse
<a name="lambda-response-required"></a>

Au minimum, la réponse Lambda doit inclure `sessionState` un objet. Dans ce cadre, fournissez un `dialogAction` objet et spécifiez le `type` champ. En fonction `type` de `dialogAction` ce que vous fournissez, il se peut que d'autres champs soient obligatoires pour la réponse Lambda. Ces exigences sont décrites comme suit, accompagnées d'exemples pratiques minimaux :

### Délégué
<a name="lambda-response-delegate"></a>

**Delegate** permet à Amazon Lex V2 de déterminer l'étape suivante. Aucun autre champ n'est obligatoire.

```
{
    "sessionState": {
        "dialogAction": {
            "type": "Delegate"
    }
}
```

### ElicitIntent
<a name="lambda-response-elicitintent"></a>

**ElicitIntent**invite le client à exprimer son intention. Vous devez inclure au moins un message dans le `messages` champ pour susciter une intention.

```
{
    "sessionState": {
        "dialogAction": {
            "type": "ElicitIntent"
    },
    "messages": [
        {
            "contentType": PlainText,
            "content": "How can I help you?"
        }
    ]
}
```

### ElicitSlot
<a name="lambda-response-elicitslot"></a>

**ElicitSlot**invite le client à fournir une valeur de créneau. Vous devez inclure le nom de l'emplacement dans le `slotToElicit` champ de l'`dialogAction`objet. Vous devez également inclure le `name` de `intent` dans l'`sessionState`objet.

```
{`
    "sessionState": {
        "dialogAction": {
            "slotToElicit": "OriginCity",
            "type": "ElicitSlot"
        },
        "intent": {
            "name": "BookFlight"
        }
    }
}
```

### ConfirmIntent
<a name="lambda-response-confirmintent"></a>

**ConfirmIntent**confirme les valeurs des créneaux du client et confirme si l'intention est prête à être réalisée. Vous devez inclure le `name` du `intent` dans l'`sessionState`objet et le `slots` à confirmer. Vous devez également inclure au moins un message dans le `messages` champ pour demander à l'utilisateur de confirmer les valeurs des créneaux. Votre message doit recevoir une réponse « oui » ou « non ». Si l'utilisateur répond « oui », Amazon Lex V2 définit `confirmationState` l'intention sur`Confirmed`. Si l'utilisateur répond « non », Amazon Lex V2 définit `confirmationState` l'intention sur`Denied`.

```
{
    "sessionState": {
        "dialogAction": {
            "type": "ConfirmIntent"
        },
        "intent": {
            "name": "BookFlight",
            "slots": {
                "DepartureDate": {
                    "value": {
                        "originalValue": "tomorrow",
                        "interpretedValue": "2023-05-09",
                        "resolvedValues": [
                            "2023-05-09"
                    ]
                 }
                },
                "DestinationCity": {
                    "value": {
                        "originalValue": "sf",
                        "interpretedValue": "sf",
                        "resolvedValues": [
                            "sf"
                        ]
                    }
                },
                "OriginCity": {
                    "value": {
                        "originalValue": "nyc",
                        "interpretedValue": "nyc",
                        "resolvedValues": [
                            "nyc"
                        ]
                    }
                }
            }
        }
    },
    "messages": [
        {
            "contentType": PlainText,
            "content": "Okay, you want to fly from {OriginCity} to \
            {DestinationCity} on {DepartureDate}. Is that correct?"
        }
    ]
}
```

### Fermer
<a name="lambda-response-close"></a>

La **fermeture** met fin au processus de réalisation de l'intention et indique qu'aucune autre réponse n'est attendue de la part de l'utilisateur. Vous devez inclure le `name` et `state` de `intent` dans l'`sessionState`objet. Les états d'intention compatibles sont `Failed``Fulfilled`, et`InProgress`.

```
"sessionState": {
    "dialogAction": {
        "type": "Close"
    },
    "intent": {
        "name": "BookFlight",
        "state": "Failed | Fulfilled | InProgress"
    }
}
```

# Structures communes d'une AWS Lambda fonction pour Amazon Lex V2
<a name="lambda-common-structures"></a>

Dans la réponse Lambda, un certain nombre de structures se reproduisent. Des détails sur ces structures communes sont fournis dans cette section.

## Intention
<a name="lambda-intent"></a>

```
"intent": {
    "confirmationState": "Confirmed | Denied | None",
    "name": string,
    "slots": {
        // see Emplacements for details about the structure
    },
    "state": "Failed | Fulfilled | FulfillmentInProgress | InProgress | ReadyForFulfillment | Waiting",
    "kendraResponse": {
        // Only present when intent is KendraSearchIntent. For details, see
// https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html#API_Query_ResponseSyntax       }
}
```

Le `intent` champ est mappé à un objet avec les champs suivants :

### État de confirmation
<a name="lambda-intent-confirmationstate"></a>

Indique si l'utilisateur a confirmé les créneaux correspondant à l'intention et si l'intention est prête à être exécutée. Les valeurs suivantes sont possibles :

`Confirmed`— L'utilisateur confirme que les valeurs des emplacements sont correctes.

`Denied`— L'utilisateur indique que les valeurs des emplacements sont incorrectes.

`None`— L'utilisateur n'a pas encore atteint le stade de confirmation.

### name
<a name="lambda-intent-name"></a>

Nom de l'intention.

### slots
<a name="lambda-intent-slots"></a>

Informations sur les créneaux nécessaires pour atteindre l'objectif. Voir [Emplacements](#lambda-slot) pour plus de détails sur la structure.

### state
<a name="lambda-intent-state"></a>

Indique l'état d'exécution de l'intention. Les valeurs suivantes sont possibles :

`Failed`— Le bot n'a pas atteint son objectif.

`Fulfilled`— Le bot a terminé de remplir son intention.

`FulfillmentInProgress`— Le bot est en train de réaliser son intention.

`InProgress`— Le bot est en train de déterminer les valeurs des créneaux nécessaires pour atteindre l'objectif.

`ReadyForFulfillment`— Le bot a obtenu toutes les valeurs des créneaux correspondant à l'intention et est prêt à réaliser l'intention.

`Waiting`— Le bot attend une réponse de l'utilisateur (limité aux conversations en streaming).

### kendraResponse
<a name="lambda-intent-kendraresponse"></a>

Contient des informations sur les résultats de la requête de recherche Kendra. Ce champ n'apparaît que si l'intention est une`KendraSearchIntent`. Consultez [la syntaxe de réponse dans l'appel d'API Query pour Kendra](https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html#API_Query_ResponseSyntax) pour plus d'informations.

## Emplacements
<a name="lambda-slot"></a>

Le `slots` champ existe au sein d'une `intent` structure et est mappé à une structure dont les clés sont les noms des emplacements prévus à cet effet. Si l'emplacement n'est pas un emplacement à valeurs multiples (voir [Utilisation de plusieurs valeurs dans un emplacement](multi-valued-slots.md) pour plus de détails), il est mappé à une structure au format suivant. Notez que c'`shape`est le cas`Scalar`.

```
{
    slot name: {
        "shape": "Scalar",
        "value": {
            "originalValue": string,
            "interpretedValue": string,
            "resolvedValues": [
                string,
                ...
            ]
        }
    }
}
```

S'il s'agit d'un emplacement à valeurs multiples, l'objet auquel il est mappé contient un autre champ appelé`values`, qui est mappé à une liste de structures, chacune contenant des informations sur un emplacement constituant l'emplacement à valeurs multiples. Le format de chaque objet de la liste correspond à celui de l'objet auquel un emplacement normal est mappé. Notez que `shape` c'est le `List` cas, mais que `shape` le composant se trouve en dessous l'`values`est`Scalar`.

```
{
    slot name: {
    "shape": "List",
    "value": {
        "originalValue": string,
        "interpretedValue": string,
        "resolvedValues": [
            string,
            ...
        ]
    },
    "values": [
        {
            "shape": "Scalar",
            "value": {
                "originalValue": string,
                "interpretedValue": string,
                "resolvedValues": [
                    string,
                    ...
                ]
            }
        },
        {
            "shape": "Scalar",
            "value": {
                "originalValue": string,
                "interpretedValue": string,
                "resolvedValues": [
                    string,
                    ...
                ]
            }
        },
        ...
    ]
}
```

Les champs de l'objet slot sont décrits ci-dessous :

### shape
<a name="lambda-slots-shape"></a>

La forme de la fente. Cette valeur correspond à la `List` présence de plusieurs valeurs dans le slot (voir [Utilisation de plusieurs valeurs dans un emplacement](multi-valued-slots.md) pour plus de détails), mais c'est le cas dans le `Scalar` cas contraire.

### value
<a name="lambda-slots-value"></a>

Un objet contenant des informations sur la valeur fournie par l'utilisateur pour un emplacement et sur l'interprétation d'Amazon Lex V2, au format suivant :

```
{
    "originalValue": string,
    "interpretedValue": string,
    "resolvedValues": [
        string,
        ...
    ]
}
```

Les champs sont décrits ci-dessous :
+ **OriginalValue** — La partie de la réponse de l'utilisateur à la demande d'emplacement déterminée par Amazon Lex V2 est liée à la valeur de l'emplacement.
+ **InterpretedValue** — La valeur qu'Amazon Lex V2 détermine pour le slot, en fonction des données saisies par l'utilisateur.
+ **ResolvedValues** : liste de valeurs définies par Amazon Lex V2 comme des résolutions possibles pour les données saisies par l'utilisateur.

### values
<a name="lambda-slots-values"></a>

Liste d'objets contenant des informations sur les emplacements qui constituent l'emplacement à valeurs multiples. Le format de chaque objet correspond à celui d'un emplacement normal, avec les `value` champs `shape` et décrits ci-dessus. `values`n'apparaît que si le slot est composé de plusieurs valeurs (voir [Utilisation de plusieurs valeurs dans un emplacement](multi-valued-slots.md) pour plus de détails). L'objet JSON suivant montre deux emplacements de composants :

```
"values": [
    {
        "shape": "Scalar",
        "value": {
            "originalValue": string,
            "interpretedValue": string,
            "resolvedValues": [
                string,
                ...
            ]
        }
    },
    {
        "shape": "Scalar",
        "value": {
            "originalValue": string,
            "interpretedValue": string,
            "resolvedValues": [
                string,
                ...
            ]
        }
    },
    ...
]
```

## État de la session
<a name="lambda-session-state"></a>

Le `sessionState` champ est mappé à un objet contenant des informations sur l'état de la conversation avec l'utilisateur. Les champs réels qui apparaissent dans l'objet dépendent du type d'action de dialogue. Consultez [Champs obligatoires dans la réponse](lambda-response-format.md#lambda-response-required) les champs obligatoires dans une réponse Lambda. Le format de l'`sessionState`objet est le suivant :

```
"sessionState": {
    "activeContexts": [
        {
            "name": string,
            "contextAttributes": {
                string: string
            },
            "timeToLive": {
                "timeToLiveInSeconds": number,
                "turnsToLive": number
            }
        },
        ...
    ],
    "sessionAttributes": {
        string: string,
        ...
    },
    "runtimeHints": {
        "slotHints": {
            intent name: {
                slot name: {
                    "runtimeHintValues": [
                        {
                            "phrase": string
                        },
                        ...
                    ]
                },
                ...
            },
            ...
        }
    },
    "dialogAction": {
        "slotElicitationStyle": "Default | SpellByLetter | SpellByWord",
        "slotToElicit": string,
        "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot"
    },
    "intent": {
        // see Intention for details about the structure
    },
    "originatingRequestId": string
}
```

Les champs sont décrits ci-dessous :

### Contextes actifs
<a name="lambda-active-contexts"></a>

Liste d'objets contenant des informations sur un contexte utilisé par un utilisateur au cours d'une session. Utilisez des contextes pour faciliter et contrôler la reconnaissance des intentions. Pour plus d'informations sur les contextes, consultez[Définition du contexte d'intention pour votre bot Lex V2](context-mgmt-active-context.md). Chaque objet est formaté comme suit :

```
{
    "name": string,
    "contextAttributes": {
        string: string
    },
    "timeToLive": {
        "timeToLiveInSeconds": number,
        "turnsToLive": number
    }
}
```

Les champs sont décrits ci-dessous :
+ **name** — Le nom du contexte.
+ **ContextAttributes** — Objet contenant les noms des attributs du contexte et les valeurs auxquelles ils sont mappés.
+ **timeToLive**— Objet qui indique la durée pendant laquelle le contexte reste actif. Cet objet peut contenir l'un des champs suivants ou les deux :
  + **timeToLiveInSeconds**— Le nombre de secondes pendant lesquelles le contexte reste actif.
  + **turnsToLive**— Le nombre de tours pendant lesquels le contexte reste actif.

### sessionAttributes
<a name="lambda-session-attributes"></a>

Une carte de key/value paires représentant des informations contextuelles spécifiques à la session. Pour de plus amples informations, veuillez consulter [Configuration des attributs de session pour votre bot Lex V2](context-mgmt-session-attribs.md). L'objet est formaté comme suit :

```
{
    string: string,
    ...
}
```

### Conseils d'exécution
<a name="lambda-runtime-hints"></a>

Fournit des indications sur les phrases qu'un client est susceptible d'utiliser pour désigner un emplacement afin d'améliorer la reconnaissance audio. Les valeurs que vous indiquez dans les indices améliorent la reconnaissance audio de ces valeurs par rapport à des mots au son similaire. Le format de l'`runtimeHints`objet est le suivant :

```
{
    "slotHints": {
        intent name: {
            slot name: {
                "runtimeHintValues": [
                    {
                        "phrase": string
                    },
                    ...
                ]
            },
            ...
        },
        ...
    }
}
```

Le `slotHints` champ correspond à un objet dont les champs sont les noms des intentions du bot. Chaque nom d'intention correspond à un objet dont les champs sont les noms des emplacements correspondant à cette intention. Chaque nom d'emplacement correspond à une structure comportant un seul champ`runtimeHintValues`, qui est une liste d'objets. Chaque objet contient un `phrase` champ correspondant à un indice.

### dialogAction
<a name="lambda-dialog-action"></a>

Détermine la prochaine action à exécuter par Amazon Lex V2. Le format de l'objet est le suivant :

```
{
    "slotElicitationStyle": "Default | SpellByLetter | SpellByWord",
    "slotToElicit": string,
    "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot"
}
```

Les champs sont décrits ci-dessous :
+  **slotElicitationStyle**— Détermine la manière dont Amazon Lex V2 interprète l'entrée audio de l'utilisateur si `dialogAction` c'est `ElicitSlot` le `type` cas. Pour de plus amples informations, veuillez consulter [Capture des valeurs des créneaux avec des styles d'orthographe pendant la conversation](spelling-styles.md). Les valeurs suivantes sont possibles :

  `Default`— Amazon Lex V2 interprète l'entrée audio de la manière par défaut pour remplir un créneau.

  `SpellByLetter`— Amazon Lex V2 écoute l'orthographe de la valeur de l'emplacement donnée par l'utilisateur.

  `SpellByWord`— Amazon Lex V2 écoute l'orthographe de la valeur de l'emplacement par l'utilisateur à l'aide de mots associés à chaque lettre (par exemple, « a as in apple »).
+  **slotToElicit**— Définit l'emplacement à obtenir auprès de l'utilisateur si le nom `type` de `dialogAction` est `ElicitSlot` 
+ **type** — Définit l'action que le bot doit exécuter. Les valeurs suivantes sont possibles :

  `Delegate`— Laisse Amazon Lex V2 déterminer l'étape suivante.

  `ElicitIntent`— Invite le client à exprimer son intention.

  `ConfirmIntent`— Confirme les valeurs des créneaux du client et indique si l'intention est prête à être exécutée.

  `ElicitSlot`— Invite le client à fournir une valeur de créneau pour une intention.

  `Close`— Met fin au processus de réalisation des intentions.

### intent
<a name="lambda-sessionstate-intent"></a>

Voir [Intention](#lambda-intent) pour la structure du `intent` champ.

### originatingRequestId
<a name="lambda-originating-request-id"></a>

Identifiant unique pour la demande. Ce champ est facultatif pour la réponse Lambda.

# Création d'une AWS Lambda fonction pour votre bot Amazon Lex V2
<a name="lambda-attach"></a>

Pour créer une fonction Lambda pour votre bot Amazon Lex V2, accédez AWS Lambda à votre AWS Management Console et créez une nouvelle fonction. Vous pouvez consulter le [guide du AWS Lambda développeur](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) pour plus de détails surAWS Lambda.

1. Connectez-vous à l'AWS Management Console et ouvrez la AWS Lambda console à l'adresse [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Choisissez **Fonctions** dans la barre latérale gauche.

1. Sélectionnez **Create function (Créer une fonction)**.

1. Vous pouvez sélectionner **Auteur à partir de zéro** pour commencer avec un minimum de code, **utiliser un plan** pour sélectionner un exemple de code pour les cas d'utilisation courants dans une liste, ou une **image de conteneur** pour sélectionner une image de conteneur à déployer pour votre fonction. Si vous sélectionnez **Auteur à partir de zéro**, procédez comme suit :

   1. Donnez à votre fonction un **nom de fonction** significatif pour décrire ce qu'elle fait.

   1. Choisissez une langue dans le menu déroulant sous **Runtime** pour y écrire votre fonction.

   1. Sélectionnez une **architecture de jeu d'**instructions pour votre fonction.

   1. Par défaut, Lambda crée un rôle avec des autorisations de base. Pour utiliser un rôle existant ou pour créer un rôle à l'aide de modèles de politique AWS, élargissez le menu **Modifier le rôle d'exécution par défaut** et sélectionnez une option.

   1. Développez le menu **Paramètres avancés** pour configurer d'autres options.

1. Sélectionnez **Create function (Créer une fonction)**.

L'image suivante montre ce que vous voyez lorsque vous créez une nouvelle fonction à partir de zéro :

![\[Une nouvelle fonction Lambda.\]](http://docs.aws.amazon.com/fr_fr/lexv2/latest/dg/images/lambda/lambda-new-function.png)


La fonction du gestionnaire Lambda varie en fonction de la langue que vous utilisez. Il prend au minimum un objet `event` JSON comme argument. Vous pouvez voir les champs fournis par Amazon Lex V2 à l'adresse[AWS Lambdaformat d'événement d'entrée pour Lex V2](lambda-input-format.md). `event` Modifiez la fonction de gestion pour finalement renvoyer un objet `response` JSON correspondant au format décrit dans[AWS Lambdaformat de réponse pour Lex V2](lambda-response-format.md).
+ Une fois que vous avez terminé d'écrire votre fonction, sélectionnez **Déployer** pour autoriser l'utilisation de la fonction.

N'oubliez pas que vous pouvez associer chaque alias de bot à au plus une fonction Lambda. Cependant, vous pouvez définir autant de fonctions que nécessaire pour votre bot dans le code Lambda et appeler ces fonctions dans la fonction du gestionnaire Lambda. Par exemple, alors que toutes les intentions d'un même alias de bot doivent appeler la même fonction Lambda, vous pouvez créer une fonction de routeur qui active une fonction distincte pour chaque intention. Voici un exemple de fonction de routeur que vous pouvez utiliser ou modifier pour votre application :

```
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
```

**Quand utiliser les AWS Lambda fonctions dans les conversations avec un bot Amazon Lex V2**

Vous pouvez utiliser les fonctions Lambda aux points suivants lors d'une conversation avec un utilisateur :
+ Dans la réponse initiale, une fois l'intention reconnue. Par exemple, une fois que l'utilisateur a indiqué vouloir commander une pizza.
+ Après avoir obtenu une valeur de slot auprès de l'utilisateur. Par exemple, une fois que l'utilisateur a indiqué au bot la taille de la pizza qu'il souhaite commander.
+ Entre chaque nouvelle tentative pour obtenir un emplacement. Par exemple, si le client n'utilise pas une taille de pizza reconnue.
+ Lors de la confirmation d'une intention. Par exemple, lors de la confirmation d'une commande de pizza.
+ Pour réaliser une intention. Par exemple, pour commander une pizza.
+ Une fois l'intention atteinte, et avant que votre bot ne ferme la conversation. Par exemple, pour passer à l'intention de commander un verre.

**Topics**
+ [Associer une AWS Lambda fonction à un bot Amazon Lex V2 à l'aide de la console](lambda-attach-console.md)
+ [Associer une AWS Lambda fonction à un bot Amazon Lex V2 à l'aide des opérations d'API](lambda-attach-api.md)

# Associer une AWS Lambda fonction à un bot Amazon Lex V2 à l'aide de la console
<a name="lambda-attach-console"></a>

Vous devez d'abord associer une fonction Lambda à l'alias de votre bot Amazon Lex V2 avant de pouvoir l'invoquer. Vous ne pouvez associer qu'une seule fonction Lambda à chaque alias de bot. Procédez comme suit pour associer la fonction Lambda à l'aide de la console AWS. 

1. Connectez-vous à la console de gestion AWS et ouvrez la console Amazon Lex à l'adresse [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/).

1. Choisissez **Bots** dans le panneau de gauche et dans la liste des robots, choisissez le nom du bot auquel vous souhaitez associer une fonction Lambda.

1. Dans le panneau de gauche, sélectionnez **Alias** dans le menu **Déploiement**.

1. Dans la liste des alias, choisissez le nom de l'alias auquel vous souhaitez associer une fonction Lambda.

1. Dans le panneau **Langues**, sélectionnez la langue dans laquelle vous souhaitez utiliser une fonction Lambda. Sélectionnez **Gérer les langues dans un alias** pour ajouter une langue si elle n'est pas présente dans le panneau.

1. Dans le menu déroulant **Source**, choisissez le nom de la fonction Lambda que vous souhaitez associer.

1. Dans le menu déroulant **Version ou alias de la fonction Lambda**, choisissez la version ou l'alias de la fonction Lambda que vous souhaitez utiliser. Sélectionnez ensuite **Save (Enregistrer)**. La même fonction Lambda est utilisée à toutes fins utiles dans un langage pris en charge par le bot.

**Configuration de l'intention d'Amazon Lex V2 d'appeler une fonction Lambda à l'aide de la console**

1. Après avoir sélectionné un bot, sélectionnez **Intents** dans le menu de gauche sous la langue du bot pour lequel vous souhaitez appeler la fonction Lambda.

1. Choisissez l'intention dans laquelle vous souhaitez appeler la fonction Lambda pour ouvrir l'éditeur d'intention.

1. Il existe deux options pour configurer le crochet de code Lambda :

   1. Pour appeler la fonction Lambda après chaque étape de la conversation, accédez à la section **Code hooks** en bas de l'éditeur d'intention et cochez la case **Utiliser une fonction Lambda pour l'initialisation et la validation**, comme dans l'image suivante :  
![\[Section des crochets de code de l'éditeur d'intention Amazon Lex V2.\]](http://docs.aws.amazon.com/fr_fr/lexv2/latest/dg/images/lambda/lambda-code-hooks-all.png)

   1. Vous pouvez également utiliser la section **Dialog code hook** dans les étapes de conversation au cours desquelles vous pouvez invoquer la fonction Lambda. La section **Dialog Code Hook** apparaît comme suit :  
![\[Section des crochets de code de l'éditeur d'intention Amazon Lex V2.\]](http://docs.aws.amazon.com/fr_fr/lexv2/latest/dg/images/lambda/lambda-code-hook-step.png)

      Il existe deux méthodes pour contrôler la manière dont Amazon Lex V2 appelle le code hook pour obtenir une réponse :
      + Activez le bouton **Actif** pour le marquer comme *actif* ou *inactif*. Lorsqu'un crochet de code est *actif*, Amazon Lex V2 l'appelle. Lorsque le crochet de code est *inactif*, Amazon Lex V2 n'exécute pas le crochet de code.
      + **Développez la section **relative au crochet de code de la boîte de dialogue** **Lambda et cochez la case Invoke Lambda function** pour la marquer comme activée ou désactivée.** Vous ne pouvez activer ou désactiver un crochet de code que lorsqu'il est marqué comme actif. Lorsqu'il est marqué comme *activé*, le crochet de code est exécuté normalement. Lorsqu'il est *désactivé*, le crochet de code n'est pas appelé et Amazon Lex V2 agit comme si le crochet de code avait été renvoyé correctement. Pour configurer les réponses une fois que le crochet de code de la boîte de dialogue a réussi, échoué ou expiré, sélectionnez Options **avancées**

      Le crochet de code Lambda peut être invoqué aux étapes de conversation suivantes :
      + Pour appeler la fonction comme **réponse initiale**, accédez à la section **Réponse initiale**, déployez la flèche à côté de **Réponse pour accuser réception de la demande de l'utilisateur**, puis sélectionnez **Options avancées**. Recherchez la section **Dialog code hook** en bas du menu qui apparaît.
      + Pour appeler la fonction après avoir sélectionné un **emplacement, faites défiler** l'écran jusqu'à la section **Machines** à sous, déployez la flèche à côté de l'**invite correspondant à l'emplacement**, puis sélectionnez Options **avancées**. Recherchez la section **Dialog code hook** en bas du menu qui apparaît, juste au-dessus des **valeurs par défaut**.

        Vous pouvez également invoquer la fonction après chaque élicitation. Pour ce faire, développez les **informations Bot Elicits** dans la section **Slot invites**, sélectionnez **Plus d'options d'invite** et cochez la case à côté de Invoke **Lambda code** hook après chaque sollicitation.
      + Pour appeler la fonction de **confirmation de l'intention**, accédez à la section **Confirmation**, déployez la flèche à côté de **Invites de confirmation de l'intention**, puis sélectionnez **Options avancées**. Recherchez la section **Dialog code hook** en bas du menu qui apparaît.
      + Pour appeler la fonction d'**exécution des intentions**, faites défiler la page jusqu'à la section **Exécution**. *Activez le bouton **Active** pour activer le crochet de code.* Déplacez la flèche à **côté de En cas d'expédition réussie**, puis sélectionnez **Options avancées**. *Cochez la case à côté de **Utiliser une fonction Lambda pour l'expédition dans la section Fulfillment** **Lambda code hook** pour activer le crochet de code.*

1. Une fois que vous avez défini les étapes de conversation auxquelles vous souhaitez invoquer la fonction Lambda, **créez** à nouveau le bot pour tester la fonction.

# Associer une AWS Lambda fonction à un bot Amazon Lex V2 à l'aide des opérations d'API
<a name="lambda-attach-api"></a>

Vous devez d'abord associer une fonction Lambda à l'alias de votre bot Amazon Lex V2 avant de pouvoir l'invoquer. Vous ne pouvez associer qu'une seule fonction Lambda à chaque alias de bot. Procédez comme suit pour associer la fonction Lambda à l'aide d'opérations d'API. 

Si vous créez un nouvel alias de bot, utilisez l'[CreateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBotAlias.html)opération pour associer une fonction Lambda. Pour associer une fonction Lambda à un alias de bot existant, utilisez l'[UpdateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateBotAlias.html)opération. Modifiez le `botAliasLocaleSettings` champ pour qu'il contienne les paramètres appropriés :

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

1. Le `botAliasLocaleSettings` champ correspond à un objet dont les clés sont les paramètres régionaux auxquels vous souhaitez associer la fonction Lambda. Consultez [Langues et paramètres régionaux pris en charge](how-languages.md#supported-languages) la liste des paramètres régionaux pris en charge et les codes des clés valides.

1. `lambdaARN`Pour rechercher une fonction Lambda, ouvrez la AWS Lambda console d'[https://console.aws.amazon.com/lambda/accueil](https://console.aws.amazon.com/lambda/home), sélectionnez **Fonctions** dans la barre latérale gauche, puis sélectionnez la fonction à associer à l'alias du bot. Sur le côté droit de la **vue d'ensemble des fonctions**, trouvez le `lambdaARN` sous-onglet **Function ARN**. Il doit contenir une région, un identifiant de compte et le nom de la fonction.

1. Pour permettre à Amazon Lex V2 d'appeler la fonction Lambda pour l'alias, définissez le `enabled` champ sur. `true`

**Définition de l'intention d'Amazon Lex V2 d'invoquer une fonction Lambda à l'aide d'opérations d'API**

Pour configurer l'invocation de la fonction Lambda lors d'une intention, utilisez l'[CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html)opération si vous créez une nouvelle intention ou l'[UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html)opération si vous appelez la fonction dans une intention existante. Les champs qui contrôlent l'invocation de la fonction Lambda dans les opérations d'intention sont`dialogCodeHook`,`initialResponseSetting`, `intentConfirmationSetting` et. `fulfillmentCodeHook`

Si vous invoquez la fonction pendant l'élicitation d'un emplacement, utilisez l'[CreateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateSlot.html)opération si vous créez un nouvel emplacement ou l'[UpdateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateSlot.html)opération pour appeler la fonction dans un emplacement existant. Le champ qui contrôle l'invocation de la fonction Lambda dans les opérations de slot est celui `slotCaptureSetting` de l'objet. `valueElicitationSetting`

1. Pour configurer le crochet de code de la boîte de dialogue Lambda pour qu'il s'exécute après chaque tour de conversation, définissez le `enabled` champ de l'[DialogCodeHookSettings](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogCodeHookSettings.html)objet suivant dans le `dialogCodeHook` champ comme suit : `true`

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

1. Vous pouvez également configurer le crochet de code de la boîte de dialogue Lambda pour qu'il ne s'exécute qu'à des moments spécifiques des conversations en modifiant le `codeHook` and/or `elicitationCodeHook` champ des structures correspondant aux étapes de conversation auxquelles vous souhaitez appeler la fonction. Pour utiliser le crochet de code de la boîte de dialogue Lambda pour répondre à une intention, utilisez le `fulfillmentCodeHook` champ dans l'opération [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html)ou [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html). Les structures et les utilisations de ces trois types de code hooks sont les suivantes :

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

Le `codeHook` champ définit les paramètres du crochet de code à exécuter à un stade donné de la conversation. Il s'agit d'un [DialogCodeHookInvocationSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogCodeHookInvocationSetting.html)objet dont la structure est la suivante :

```
"codeHook": {
    "active": boolean,
    "enableCodeHookInvocation": boolean,
    "invocationLabel": string,
    "postCodeHookSpecification": [PostDialogCodeHookInvocationSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostDialogCodeHookInvocationSpecification.html),
}
```
+ Modifiez le `active` champ `true` pour qu'Amazon Lex V2 appelle le code hook à ce stade de la conversation.
+ Modifiez le `enableCodeHookInvocation` champ `true` pour Amazon Lex V2 afin de permettre au crochet de code de s'exécuter normalement. Si vous le marquez`false`, Amazon Lex V2 agit comme si le code hook avait été renvoyé avec succès.
+ `invocationLabel`Indique l'étape de dialogue à partir de laquelle le crochet de code est invoqué.
+ Utilisez le `postCodeHookSpecification` champ pour spécifier les actions et les messages qui se produisent après la réussite, l'échec ou l'expiration du délai d'expiration du crochet de code.

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

Le `elicitationCodeHook` champ définit les paramètres du crochet de code à exécuter dans le cas où un ou plusieurs emplacements doivent être réactivés. Ce scénario peut se produire si l'obtention d'un créneau échoue ou si la confirmation de l'intention est refusée. Le `elicitationCodeHook` champ est un [ElicitationCodeHookInvocationSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ElicitationCodeHookInvocationSetting.html)objet dont la structure est la suivante :

```
"elicitationCodeHook": {
    "enableCodeHookInvocation": boolean,
    "invocationLabel": string
}
```
+ Modifiez le `enableCodeHookInvocation` champ `true` pour Amazon Lex V2 afin de permettre au crochet de code de s'exécuter normalement. Si vous le marquez`false`, Amazon Lex V2 agit comme si le code hook avait été renvoyé avec succès.
+ `invocationLabel`Indique l'étape de dialogue à partir de laquelle le crochet de code est invoqué.

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

Le `fulfillmentCodeHook` champ définit les paramètres du crochet de code à exécuter pour répondre à l'intention. Il correspond à l'[FulfillmentCodeHookSettings](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentCodeHookSettings.html)objet suivant :

```
"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)
}
```
+ Modifiez le `active` champ `true` pour qu'Amazon Lex V2 appelle le code hook à ce stade de la conversation.
+ Modifiez le `enabled` champ `true` pour Amazon Lex V2 afin de permettre au crochet de code de s'exécuter normalement. Si vous le marquez`false`, Amazon Lex V2 agit comme si le code hook avait été renvoyé avec succès.
+ Utilisez le `fulfillmentUpdatesSpecification` champ pour spécifier les messages qui semblent informer l'utilisateur lors de la réalisation de l'intention et le moment qui leur est associé.
+ Utilisez le `postFulfillmentStatusSpecification` champ pour spécifier les messages et les actions qui se produisent après la réussite, l'échec ou l'expiration du délai d'expiration du crochet de code.

Vous pouvez invoquer le crochet de code Lambda aux points suivants d'une conversation en définissant les `enabled` champs `active` et`enableCodeHookInvocation`/sur : `true`

## Lors de la réponse initiale
<a name="lambda-hook-initial-response"></a>

Pour appeler la fonction Lambda dans la réponse initiale une fois l'intention reconnue, utilisez la `codeHook` structure dans le `initialResponse` champ de l'opération [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html)or [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html). Le `initialResponse` champ correspond à l'[InitialResponseSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_InitialResponseSetting.html)objet suivant :

```
"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)
}
```

## Après l'obtention des créneaux ou pendant la réélection des créneaux
<a name="lambda-hook-elicit-slot"></a>

Pour appeler la fonction Lambda après avoir obtenu une valeur d'emplacement, utilisez le `slotCaptureSetting` champ situé dans le `valueElicitation` champ de l'opération or. [CreateSlot[UpdateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateSlot.html)](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateSlot.html) Le `slotCaptureSetting` champ correspond à l'[SlotCaptureSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_SlotCaptureSetting.html)objet suivant :

```
"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)
}
```
+ Pour appeler la fonction Lambda une fois que l'élicitation des emplacements est réussie, utilisez le champ. `codeHook`
+ Pour appeler la fonction Lambda après l'échec de l'élicitation des emplacements et qu'Amazon Lex V2 tente à nouveau de les activer, utilisez le champ. `elicitationCodeHook`

## Après confirmation ou refus de l'intention
<a name="lambda-hook-confirm-intent"></a>

Pour appeler la fonction Lambda lors de la confirmation d'une intention, utilisez le `intentConfirmationSetting` champ de l'opération [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html)or [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html). Le `intentConfirmation` champ correspond à l'[IntentConfirmationSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_IntentConfirmationSetting.html)objet suivant :

```
"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)
}
```
+ Pour appeler la fonction Lambda une fois que l'utilisateur a confirmé l'intention et ses emplacements, utilisez le `codeHook` champ.
+ Pour appeler la fonction Lambda une fois que l'utilisateur a refusé la confirmation de l'intention et qu'Amazon Lex V2 a tenté à nouveau d'obtenir des emplacements, utilisez le champ. `elicitationCodeHook`

## Pendant la réalisation de l'intention
<a name="lambda-hook-fulfill-intent"></a>

Pour appeler la fonction Lambda afin de répondre à une intention, utilisez le `fulfillmentCodeHook` champ dans l'opération [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html)or [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html). Le `fulfillmentCodeHook` champ correspond à l'[FulfillmentCodeHookSettings](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentCodeHookSettings.html)objet suivant :

```
{
    "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. Une fois que vous avez défini les étapes de conversation auxquelles vous devez invoquer la fonction Lambda, utilisez l'`BuildBotLocale`opération pour reconstruire le bot afin de tester la fonction.

# Débogage d'une fonction CloudWatch Lambda à l'aide des journaux
<a name="lambda-debug"></a>

[Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) est un outil de suivi des appels d'API et des métriques que vous pouvez utiliser pour déboguer vos fonctions Lambda. Lorsque vous testez votre bot dans la console ou à l'aide d'appels d'API, il CloudWatch enregistre chaque étape de la conversation. Si vous utilisez une fonction d'impression dans votre code Lambda, CloudWatch affichez-la également.

**Pour afficher les CloudWatch journaux de votre fonction Lambda**

1. Connectez-vous à l'AWS Management Console et ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le menu **Journaux** dans la barre latérale gauche, sélectionnez **Groupes de journaux**.

1. Sélectionnez votre groupe de journaux de fonctions Lambda, qui doit être au format suivant. `/aws/lambda/function-name`

1. La liste des **flux de journaux** contient un journal pour chaque session avec un bot. Choisissez un flux de journal pour le consulter.

1. Dans la liste des **événements du journal**, sélectionnez la flèche droite à côté de l'**horodatage** pour développer les détails de cet événement. Tout ce que vous imprimez à partir de votre code Lambda apparaîtra sous forme d'événement de journal. Utilisez ces informations pour déboguer votre code.

1. Après avoir débogué votre code, pensez à **déployer** la fonction Lambda et, si vous utilisez la console, à recharger la fenêtre de test avant de tester à nouveau **le** comportement du bot.