

**Aviso de fim do suporte:** em 30 de outubro de 2026, AWS encerrará o suporte para o Amazon Pinpoint. Após 30 de outubro de 2026, você não poderá mais acessar o console do Amazon Pinpoint nem seus recursos (endpoints, segmentos, campanhas, jornadas e analytics). Para obter mais informações, consulte [Fim do suporte do Amazon Pinpoint](https://docs.aws.amazon.com/console/pinpoint/migration-guide). **Observação:** APIs relacionados a SMS, voz, push móvel, OTP e validação de número de telefone não são afetados por essa alteração e são compatíveis com o AWS End User Messaging.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Criar funções do Lambda para uso com mensagens SMS do Amazon Pinpoint
<a name="tutorials-two-way-sms-part-3"></a>

Esta seção mostra como criar e configurar duas funções do Lambda para uso com o sistema de mensagens SMS do Amazon Pinpoint. Depois, você configurará o API Gateway e o Amazon Pinpoint para invocar essas funções quando determinados eventos ocorrerem. Ambas as funções criam e atualizam endpoints no projeto do Amazon Pinpoint que você especifica. A primeira função também usa o recurso de validação do número de telefone.

## Criar a função que valida as informações do cliente e cria endpoints
<a name="tutorials-two-way-sms-part-3-create-register-function"></a>

A primeira função usa detalhes do seu formulário de registro, que recebe do Amazon API Gateway. Ela usa essas informações para obter informações sobre o número de telefone do cliente usando o atributo de [validação do número de telefone](https://docs.aws.amazon.com/pinpoint/latest/developerguide/validate-phone-numbers.html) do Amazon Pinpoint. Depois, a função usa os dados validados para criar um endpoint no projeto do Amazon Pinpoint que você especificar. Por padrão, o endpoint que a função cria é cancelado em suas futuras comunicações, mas esse status pode ser alterado pela segunda função. Por fim, essa função envia ao cliente uma mensagem solicitando que ele verifique se deseja receber suas comunicações por SMS.

**Para criar a função do Lambda**

1. Abra o AWS Lambda console em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Escolha a opção **Criar função**.

1. Em **Criar uma função**, escolha **Usar um esquema**.

1. No campo de pesquisa, digite **hello** e pressione Enter. Na lista de resultados, escolha a função do Node.js `hello-world`, como mostra a imagem a seguir.   
![\[A página Criar função mostrando Usar um esquema selecionado.\]](http://docs.aws.amazon.com/pt_br/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step1.5.png)

1. Em **Basic information** (Informações básicas), faça o seguinte:
   + Em **Name (Nome)**, insira um nome para a função, como **RegistrationForm**.
   + Em **Role (Função)**, selecione **Choose an existing role (Escolher uma função existente)**.
   + Em **Função existente**, escolha a função de **SMSRegistrationformulário** que você criou em [Criar uma função do IAM](tutorials-two-way-sms-part-2.md#tutorials-two-way-sms-part-2-create-role).

   Ao concluir, selecione **Create function (Criar função)**.

1. Em **Origem do código** exclua a função de exemplo no editor de código e cole o código a seguir:

   ```
   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. Na guia **Configuração** das **Variáveis de ambiente**, escolha **Editar**, depois **Adicionar variável de ambiente**, faça o seguinte:
   + Na primeira linha, crie uma variável com uma chave de **originationNumber**. Em seguida, defina o valor para o número de telefone do código longo dedicado que você recebeu na [Etapa 1.2](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel).
**nota**  
Não deixe de incluir o sinal de mais (\$1) e o código do país para o número de telefone. Não inclua outros caracteres especiais, como traços (-), pontos (.) ou parênteses.
   + Na segunda linha, crie uma variável com uma chave de **projectId**. Em seguida, defina o valor para o ID exclusivo do projeto que você criou na [Etapa 1.1](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project).
   + Na terceira linha, crie uma variável com uma chave de **region**. Em seguida, defina o valor para a região em que você usa o Amazon Pinpoint, como **us-east-1** ou **us-west-2**.

   Quando você terminar, a seção **Environment Variables (Variáveis de ambiente)** deve ser semelhante ao exemplo mostrado na imagem a seguir.  
![\[As variáveis de ambiente para originationNumber, projectId e region.\]](http://docs.aws.amazon.com/pt_br/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step1.7.png)

1. Na parte superior da página, escolha **Save (Salvar)**.

### Testar a função
<a name="tutorials-two-way-sms-part-3-create-register-function-test"></a>

Depois de criar a função, você deve testá-la para verificar se está configurada corretamente. Além disso, verifique se o perfil do IAM que você criou tem as permissões apropriadas.

**Para testar a função**

1. Selecione a guia **Testar**.

1. Escolha **Criar novo evento** e faça o seguinte:
   + Em **Event name (Nome do evento)**, insira um nome para o evento de teste, como **MyPhoneNumber**.
   + Apague o código de exemplo no editor de código. Cole o seguinte código:

     ```
     {
       "destinationNumber": "+12065550142",
       "firstName": "Carlos",
       "lastName": "Salazar",
       "source": "Registration form test"
     }
     ```
   + No exemplo de código anterior, substitua os valores dos atributos `destinationNumber`, `firstName` e `lastName` pelos valores que você deseja usar para teste, como seus detalhes de contato pessoais. Ao testar essa função, ele envia uma mensagem SMS para o número de telefone especificado por você no atributo `destinationNumber`. Certifique-se de que o número de telefone especificado possa receber mensagens SMS.
   + Escolha **Criar**.

1. Escolha **Testar**.

1. Em **Execution result: succeeded (Resultado de execução: bem-sucedido)**, selecione **Details (Detalhes)**. Na seção **Log output (Resultado de saída do log)**, analise a saída da função. Certifique-se de que a função foi executada sem erros.

   Verifique o dispositivo associado ao `destinationNumber` que você especificou para garantir que recebeu a mensagem de teste.

1. Abra o console do Amazon Pinpoint em. [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. Na página **Todos os projetos**, escolha o projeto que você criou em [Criar um projeto do Amazon Pinpoint](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project).

1. No painel de navegação, selecione **Segmentos**. Na página **Segmentos**, selecione **Criar um segmento**.

1. Em **Segment group 1 (Grupo de segmentos 1)**, em **Add filters to refine your segment (Adicionar filtros para refinar seu segmento)**, escolha **Filter by user (Filtrar por usuário)**.

1. Em **Escolher um atributo de usuário**, escolha **FirstName**. Depois, para **Choose values (Escolha valores)**, escolha o nome que você especificou no evento de teste.

   A seção **Segment estimate (Estimativa de segmento)** deve mostrar que há zero endpoints elegíveis e um endpoint total, conforme mostrado na imagem a seguir. Tal resultado é esperado. Quando a função cria um endpoint, o endpoint é cancelado. Os segmentos no Amazon Pinpoint excluem automaticamente os endpoints excluídos.  
![\[O grupo de segmentos mostrando zero endpoints.\]](http://docs.aws.amazon.com/pt_br/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step8.9.png)

## Criar a função que habilita os clientes às suas comunicações
<a name="tutorials-two-way-sms-part-3-create-optin-function"></a>

A segunda função é executada somente quando um cliente responde à mensagem enviada pela primeira função. Se a resposta do cliente inclui a palavra-chave especificada em [Habilitar SMS bidirecional](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel), a função atualiza os registros de endpoint para habilitá-lo a futuras comunicações. O Amazon Pinpoint também responde automaticamente com a mensagem que você especificou em [Habilitar SMS bidirecional](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel).

Se o cliente não responder ou responder com algo diferente da palavra-chave designada, nada acontecerá. O endpoint do cliente permanece no Amazon Pinpoint, mas não pode ser direcionado por segmentos.

**Para criar a função do Lambda**

1. Abra o AWS Lambda console em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Escolha a opção **Criar função**.

1. Em **Create function (Criar função)**, escolha **Blueprints (Esquemas)**.

1. No campo de pesquisa, digite **hello** e pressione Enter. Na lista de resultados, escolha a função do Node.js `hello-world`, como mostra a imagem a seguir. Selecione **Configurar**.

1. Em **Basic information** (Informações básicas), faça o seguinte:
   + Em **Name (Nome)**, insira um nome para a função, como **RegistrationForm\$1OptIn**.
   + Em **Role (Função)**, selecione **Choose an existing role (Escolher uma função existente)**.
   + Em **Função existente**, escolha a função de SMSRegistration formulário que você criou em [Criar uma função do IAM](tutorials-two-way-sms-part-2.md#tutorials-two-way-sms-part-2-create-role).

   Ao concluir, selecione **Create function (Criar função)**.

1. Exclua a função de exemplo no editor de código e cole o código a seguir:

   ```
   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. Em **Environment variables (Variáveis de ambiente)**, faça o seguinte:
   + Na primeira linha, crie uma variável com uma chave de **projectId**. Em seguida, defina o valor como o ID exclusivo do projeto que você criou em [Criar um projeto Amazon Pinpoint](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project).
   + Na segunda linha, crie uma variável com uma chave de **region**. Em seguida, defina o valor para a região em que você usa o Amazon Pinpoint, como **us-east-1** ou **us-west-2**.
   + Na terceira linha, crie uma variável com uma chave de **confirmKeyword**. Em seguida, defina o valor para a palavra-chave de confirmação que você criou em [Habilitar SMS bidirecional](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel).
**nota**  
A palavra-chave não diferencia maiúsculas e minúsculas. Essa função converte a mensagem recebida em letras minúsculas.

   Quando você terminar, a seção **Environment Variables (Variáveis de ambiente)** deve ser semelhante ao exemplo mostrado na imagem a seguir.  
![\[As variáveis de ambiente para projectId, region e confirmKeyword.\]](http://docs.aws.amazon.com/pt_br/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step2.7.png)

1. Na parte superior da página, escolha **Save (Salvar)**.

### Testar a função
<a name="tutorials-two-way-sms-part-3-create-optin-function-test"></a>

Depois de criar a função, você deve testá-la para verificar se está configurada corretamente. Além disso, verifique se o perfil do IAM que você criou tem as permissões apropriadas.

**Para testar a função**

1. Escolha **Testar**.

1. Na janela **Configure test event (Configurar evento de teste)**, faça o seguinte:

   1. Selecione **Criar evento de teste**.

   1. Em **Event name (Nome do evento)**, insira um nome para o evento de teste, como **MyResponse**.

   1. Apague o código de exemplo no editor de código. Cole o seguinte código:

      ```
      {
        "Records":[
          {
            "Sns":{
              "Message":"{\"originationNumber\":\"+12065550142\",\"messageBody\":\"Yes\"}",
              "Timestamp":"2019-02-20T17:47:44.147Z"
            }
          }
        ]
      }
      ```

      No exemplo de código anterior, substitua os valores do atributo `originationNumber` pelo número de telefone que você usou quando você testou a função do Lambda anterior. Substitua o valor de `messageBody` pela palavra-chave SMS bidirecional especificada em [Habilitar SMS bidirecional](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-enable-two-way). Como opção, você pode substituir o valor de `Timestamp` pela data e hora atuais.

   1. Escolha **Criar**.

1. Escolha **Test (Testar)** novamente.

1. Em **Execution result: succeeded (Resultado de execução: bem-sucedido)**, selecione **Details (Detalhes)**. Na seção **Log output (Resultado de saída do log)**, analise a saída da função. Certifique-se de que a função foi executada sem erros.

1. Abra o console do Amazon Pinpoint em. [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. Na página **Todos os projetos**, escolha o projeto que você criou em [Criar um projeto do Amazon Pinpoint](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project).

1. No painel de navegação, selecione **Segmentos**. Na página **Segmentos**, selecione **Criar um segmento**.

1. Em **Segment group 1 (Grupo de segmentos 1)**, em **Add filters to refine your segment (Adicionar filtros para refinar seu segmento)**, escolha **Filter by user (Filtrar por usuário)**.

1. Em **Escolher um atributo de usuário**, escolha **FirstName**. Depois, para **Choose values (Escolha valores)**, escolha o nome que você especificou no evento de teste.

   A seção **Segment estimate (Estimativa de segmento)** deve mostrar que há um endpoint elegível e um endpoint total.

**Próximo**: [configurar o Amazon API Gateway](tutorials-two-way-sms-part-4.md)