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:

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.
  1. Adicione as seguintes informações no arquivo: /etc/asterisk/res­speech­unimrcp.conf

    unimrcp­-profile = cpqd-mrcp­v2 ; CPqD MRCPv2 Server
    unimrcp-­profile = cpqd­-mrcp­v1 ; CPqD MRCPv1 Server
    
  2. 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>
    
  3. 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

  1. Este exemplo demonstra como usar a aplicação SynthAndRecog() com uma síntese de voz em texto plano e uma gramática built­in.

    [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
    
  2. Este exemplo demonstra como usar a aplicação MRCPRecog() com uma gramática built­in 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
    
  3. 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