Mejores prácticas | Cree un sistema de llamadas salientes inteligente y simple basado en Tencent Cloud MRCP-Server

1. Introducción a la arquitectura inteligente de llamadas salientes

Las llamadas salientes inteligentes se han desarrollado en China durante muchos años y la tecnología en general ya está muy madura. Entonces, ¿qué debería incluir un sistema simple e inteligente de llamadas salientes?

 

  • Operador : Los recursos de línea del operador son la base del sistema de llamadas salientes, en China son China Mobile, China Unicom, China Telecom y algunos integradores.
  • Centro de llamadas : El software y hardware relacionados con los centros de llamadas se utilizan para conectar las líneas de los operadores. Hay muchos productos maduros en el mercado y los principales proveedores de la nube también tienen servicios en la nube relacionados.
    • También existen algunas soluciones de código abierto, como freeswitch y asterisk, y hay mucha información en Internet como referencia.
  • Plataforma SAAS saliente : Se utiliza para encadenar todo el proceso de llamada, esta parte es relativamente fácil de implementar y los fabricantes nacionales la desarrollan básicamente ellos mismos.
  • Capacidades de IA : capacidades de reconocimiento de voz, síntesis de voz y plataforma de diálogo inteligente, relacionadas con la experiencia central del sistema inteligente de llamadas salientes, ya sea inteligente, antropomórfico, etc.

Proceso simple de llamadas salientes inteligentes

Lo anterior presenta la composición general del sistema inteligente de llamadas salientes, pero ¿cómo se ejecuta específicamente? El siguiente es un ejemplo sencillo de una convocatoria saliente para investigación epidémica.

 

En el ejemplo, hay dos rondas de diálogo. El contenido del cuadro es la transmisión de voz del robot. Las dos respuestas "¿Es cierto" y "Es positivo" son las respuestas del cliente. El juicio se realiza después del reconocimiento de voz.

En el sistema inteligente de llamadas salientes, normalmente hay dos formas de conectar el reconocimiento de voz y la síntesis de voz:

  1. La plataforma SAAS saliente llama directamente al reconocimiento de voz y a la síntesis de voz.
    • Este método generalmente utiliza el flujo de audio completo del cliente para el reconocimiento de voz (para admitir funciones como interrupción durante la transmisión, lógica de palabras clave durante la transmisión, interrupción y respuesta durante la transmisión, etc.)
  2. Llame a la interfaz MRCP-Server a través de IVR para llamar al reconocimiento de voz y a la síntesis de voz
    • El audio para cada reconocimiento de voz es un breve fragmento de audio que activa el reconocimiento después de que el robot lo transmite (similar al ejemplo anterior, es el clip de voz de las dos respuestas "¿Soy yo?" y "¿Es positivo?"). )

A continuación observamos los diagramas de secuencia correspondientes a los dos métodos respectivamente.

Sin proceso de servidor MRCP

  • El costo de desarrollo de esta solución es alto: gran parte de la lógica de control del proceso de llamada está dentro de la "plataforma SAAS saliente" y debe estar conectada al reconocimiento de voz, la síntesis de voz, la plataforma de diálogo inteligente y otras partes.
  • Cuando se conecta la llamada saliente, la transmisión de audio del cliente se envía continuamente a la plataforma SAAS saliente y la transmisión de audio se envía continuamente al reconocimiento de voz para obtener resultados de reconocimiento en tiempo real.
  • Los resultados completos del reconocimiento de llamadas se pueden utilizar para implementar interrupciones en transmisiones de robots, identificación y procesamiento de palabras clave de clientes en transmisiones (como transferencia manual, nuevas respuestas, etc.)

 

Hay un proceso MRCP-Server

  • El costo de desarrollo de esta solución es mucho menor que el de la versión 2.1. Generalmente, los principales fabricantes tienen componentes listos para usar para el servidor MRCP que interactúa con el reconocimiento y la síntesis de voz, por lo que no es necesario desarrollarlo.
  • Esta solución llamará a mrcp-server para iniciar el reconocimiento solo después de que el robot termine de transmitir o sea interrumpido, y envíe el audio del cliente para el reconocimiento de voz.

 

