Gravação e transcrição de chamadas

Visão geral

A Voice API da Vonage oferece a possibilidade de gravar o áudio das chamadas de várias maneiras. Você pode:

  1. Gravar uma ligação entre duas pessoas de forma passiva, como se fosse um “monitoramento”.
  2. Grave o áudio de um único interlocutor quando ele for solicitado a fazê-lo. Por exemplo, em um sistema de correio de voz.
  3. Ativar a gravação de uma conversa específica (usando a ação de conversa).

Por padrão, todas as gravações são em formato mono, com todas as partes da conversa em um único canal.

A Vonage também oferece um gravação dividida Recurso em que o áudio será salvo como um arquivo estéreo. Nesse caso, o áudio falado pelo autor da chamada inicial ficará no canal esquerdo, e o áudio ouvido por ele ficará no canal direito. Isso costuma ser útil para enviar a sistemas de transcrição, quando se deseja identificar quem disse o quê.

Para gravar uma conversa, você pode usar o record ação em um NCCO. A gravação funcionará de maneira diferente dependendo de como você configurar a ação. Para obter mais informações sobre como configurar uma gravação, consulte o registrar referência NCCO

Assim que o record Quando a ação terminar, a Vonage enviará um webhook para o eventUrl que você especificou ao configurar o record ação. Este webhook contém uma URL na qual o arquivo de gravação pode ser baixado. Para baixar o arquivo de gravação, você precisará se autenticar com um JWT assinado pela mesma chave de aplicativo que criou a gravação.

Transcrição de chamadas também está disponível; a Vonage enviará um webhook para um eventUrl assim que a transcrição estiver concluída. Esse webhook contém uma URL na qual a transcrição pode ser acessada. Da mesma forma que na gravação, você precisará se autenticar. Observe que esse é um recurso pago; as tarifas exatas podem ser consultadas na Preços da Voice API página na seção “Recursos programáveis”.

NOTA: Após a conclusão da gravação, ela fica armazenada pela Vonage por 30 dias antes de ser excluída automaticamente

Gravação síncrona

A record a ação será concluída quando o endOnSilence o tempo limite foi atingido, ou o endOnKey a chave é enviada ou o timeout for atingido. Nesse momento, a gravação será encerrada e um evento de gravação será enviado para o seu event_url antes que a próxima ação seja executada. Isso é utilizado em situações semelhantes às do correio de voz.

Gravação assíncrona

Se nenhuma das endOnSilence, endOnKey ou timeout Se essa opção estiver definida, a gravação funcionará de maneira assíncrona e passará instantaneamente para a próxima ação, sem interromper a gravação da chamada. A gravação só será encerrada e o evento relevante será enviado quando a chamada for encerrada. Isso é utilizado em cenários semelhantes ao monitoramento de chamadas.

Ao gravar uma conversa nomeada, a gravação é sempre assíncrona e está vinculada ao ciclo de vida da conferência. Para gravar uma conferência, é necessário definir o record atribuir a true no seu conversation ação no NCCO.

Gravação dividida

Ao gravar uma chamada, você pode ativar a gravação dividida, o que fará com que a gravação seja um arquivo estéreo, em que um canal contém o áudio enviado pelo interlocutor e o outro canal contém o áudio ouvido pelo interlocutor.

Gravação multicanal

Ao gravar uma chamada, você pode ativar a gravação multicanal, que permite que até 32 trechos da chamada sejam gravados separadamente. Será gerado um único arquivo com o número de canais definido.

Neste exemplo, iniciamos uma gravação multicanal que prevê três participantes (channels: 3), e em seguida conecta mais dois números à conversa. Cada participante aparecerá em seu próprio canal na gravação.

Para obter mais informações sobre o record ação, consulte o Referência NCCO

