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.
Accordez à Amazon Connect l'accès à vos AWS Lambda fonctions
Amazon Connect peut interagir avec vos propres systèmes et prendre dynamiquement des chemins différents dans les flux. Pour ce faire, invoquez AWS Lambda des fonctions dans un flux, récupérez les résultats et appelez vos propres services ou interagissez avec d'autres magasins de AWS données ou services. Pour plus d’informations, consultez le Guide du développeur AWS Lambda.
Pour invoquer une fonction Lambda à partir d’un flux, effectuez les tâches suivantes.
Tâches
- Création d’une fonction Lambda
- Ajout d’une fonction Lambda à votre instance Amazon Connect
- Invocation d’une fonction Lambda à partir d’un flux
- Bonnes pratiques pour invoquer plusieurs fonctions Lambda
- Configuration de votre fonction Lambda pour analyser l’événement
- Vérification de la réponse de la fonction
- Consommation de la réponse de la fonction Lambda
- Tutoriel : Création et invocation d’une fonction Lambda dans un flux
Création d’une fonction Lambda
Créez une fonction Lambda, à l'aide de n'importe quelle exécution, et configurez-la. Pour plus d’informations, consultez Démarrage avec Lambda dans le Guide du développeur AWS Lambda .
Si vous créez la fonction Lambda dans la même région que votre centre de contact, vous pouvez utiliser la console Amazon Connect pour ajouter la fonction Lambda à votre instance comme décrit dans la tâche suivante, Ajout d’une fonction Lambda à votre instance Amazon Connect. Cette opération ajoute automatiquement les autorisations de ressource qui permettent à Amazon Connect d’invoquer la fonction Lambda. Sinon, si la fonction Lambda se trouve dans une autre région, vous pouvez l'ajouter à votre flux à l'aide du concepteur de flux et ajouter les autorisations de ressources à l'aide de la commande add permission, avec le principal connect.amazonaws.com
et le correspondant à votre ARN instance Amazon Connect. Pour plus d'informations, consultez Utilisation des stratégies fondées sur les ressources pour AWS Lambda dans le Guide du développeur AWS Lambda .
Ajout d’une fonction Lambda à votre instance Amazon Connect
Avant de pouvoir utiliser une fonction Lambda dans un flux, vous devez l’ajouter à votre instance Amazon Connect.
Ajout d’une fonction Lambda à votre instance
-
Ouvrez la console Amazon Connect à l'adresse https://console.aws.amazon.com/connect/
. -
Sur la page des instances, choisissez le nom de votre instance dans la colonne Alias d’instance. Ce nom d'instance apparaît dans le fichier URL que vous utilisez pour accéder à Amazon Connect.
-
Dans le volet de navigation, sélectionnez Flux.
-
Dans la section AWS Lambda, utilisez la zone déroulante Fonction pour sélectionner la fonction à ajouter à votre instance.
Astuce
La liste déroulante répertorie uniquement les fonctions de la même région que votre instance. Si aucune fonction n'est répertoriée, choisissez Create a new Lambda function, qui ouvre la AWS Lambda console.
Pour utiliser une Lambda dans une autre région ou un autre compte, dans le champAppel de la fonction AWS Lambda , sous Sélectionner une fonction, vous pouvez saisir le nom ARN d'une Lambda. Configurez ensuite la politique basée sur les ressources correspondante sur cette fonction Lambda pour permettre au flux de l’appeler.
Pour appeler
lambda:AddPermission
, vous devez :-
définir le principal sur connect.amazonaws.com ;
-
définir le compte source comme étant le compte dans lequel se trouve votre instance ;
-
Définissez la source ARN sur celle ARN de votre instance.
Pour plus d’informations, consultez Octroi de l’accès à la fonction à d’autres comptes.
-
-
Choisissez Ajouter une fonction Lambda. Vérifiez que ARN la fonction est ajoutée sous Fonctions Lambda.
Maintenant, vous pouvez vous référer à cette fonction Lambda dans vos flux.
Invocation d’une fonction Lambda à partir d’un flux
-
Ouvrez ou créez un flux.
-
Ajoutez un bloc Appel de la fonction AWS Lambda (dans le groupe Intégrer ) à la grille. Connectez les branches vers et depuis le bloc.
-
Choisissez le titre du bloc Appel de la fonction AWS Lambda pour ouvrir la page des propriétés.
-
Sous Sélectionner une fonction, choisissez la fonction dans la liste que vous avez ajoutée à votre instance.
-
(Facultatif) Sous Paramètres en entrée de la fonction, choisissez Ajouter un paramètre. Vous pouvez spécifier les paires clé-valeur envoyées à la fonction Lambda lorsqu’elle est invoquée. Vous pouvez également spécifier une valeur pour le paramètre Expiration de la fonction.
-
Dans Délai d’attente (max. 8 secondes), spécifiez la durée d’attente avant que Lambda expire. Passé ce délai, le contact est routé vers le bas de la branche Erreur.
Chaque fois que vous invoquez une fonction Lambda à partir d’un flux, vous transmettez un ensemble d’informations par défaut relatives au contact en cours, ainsi que tous les attributs supplémentaires définis dans la section Paramètres d’entrée de la fonction pour le bloc Appeler une fonction AWS Lambda ajouté.
Voici un exemple de JSON demande adressée à une fonction Lambda :
{ "Details": { "ContactData": { "Attributes": { "exampleAttributeKey1": "exampleAttributeValue1" }, "Channel": "VOICE", "ContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "CustomerEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" }, "CustomerId": "someCustomerId", "Description": "someDescription", "InitialContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "InitiationMethod": "INBOUND | OUTBOUND | TRANSFER | CALLBACK", "InstanceARN": "arn:aws:connect:aws-region:1234567890:instance/c8c0e68d-2200-4265-82c0-XXXXXXXXXX", "LanguageCode": "en-US", "MediaStreams": { "Customer": { "Audio": { "StreamARN": "arn:aws:kinesisvideo::eu-west-2:111111111111:stream/instance-alias-contact-ddddddd-bbbb-dddd-eeee-ffffffffffff/9999999999999", "StartTimestamp": "1571360125131", // Epoch time value "StopTimestamp": "1571360126131", "StartFragmentNumber": "100" // Numberic value for fragment number } } }, "Name": "ContactFlowEvent", "PreviousContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "Queue": { "ARN": "arn:aws:connect:eu-west-2:111111111111:instance/cccccccc-bbbb-dddd-eeee-ffffffffffff/queue/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "Name": "PasswordReset" "OutboundCallerId": { "Address": "+12345678903", "Type": "TELEPHONE_NUMBER" } }, "References": { "key1": { "Type": "url", "Value": "urlvalue" } }, "SystemEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" } }, "Parameters": {"exampleParameterKey1": "exampleParameterValue1", "exampleParameterKey2": "exampleParameterValue2" } }, "Name": "ContactFlowEvent" }
La demande est divisée en deux parties :
-
Données de contact : ces données sont toujours transmises par Amazon Connect pour chaque contact. Certains paramètres sont facultatifs.
Cette section peut inclure des attributs qui ont été précédemment associés à un contact, par exemple lors de l’utilisation d’un bloc Définir des attributs de contact dans un flux. Ce mappage peut être vide si aucun attribut n'est enregistré.
L’image suivante montre où ces attributs devraient apparaître dans la page de propriétés d’un bloc Définir des attributs de contact.
-
Paramètres : il s’agit des paramètres spécifiques à cet appel qui ont été définis lors de la création de la fonction Lambda. L’image suivante montre où ces paramètres devraient apparaître dans la page des propriétés du bloc Appeler une fonction AWS Lambda .
Le bloc Invoke Lambda peut recevoir des paramètres d'entrée dans un JSON format adapté à la fois aux types de données primitifs et imbriqués. JSON Voici un exemple d'JSONentrée pouvant être utilisée dans le bloc Invoke Lambda.
{ "Name": "Jane", "Age":10, "isEnrolledInSchool": true, "hobbies": { "books":["book1", "book2"], "art":["art1", "art2"] } }
Stratégie de nouvelle tentative d'appel
Si votre invocation Lambda dans un flux est restreinte, la demande fera l’objet d’une nouvelle tentative. Il sera également relancé si un échec de service général (erreur 500) se produit.
Lorsqu’une invocation synchrone renvoie une erreur, Amazon Connect réessaie jusqu’à trois fois, pendant un maximum de 8 secondes. À ce stade, le flux progresse le long de la branche Error.
Pour en savoir plus sur les nouvelles tentatives de Lambda, consultez la section Gestion des erreurs et tentatives automatiques dans Lambda. AWS
Bonnes pratiques pour invoquer plusieurs fonctions Lambda
Amazon Connect limite la durée d'une séquence de fonctions Lambda à 20 secondes. Elle expire avec un message d'erreur lorsque le temps total d'exécution dépasse ce seuil. Dans la mesure où les clients n'entendent rien pendant l'exécution d'une fonction Lambda, nous vous recommandons d'ajouter un bloc Lire l'invite entre les fonctions pour qu'ils restent impliqués durant la longue interaction.
En interrompant une chaîne de fonctions Lambda avec le bloc Lire l'invite, vous pouvez invoquer plusieurs fonctions qui durent plus longtemps que le seuil de 20 secondes.
Configuration de votre fonction Lambda pour analyser l’événement
Pour transmettre correctement les attributs et les paramètres entre votre fonction Lambda et Amazon Connect, configurez votre fonction pour analyser correctement la JSON demande envoyée depuis le bloc de AWS Lambda fonction Invoke ou définissez les attributs de contact, et définissez toute logique métier à appliquer. La façon dont le JSON est analysé dépend de l'environnement d'exécution que vous utilisez pour votre fonction.
Par exemple, le code suivant montre comment accéder à exampleParameterKey1
partir du bloc de AWS Lambda fonction Invoke et exampleAttributeKey1
du bloc Set contact attributes à l'aide de Node.JS :
exports.handler = function(event, context, callback) { // Example: access value from parameter (Invoke AWS Lambda function) let parameter1 = event['Details']['Parameters']['exampleParameterKey1']; // Example: access value from attribute (Set contact attributes block) let attribute1 = event['Details']['ContactData']['Attributes']['exampleAttributeKey1']; // Example: access customer's phone number from default data let phone = event['Details']['ContactData']['CustomerEndpoint']['Address']; // Apply your business logic with the values // ... }
Vérification de la réponse de la fonction
Astuce
Le référencement d’un tableau n’est pas pris en charge dans un flux. Les tableaux peuvent être utilisés uniquement dans une autre fonction Lambda.
La réponse de la fonction Lambda peut être un STRING _ MAP ou JSON doit être définie lors de la configuration du bloc de fonction Invoke AWS Lambda dans le flux. Si la validation des réponses est définie sur STRING _MAP, la fonction Lambda doit renvoyer un objet plat composé de paires clé/valeur de type chaîne. Sinon, si la validation des réponses est définie surJSON, la fonction Lambda peut renvoyer n'importe quelle réponse valide, JSON y compris imbriquée. JSON
La réponse Lambda peut atteindre jusqu’à 32 Ko. Si vous ne parvenez pas à atteindre Lambda, si la fonction lève une exception, si la réponse n’est pas comprise ou si la fonction Lambda prend plus de temps que la limite spécifiée, le flux saute jusqu’à l’étiquette Error
.
Testez la sortie retournée à partir de votre fonction Lambda pour confirmer qu’elle sera correctement consommée une fois renvoyée à Amazon Connect. L'exemple suivant illustre un exemple de réponse dans Node.JS :
exports.handler = function(event, context, callback) { // Extract data from the event object let phone = event['Details']['ContactData']['CustomerEndpoint']['Address']; // Get information from your APIs let customerAccountId = getAccountIdByPhone(phone); let customerBalance = getBalanceByAccountId(customerAccountId); let resultMap = { AccountId: customerAccountId, Balance: '$' + customerBalance, } callback(null, resultMap); }
Voici un exemple de réponse à l'aide de Python :
def lambda_handler(event, context): // Extract data from the event object phone = event['Details']['ContactData']['CustomerEndpoint']['Address'] // Get information from your APIs customerAccountId = getAccountIdByPhone(phone) customerBalance = getBalanceByAccountId(customerAccountId) resultMap = { "AccountId": customerAccountId, "Balance": '$%s' % customerBalance } return resultMap
La sortie renvoyée par la fonction doit être un objet plat de paires clé/valeur avec des valeurs incluant uniquement des caractères alphanumériques, des tirets et des traits de soulignement. La taille des données renvoyées doit être inférieure à 32 Ko pour les données UTF -8.
L'exemple suivant montre le JSON résultat de ces fonctions Lambda :
{ "AccountId": "a12345689", "Balance": "$1000" }
Si la validation des réponses est définie surJSON, la fonction Lambda peut même renvoyer une réponse imbriquéeJSON, par exemple :
{ "Name": { "First": "John", "Last": "Doe" }, "AccountId": "a12345689", "OrderIds": ["x123", "y123"] }
Vous pouvez renvoyer n’importe quel résultat à condition qu’il s’agisse de simples paires clé-valeur.
Consommation de la réponse de la fonction Lambda
Il existe deux façons d’utiliser la réponse de la fonction dans votre flux. Vous pouvez référencer directement les variables retournées par Lambda ou stocker les valeurs renvoyées à partir de la fonction sous forme d’attributs de contact, puis référencer les attributs stockés. Lorsque vous utilisez une référence externe à une réponse envoyée par une fonction Lambda, la référence recevra toujours la réponse de la fonction la plus récemment invoquée. Pour utiliser la réponse provenant d'une fonction avant l'appel d'une fonction suivante, la réponse doit être enregistrée sous la forme d'un attribut de contact, ou être transmise en tant que paramètre à l'autre fonction.
1. Accès direct aux variables
Si vous accédez directement aux variables, vous pouvez les utiliser dans les blocs de flux, mais elles ne sont pas incluses dans les enregistrements de contact. Pour accéder à ces variables directement dans un bloc de flux, ajoutez le bloc après le bloc de AWS Lambda fonction Invoke, puis référencez les attributs comme indiqué dans l'exemple suivant :
Name - $.External.Name
Address - $.External.Address
CallerType - $.External.CallerType
L’image suivante illustre la page de propriétés du bloc Lire l’invite. Les variables sont spécifiées dans le text-to-speech bloc.
Assurez-vous que le nom spécifié pour l’attribut source correspond au nom de clé renvoyé par Lambda.
2. Stockage des variables comme attributs de contact
Si vous stockez les variables sous forme d’attributs de contact, vous pouvez les utiliser dans l’ensemble de votre flux et elles sont incluses dans les enregistrements de contact.
Pour stocker les valeurs renvoyées sous forme d'attributs de contact, puis les référencer, utilisez un bloc Set contact attributes dans votre flux après le bloc de AWS Lambda fonction Invoke. Choisissez Utiliser un attribut, puis Externe pour Type. Dans l’exemple que nous utilisons, définissez Attribut de destination sur MyAccountId
, et définissez l’attribut sur AccountId
, puis faites de même pour MyBalance
et Balance. L'image suivante illustre cette configuration.
Ajoutez une adresse en tant qu'Attribut de source et utilisez returnedContactAddress
comme Clé de destination. Ajoutez ensuite CallerType
comme Attribut de source et utilisez returnedContactType
comme Clé de destination, comme indiqué dans l’image suivante.
Assurez-vous que le nom spécifié pour l’attribut de source externe correspond au nom de clé renvoyé par Lambda.
Tutoriel : Création et invocation d’une fonction Lambda dans un flux
Étape 1 : Créer l’exemple Lambda
Connectez-vous à la AWS Lambda console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/lambda/
. -
Dans AWS Lambda, choisissez Créer une fonction.
-
Choisissez Créer à partir de zéro, si l'option n'est pas déjà sélectionnée. Sous Informations de base, dans Nom de la fonction, entrez MyFirstConnectLambda. Pour toutes les autres options, acceptez les valeurs par défaut. Ces options sont présentées dans l'image suivante de la console AWS Lambda.
-
Sélectionnez Create function (Créer une fonction).
-
Dans la zone Source du code, dans l'onglet index.js, supprimez le code du modèle dans l'éditeur de code.
-
Copiez et collez le code suivant dans l'éditeur de code tel qu'indiqué dans l'image suivante :
exports.handler = async (event, context, callback) => { // Extract information const customerNumber = event.Details.ContactData.CustomerEndpoint.Address; const companyName = event.Details.Parameters.companyName; // Fetch data const balance = await fetchBalance(customerNumber, companyName); const support = await fetchSupportUrl(companyName); // Prepare result const resultMap = { customerBalance: balance, websiteUrl: support } callback(null, resultMap); } async function fetchBalance(customerPhoneNumber, companyName) { // Get data from your API Gateway or Database like DynamoDB return Math.floor(Math.random() * 1000); } async function fetchSupportUrl(companyName) { // Get data from your API Gateway or Database like DynamoDB return 'www.GGG.com/support'; }
Ce code va générer un résultat aléatoire pourcustomerBalance.
-
Choisissez Deploy (Déployer).
-
Après avoir choisi Déployer, choisissez Tester pour lancer l'éditeur de test.
-
Dans la boîte de dialogue Configurer un événement de test, sélectionnez Créer un événement. Dans Nom de l'événement, entrez le ConnectMocknom du test.
-
Dans le JSON champ Événement, supprimez l'exemple de code et entrez le code suivant à la place.
{ "Details": { "ContactData": { "Attributes": {}, "Channel": "VOICE", "ContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "CustomerEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" }, "InitialContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "InitiationMethod": "INBOUND | OUTBOUND | TRANSFER | CALLBACK", "InstanceARN": "arn:aws:connect:aws-region:1234567890:instance/c8c0e68d-2200-4265-82c0-XXXXXXXXXX", "PreviousContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "Queue": { "ARN": "arn:aws:connect:eu-west-2:111111111111:instance/cccccccc-bbbb-dddd-eeee-ffffffffffff/queue/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "Name": "PasswordReset" }, "SystemEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" } }, "Parameters": { "companyName": "GGG" } }, "Name": "ContactFlowEvent" }
-
Choisissez Save (Enregistrer).
-
Sélectionnez Tester). Vous devriez voir apparaître quelque chose de similaire à l'image suivante :
Votre solde sera différent. Le code génère un nombre aléatoire.
Étape 2 : Ajouter votre fonction Lambda à Amazon Connect
-
Accédez à la console Amazon Connect, à l'adresse https://console.aws.amazon.com/connect/
. -
Choisissez l'alias de votre instance Amazon Connect.
-
Dans le menu de navigation, choisissez Flux.
-
Dans la AWS Lambda section, utilisez la liste déroulante Lambda Functions pour sélectionner. MyFirstConnectLambda
-
Choisissez Ajouter une fonction Lambda.
Étape 3 : Créer le flux de contacts
L'image suivante est un exemple du flux que vous allez créer en suivant les étapes de cette procédure. Il contient les blocs suivants : Définir des attributs de contact, Lire l'invite, Invoquer la fonction AWS Lambda, un autre bloc Définir des attributs de contact, un autre bloc Lire l'invite et enfin un bloc Déconnecter.
-
Connectez-vous au site Web de l' Amazon Connect administrateur à l'adresse https ://
instance name
.my.connect .aws/. -
Dans le menu de navigation, accédez à Routage, Flux, Créer un flux de contacts.
-
Faites glisser un bloc Définir des attributs de contact sur la grille et configurez sa page de propriétés comme indiqué dans l'image suivante :
-
Espace de noms = Défini par l'utilisateur.
-
Attribut = companyName.
-
Choisissez Définir manuellement. Valeur = GGG.
-
Choisissez Save (Enregistrer).
-
-
Faites glisser un bloc Lire l'invite sur la grille et configurez sa page de propriétés comme indiqué dans l'image suivante :
-
Choisissez Text-to-speech ou discutez du texte, définissez manuellement et définissez Interpret comme sur SSML. Entrez le texte suivant dans le champ correspondant au texte à prononcer :
Hello, thank you for calling $.Attributes.companyName inc.
-
Choisissez Save (Enregistrer).
-
-
Faites glisser un autre bloc Lire l'invite sur la grille et configurez sa page de propriétés comme indiqué dans l'image suivante :
-
Choisissez Text-to-speech ou discutez du texte, définissez manuellement et définissez Interpréter en tant que texte. Entrez le texte suivant dans le champ correspondant au texte à prononcer :
Please try again later.
-
Choisissez Save (Enregistrer).
-
-
Faites glisser un bloc Appel de la fonction AWS Lambda sur la grille et configurez sa page de propriétés comme indiqué dans l'image suivante :
-
Choisissez Sélectionner manuellement, puis choisissez MyFirstConnectLambdadans la liste déroulante.
-
Dans le champ Clé de destination, entrez companyName. (Cette valeur est envoyée à Lambda.)
-
Choisissez le champ Définir dynamiquement
-
Pour Espace de noms, sélectionnez Défini par l'utilisateur.
-
Pour Attribut, entrez companyName.
-
Choisissez Save (Enregistrer).
-
-
Faites glisser un bloc Définir des attributs de contact sur la grille, choisissez Ajouter un autre attribut et configurez sa page de propriétés comme indiqué dans l'image suivante :
-
Espace de noms = Défini par l'utilisateur. Attribut = MyBalance.
-
Choisissez Définir dynamiquement.
-
Espace de noms = Externe.
-
Attribut = customerBalance. C'est le résultat de Lambda.
-
Choisissez Ajouter un autre attribut.
-
Espace de noms = Défini par l'utilisateur.
-
Attribut = Mon URL.
-
Sélectionnez Définir dynamiquement. Espace de noms = Externe.
-
Attribut = websiteUrl. C'est le résultat de Lambda.
-
Choisissez Save (Enregistrer).
-
-
Faites glisser un bloc Lire l'invite sur la grille et configurez sa page de propriétés comme indiqué dans l'image suivante :
-
Choisissez Text-to-speech ou discutez avec le texte, puis définissez Interpret comme sur SSML. Saisissez le texte suivant dans le champ :
Your remaining balance is <say-as interpret-as="characters">$.Attributes.MyBalance</say-as>.
Thank you for calling $.Attributes.companyName.
Visit $.Attributes.MyURL for more information.
-
Choisissez Save (Enregistrer).
-
-
Faites glisser un bloc Déconnecter/raccrocher sur la grille.
-
Connectez tous les blocs pour que votre flux ressemble à l'image présentée en haut de cette procédure.
-
Entrez MyFirstConnectFlowle nom, puis choisissez Publier.
-
Dans le menu de navigation, accédez à Canaux, Numéros de téléphone.
-
Sélectionnez votre numéro de téléphone.
-
Sélectionnez MyFirstConnectFlowet choisissez Enregistrer.
Essayez-le maintenant. Appelez le numéro. Vous devriez entendre un message d'accueil, votre solde et le site Web à visiter.