Como protocolo estándar, MRCP es compatible con básicamente todos los centros de llamadas del mercado y es relativamente fácil conectarse a él. Hablemos del proceso de conexión a Tencent Cloud MRCP-Server.

2. Acoplamiento del servidor Tencent Cloud MRCP

Antes de iniciar la conexión, debemos activar los servicios de síntesis de voz y reconocimiento de voz de Tencent Cloud.

Habilitar reconocimiento de voz y síntesis de voz

Haga clic en  Tencent Cloud Speech Recognition Console  , Tencent Cloud Speech Synthesis Console respectivamente y haga clic para activar el servicio inmediatamente.

 

Puede hacer clic aquí para recibir un paquete de recursos de experiencia para principiantes:  Reconocimiento de voz_Reconocimiento de voz en tiempo real_Reconocimiento de archivos de grabación_Servicio de voz a texto-Tencent Cloud

 

Obtenga la clave API para llamar al servicio

El acceso a los servicios de Tencent Cloud requiere una clave secreta. En la página de administración de claves API de la administración de acceso a Tencent Cloud , puede crear una nueva clave secreta. Esta debe conservarse bien y no debe filtrarse para evitar robos. Usaremos la clave secreta más adelante.

 

Implementación del servidor MRCP

El servidor MRCP de Tencent Cloud tiene paquetes de implementación listos para usar, por lo que no necesita desarrollar el suyo propio para interactuar con ASR&TTS, lo que puede ahorrar mucho tiempo.

Siempre que tenga un entorno Linux limpio, implemente. El proceso de implementación se divide en los siguientes pasos:

  1. Descomprima unimrcp.tar.gz en la ruta de implementación
  2. Modifique el archivo de configuración y ejecute change.sh para distribuir el archivo de configuración
  3. Verificación de lanzamiento y prueba

Descargar y descomprimir

  1. Haga clic en  Paquete de implementación de MRCP-Server   para descargar el paquete de implementación y transferirlo a un entorno Linux limpio.
  2. Especifique un directorio de instalación, aquí use $project_path para representar el directorio de instalación
  3. Ejecute el comando de descompresión:
tar -xzvf unimrcp.tar.gz -C $project_path

Cambio de configuracion

Ejecute el siguiente comando para abrir el archivo de configuración:

cd $project_path/unimrcp/admin

vim conf.ini

Para conocer el significado de cada campo en el archivo de configuración, consulte los comentarios en el archivo. Puede modificar server_ip, server_sip_port, server_mrcp_port y otras configuraciones de acuerdo con las necesidades reales.

Complete el appid, secretid y secretkey obtenidos del sitio web oficial en el Capítulo 3.2 en las ubicaciones correspondientes del archivo de configuración.

#公有云用户AppID
appid=1233
#公有云用户SecretID
secretid=123
#公有云用户SecretKey
secretkey=demokey123

Después de modificar la configuración, ejecute el siguiente comando para distribuir la configuración.

cd $project_path/unimrcp/admin
sh change.sh

Inicio del servicio

Ejecute el siguiente comando para iniciar el servicio:

cd $project_path/unimrcp/admin
sh start_server.sh

Tras un inicio exitoso, aparecerá el siguiente mensaje:

También puede ejecutar el siguiente comando para confirmar si se inició correctamente.

netstat -anp | grep mrcp

Si se inicia correctamente, verá 2 puertos tcp y 1 puerto udp.

 

Pruebas de servicio

Ingrese admin y use unimrcpclient para probar el servicio MRCP y ejecute el siguiente comando:

cd $project_path/unimrcp/admin
sh start_client.sh 

Ingrese a la interfaz de línea de comando de la siguiente manera:

 

