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.
Créez des fonctions Lambda à utiliser avec la messagerie Amazon Pinpoint SMS
Cette section explique comment créer et configurer deux fonctions Lambda à utiliser avec la messagerie Amazon SMS Pinpoint. Plus tard, vous configurez API Gateway et Amazon Pinpoint pour qu'ils appellent ces fonctions lorsque certains événements se produisent. Ces deux fonctions créent et mettent à jour les points de terminaison dans le projet Amazon Pinpoint que vous spécifiez. La première fonction utilise également la fonction de validation de numéro de téléphone.
La première fonction prend les informations de votre formulaire d'inscription, qu'elle reçoit d'Amazon API Gateway. Elle utilise ces informations pour obtenir des informations sur le numéro de téléphone du client en utilisant la fonction de validation du numéro de téléphone d'Amazon Pinpoint. La fonction utilise alors les données validées pour créer un point de terminaison dans le projet Amazon Pinpoint que vous spécifiez. Par défaut, le point de terminaison que la fonction crée est exclu de vos futures communications, mais cet état peut être modifié par la deuxième fonction. Enfin, cette fonction envoie au client un message lui demandant de vérifier qu'il souhaite recevoir des SMS communications de votre part.
Pour créer la fonction Lambda
Ouvrez la AWS Lambda console à l'adresse https://console.aws.amazon.com/lambda/
. -
Sélectionnez Create function (Créer une fonction).
-
Sous Créer une fonction, choisissez Utiliser un plan.
-
Dans le champ de recherche, entrez
hello
, puis appuyez sur Entrée. Dans la liste des résultats, choisissez la fonction Node.jshello-world
, comme illustré dans l'image suivante. -
Sous Basic information (Informations de base), procédez comme suit :
-
Dans Name (Nom), saisissez un nom pour la fonction, tel que
RegistrationForm
. -
Pour Rôle, sélectionnez Choisir un rôle existant.
-
Pour Rôle existant, choisissez le SMSRegistrationFormrôle que vous avez créé dans Créer un IAM rôle.
Lorsque vous avez terminé, choisissez Create function (Créer une fonction).
-
-
Pour Code source, supprimez l'exemple de fonction dans l'éditeur de code, puis collez le code suivant :
import { PinpointClient, PhoneNumberValidateCommand, UpdateEndpointCommand, SendMessagesCommand } from "@aws-sdk/client-pinpoint"; // ES Modules import const pinClient = new PinpointClient({region: process.env.region}); // Make sure the SMS channel is enabled for the projectId that you specify. // See: https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-sms-setup.html var projectId = process.env.projectId; // You need a dedicated long code in order to use two-way SMS. // See: https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-voice-manage.html#channels-voice-manage-request-phone-numbers var originationNumber = process.env.originationNumber; // This message is spread across multiple lines for improved readability. var message = "ExampleCorp: Reply YES to confirm your subscription. 2 msgs per " + "month. No purchase req'd. Msg&data rates may apply. Terms: " + "example.com/terms-sms"; var messageType = "TRANSACTIONAL"; export const handler = async (event, context) => { console.log('Received event:', event); await validateNumber(event); }; async function validateNumber (event) { var destinationNumber = event.destinationNumber; if (destinationNumber.length == 10) { destinationNumber = "+1" + destinationNumber; } var params = { NumberValidateRequest: { IsoCountryCode: 'US', PhoneNumber: destinationNumber } }; try{ const PhoneNumberValidateresponse = await pinClient.send( new PhoneNumberValidateCommand(params)); console.log(PhoneNumberValidateresponse); if (PhoneNumberValidateresponse['NumberValidateResponse']['PhoneTypeCode'] == 0) { await createEndpoint(PhoneNumberValidateresponse, event.firstName, event.lastName, event.source); } else { console.log("Received a phone number that isn't capable of receiving " +"SMS messages. No endpoint created."); } }catch(err){ console.log(err); } } async function createEndpoint(data, firstName, lastName, source) { var destinationNumber = data['NumberValidateResponse']['CleansedPhoneNumberE164']; var endpointId = data['NumberValidateResponse']['CleansedPhoneNumberE164'].substring(1); var params = { ApplicationId: projectId, // The Endpoint ID is equal to the cleansed phone number minus the leading // plus sign. This makes it easier to easily update the endpoint later. EndpointId: endpointId, EndpointRequest: { ChannelType: 'SMS', Address: destinationNumber, // OptOut is set to ALL (that is, endpoint is opted out of all messages) // because the recipient hasn't confirmed their subscription at this // point. When they confirm, a different Lambda function changes this // value to NONE (not opted out). OptOut: 'ALL', Location: { PostalCode:data['NumberValidateResponse']['ZipCode'], City:data['NumberValidateResponse']['City'], Country:data['NumberValidateResponse']['CountryCodeIso2'], }, Demographic: { Timezone:data['NumberValidateResponse']['Timezone'] }, Attributes: { Source: [ source ] }, User: { UserAttributes: { FirstName: [ firstName ], LastName: [ lastName ] } } } }; try{ const UpdateEndpointresponse = await pinClient.send(new UpdateEndpointCommand(params)); console.log(UpdateEndpointresponse); await sendConfirmation(destinationNumber); }catch(err){ console.log(err); } } async function sendConfirmation(destinationNumber) { var params = { ApplicationId: projectId, MessageRequest: { Addresses: { [destinationNumber]: { ChannelType: 'SMS' } }, MessageConfiguration: { SMSMessage: { Body: message, MessageType: messageType, OriginationNumber: originationNumber } } } }; try{ const SendMessagesCommandresponse = await pinClient.send(new SendMessagesCommand(params)); console.log("Message sent! " + SendMessagesCommandresponse['MessageResponse']['Result'][destinationNumber]['StatusMessage']); }catch(err){ console.log(err); } }
-
Dans l'onglet Configuration des variables d'environnement, choisissez Modifier puis Ajouter une variable d'environnement, procédez comme suit :
-
Dans la première ligne, créez une variable avec la clé
originationNumber
. Ensuite, définissez la valeur sur le numéro de téléphone du code long dédié que vous avez reçu à l'étape 1.2.Note
N'oubliez pas d'inclure le signe plus (+) et le code du pays pour le numéro de téléphone. N'incluez pas inclure d'autres caractères spéciaux, comme les tirets (-), les points (.) ou les parenthèses.
-
Dans la deuxième ligne, créez une variable avec la clé
projectId
. Ensuite, définissez la valeur sur l'ID unique du projet que vous avez créé à l'étape 1.1. -
Dans la troisième ligne, créez une variable avec la clé
region
. Ensuite, définissez la valeur sur la région dans laquelle vous utilisez Amazon Pinpoint, commeus-east-1
ouus-west-2
.
Lorsque vous avez terminé, la section Environment Variables (Variables d' environnement) doit ressembler à l'exemple illustré dans l'image suivante.
-
-
Dans le haut de la page, choisissez Enregistrer.
Tester la fonction
Après avoir créé la fonction, vous devez la tester pour vous assurer qu'elle soit correctement configurée. Assurez-vous également que le IAM rôle que vous avez créé dispose des autorisations appropriées.
Pour tester la fonction
-
Choisissez l’onglet Test.
-
Choisissez Créer un nouvel événement, procédez comme suit :
-
Pour Event name (Nom d'événement), saisissez un nom pour l'événement de test, tel que
MyPhoneNumber
. -
Effacez l'exemple de code dans l'éditeur de code. Collez le code suivant :
{ "destinationNumber": "
+12065550142
", "firstName": "Carlos
", "lastName": "Salazar
", "source": "Registration form test" } -
Dans l'exemple de code précédent, remplacez les valeurs des attributs
destinationNumber
,firstName
etlastName
par les valeurs que vous souhaitez utiliser pour les tests, telles que vos coordonnées personnelles. Lorsque vous testez cette fonction, elle envoie un SMS message au numéro de téléphone que vous spécifiez dans l'destinationNumber
attribut. Assurez-vous que le numéro de téléphone que vous spécifiez est en mesure de recevoir SMS des messages. -
Sélectionnez Create (Créer).
-
-
Sélectionnez Test.
-
Sous Execution result : succeeded (Résultat de l'exécution : succès), choisissez Details (Détails). Dans la section Log output (Sortie de journal), vérifiez le résultat de la fonction. Assurez-vous que la fonction s'est exécutée sans erreurs.
Vérifiez le périphérique associé au
destinationNumber
que vous avez spécifié pour vous assurer qu'il a reçu le message de test. Ouvrez la console Amazon Pinpoint à l'adresse. https://console.aws.amazon.com/pinpoint/
-
Sur la page Tous les projets, choisissez le projet que vous avez créé dans Créer un projet Amazon Pinpoint.
-
Dans le volet de navigation, sélectionnez Segments. Sur la page Segments, choisissez Create a segment (Créer un segment).
-
Dans le groupe Segment group 1 (1er groupe de segments), sous Add filters to refine your segment (Ajouter des filtres pour affiner votre segment), choisissez Filter by user (Filtrer par utilisateur).
-
Pour Choisir un attribut utilisateur, sélectionnez FirstName. Ensuite, pour Choose values (Choisir des valeurs), choisissez le premier nom que vous avez spécifié dans l'événement de test.
La section Segment estimate (Estimation du segment) doit montrer qu'il n'existe aucun point de terminaison éligible et un point de terminaison global, comme illustré dans l'image suivante. Ce résultat est prévu. Lorsque la fonction crée un nouveau point de terminaison, le point de terminaison est désinscrit. Les segments dans Amazon Pinpoint excluent automatiquement les points de terminaison désabonnés.
La deuxième fonction est uniquement exécutée lorsqu'un client répond au message envoyé par la première fonction. Si la réponse du client inclut le mot clé que vous avez spécifié dans Activer les communications bidirectionnelles SMS, la fonction met à jour l'enregistrement de son terminal pour l'autoriser à participer aux futures communications. Amazon Pinpoint répond également automatiquement avec le message que vous avez spécifié dans Activer le mode bidirectionnel. SMS
Si le client ne répond pas ou répond autrement qu'avec le mot-clé défini, rien ne se passe. Le point de terminaison du client reste dans Amazon Pinpoint, mais il ne peut pas être ciblé par segments.
Pour créer la fonction Lambda
Ouvrez la AWS Lambda console à l'adresse https://console.aws.amazon.com/lambda/
. -
Sélectionnez Create function (Créer une fonction).
-
Sous Create a function (Créer une fonction), choisissez Blueprints (Plans).
-
Dans le champ de recherche, entrez
hello
, puis appuyez sur Entrée. Dans la liste des résultats, choisissez la fonction Node.jshello-world
, comme illustré dans l'image suivante. Choisissez Configurer. -
Sous Basic information (Informations de base), procédez comme suit :
-
Dans Name (Nom), saisissez un nom pour la fonction, tel que
RegistrationForm_OptIn
. -
Pour Rôle, sélectionnez Choisir un rôle existant.
-
Pour Rôle existant, choisissez le SMSRegistrationForm rôle que vous avez créé dans Créer un IAM rôle.
Lorsque vous avez terminé, choisissez Create function (Créer une fonction).
-
-
Supprimez l'exemple de fonction dans l'éditeur de code, puis collez le code suivant :
import { PinpointClient, UpdateEndpointCommand } from "@aws-sdk/client-pinpoint"; // ES Modules import // Create a new Pinpoint client instance with the region specified in the environment variables const pinClient = new PinpointClient({ region: process.env.region }); // Get the Pinpoint project ID and the confirm keyword from environment variables const projectId = process.env.projectId; const confirmKeyword = process.env.confirmKeyword.toLowerCase(); // This is the main handler function that is invoked when the Lambda function is triggered export const handler = async (event, context) => { console.log('Received event:', event); try { // Extract the timestamp, message, and origination number from the SNS event const timestamp = event.Records[0].Sns.Timestamp; const message = JSON.parse(event.Records[0].Sns.Message); const originationNumber = message.originationNumber; const response = message.messageBody.toLowerCase(); // Check if the response message contains the confirm keyword if (response.includes(confirmKeyword)) { // If the confirm keyword is found, update the endpoint's opt-in status await updateEndpointOptIn(originationNumber, timestamp); } }catch (error) { console.error('An error occurred:', error); throw error; // Rethrow the error to handle it upstream } }; // This function updates the opt-in status of a Pinpoint endpoint async function updateEndpointOptIn(originationNumber, timestamp) { // Extract the endpoint ID from the origination number const endpointId = originationNumber.substring(1); // Prepare the parameters for the UpdateEndpointCommand const params = { ApplicationId: projectId, EndpointId: endpointId, EndpointRequest: { Address: originationNumber, ChannelType: 'SMS', OptOut: 'NONE', Attributes: { OptInTimestamp: [timestamp] }, } }; try { // Send the UpdateEndpointCommand to update the endpoint's opt-in status const updateEndpointResponse = await pinClient.send(new UpdateEndpointCommand(params)); console.log(updateEndpointResponse); console.log(`Successfully changed the opt status of endpoint ID ${endpointId}`); } catch (error) { console.error('An error occurred while updating endpoint:', error); throw error; // Rethrow the error to handle it upstream } }
-
Sous Environment variables (Variables d'environnement), effectuez les opérations suivantes :
-
Dans la première ligne, créez une variable avec la clé
projectId
. Ensuite, définissez la valeur sur l'ID unique du projet que vous avez créé dans Create an Amazon Pinpoint project. -
Dans la deuxième ligne, créez une variable avec la clé
region
. Ensuite, définissez la valeur sur la région dans laquelle vous utilisez Amazon Pinpoint, commeus-east-1
ouus-west-2
. -
Dans la troisième ligne, créez une variable avec la clé
confirmKeyword
. Ensuite, définissez la valeur sur le mot clé de confirmation que vous avez créé dans Activer bidirectionnel SMS.Note
Le mot-clé n'est pas sensible à la casse. Cette fonction convertit le message entrant en minuscules.
Lorsque vous avez terminé, la section Environment Variables (Variables d' environnement) doit ressembler à l'exemple illustré dans l'image suivante.
-
-
Dans le haut de la page, choisissez Enregistrer.
Tester la fonction
Après avoir créé la fonction, vous devez la tester pour vous assurer qu'elle soit correctement configurée. Assurez-vous également que le IAM rôle que vous avez créé dispose des autorisations appropriées.
Pour tester la fonction
-
Sélectionnez Tester).
-
Sur la fenêtre Configure test event (Configurer un événement de test), procédez de la façon suivante :
-
Choisissez Create new test event.
-
Pour Event name (Nom d'événement), saisissez un nom pour l'événement de test, tel que
MyResponse
. -
Effacez l'exemple de code dans l'éditeur de code. Collez le code suivant :
{ "Records":[ { "Sns":{ "Message":"{\"originationNumber\":\"
+12065550142
\",\"messageBody\":\"Yes
\"}", "Timestamp":"2019-02-20T17:47:44.147Z" } } ] }Dans l'exemple de code précédent, remplacez les valeurs de l'attribut
originationNumber
par le numéro de téléphone que vous avez utilisé lorsque vous avez testé la fonction Lambda précédente. Remplacez la valeur demessageBody
par le SMS mot clé bidirectionnel que vous avez spécifié dans Activer le mode bidirectionnel SMS. Le cas échéant, vous pouvez remplacer la valeurTimestamp
par la date et l'heure actuelles. -
Sélectionnez Create (Créer).
-
-
Choisissez Test à nouveau.
-
Sous Execution result : succeeded (Résultat de l'exécution : succès), choisissez Details (Détails). Dans la section Log output (Sortie de journal), vérifiez le résultat de la fonction. Assurez-vous que la fonction s'est exécutée sans erreurs.
Ouvrez la console Amazon Pinpoint à l'adresse. https://console.aws.amazon.com/pinpoint/
-
Sur la page Tous les projets, choisissez le projet que vous avez créé dans Créer un projet Amazon Pinpoint.
-
Dans le volet de navigation, sélectionnez Segments. Sur la page Segments, choisissez Create a segment (Créer un segment).
-
Dans le groupe Segment group 1 (1er groupe de segments), sous Add filters to refine your segment (Ajouter des filtres pour affiner votre segment), choisissez Filter by user (Filtrer par utilisateur).
-
Pour Choisir un attribut utilisateur, sélectionnez FirstName. Ensuite, pour Choose values (Choisir des valeurs), choisissez le premier nom que vous avez spécifié dans l'événement de test.
La section Segment estimate (Estimation du segment) doit montrer qu'il existe un point de terminaison éligible et un point de terminaison global.
Suivant : Configurer Amazon API Gateway