[
  {
    "action": "record",
    "eventUrl": ["https://example.com/recordings"],
    "split": "conversation",
    "channels": 3
  },
  {
    "action": "connect",
    "eventUrl": ["https://example.com/events"],
    "from":"447700900000",
    "endpoint": [
      {
        "type": "phone",
        "number": "447700900001"
      }
    ]
  },
  {
    "action": "connect",
    "eventUrl": ["https://example.com/events"],
    "from":"447700900000",
    "endpoint": [
      {
        "type": "phone",
        "number": "447700900002"
      }
    ]
  }
]

Se você tiver adicionado outro connect Nessa configuração do NCCO, os dois primeiros participantes apareceriam em seus próprios canais, enquanto os participantes três e quatro apareceriam juntos no canal 3. Nesse cenário, seria necessário aumentar o número de canais para 4, a fim de que cada participante tivesse seu próprio canal. É possível ter até 32 participantes em uma única conversa.

Formatos de arquivo

  • O Vonage suporta gravações nos formatos MP3, OGG ou WAV; o padrão é o MP3 (ou WAV para gravações com mais de 2 canais).
  • Os arquivos MP3 são gravados com profundidade de 16 bits e taxa de amostragem de 16 kHz. Eles são codificados com uma taxa de bits constante de 32 Kbps.
  • Os arquivos WAV são gravados com profundidade de 16 bits e taxa de amostragem de 16 kHz.

Todos os formatos são mono por padrão. Se a gravação dividida estiver ativada, é criado um arquivo estéreo em que cada canal utiliza a profundidade de bits e as taxas de amostragem mencionadas anteriormente.

Transcrição

Se o transcription Se essa opção estiver ativada, a gravação será transcrita usando o valor padrão para language, en-US:

[
    {
        "action": "record",
        "eventUrl":["https://example.com/recording"],
        "transcription": {}
    }
]

Observação: há um limite máximo de 2 horas para a transcrição de chamadas de voz.

Além disso, esse é um recurso pago; as tarifas exatas podem ser consultadas no Preços da Voice API página na seção “Recursos programáveis”.

Usando as configurações de transcrição, você pode definir uma eventUrl e language pelas suas transcrições. Você pode encontrar mais informações no Referência NCCO. Você também pode optar por realizar uma análise de sentimento em cada segmento da gravação da chamada.

[
    {
        "action": "record",
        "eventUrl":["https://example.com/recording"],
        "transcription":
        {
            "eventMethod": "POST",
            "eventUrl":["https://example.com/transcription"],
            "language": "en-US",
            "sentimentAnalysis": "true"
        }
    }
]

Assim que a transcrição estiver concluída, você receberá uma notificação na sua gravação eventUrl. Se uma gravação eventUrl Se não for especificado, o webhook será enviado para o seu aplicativo eventUrl:

{
  "conversation_uuid": "CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
  "recording_uuid": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
  "status": "transcribed",
  "transcription_url": "https://api.nexmo.com/v1/files/bbbbbbbb-aaaa-cccc-dddd-0123456789ab",
  "type": "record"
}

Usando o transcription_url Você pode enviar uma solicitação GET para recuperar a transcrição. Será necessário se autenticar com um JWT assinado pela mesma chave de aplicativo que criou a gravação. A resposta do transcription_url conterá as frases e uma análise detalhada, palavra por palavra, com suas respectivas pontuações de confiança e de análise de sentimento:

{
  "ver": "1.0.19",
  "request_id": "6226182254ce513117079b58",
  "channels": [
    {
      "transcript": [
        {
          "sentence": "Transcription example test.",
          "timestamp": 9630,
          "duration": 2642,
          "action_items": [],
          "questions": [],
          "answers": [],
          "raw_sentence": "transcription example test",
          "words": [
            {
              "word": "transcription",
              "start_time": 9630,
              "end_time": 10887,
              "confidence": 1
            },
            {
              "word": "example",
              "start_time": 10952,
              "end_time": 11726,
              "confidence": 0.990055
            },
            {
              "word": "test",
              "start_time": 11728,
              "end_time": 12272,
              "confidence": 0.486845
            }
          ],
          "sentiments": [
            {
              "text_part": "transcription example test",
              "score": 0.1213
            }
          ]
        }
      ],
      "duration": 16.2
    }
  ]
}