Ingrese "ejecutar reconocimiento" en el campo de entrada interactivo para probar la función de reconocimiento de voz.

run recog

Si la ejecución es exitosa, aparecerán resultados similares a los siguientes:

Si también desea probar su capacidad de síntesis de voz, puede ingresar "ejecutar sintetizador" en el campo de entrada interactivo para probarlo. Si el cliente muestra el resultado del reconocimiento como: "Bienvenido a Tencent Cloud Speech Synthesis", significa que el cliente envía texto normalmente.

Para el audio sintetizado devuelto, puede verificar el audio correspondiente en $project_path/unimrcp/var/synth para confirmar si el audio es normal.

Conexión MRCP-Servidor

Simplemente conecte el puerto IP y SIP del servidor MRCP .

Cabe señalar que la versión del protocolo utilizada por Tencent Cloud MRCP Server es MRCPv2.

Consulte el Capítulo 3.3.3 para obtener la configuración correspondiente o modificar el número de puerto correspondiente. Obtenga la IP de la máquina mediante el comando ifconfig. Como se muestra en la imagen siguiente, 5060 es el número de puerto SIP.

El siguiente es un ejemplo de conexión a Huawei IVR:

 

Si usa Freeswitch para conectarse, simplemente configúrelo en el perfil, como se muestra a continuación:

 

Introducción al proceso de identificación del protocolo MRCP

No diré mucho sobre el protocolo MRCP aquí, puede consultar el manual del protocolo MRCP: RFC 6787: Protocolo de control de recursos multimedia versión 2 (MRCPv2) 

En la actualidad, el desarrollo de todos en torno a MRCP se basa básicamente en el software de código abierto Unimrcp , que implementa completamente el protocolo MRCP (incluido SIP/RTSP/MRCP/RTCP/RTP).

MRCP utiliza el protocolo SIP para controlar el proceso de comunicación de todo el recurso de audio. RTP sirve como el protocolo de transporte de datos de audio real. RTCP es responsable de la Qos en el proceso RTP.

El siguiente es el diagrama de secuencia de MRCP que llama al servicio de reconocimiento de voz:

 

La figura anterior describe todo el proceso de comunicación, que se describe en detalle a continuación.

Establecimiento de sesión MRCP

La sesión se establece mediante el protocolo SIP.

  • La información SIP INVITE del cliente MRCP contiene información SDP del lado del cliente. Donde " resource:speechrecog" representa la solicitud de recursos de reconocimiento de voz.
  • Cuando el servidor MRCP responde a SIP 200 OK, enviará la información SDP al lado del servidor, incluido el identificador del canal, etc.

Ejemplo de mensaje SIP INVITE:

c=IN IP4 127.0.0.1
t=0 0
m=application 9 TCP/MRCPv2 1
a=setup:active
a=connection:new
a=resource:speechrecog
a=cmid:1
m=audio 4000 RTP/AVP 0 8 96 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:96 L16/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=sendonly
a=ptime:20
a=mid:1

Ejemplo de mensaje SIP 200 OK:

v=0
o=UniMRCPServer 0 0 IN IP4 127.0.0.1
s=-
c=IN IP4 127.0.0.1
t=0 0
m=application 1544 TCP/MRCPv2 1
a=setup:passive
a=connection:new
a=channel:743997aec02d11ea@speechrecog
a=cmid:1
m=audio 5000 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=recvonly
a=ptime:20
a=mid:1

MRCP DEFINIR-GRAMÁTICA

A través del mensaje MRCP DEFINE-GRAMMAR, se pueden asociar algunos parámetros necesarios para el reconocimiento de voz para ayudar a un mejor reconocimiento (DEFINE-GRAMMAR debe enviarse antes de RECOGNIZE)

