
Compartir:
Michael es un ingeniero de software políglota, empeñado en reducir la complejidad de los sistemas y hacerlos más predecibles. Trabaja con una gran variedad de lenguajes y herramientas, y comparte sus conocimientos técnicos con audiencias de todo el mundo en grupos de usuarios y conferencias. En el día a día, Michael es un antiguo defensor de los desarrolladores en Vonage, donde pasaba su tiempo aprendiendo, enseñando y escribiendo sobre todo tipo de tecnología.
Transcripción en dos canales con grabación dividida
Tiempo de lectura: 4 minutos
Como parte de nuestra Voice API Nexmo le permite grabar partes (o la totalidad) de una llamada y recuperar el audio una vez que la llamada ha finalizado. Hoy nos complace anunciar una nueva mejora de esta funcionalidad: la grabación dividida. La grabación dividida facilita tareas comunes como la transcripción de llamadas.
Cuando la grabación dividida está activada, la grabación descargada contendrá al participante A (llamémosle Alice) en el canal izquierdo, y al participante B (llamémosle Bob) en el canal derecho. Esto te permite trabajar fácilmente con el audio de un solo participante.
En este post, vamos a recorrer un caso de uso sencillo. Alice llama al banco para obtener información sobre su Account, y Bob es el agente de atención al cliente que responde a la llamada.
Grabar la llamada en estéreo
Cuando Alice llama al número proporcionado por el banco, Nexmo responde a la llamada, reproduce un mensaje introductorio y la conecta con el número de teléfono real del banco, grabando todo el audio de la llamada. Para lograr esto, utilizarías lo siguiente Objeto de control de llamada 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"
}
]
}
]La parte importante de esta OCN es la acción record que grabará el audio y enviará la URL a https://example.com/recording una vez finalizada la llamada:
{
"action": "record",
"eventUrl": ["https://example.com/recording"]
}Para habilitar la grabación de doble canal, necesitamos actualizar esta acción para que contenga "split" : "conversation" así:
{
"action": "record",
"split" : "conversation",
"eventUrl": ["https://example.com/recording"]
}Eso es todo. Cuando obtenga la grabación de la llamada de Nexmo, tendrás el audio de Alice en el canal izquierdo y el de Bob en el derecho.
Transcripción de llamadas con IBM Watson
Una vez que tengas el archivo de audio, es hora de transcribir el texto. No hay muchos proveedores que acepten audio de dos canales y los transcriban por separado, así que para este post utilizaremos ffmpeg para dividir la pista en dos pistas mono y transcribirlas por separado utilizando la API de voz a texto de IBM.
Para dividir su archivo de audio en dos archivos, ejecute el siguiente comando en un terminal (puede que necesite instalar ffmpeg primero):
Ahora que tenemos dos archivos de audio podemos enviarlos a Watson y obtener el texto de vuelta como JSON en respuesta. Puedes usar el lenguaje de tu elección para hacer esto, pero la forma más rápida de hacer que las cosas funcionen es usando curl:
Esto nos dará dos archivos JSON similares a los siguientes:
{
"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
},
...
]
} Construir la conversación
Como pedimos marcas de tiempo, podemos reconstruir una línea de tiempo de la conversación tal y como ocurrió. Una vez más, puedes usar tu lenguaje favorito para esto (yo usaré PHP). Los pasos que tenemos que seguir son:
Recorre JSON y combina todas las entradas en una sola lista
Ordena las entradas en función de la fecha de inicio.
Muestra la conversación en orden, con la marca de tiempo, el nombre y el texto.
El código PHP para hacer esto se parece a lo siguiente:
<?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;
}
Cuando ejecutamos este código vemos nuestra conversación tal y como sucedió:
[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 Transcripción más fácil con Split Recording
La nueva función de grabación dividida de Nexmo permite grabar a dos participantes en su propio canal de audio, lo que facilita la transcripción. Para activar esta función, sólo tiene que añadir "split" : "conversation" a su record acción.
Para obtener más información sobre la grabación dividida, puede leer nuestra entrada del blog del producto sobre el lanzamiento o consultar la documentación.
Compartir:
Michael es un ingeniero de software políglota, empeñado en reducir la complejidad de los sistemas y hacerlos más predecibles. Trabaja con una gran variedad de lenguajes y herramientas, y comparte sus conocimientos técnicos con audiencias de todo el mundo en grupos de usuarios y conferencias. En el día a día, Michael es un antiguo defensor de los desarrolladores en Vonage, donde pasaba su tiempo aprendiendo, enseñando y escribiendo sobre todo tipo de tecnología.