

**Avis de fin de support :** le 30 octobre 2026, le support d'Amazon Pinpoint AWS prendra fin. Après le 30 octobre 2026, vous ne pourrez plus accéder à la console Amazon Pinpoint ni aux ressources Amazon Pinpoint (points de terminaison, segments, campagnes, parcours et analytique). Pour plus d’informations, consultez [Fin de la prise en charge d’Amazon Pinpoint](https://docs.aws.amazon.com/console/pinpoint/migration-guide). **Remarque :** en ce qui APIs concerne les SMS, la voix, le push mobile, l'OTP et la validation des numéros de téléphone ne sont pas concernés par cette modification et sont pris en charge par AWS la messagerie utilisateur final.

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 SMS Amazon Pinpoint
<a name="tutorials-two-way-sms-part-3"></a>

Cette section explique comment créer et configurer deux fonctions Lambda à utiliser avec la messagerie SMS Amazon Pinpoint. Plus tard, vous configurez API Gateway et Amazon Pinpoint pour appeler 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.

## Créer la fonction qui valide les informations clients et crée les points de terminaison
<a name="tutorials-two-way-sms-part-3-create-register-function"></a>

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](https://docs.aws.amazon.com/pinpoint/latest/developerguide/validate-phone-numbers.html) 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 leur demandant de vérifier qu'ils souhaitent recevoir des communications SMS de votre part.

**Pour créer la fonction Lambda**

1. Ouvrez la AWS Lambda console à l'adresse [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Choisissez **Créer une fonction**.

1. Sous **Créer une fonction**, choisissez **Utiliser un plan**.

1. Dans le champ de recherche, entrez **hello**, puis appuyez sur Entrée. Dans la liste des résultats, choisissez la fonction Node.js `hello-world`, comme illustré dans l'image suivante.   
![La page Créer une fonction indiquant Utiliser un plan est sélectionnée.](http://docs.aws.amazon.com/fr_fr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step1.5.png)

1. 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 rôle de **SMSRegistrationformulaire** que vous avez créé dans [Créer un rôle IAM](tutorials-two-way-sms-part-2.md#tutorials-two-way-sms-part-2-create-role).

   Lorsque vous avez terminé, choisissez **Create function (Créer une fonction)**.

1. 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);
     }
   }
   ```

1. 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](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel).
**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](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project).
   + 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, comme **us-east-1** ou **us-west-2**.

   Lorsque vous avez terminé, la section **Environment Variables (Variables d' environnement)** doit ressembler à l'exemple illustré dans l'image suivante.  
![Les variables d'environnement pour OriginationNumber, ProjectiD et region.](http://docs.aws.amazon.com/fr_fr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step1.7.png)

1. Dans le haut de la page, choisissez **Enregistrer**.

### Tester la fonction
<a name="tutorials-two-way-sms-part-3-create-register-function-test"></a>

Après avoir créé la fonction, vous devez la tester pour vous assurer qu'elle soit correctement configurée. De plus, assurez-vous que le rôle IAM que vous avez créé possède les autorisations appropriées.

**Pour tester la fonction**

1. Choisissez l’onglet **Test**.

1. 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` et `lastName` par les valeurs que vous souhaitez utiliser pour les tests, telles que vos coordonnées personnelles. Lorsque vous testez cette fonction, elle envoie un message SMS au numéro de téléphone que vous spécifiez dans l'attribut `destinationNumber`. Assurez-vous que le numéro de téléphone que vous spécifiez est en mesure de recevoir des messages SMS.
   + Choisissez **Créer**.

1. Sélectionnez **Test**.

1. 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.

1. Ouvrez la console Amazon Pinpoint à l'adresse. [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. Sur la page **Tous les projets**, choisissez le projet que vous avez créé dans [Créer un projet Amazon Pinpoint](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project).

1. Dans le volet de navigation, sélectionnez **Segments**. Sur la page **Segments**, choisissez **Create a segment (Créer un segment)**.

1. 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)**.

1. 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.  
![Le groupe de segments ne présentant aucun point final.](http://docs.aws.amazon.com/fr_fr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step8.9.png)

## Créer la fonction qui inscrit les clients à vos communications
<a name="tutorials-two-way-sms-part-3-create-optin-function"></a>

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 SMS bidirectionnels](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel), 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 les SMS bidirectionnels](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel).

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

1. Ouvrez la AWS Lambda console à l'adresse [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Choisissez **Créer une fonction**.

1. Sous **Create a function (Créer une fonction)**, choisissez **Blueprints (Plans)**.

1. Dans le champ de recherche, entrez **hello**, puis appuyez sur Entrée. Dans la liste des résultats, choisissez la fonction Node.js `hello-world`, comme illustré dans l'image suivante. Choisissez **Configurer**.

1. 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 rôle de SMSRegistration formulaire que vous avez créé dans [Créer un rôle IAM](tutorials-two-way-sms-part-2.md#tutorials-two-way-sms-part-2-create-role).

   Lorsque vous avez terminé, choisissez **Create function (Créer une fonction)**.

1. 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
       }
   }
   ```

1. 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](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project) 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, comme **us-east-1** ou **us-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 les SMS bidirectionnels](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel).
**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.  
![Les variables d'environnement pour ProjectID, region et ConfirmKeyword.](http://docs.aws.amazon.com/fr_fr/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step2.7.png)

1. Dans le haut de la page, choisissez **Enregistrer**.

### Tester la fonction
<a name="tutorials-two-way-sms-part-3-create-optin-function-test"></a>

Après avoir créé la fonction, vous devez la tester pour vous assurer qu'elle soit correctement configurée. De plus, assurez-vous que le rôle IAM que vous avez créé possède les autorisations appropriées.

**Pour tester la fonction**

1. Sélectionnez **Tester)**.

1. Sur la fenêtre **Configure test event (Configurer un événement de test)**, procédez de la façon suivante :

   1. Choisissez **Create new test event**.

   1. Pour **Event name (Nom d'événement)**, saisissez un nom pour l'événement de test, tel que **MyResponse**.

   1. 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 de `messageBody` par le mot clé SMS bidirectionnel que vous avez spécifié dans [Activer les SMS bidirectionnels](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-enable-two-way). Le cas échéant, vous pouvez remplacer la valeur `Timestamp` par la date et l'heure actuelles.

   1. Choisissez **Créer**.

1. Choisissez **Test** à nouveau.

1. 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.

1. Ouvrez la console Amazon Pinpoint à l'adresse. [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. Sur la page **Tous les projets**, choisissez le projet que vous avez créé dans [Créer un projet Amazon Pinpoint](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project).

1. Dans le volet de navigation, sélectionnez **Segments**. Sur la page **Segments**, choisissez **Create a segment (Créer un segment)**.

1. 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)**.

1. 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** : [Configuration d'Amazon API Gateway](tutorials-two-way-sms-part-4.md)