DEFINE-GRAMMARPor ejemplo, en el cuerpo del mensaje a continuación  , si hotword_id和customization_id,configura el servidor MRCP enviado a Tencent Cloud, puede configurar las palabras clave y los parámetros de autoaprendizaje para el reconocimiento de voz, respectivamente, para mejorar el reconocimiento.

2020-07-07 16:40:04:490628 [INFO]   Receive MRCPv2 Data 127.0.0.1:1544 <-> 127.0.0.1:43893 [448 bytes]
MRCP/2.0 448 DEFINE-GRAMMAR 1
Channel-Identifier: 743997aec02d11ea@speechrecog
Content-Type: application/srgs+xml
Content-Id: [email protected]
Content-Length: 269

<grammar xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en-US" version="1.0" mode="voice" root="digit">
  <rule hotword_id="test_hotword" customization_id="test_customization_id"/>
</grammar>
2020-07-07 16:40:04:490756 [INFO]   Assign Control Channel <743997aec02d11ea@speechrecog> to Connection 127.0.0.1:1544 <-> 127.0.0.1:43893 [0] -> [1]

RECONOCER EL MRCP

El mensaje MRCP RECOGNIZE se utiliza para iniciar el reconocimiento de voz, abrir el canal y prepararse para recibir datos.

Hay muchos tipos de encabezados en RECOGNIZE, entre los cuales los cuatro siguientes son los más comunes en escenarios de llamadas salientes.

  • Start-Input-Timers: si se debe iniciar el temporizador sin entrada. En la mayoría de los casos, simplemente configúrelo como verdadero y utilícelo junto con No-Input-Timeout.
  • Tiempo de espera sin entrada: La unidad es ms. Cuando comienza el reconocimiento y no se detecta voz dentro de un período de tiempo, se envía un evento de RECONOCIMIENTO COMPLETO al cliente. La causa de finalización es "tiempo de espera sin entrada" para terminar la operación de reconocimiento.
    • Si este parámetro se establece en 3000, significa que al esperar la respuesta del cliente durante una llamada saliente, el cliente no ha hablado durante más de 3 segundos y se activa el evento de tiempo de espera sin entrada. El robot puede intentar volver a transmitir o colgar.
  • Tiempo de espera de reconocimiento: la unidad es ms, tiempo de espera de reconocimiento, se usa cuando el vad de reconocimiento de voz (detección de voz) no se puede desconectar y continúa reconociendo, envía un evento de RECONOCIMIENTO COMPLETO al cliente, la causa de finalización es "tiempo de espera de reconocimiento", finaliza la identificación. operaciones.
    • Si este parámetro se establece en 10 segundos, significa que el cliente puede hablar continuamente durante hasta 10 segundos durante una llamada saliente. El evento de tiempo de espera de reconocimiento se activará en 10 segundos y el robot generará una respuesta basada en la respuesta del cliente. resultados del habla.
  • Speech-Complete-Timeout: la unidad es ms, tiempo de detección de cola silenciosa. Se utiliza para configurar el umbral de detección de silencio y reconocimiento de voz, que generalmente se establece en el rango de 500 ms a 1000 ms.

El siguiente es un ejemplo de un mensaje RECONOCER:

MRCP/2.0 290 RECOGNIZE 2
Channel-Identifier: 743997aec02d11ea@speechrecog
Content-Type: text/uri-list
Cancel-If-Queue: false
No-Input-Timeout: 5000
Recognition-Timeout: 10000
Speech-Complete-Timeout: 500
Start-Input-Timers: true
Confidence-Threshold: 0.87
Content-Length: 33

MRCP-Server responde al Cliente, IN-PROGRESSindicando que se está procesando la identificación.

MRCP/2.0 83 2 200 IN-PROGRESS
Channel-Identifier: 743997aec02d11ea@speechrecog

MRCP  INICIO DE ENTRADA

El evento MRCP START-OF-INPUT indica que el reconocimiento ha comenzado oficialmente y los datos se transmiten continuamente a través de RTP.

