

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

# Saiba mais sobre os eventos de telefonia que invocam AWS Lambda funções para o serviço de áudio PSTN do Amazon Chime SDK
<a name="invoking-Lambda"></a>

O serviço de áudio invoca AWS Lambda funções em resposta a eventos diferentes. Cada invocação especifica um tipo de evento de invocação e fornece os detalhes da chamada, incluindo seus participantes, se aplicável. Os tópicos a seguir descrevem os eventos do Serviço de Áudio que invocam AWS Lambda funções. 

# Fazer uma chamada de saída para usar o serviço de áudio PSTN do SDK do Amazon Chime
<a name="use-create-call-api"></a>

Para criar uma chamada de saída, use a API [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html). A API invoca o endpoint de um especificado `SIP media application ID`. Os clientes podem controlar o fluxo da chamada fornecendo diferentes ações de sinalização e [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_SipMediaApplication.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_SipMediaApplication.html) por meio do endpoint. 

No caso de uma resposta bem-sucedida, a API exibe um código de status http 202 com um transactionId, que pode ser usado com a API [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html) para atualizar uma chamada em andamento.

O diagrama a seguir mostra as invocações feitas no endpoint da AWS Lambda função para uma chamada de saída.

![\[Diagrama mostrando o fluxo de programação para invocações feitas no endpoint do AWS Lambda.\]](http://docs.aws.amazon.com/pt_br/chime-sdk/latest/dg/images/sip-api-1.png)


O endpoint configurado para o aplicativo de mídia SIP é chamado para diferentes status da chamada de saída. Quando um cliente inicia uma chamada, o SDK do Amazon Chime invoca o endpoint com um tipo de evento de invocação `NEW_OUTBOUND_CALL`. 

Este exemplo mostra um evento de invocação típico para `NEW_OUTBOUND_CALL`.

```
{
    "SchemaVersion": "1.0",
        "Sequence": 1,
        "InvocationEventType": "NEW_OUTBOUND_CALL",
        "CallDetails": {
            "TransactionId": "transaction-id",
            "AwsAccountId": "aws-account-id",
            "AwsRegion": "us-east-1",
            "SipApplicationId": "sip-application-id",
            "Participants": [
                {
                    "CallId": "call-id-1",
                    "ParticipantTag": "LEG-A",
                    "To": "+1xxxx",
                    "From": "+1xxxxxxx",
                    "Direction": "Outbound",
                    "StartTimeInMilliseconds": "159700958834234"
                }
            ]
    }
}
```

Qualquer resposta para uma AWS Lambda invocação relacionada a um evento é ignorada.

Quando recebemos uma notificação `RINGING` do receptor, o SDK do Amazon Chime invoca novamente o endpoint configurado. 

Este exemplo mostra um evento de invocação típico para `RINGING`.

```
{
    "SchemaVersion": "1.0",
        "Sequence": 1,
        "InvocationEventType": "RINGING",
        "CallDetails": {
            "TransactionId": "transaction-id",
            "AwsAccountId": "aws-account-id",
            "AwsRegion": "us-east-1",
            "SipApplicationId": "sip-application-id",
            "Participants": [
                {
                    "CallId": "call-id-1",
                    "ParticipantTag": "LEG-A",
                    "To": "+1xxxx",
                    "From": "+1xxxxxxx",
                    "Direction": "Outbound",
                    "StartTimeInMilliseconds": "159700958834234"
                }
           ]
    }
}
```

Qualquer resposta para uma AWS Lambda invocação relacionada a um evento é ignorada.

Se o receptor não atender a chamada ou a chamada falhar devido a um erro, o Chime desconectará a chamada e invocará o endpoint com o tipo de evento `Hangup`. Para obter mais informações sobre os tipos de evento `Hangup`, consulte [Encerrar uma chamada usando o serviço de áudio PSTN do SDK do Amazon Chime](case-5.md). 

Se a chamada for atendida, o Chime invoca o endpoint com a ação `CALL_ANSWERED`. Este exemplo mostra um evento de invocação típico.

```
{
  "SchemaVersion": "1.0",
    "Sequence": 1,
    "InvocationEventType": "CALL_ANSWERED",
    "CallDetails": {
        ""TransactionId": "transaction-id",
            "AwsAccountId": "aws-account-id",
            "AwsRegion": "us-east-1",
            "SipApplicationId": "sip-application-id",
            "Participants": [
                {
                    "CallId": "call-id-1",
                    "ParticipantTag": "LEG-A",
                    "To": "+1xxxx",
                    "From": "+1xxxxxxx",
                    "Direction": "Outbound",
                    "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

Nesse ponto, você pode retornar ações respondendo à invocação com uma lista de ações. Se você não quiser executar nenhuma ação, responda com uma lista vazia. Você pode responder com no máximo 10 ações para cada AWS Lambda invocação e pode invocar uma função Lambda 1.000 vezes por chamada. Para obter mais informações sobre como responder com conjuntos de ações, consulte [Responder a invocações com listas de ações usando o serviço de áudio PSTN do SDK do Amazon Chime](invoke-on-call-leg.md).

# Receber uma chamada de entrada usando o serviço de áudio PSTN do SDK do Amazon Chime
<a name="case-1"></a>

Quando ocorre um evento `NEW_INCOMING_CALL`, o serviço de áudio cria um `TransactionID` único e um `CallID` único que persiste até que o evento `HANGUP` ocorra.

Você pode responder de várias maneiras a um evento `NEW_INCOMING_CALL`. Por exemplo:
+ Envie ações `PlayAudio` ou `RecordAudio` e atenda automaticamente a chamada. 
+ Envie uma ação `Pause`.
+ Envie uma ação `Hangup`. Nesse caso, a chamada não será atendida e o cliente não será cobrado.
+ Envie uma ação `CallAndBridge` e adicione outro usuário à chamada.
+ Não faça nada, a tentativa de chamada atinge o tempo limite após 30 segundos.

Quando uma nova chamada de entrada é recebida, o aplicativo de mídia SIP invoca uma função AWS Lambda com essa carga.

```
{
    "SchemaVersion": "1.0",
    "Sequence": 2,
    "InvocationEventType": "NEW_INBOUND_CALL"
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

# Especificar ações em resposta a eventos de telefonia do serviço de áudio PSTN do SDK do Amazon Chime
<a name="use-case-2"></a>

No Serviço de Áudio, os aplicativos de mídia SIP AWS Lambda invocam funções. Por sua vez, as funções do Lambda podem retornar uma lista de instruções conhecidas como *ações*. Uma ação é um item que você deseja executar em uma parte de uma chamada telefônica, como enviar ou receber dígitos, participar de uma reunião, e assim por diante. Para ter mais informações sobre as ações invocadas pelo serviço de áudio PSTN, consulte [Noções básicas sobre eventos de telefonia do serviço de áudio PSTN do SDK do Amazon Chime](pstn-invocations.md).

Quando um aplicativo de mídia SIP executa com êxito uma lista de ações, o aplicativo chama a AWS Lambda função com um evento de invocação do tipo. `ACTION_SUCCESSFUL` Se alguma das ações não for concluída, o aplicativo de mídia SIP chamará a AWS Lambda função com o `ACTION_FAILED` evento.

O aplicativo de mídia SIP só retornará `ACTION_SUCCESSFUL` se todas as ações na lista forem bem-sucedidas. Se alguma das ações na lista falhar, o aplicativo de mídia SIP invoca a AWS Lambda função com o `ACTION_FAILED` evento e limpa as ações restantes na lista após a falha. Em seguida, o aplicativo de mídia SIP executa a próxima ação retornada pela AWS Lambda função. Você usa a chave `ActionData` para identificar qual chamada invocou a função.

O evento a seguir mostra um exemplo de carga útil para o tipo de evento de invocação `ACTION_SUCCESSFUL` após uma ação `PlayAudioAndGetDigits`.

```
{
    "SchemaVersion": "1.0",
    "Sequence": 3,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData": {
        "Type": "PlayAudioAndGetDigits",
        "Parameters" : {
            "CallId": "call-id-1",
            "AudioSource": {
                "Type": "S3",
                "BucketName": "bucket-name",
                "Key": "failure-audio-file.wav"
            },
            "FailureAudioSource": {
                "Type": "S3",
                "BucketName": "bucket-name",
                "Key": "failure-audio-file.wav"
            },
            "MinNumberOfDigits": 3,
            "MaxNumberOfDigits": 5,
            "TerminatorDigits": ["#"],
            "InBetweenDigitsDurationInMilliseconds": 5000,
            "Repeat": 3,
            "RepeatDurationInMilliseconds": 10000
        },
        "ReceivedDigits": "123"
    }
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
                }
            ]
        }
    }
}
```

Quando qualquer ação em uma lista não é concluída com êxito, o aplicativo de mídia SIP invoca a AWS Lambda função para notificá-lo sobre a falha e fazer com que um novo conjunto de ações seja executado nessa chamada. O evento a seguir mostra o exemplo de carga útil para o tipo de evento de invocação `ACTION_FAILED` após uma ação `PlayAudio`.

```
{
    "SchemaVersion": "1.0",
    "Sequence": 4,
    "InvocationEventType": "ACTION_FAILED",
    "ActionData": {
        "Type": "PlayAudio",
        "Parameters" : {
            "CallId": "call-id-1",
            "AudioSource": {
                "Type": "S3",
                "BucketName": "bucket-name",
                "Key": "audio-file.wav"            
            }
        },
        "ErrorType": "InvalidAudioSource",
        "ErrorMessage": "Audio Source parameter value is invalid."
    }
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
}
```

# Receber a entrada do chamador para o serviço de áudio PSTN do SDK do Amazon Chime
<a name="case-4"></a>

Você usa a ação `ReceiveDigits` para coletar dígitos DTMF de entrada e compará-los com uma expressão regular. Quando o aplicativo de mídia SIP recebe dígitos que correspondem à expressão regular, ele invoca uma AWS Lambda função com um evento. `ACTION_SUCCESSFUL` Os dígitos coletados aparecem no valor `ReceivedDigits` do objeto `ActionData`.

Por exemplo:

```
{
    "SchemaVersion": "1.0",
    "Sequence": 4,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData": {
        "ReceivedDigits": "",
        "Type": "ReceiveDigits",
        "Parameters": {
            "CallId": "call-id-1",
            "InputDigitsRegex": "^\d{2}#$",
            "InBetweenDigitsDurationInMilliseconds": 5000,
            "FlushDigitsDurationInMilliseconds": 10000
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

Quando o chamador insere dígitos que correspondem ao seu padrão de expressão regular, o aplicativo de mídia SIP invoca uma AWS Lambda função que retorna o seguinte tipo de carga útil:

```
{
    "SchemaVersion": "1.0",
    "Sequence": 5,
    "InvocationEventType": "DIGITS_RECEIVED",
    "ActionData": {
        "ReceivedDigits": "11#",
        "Type": "ReceiveDigits",
        "Parameters": {
            "CallId": "call-id-1",
            "InputDigitsRegex": "^\d{2}#$",
            "InBetweenDigitsDurationInMilliseconds": 5000,
            "FlushDigitsDurationInMilliseconds": 10000
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

Veja um exemplo prático em GitHub: [https://github.com/aws-samples/amazon-chime-sma-on-demand-recording](https://github.com/aws-samples/amazon-chime-sma-on-demand-recording)

# Atualizar chamadas em andamento para áudio PTSN do SDK do Amazon Chime
<a name="update-sip-call"></a>

Como parte do serviço de áudio PSTN, as aplicações de mídia SIP permitem determinar ações que são executadas em uma chamada invocando funções do Lambda definidas pelo usuário com base nos eventos da chamada, como uma chamada de entrada ou dígitos DTMF. A [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html)A API permite que você acione uma função Lambda a qualquer momento enquanto uma chamada está ativa, substituindo as ações atuais por novas ações retornadas pela invocação.

**Fluxo de trabalho**  
Você usa o [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html)API em vários casos, como adicionar participantes a uma reunião, ativar e desativar o som do usuário, desconectá-lo e assim por diante. O caso de uso a seguir descreve um fluxo de trabalho típico.

Um usuário chama e escuta música enquanto o SDK do Amazon Chime configura a reunião. Após a conclusão da configuração, o SDK do Amazon Chime interrompe o áudio e admite o chamador na reunião. Em seguida, suponha o uso de um sistema separado, `MyMeetingService`, que gerencia reuniões. Todas as chamadas recebidas devem ser suspensas. O Chime notifica MyMeetingService sobre as chamadas recebidas e, em MyMeetingService seguida, cria um participante para cada chamada e, quando MyMeetingService estiver pronto para iniciar a reunião, notifica o aplicativo de mídia SIP e fornece um token para ingressar na reunião.

Para lidar com esse caso, a função do Lambda precisa implementar a seguinte lógica. 
+ Quando chega uma nova chamada, o Lambda é invocado com um evento `NEW_INBOUND_CALL`. O Lambda chama `MyMeetingService` e passa o `transactionId` que identifica a chamada atual e retorna à ação `PlayAudio`.
+ Quando o `MyMeetingService` estiver pronto para adicionar o chamador à reunião, o serviço chama o [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html)API e passa a chamada `transactionId` e `JoinToken` como parte de seus argumentos. Essa chamada de API aciona a função do Lambda novamente, agora com o evento `CALL_UPDATE_REQUESTED`. Eles MyMeetingService passam `JoinToken` para a função Lambda como parte do evento, e o token é usado para retornar a `JoinChimeMeeting` ação ao aplicativo de mídia SIP, que interrompe a `PlayAudio` ação e conecta o chamador à reunião.

![\[Diagrama mostrando o fluxo de dados na API UpdateSipMediaApplicationCall.\]](http://docs.aws.amazon.com/pt_br/chime-sdk/latest/dg/images/update-sip-call-flow3.png)


**nota**  
A [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html)A API retorna HTTP 202 (aceito). O aplicativo de mídia SIP confirma que a chamada está em andamento e pode ser atualizada, então ele tenta invocar a função do Lambda. A invocação é executada de forma assíncrona, portanto, uma resposta bem-sucedida da API não garante que a função do Lambda tenha sido iniciada ou concluída.

O exemplo a seguir mostra a sintaxe da solicitação.

```
{
    "SipMediaApplicationId": "string",
    "TransactionId": "string",
    "Arguments": {
        "string": "string"
    } 
}
```

**Parâmetros de solicitação**
+ `SipMediaApplicationId`: o ID da aplicação de mídia SIP que processa a chamada. 
+ `TransactionId`: o ID da transação da chamada. Para chamadas de entrada, o `TransactionId` pode ser obtido do evento `NEW_INCOMING_CALL` passado para a função do Lambda em sua primeira invocação. Para chamadas de saída, `TransactionId` é retornado na resposta de [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html). 
+ **Argumentos** – Argumentos personalizados disponibilizados para a função do Lambda como parte dos dados da ação `CallUpdateRequest`. Pode conter de 0 a 20 pares de chave/valor.

O exemplo a seguir mostra uma solicitação típica.

```
aws chime update-sip-media-application-call --sip-media-application-id feb37a7e-2b66-49fb-b2dd-30f4780dc36d --transaction-id 1322a4e7-c106-4e70-aaaf-a8fa4c77c0cb --arguments '{"JoinToken": "abc123"}'
```

**Sintaxe da resposta**

```
{
  "SipMediaApplicationCall": {
  "TransactionId": "string"
  }
}
```

**Elementos de resposta**
+ **TransactionId**— O ID da transação da chamada, o mesmo ID da solicitação.

O exemplo a seguir mostra um evento de invocação `CALL_UPDATE_REQUESTED`.

```
{
  "SchemaVersion": "1.0",
  "Sequence": 2,
  "InvocationEventType": "CALL_UPDATE_REQUESTED",
  "ActionData": {
    "Type": "CallUpdateRequest",
    "Parameters": {
      "Arguments": {
        "string": "string"
      }
    }
  },
  "CallDetails": {
    ...
  }
}
```

**Elementos de evento**
+ **SchemaVersion**— A versão do esquema JSON (1.0)
+ **Sequência** – O número de sequência do evento na chamada
+ **InvocationEventType**— O tipo de evento de invocação do Lambda, neste caso, `CALL_UPDATE_REQUESTED`
+ **ActionData**— Os dados associados à `CallUpdateRequest` ação.
  + **Tipo** – O tipo de ação, nesse caso, `CallUpdateRequest`
  + **Parâmetros** – Os parâmetros da ação
    + **Argumentos** – Os argumentos passados como parte da solicitação da API `UpdateSipMediaApplicationCall`
+ **CallDetails**— As informações sobre o estado atual da chamada

**Como entender ações interruptíveis e não interruptíveis**  
Quando uma função do Lambda retorna uma nova lista de ações enquanto as ações existentes são executadas, todas as ações que seguem a ação em andamento são substituídas pelas novas ações. Em alguns casos, a função do Lambda interrompe as ações em andamento para executar novas ações imediatamente.

O diagrama a seguir mostra um exemplo típico. O texto abaixo do diagrama explica a lógica.

![\[Diagrama mostrando como as ações podem ser substituídas durante uma chamada contínua do aplicativo de mídia SIP.\]](http://docs.aws.amazon.com/pt_br/chime-sdk/latest/dg/images/update-sip-actions.png)


Se a Ação 2 for interruptível, nós a paramos e, em vez disso, executamos a nova Ação 1.

Se a Ação 2 não for interruptível, ela será concluída antes do início da nova Ação 1.

Em ambos os casos, a Ação 3 não é executada.

Se algo interromper uma ação, a função do Lambda é invocada com um evento `ACTION_INTERRUPTED`. Este evento é usado apenas para fins informativos. O aplicativo de mídia SIP ignora todas as ações retornadas por essa invocação.

Tipos de ações interruptíveis:
+ `PlayAudio`
+ `RecordAudio`
+ `Pause`

**Amostra de função do Lambda**  
Este exemplo mostra uma função do Lambda típica que reproduz um arquivo de áudio, passa um token de junção e atualiza a chamada.

```
const MMS = require('my-meeting-service');
const myMeetingServiceClient = new MMS.Client();

exports.handler = async (event) => {
    console.log('Request: ' + JSON.stringify(event));
    
    const playAudio = () => {
      return {
        Type: 'PlayAudio',
        Parameters: {
          ParticipantTag: 'LEG-A',
          AudioSource: {
            Type: 'S3',
            BucketName: 'chime-meetings-audio-files-bucket-name',
            Key: 'welcome.wav'
          }
        }
      }
    }
    
    const joinChimeMeeting = (joinToken) => {
      return {
        Type: 'JoinChimeMeeting',
        Parameters: {
          JoinToken: joinToken
        }
      }
    }
    
    const response = (...actions) => {
      const r = {
        SchemaVersion: '1.0',
        Actions: actions
      };
      console.log('Response: ' + JSON.stringify(r));
      return r;
    };
    
    switch (event.InvocationEventType) {
      case 'NEW_INBOUND_CALL': 
        myMeetingServiceClient.addPendingCall(event.CallDetails.TransactionId);         
        return response(playAudio());      
      case 'CALL_UPDATE_REQUESTED':
        const joinToken = event.ActionData.Parameters.Arguments['JoinToken']
        return response(joinChimeMeeting(joinToken));
      default:
        return response();
    }
}
```

# Encerrar uma chamada usando o serviço de áudio PSTN do SDK do Amazon Chime
<a name="case-5"></a>

É possível usar a API [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html) para encerrar uma chamada de saída. A API invoca o endpoint de um **ID de aplicativo de mídia SIP** especificado. Os clientes podem controlar o fluxo da chamada retornando as ações ao aplicativo de mídia SIP.

No caso de uma resposta bem-sucedida, a API exibe um código de status http 202 com o `transactionId`, que pode ser usado com a API [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html) para atualizar uma chamada em andamento.

O diagrama a seguir mostra as invocações feitas no endpoint da AWS Lambda função para uma chamada de saída.

![\[O fluxo de dados quando você invoca a API CreateSipMediaApplicationCall. A API invoca um endpoint diferente quando o status de uma chamada de saída é alterado.\]](http://docs.aws.amazon.com/pt_br/chime-sdk/latest/dg/images/sip-api-1.png)


O endpoint configurado para o aplicativo de mídia SIP é chamado para diferentes status da chamada de saída. Quando um cliente encerra uma chamada, o SDK do Amazon Chime invoca o endpoint com um tipo de evento de invocação `HANGUP`. 

Este exemplo mostra um evento de invocação típico para `HANGUP`.

```
{
    "SchemaVersion": "1.0",
    "Sequence": 6,
    "InvocationEventType": "HANGUP",
    "ActionData": {
        "Type": "Hangup",
        "Parameters": {
            "CallId": "call-id-1",
            "ParticipantTag": "LEG-A"
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "Direction": "Inbound",
                 "To": "+12065551212",
                "From": "+15105550101",
                "StartTimeInMilliseconds": "1597009588",
                "Status": "Disconnected"
            }
        ]
    }
}

// if LEG-B receives a hangup in a bridged call, such as a meeting ending
{
    "SchemaVersion": "1.0",
    "Sequence": 6,
    "InvocationEventType": "HANGUP",
    "ActionData": {
        "Type": "ReceiveDigits",
        "Parameters": {
            "CallId": "call-id-2",
            "ParticipantTag": "LEG-B"
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "Leg-A",
                 "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "1597009588",
                "Status": "Connected"
            },
            {
                "CallId": "call-id-2",
                "ParticipantTag": "Leg-B",
                "To": "+17035550122",
                "From": "SMA",
                "Direction": "Outbound",
                "StartTimeInMilliseconds": "15010595",
                "Status": "Disconnected"
            }
        ]
    }
}
```

# Entendendo end-to-end as chamadas para o serviço de áudio PSTN do Amazon Chime SDK
<a name="use-cases"></a>

Esse caso de uso fornece um exemplo de código para receber uma chamada telefônica de um chamador PSTN, cumprimentar o chamador com uma mensagem de áudio, obter o PIN da reunião do chamador, reproduzir áudio e juntar o chamador à reunião.

**Eventos de invocação e ações**  
O serviço de áudio transmite eventos de invocação para AWS Lambda funções como objetos JSON. Os objetos incluem o tipo de evento de invocação e quaisquer metadados relevantes. A função AWS Lambda também retorna ações do aplicativo de mídia SIP como objetos JSON, e esses objetos incluem um tipo de ação e quaisquer metadados relevantes.

A tabela a seguir lista os eventos de invocação e os possíveis `ActionData.Type` quando você recebe um evento de invocação.


|  Evento de invocação  |  ActionData.Tipo  | 
| --- | --- | 
|  ACTION\$1SUCCESSFUL  |  CallAndBridge ReceiveDigits PlayAudio PlayAudioAndGetDigits  JoinChimeMeeting ModifyChimeMeetingAttendees RecordMeeting  | 
|  ACTION\$1FAILED  |  CallAndBridge PlayAudio PlayAudioAndGetDigits ModifyChimeMeetingAttendees RecordMeeting  | 
| HANGUP |  HangUp  | 
|  DIGITS\$1RECEIVED  | ReceiveDigits | 

**nota**  
Para implementar o seguinte caso de uso, você precisa de pelo menos um número de telefone em seu inventário do SDK do Amazon Chime, um objeto gerenciado pelo aplicativo de mídia SIP que usa uma função AWS Lambda com um nome do recurso da Amazon (ARN) e uma regra SIP que usa o número de telefone como acionador.

Quando o Amazon Chime SDK recebe uma chamada para o número de telefone especificado na regra, o serviço de áudio PSTN invoca uma AWS Lambda função com o tipo de evento de invocação. `NEW_INBOUND_CALL`

```
{
    "SchemaVersion": "1.0",
    "Sequence": 1,
    "InvocationEventType": "NEW_INBOUND_CALL",
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+11234567890",
                "From": "+19876543210",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

Você pode programar a AWS Lambda função para validar os detalhes da chamada e armazená-los para uso futuro. Para um `NEW_INBOUND_CALL` evento, a AWS Lambda função responde com um conjunto de ações que reproduzem uma solicitação de boas-vindas e solicitam o PIN da reunião.

Os arquivos de áudio têm os seguintes requisitos:
+ É necessário reproduzir arquivos de áudio de um bucket do Amazon Simple Storage Service (S3). O bucket do S3 deve pertencer à mesma AWS conta do aplicativo de mídia SIP. Além disso, você deve dar a permissão `s3:GetObject` à entidade principal responsável pelo serviço de conector de voz do SDK do Amazon Chime — `voiceconnector.chime.amazonaws.com`. Você pode usar o console do S3 ou a interface de linha de comandos (CLI) para fazer isso.
+ Você deve usar arquivos PCM WAV de tamanho não superior a 50 MB. O Amazon Chime SDK recomenda 8 mono. KHz 
+ Os metadados do S3 para cada arquivo WAV devem conter `{'ContentType': 'audio/wav'}`.

```
{
    "SchemaVersion": "1.0",
    "Actions": [
        {
            "Type" : "PlayAudio",    
            "Parameters" : {
                "CallId": "call-id-1",
                
                "AudioSource": {
                    "Type": "S3",
                    "BucketName": "chime-meetings-audio-files-bucket-name",
                    "Key": "welcome-to-meetings.wav"
                }
            }
        },
        {
            "Type": "PlayAudioAndGetDigits",
            "Parameters" : {
                "ParticipantTag": "LEG-A",
                
                "AudioSource": {
                    "Type": "S3",
                    "BucketName": "chime-meetings-audio-files-bucket-name",
                    "Key": "enter-meeting-pin.wav"
                },
                "FailureAudioSource": {
                    "Type": "S3",
                    "BucketName": "chime-meetings-audio-files-bucket-name",
                    "Key": "invalid-meeting-pin.wav"
                },
                "MinNumberOfDigits": 3,
                "MaxNumberOfDigits": 5,
                "TerminatorDigits": ["#"],
                "InBetweenDigitsDurationInMilliseconds": 5000,
                "Repeat": 3,
                "RepeatDurationInMilliseconds": 10000
            }
        }
    ]
}
```

O aplicativo de mídia SIP executa essas ações no trecho de chamada A. Supondo que a `PlayAudioAndGetDigits` ação receba os dígitos, o aplicativo de mídia SIP invoca a função com o AWS Lambda tipo de evento. `ACTION_SUCCESSFUL`

```
{
    "SchemaVersion": "1.0",
    "Sequence": 2,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData": {
        "Type": "PlayAudioAndGetDigits",
        "Parameters" : {
            "ParticipantTag": "LEG-A",
            "AudioSource": {
                "Type": "S3",
                "BucketName": "chime-meetings-audio-files-bucket-name",
                "Key": "enter-meeting-pin.wav"
            },
            "FailureAudioSource": {
                "Type": "S3",
                "BucketName": "chime-meetings-audio-files-bucket-name",
                "Key": "invalid-meeting-pin.wav"
            },
            "MinNumberOfDigits": 3,
            "MaxNumberOfDigits": 5,
            "TerminatorDigits": ["#"],
            "InBetweenDigitsDurationInMilliseconds": 5000,
            "Repeat": 3,
            "RepeatDurationInMilliseconds": 10000
        },
        "ReceivedDigits": "12345" // meeting PIN
    },
    "CallDetails": {
        ... // same as in previous event
    }
}
}
```

Você pode programar uma AWS Lambda função para identificar o chamador com base nos `CallDetails` dados. Você também pode validar o PIN da reunião recebido anteriormente. Assumindo um PIN correto, você então usa [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html)e [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateAttendee.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateAttendee.html) APIs para criar a reunião do Amazon Chime SDK e gerar o token de junção usado pelo participante da reunião. A AWS Lambda função responde com a ação de participar da reunião do Amazon Chime SDK.

```
{
    "SchemaVersion": "1.0",
    "Actions": [
        {
            "Type": "JoinChimeMeeting",
            "Parameters": {
                "JoinToken": "meeting-attendee-join-token"
            }
        }
    ]
}
```

Supondo que `JoinToken` seja válido, o aplicativo de mídia SIP se junta à reunião do Amazon Chime SDK e invoca uma AWS Lambda função com o `ACTION_SUCCESSFUL` evento, onde `CallDetails` contém os dados do aplicativo de mídia SIP e do serviço Chime Media () `LEG-B` 

```
{
    "SchemaVersion": "1.0",
    "Sequence": 3,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData": {
        "Type" : "JoinChimeMeeting",
        "Parameters" : {
            "JoinToken": "meeting-attendee-join-token"
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id", 
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+11234567890",
                "From": "+19876543210",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            },
            {
                "CallId": "call-id-2",
                "ParticipantTag": "LEG-B",
                "To": "SMA",
                "From": "+17035550122",
                "Direction": "Outbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

Se você quiser parar de executar ações na chamada ou no trecho da chamada neste momento, você pode responder com um conjunto vazio de ações.

```
{
    "SchemaVersion": "1.0"
    "Actions": []
}
```

Depois que o chamador desliga, o aplicativo de mídia SIP invoca a função com o AWS Lambda evento. `HANGUP` 

```
{
    "SchemaVersion": "1.0",
    "Sequence": 4,
    "InvocationEventType": "HANGUP",
    "ActionData": {
        "Type": "Hangup",
        "Parameters": {
            "CallId": "call-id-1",
            "ParticipantTag": "LEG-A"
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id", 
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+11234567890",
                "From": "+19876543210",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Disconnected"
            },
            {
                "CallId": "call-id-2",
                "ParticipantTag": "LEG-B",
                "To": "SMA",
                "From": "+17035550122",
                "Direction": "Outbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Disconnected"
            }
        ]
    }
}
```

Se você responder a um evento `Hangup` com uma ação, o aplicativo de mídia SIP ignorará a ação se nenhum outro `Participants` mostrar um `Status` de `Connected`.