
Compartilhar:
Michael é um engenheiro de software poliglota, empenhado em reduzir a complexidade dos sistemas e torná-los mais previsíveis. Trabalhando com diversas linguagens e ferramentas, ele compartilha seus conhecimentos técnicos com públicos de todo o mundo em grupos de usuários e conferências. No dia a dia, Michael é ex-representante de desenvolvedores da Vonage, onde dedicava seu tempo a aprender, ensinar e escrever sobre todos os tipos de tecnologia.
Transcrição de dois canais com gravação dividida
Tempo de leitura: 4 minutos
Como parte da nossa Voice API , a Nexmo permite que você grave partes (ou a totalidade) de uma chamada e baixe o áudio assim que a chamada for concluída. Hoje, temos o prazer de anunciar uma nova melhoria nessa funcionalidade: a gravação dividida. A gravação dividida torna tarefas comuns, como a transcrição de chamadas, ainda mais fáceis.
Quando a gravação dividida estiver ativada, a gravação baixada conterá a participante A (vamos chamá-la de Alice) no canal esquerdo e o participante B (vamos chamá-lo de Bob) no canal direito. Isso permite que você trabalhe facilmente com o áudio de um único participante.
Nesta postagem, vamos analisar um caso de uso simples. Alice liga para o banco para obter informações sobre sua conta, e Bob é o atendente de atendimento ao cliente que atende a ligação.
Grave a ligação em estéreo
Quando Alice liga para o número fornecido pelo banco, o Nexmo atende a chamada, reproduz uma mensagem introdutória e a transfere para o número de telefone real do banco — gravando todo o áudio da chamada. Para fazer isso, você usaria o seguinte Objeto de Controle de Chamadas da Nexmo (NCCO):
[
{
"action": "talk",
"text": "This call may be recorded for security and quality purposes"
},
{
"action": "record",
"eventUrl": ["https://example.com/recording"]
},
{
"action": "connect",
"eventUrl": ["https://example.com/events"],
"from": "447700900000",
"endpoint": [
{
"type": "phone",
"number": "447700900001"
}
]
}
]A parte importante deste NCCO é a record ação, que gravará o áudio e enviará a URL para https://example.com/recording assim que a chamada for concluída:
{
"action": "record",
"eventUrl": ["https://example.com/recording"]
}Para habilitar a gravação em canal duplo, precisamos atualizar esta ação para que fique "split" : "conversation" da seguinte forma:
{
"action": "record",
"split" : "conversation",
"eventUrl": ["https://example.com/recording"]
}É só isso! Quando você baixar a gravação da ligação da Nexmo, você terá o áudio da Alice no canal esquerdo e o do Bob no direito.
Transcrição de chamadas com o IBM Watson
Depois de ter o arquivo de áudio, é hora de transcrever o texto. Não há muitos serviços que aceitem áudio de dois canais e os transcrevam separadamente; por isso, para este post, vamos usar ffmpeg para dividir a faixa em duas faixas mono e transcrevê-las separadamente usando API de conversão de fala em texto da IBM.
Para dividir seu arquivo de áudio em dois arquivos, execute o seguinte comando em um terminal (talvez seja necessário instalar ffmpeg primeiro):
Agora que temos dois arquivos de áudio, podemos enviá-los ao Watson e receber o texto de volta como JSON na resposta. Você pode usar a linguagem de sua preferência para fazer isso, mas a maneira mais rápida de colocar tudo para funcionar é usando curl:
Isso nos dará dois arquivos JSON semelhantes aos seguintes:
{
"results": [
{
"alternatives": [
{
"timestamps": [
[
"my",
3.83,
3.94
],
[
"name",
3.94,
4.18
],
[
"is",
4.18,
4.31
],
[
"Alice",
4.31,
4.96
]
],
"confidence": 0.923,
"transcript": "my name is Alice "
}
],
"final": true
},
...
]
} Construa a conversa
Como solicitamos os carimbos de data e hora, podemos reconstruir uma linha do tempo da conversa exatamente como ela ocorreu. Mais uma vez, você pode usar sua linguagem de programação preferida para isso (eu vou usar PHP). As etapas que precisamos seguir são:
Percorrer o JSON e juntar todas as entradas em uma única lista
Ordene os registros com base no carimbo de data e hora de início.
Exiba a conversa em ordem, mostrando a data e a hora, o nome e o texto.
O código PHP para fazer isso é o seguinte:
<?php
$left = json_decode(file_get_contents('left.json'))->results;
$right = json_decode(file_get_contents('right.json'))->results;
function mapEntry($input, $name, $conversation = []) {
foreach ($input as $entry){
$text = $entry->alternatives[0];
$conversation[] = [
'from' => $name,
'ts' => $text->timestamps[0][2],
'text' => $text->transcript
];
}
return $conversation;
}
$conversation = mapEntry($left, 'Alice');
$conversation = mapEntry($right, 'Bob', $conversation);
usort($conversation, function($a, $b) {
return $a['ts'] > $b['ts'];
});
foreach ($conversation as $c) {
echo '['.$c['ts'].'s] '.$c['from'].': '.$c['text'].PHP_EOL;
}
Ao executarmos esse código, vemos nossa conversa exatamente como aconteceu:
[0.63s] Bob: welcome to the call what's your name
[3.94s] Alice: my name is Alice
[7.05s] Bob: how are you feeling today
[10.17s] Alice: great thank you
[11.81s] Bob: how can I help
[13.74s] Alice: I'd like information about my account
[20.1s] Bob: thank you for the information I'm connecting you to my colleague ashley now Transcrição facilitada com a gravação dividida
O novo recurso de gravação separada da Nexmo permite gravar dois participantes em seus próprios canais de áudio, facilitando muito a transcrição. Para ativar o recurso, basta adicionar "split" : "conversation" à sua record ação.
Para saber mais sobre gravação dividida, você pode ler nossa postagem no blog do produto sobre o lançamento ou confira a documentação.
Compartilhar:
Michael é um engenheiro de software poliglota, empenhado em reduzir a complexidade dos sistemas e torná-los mais previsíveis. Trabalhando com diversas linguagens e ferramentas, ele compartilha seus conhecimentos técnicos com públicos de todo o mundo em grupos de usuários e conferências. No dia a dia, Michael é ex-representante de desenvolvedores da Vonage, onde dedicava seu tempo a aprender, ensinar e escrever sobre todos os tipos de tecnologia.