MRCP/2.0 94 START-OF-INPUT 2 IN-PROGRESS
Channel-Identifier: 743997aec02d11ea@speechrecog

RECONOCIMIENTO MRCP  -COMPLETO

El evento MRCP RECOGNITION-COMPLETE indica el final del reconocimiento y devuelve el resultado del mismo.

MRCP/2.0 477 RECOGNITION-COMPLETE 2 COMPLETE
Channel-Identifier: 743997aec02d11ea@speechrecog
Completion-Cause: 000 success
Content-Type: application/nlsml+xml
Content-Length: 290

<result>
  <interpretation grammar="session:[email protected]" confidence="0.97">
    <instance><nlresult>07743997aec02d11ea-1|微粒贷借借贷问题。</nlresult></instance>
    <input mode="speech"></input>
  </interpretation>
</result>

3. Preguntas frecuentes

Cuando encuentre alguna anomalía, puede consultar los registros primero. El registro del servidor MRCP es: $project_path/unimrcp/log/unimrcpserver_current.log

Relacionado con la conversación

No se pudo crear el socket de escucha aparece en el registro del cliente MRCP.

    Motivo: el puerto MRCP está ocupado

    Solución: Utilice el siguiente comando para verificar si el puerto $(puerto) (predeterminado 1544) está ocupado. Si está ocupado por otros servicios, consulte 3.3.2 Modificar y distribuir configuración y reinicie el servicio.

        netstat -anp |grep $(puerto)

No se pudo crear NUA aparece en el registro del servidor MRCP

    Motivo: El puerto SIP está ocupado

    Solución: Utilice el siguiente comando para verificar si el puerto $(puerto) (predeterminado 5060) está ocupado. Si está ocupado por otros servicios, consulte 3.3.2 Modificar y distribuir configuración y reinicie el servicio.

           netstat -anp |grep $(puerto)

La conexión rechazada aparece en el registro del cliente MRCP.

Receive SIP Event [nua_i_state] Status 0 INVITE sent [SIP-Agent-1]
nta: INVITE (950928814): Connection refused (111)

    Motivo: el servidor MRCP no se ha iniciado o la IP y el puerto del servidor MRCP no están configurados correctamente.

    Solución: Consulte el Capítulo 3.3.3 para confirmar que el servidor MRCP está iniciado. Si se inicia, confirme que la IP y el puerto correctos estén configurados en el lado del cliente.

Relacionado con el reconocimiento de voz

El cliente MRCP no obtuvo el resultado del reconocimiento

Verifique el registro del servidor MRCP. Si aparece un registro similar a "enviar a asr error, httpcode 0, rsp_code xxx", significa que la solicitud de identificación no se pudo enviar. Puede solucionar el error de acuerdo con el mensaje del código de error.

Si aparece un registro similar al siguiente, significa que la solicitud de reconocimiento de voz se envió normalmente.

   

 

En este caso, si no se obtiene el resultado del reconocimiento, se puede analizar el registro más a fondo, generalmente se dan dos situaciones:

  1. El usuario no ha hablado. De forma predeterminada, la sesión se agota automáticamente después de 5 segundos sin hablar y el resultado del reconocimiento se envía como tiempo de espera sin entrada. Para obtener más información, consulte la descripción del encabezado en el Capítulo 4.3.

2. El lado del cliente envía una solicitud DETENER, que interrumpirá el reconocimiento y cerrará el enlace, lo que provocará que el cliente no pueda recibir el resultado del reconocimiento.

 

Cómo configurar palabras interesantes y autoaprendizaje en MRCP Server

Con respecto a la configuración de palabras interesantes y el autoaprendizaje, utilice la cuenta del Capítulo 3.1 para iniciar sesión en la consola de reconocimiento de voz y consulte los dos documentos siguientes para conocer la configuración.

Configuración de autoaprendizaje: modelo de autoaprendizaje de reconocimiento de voz-Descripción de la plataforma de autoaprendizaje-Centro de documentos-Tencent Cloud

