Servidor CPqD MRCP com o Asterisk 13¶
Para integrar o Servidor CPqD MRCP com o Asterisk 13 utilizamos o protocolo MRCP. O cliente Asterisk-UniMRCP implementa esse protocolo. Siga os passo abaixo para instalação e configuração:
Instalação¶
Para que o Asterisk funcione corretamente com o Servidor MRCP do CPqD, é preciso instalar os seguintes softwares no ambiente que servirá como Cliente MRCP. São estes:
- Asterisk 13
- UniMRCP 1.5 e UniMRCP Deps 1.5 <https://www.unimrcp.org/index.php/solutions/client>
- Asterisk-UniMRCP https://www.unimrcp.org/asterisk
Para testar se o cliente UniMRCP está instalado corretamente, reinicie o asterisk e na interface de comando (CLI) digite:
*CLI> module show like res_speech_unimrcp.so Module Description Use Count res_speech_unimrcp.so UniMRCP Speech Engine 0 1 modules loaded *CLI> module show like app_unimrcp.so Module Description Use Count app_unimrcp.so MRCP suite of applications 0 1 modules loaded
Configuração do Asterisk¶
Como visto acima, o Asterisk-UniMRCP possui dois módulos:
- res_speech_unimrcp: Integração através da Generic Speech Recognition API do Asterisk.
- app_unimrcp: Uma aplicação para ser usada no dialplan do Asterisk.
Adicione as seguintes informações no arquivo: /etc/asterisk/resspeechunimrcp.conf
unimrcp-profile = cpqd-mrcpv2 ; CPqD MRCPv2 Server unimrcp-profile = cpqd-mrcpv1 ; CPqD MRCPv1 Server
Crie o arquivo /usr/local/unimrcp/conf/client-profiles/cpqd.xml com o seguinte conteúdo:
<?xml version="1.0" encoding="UTF-8"?> <!-- UniMRCP client document --> <unimrcpclient xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> <settings> <!-- SIP MRCPv2 settings --> <sip-settings id="UniMRCP-SIP-Settings"> <server-ip>_SEVER_IP_</server-ip> <server-port>8060</server-port> </sip-settings> <!-- RTSP MRCPv1 settings --> <rtsp-settings id="UniMRCP-RTSP-Settings"> <server-ip>_SEVER_IP_</server-ip> <server-port>1554</server-port> <resource-location>media</resource-location> <resource-map> <param name="speechrecog" value="speechrecognizer"/> <param name="speechsynth" value="speechsynthesizer"/> </resource-map> </rtsp-settings> </settings> <profiles> <!-- CPqD MRCPv2 profile --> <mrcpv2-profile id="cpqd-mrcp-v2"> <sip-uac>SIP-Agent-1</sip-uac> <mrcpv2-uac>MRCPv2-Agent-1</mrcpv2-uac> <media-engine>Media-Engine-1</media-engine> <rtp-factory>RTP-Factory-1</rtp-factory> <sip-settings>UniMRCP-SIP-Settings</sip-settings> <rtp-settings>RTP-Settings-1</rtp-settings> </mrcpv2-profile> <!-- CPqD MRCPv1 profile --> <mrcpv1-profile id="cpqd-mrcp-v1"> <rtsp-uac>RTSP-Agent-1</rtsp-uac> <media-engine>Media-Engine-1</media-engine> <rtp-factory>RTP-Factory-1</rtp-factory> <rtsp-settings>UniMRCP-RTSP-Settings</rtsp-settings> <rtp-settings>RTP-Settings-1</rtp-settings> </mrcpv1-profile> </profiles> </unimrcpclient>
Edite o arquivo /etc/asterisk/mrcp.conf conforme o exemplo abaixo:
[general] ; Default ASR and TTS profiles. default-asr-profile = speech-cpqd-mrcp2 default-tts-profile = speech-cpqd-mrcp2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Profile for CPqD Speech Server MRCPv2 ; [speech-cpqd-mrcp2] ; MRCP settings version = 2 ; ; SIP settings server-ip = <CPqD MRCP Server IP> server-port = 8060 ; ; SIP user agent client-ip = <MRCP Client IP> client-port = 8093 ; SIP transport either UDP or TCP. sip-transport = udp ; ; RTP factory rtp-ip = <MRCP Client IP> rtp-port-min = 4000 rtp-port-max = 5000 ; ; Jitter buffer settings playout-delay = 50 max-playout-delay = 200 ; ; RTP settings ptime = 20 codecs = PCMU PCMA L16/96/8000 telephone-event/101/8000 ; ; RTCP settings rtcp = 0 ;rtcp = 1 ;rtcp-bye = 2 ;rtcp-tx-interval = 5000 ;rtcp-rx-resolution = 1000 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Profile for CPqD Speech Server MRCPv1 ; [speech-cpqd-mrcp1] ; MRCP settings version = 1 ; ; RTSP settings server-ip = <CPqD MRCP Server IP> server-port = 1554 resource-location = media speechsynth = speechsynthesizer speechrecog = speechrecognizer ; ; RTP factory rtp-ip = <MRCP Client IP> rtp-port-min = 4000 rtp-port-max = 5000 ; ; Jitter buffer settings playout-delay = 50 max-playout-delay = 200 ; ; RTP settings ptime = 20 codecs = PCMU PCMA L16/96/8000 telephone-event/101/8000 ; ; RTCP settings rtcp = 0 ;rtcp = 1 ;rtcp-bye = 2 ;rtcp-tx-interval = 5000 ;rtcp-rx-resolution = 1000
Exemplos de dialplan do Asterisk¶
Este exemplo demonstra como usar a aplicação SynthAndRecog() com uma síntese de voz em texto plano e uma gramática builtin.
[mrcp-synth-recog-app1] exten => s,1,Answer exten => s,n,SynthAndRecog("Bem vindo ao CPqD!", "builtin:slm/general", t=5000) exten => s,n,Verbose(1, ${RECOG_STATUS}, ${RECOG_COMPLETION_CAUSE}, ${RECOG_RESULT}) exten => s,n,Hangup
Este exemplo demonstra como usar a aplicação MRCPRecog() com uma gramática builtin de códigos (CPF, CNPJ, …) para fala.
[mrcp-recog-app1] exten => s,1,Answer exten => s,n,MRCPRecog(builtin:grammar/code, p=default) exten => s,n,Verbose(1, ${RECOGSTATUS}, ${RECOG_COMPLETION_CAUSE}, ${RECOG_RESULT}) exten => s,n,Hangup
Este exemplo demonstra como usar a aplicação MRCPSynth com texto plano e MRCP profile padrão.
[mrcp-synth-app1] exten => s,1,Answer exten => s,n,MRCPSynth("Bem vindo ao CPqD!", p=default) exten => s,n,Verbose(1, ${SYNTHSTATUS}) exten => s,n,Hangup