Configuración de palabras clave: palabras clave de reconocimiento de voz-Descripción de la plataforma de autoaprendizaje-Centro de documentos-Tencent Cloud

Puede ver el ID de palabra activa correspondiente y el ID de autoaprendizaje en la consola. Consulte el Capítulo 4.2 y  DEFINE-GRAMMARconfigúrelos por separado en el cuerpo del mensaje.hotword_id和customization_id。

这样对应的热词和自学习就可以生效了。

¿Cómo modifica MRCP Server el estilo del resultado del reconocimiento?

El resultado devuelto predeterminado es el siguiente:

Si deseas cambiar la estructura de devolución correspondiente, puedes modificarla

cd $project_path/unimrcp/data
vim result.tpl.xml

El formato predeterminado es el siguiente:

<?xml version="1.0" encoding="UTF-8" ?>
<result>
  <interpretation grammar="%s" confidence="0.97">
    <instance><nlresult>%s|%s</nlresult></instance>
    <input mode="speech"></input>
  </interpretation>
</result>

Si desea colocar los resultados del reconocimiento en el nodo de entrada de voz. Luego se puede modificar como:

<?xml version="1.0" encoding="UTF-8" ?>
<result>
  <interpretation grammar="%s" confidence="0.97">
    <instance><nlresult>%s</nlresult></instance>
    <input mode="speech">%s</input>
  </interpretation>
</result>

Si desea modificarlo al formato JSON, puede ajustarlo a:

{
    "grammar" : "%s",
    "voiceid" : "%s",
    "result" : "%s"
}

Después de la modificación, el resultado correspondiente pasa a ser:

Cómo modificar los parámetros de reconocimiento de voz

Ejecute el siguiente comando para abrir el archivo de configuración correspondiente a ASR:

cd $project_path/unimrcp/
vim conf/TCloudRealtimeASRConfig.ini

El contenido del nodo [tcloud_asr] son ​​los parámetros del reconocimiento de voz. Para conocer el significado detallado de los parámetros, puede consultar la documentación del sitio web oficial: Reconocimiento de voz Reconocimiento de voz en tiempo real (websocket) -API Document-Document Center- Tencent Nube

No se recomienda modificar los parámetros en el archivo de configuración. El filtrado de palabras sucias, el filtrado de partículas modales, la puntuación y la conversión de números se pueden modificar según las necesidades.

filter_dirty=0
filter_modal=0
filter_punc=0
convert_num_mode=1

Después de modificar la configuración, recuerde reiniciar el servidor MRCP para que surta efecto.

Relacionado con la síntesis de voz

Cómo configurar el timbre, el volumen y la velocidad del habla

Consulte la descripción relevante en el protocolo estándar MRCP: Protocolo de control de recursos multimedia versión 2 (MRCPv2)

 

Lo anterior es un ejemplo de llamada real: en llamadas reales, estos tres parámetros se utilizan con mayor frecuencia.

  • Nombre de voz: Voz, correspondiente al parámetro VoiceType en la síntesis en tiempo real de Tencent Cloud
  • Prosody-Volume: Volumen, correspondiente al parámetro Volumen en la síntesis en tiempo real de Tencent Cloud
  • Prosody-Rate: velocidad del habla, correspondiente al parámetro Velocidad en la síntesis en tiempo real de Tencent Cloud

Para conocer los valores correspondientes a estos parámetros, puede consultar la documentación del sitio web oficial: Síntesis de voz Síntesis de voz en tiempo real-API Documento-Centro de documentación-Tencent Cloud

Cómo implementar informes de interrupciones

El cliente puede interrumpir la transmisión de síntesis de voz enviando un mensaje STOP. Referencia detallada: Protocolo de control de recursos multimedia versión 2 (MRCPv2)

 

Supongo que te gusta

Origin blog.csdn.net/tencentAI/article/details/129296924
Recomendado
Clasificación