Servidor MRCP com o Asterisk

Para integrar o Servidor MRCP com o Asterisk 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:

Ubuntu 22.04

Instalação a partir do código fonte

Para instalação do plugin com o Asterisk a partir do código fonte.

Clonar o repositório:

git clone https://github.com/CPqD/asterisk-unimrcp

Seguir procedimento disponível em asterisk-unimrcp/docker

Validação da instalação

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

Nota

É preciso exportar a variável LD_LIBRARY_PATH indicando os caminhos para as bibliotecas Unimrcp e dependências, antes de reiniciar o Asterik, para permitir a carga do módulo de aplicações MRCP.

export LD_LIBRARY_PATH=/usr/local/unimrcp/lib:/usr/local/apr/lib:/usr/local/lib

Configuração do Asterisk

O Asterisk-UniMRCP possui dois módulos para comunicação com o MRCP Server:

  • 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.

Nota

Não é necessário a configuração e instalação dos dois modulos para comunicação com MRCP Server.

Segue o procedimento de configuração de cada modulo:

res_speech_unimrcp.so

  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"/>
            <param name="speakverify" value="speechsverifier"/>
          </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>
    

app_unimrcp.so

  1. Edite o arquivo /etc/asterisk/mrcp.conf conforme o exemplo abaixo:

    [general]
    ; Default ASR and TTS profiles.
    default-asr-profile = speech-cpqd-mrcp-v2
    default-tts-profile = speech-cpqd-mrcp-v2
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Profile for CPQD Speech Server MRCPv2
    ;
    [speech-cpqd-mrcp-v2]
    ; 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-mrcp-v1]
    ; 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
    

Aplicação Dialplan

MRCPSynthAndRecog

Essa aplicação sintetiza uma frase e aguarda por um reconhecimento de fala. Estabelece duas sessões com o servidor MRCP. Uma para reconhecimento de fala e outra sessão para Sintese de fala.

Sintaxe:

MRCPSynthAndRecog (prompt, gramática, paramêtros)
  • prompt: Texto ou SSML a ser sintetizado.

  • gramática: Gramatica inline, builtin ou uma URI para gramática externa.

  • parâmetros suportados:
    • p: especificação do perfil
      • presente no arquivo mrcp.conf, indica qual perfil (profile) será usado para execução da aplicação.

    • t: recognition timeout
      • Tempo máximo de espera pelo resultado do reconhecimento em milisegundos.

    • b: bargein
      • Se habilitado (=1) interrompe a síntese quando detecta inicio de fala.

    • gd: grammar delimiters
      • Delimitador de gramática. Valor padrão é “,”.

    • ct: confidence threshold
      • Valor mínimo da pontuação (score) de confiança do reconhecimento, para que ele seja considerado válido. Valores entre 0.0 e 1.0.

    • nb: n-best list length
      • Número de resultados que serão retornados.

    • nit: no input timeout
      • Tempo máximo de espera pelo início da fala em milisegundos.

    • sct: speech complete timeout
      • Duração do silêncio dentro do áudio para a detecção do fim da fala (em milisegundos).

    • dit: DTMF interdigit timeout
      • Tempo para aguardar o próximo dígito DTMF.

    • dtt:DTMF terminate timout (msec)
      • Não implementado.

    • dttc: DTMF terminate character
      • Caractere esperado para finalizar a detecção do DTMF.

    • pv: prosody volume
      • Altera o volume da fala para o texto em questão.

    • pr: prosody rate
      • Altera a velocidade da fala para o texto em questão.

    • vn: voice name
      • Seleciona a voz a qual o texto será sintetizada.

    • uer: URI-encoded results
      • Resultados serão codificados. Use o valor 1 para codificar os resultados, e 0 para desabilitar.

    • od: Output delimiters
      • Delimitador do resultado, Valor padão “^”.

    • sit: Start input timers value
      • Controla o comportamento do “start-input-timers”. Use 0 para desabilitar, 1 para iniciar no RECOGNIZE, 2 para iniciar no fim do prompt.

  • parâmetros não implementados:
    • sint: speech incomplete timeout

    • sl: sensitivity level

    • sva: speed versus accuracy

    • sw: save waveform (true/false)

    • nac: new audio channel

    • spl: speech language

    • rm: recognition mode

    • hmaxd: hotword max duration

    • hmind: hotword min duration

    • cdb: clear DTMF buffer

    • enm: early no match

    • iwu: input waveform URI

    • mt: media type

    • vg: voice gender

    • vv: voice variant

    • a: voice age

  • retorno/resultados:

    • ${RECOG_STATUS}
      • OK: Se reconhecimento finalizou.

      • ERROR: Se o reconhecimento não pode ser iniciado.

      • INTERRUPTED: Se a ligação caiu enquanto o reconhecimento estava em andamento.

    • ${RECOG_COMPLETION_CAUSE}
      • «000»: success

      • «001»: nomatch

      • «002»: noinput

    • ${RECOG_RESULT}
      • resultado do reconhecimento em formato NLSML. Apenas se o resultado do reconhecimento foi concluído com sucesso.

    • ${RECOG_CONFIDENCE}
      • valor do indice de confiaça para o reconhecimento.

    • ${RECOG_GRAMMAR}
      • gramatica que foi ativada no reconhecimento.

    • ${RECOG_INPUT}
      • retorna o texto reconhecido.

    • ${RECOG_INSTANCE}
      • retorna a instância interpretada.

MRCPRecogVerif

Essa aplicação estabelece uma sessão para reconhecimento de fala, armazenando o áudio no buffer, e realiza a verificação de biometria de voz como método verify-from-bufffer do áudio armazenado.

MRCPRecogVerif (prompt, gramática, paramêtros)
  • grammar:
    • gramática para ser usada para reconhecimento.

  • p: especificação do perfil
    • presente no arquivo mrcp.conf, indica qual perfil (profile) será usado para execução da aplicação.

  • f: nome do arquivo
    • arquivo de áudio para ser utilizado como prompt.

  • t: recognition timeout
    • Tempo máximo de espera pelo resultado do reconhecimento em milisegundos.

  • b: bargein
    • Se habilitado (=1) interrompe a síntese quando detecta inicio de fala.

  • gd: grammar delimiters
    • Delimitador de gramática. Valor padrão é “,”.

  • ct: confidence threshold
    • Valor mínimo da pontuação (score) de confiança do reconhecimento, para que ele seja considerado válido. Valores entre 0.0 e 1.0.

  • nb: n-best list length
    • Número de resultados que serão retornados.

  • vc: verificarion score:
    • score de verificação: -1.0 até 1.0

  • minph: minimum verification phrases:
    • número mínimo de frases de verificação.

  • maxph: maximum verification phrases:
    • número máximo de frases de verificação.
      • nit: no input timeout:

    • tempo de espera sem áudio de entrada em milisegundos.

  • sct: speech complete timeout
    • Duração do silêncio dentro do áudio para a detecção do fim da fala (em milisegundos).

  • dit: DTMF interdigit timeout
    • Tempo para aguardar o próximo dígito DTMF.

  • dtt:DTMF terminate timout (msec)
    • Não implementado.

  • dttc: DTMF terminate character
    • Caractere esperado para finalizar a detecção do DTMF.
      • vm: verification mode

    • Modo de verificação: verify/enroll.
      • rpuri: repository URI

    • URL para o repositório de voiceprints
      • vpid: voiceprint identifier

    • Identificador de voz

  • uer: URI-encoded results
    • Resultados de reconhecimento serão codificados. Use o valor 1 para codificar os resultados, e 0 para desabilitar.

  • od: Output delimiters
    • Delimitador do resultado, Valor padão “^”.

  • sit: Start input timers value
    • Controla o comportamento do “start-input-timers”. Use 0 para desabilitar, 1 para iniciar no RECOGNIZE, 2 para iniciar no fim do prompt.

  • parâmetros não implementados:
    • sint: speech incomplete timeout

    • sl: sensitivity level

    • sva: speed versus accuracy

    • sw: save waveform (true/false)

    • nac: new audio channel

    • spl: speech language

    • rm: recognition mode

    • hmaxd: hotword max duration

    • hmind: hotword min duration

    • cdb: clear DTMF buffer

    • enm: early no match

    • iwu: input waveform URI

    • mt: media type

    • vg: voice gender

    • vv: voice variant

    • a: voice age

  • retorno/resultados:

O retorno de resultado de reconhecimento é similar aos outros métodos de reconhecimento, possuindo as seguintes variáves de retorno:

  • ${RECOG_STATUS}

  • ${RECOG_COMPLETION_CAUSE}

  • ${RECOG_RESULT}

  • ${RECOG_CONFIDENCE}

  • ${RECOG_GRAMMAR}

  • ${RECOG_INPUT}

  • ${RECOG_INSTANCE}

Os resultados da verificação de voz estão disponíveis nas variáveis a seguir:

  • ${VERIF_COMPLETION_CAUSE}:
    • «000»: success

    • «001»: error

    • «002»: no-input

    • «003»: too-much-speech-timeout

    • «004»: speech-too-early

    • «005»: buffer-empty

    • «007»: repository-uri-failure

    • «008»: repository-uri-missing

    • «009»: voiceprint-id-missing

    • «010»: voiceprint-id-not-exist

    • «011»: speech-not-usable

  • ${VERIF_RESULT}:
    • Resultado de verificação formatado em XML.

  • ${VERIF_SID}:
    • Identificador da sessão de verificação.

Nota

Existem aplicações exclusivas de síntese (MRCPSynth), reconhecimento (MRCPRecog) e verificação (MRCPVerif), que utilizam parâmetros equivalentes para cada tipo de aplicação, assim como as variáveis de retorno. A documentação completa está em: https://github.com/CPqD/asterisk-unimrcp/blob/master/doc/MAIN.md

DTMF

Para usar o reconhecedor DTMF do MRCP, é necessário inserir no campo de gramática (corpo da mensagem RECOGNIZE), a URI

builtin:dtmf/digits

Nota

A gramática «dtmf/digits» é nativa do plugin MRCP ASR e não é necessário criá-la no Servidor ASR.

São permitidos dois parâmetros no reconhecedor DTMF:

  • dit: DTMF interdigit timeout (msec)

  • dttc: DTMF terminate characters

Para especificar a quantidade máxima de dígitos, utiliza-se a sintaxe: ?length=N.

Exemplos de dialplan do Asterisk

Nota

Para utilizar os exemplos que seguem, o modulo app_unimrcp.so deve estar instalado e configurado.

  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
    
  4. Recochecimento de fala ou DTMF limitando em 11 dígitios, e com o Barge-in desabilitado

    exten => s,n,SynthAndRecog("Digite ou fale o seu CPF.", "builtin:grammar/code,builtin:dtmf/digits?length=11", t=5000&b=0&sit=1&nit=3000&dit=3500&dttc=#)
    

    Os paramêtros utilizados nesse exemplo são:

    • length=11: Aguarda até 11 dígitos DTMF.

    • t=5000: Aguarda até 5 segundos pelo reconhecimento de fala.

    • b=0: barge-in desabilitado.

    • sit=1: Inicia os timers no fim do prompt.

    • nit=3000: Aguarda até 3 segundos para detectar inicio de fala.

    • dit=3500: Aguarda 3.5 segundos entre dígitos DTMF.

    • dttc=#: Utiliza o caractere “#” para indicar fim da entrada de DTMF.

  5. Reconhecimento de fala ou DTMF limitando em 11 dígitios, com o Barge-in habilitado

    exten => s,n,SynthAndRecog("Digite ou fale o seu CPF.", "builtin:grammar/code,builtin:dtmf/digits?length=11", t=5000&b=1&sit=2&nit=3000&dit=3500&dttc=#)
    

    Os paramêtros utilizados nesse exemplo são:

    • length=11: Aguarda até 11 dígitos DTMF.

    • t=5000: Aguarda 5 segundos pelo reconhecimento de fala.

    • b=1: barge-in habilitado.

    • sit=2: Inicia os timers ao enviar o RECOGNIZE.

    • nit=3000: Aguarda 3 segundos para detectar inicio de fala.

    • dit=3500: Aguarda 3.5 segundos entre dígitos DTMF.

    • dttc=#: Utiliza o caractere “#” para indicar fim da entrada de DTMF.

  6. Reconhecimento de fala ou DTMF limitando em 2 dígitios, e Barge-in habilitado

    exten => s,n,SynthAndRecog("Digite ou fale sua idade.", "builtin:grammar/number,builtin:dtmf/digits?length=2", t=5000&b=1&sit=2&nit=3000&dit=3500&dttc=#)
    

    Os paramêtros utilizados nesse exemplo são:

    • length=11: Aguarda até 2 dígitos DTMF.

    • t=5000: Aguarda 5 segundos pelo reconhecimento de fala.

    • b=1: barge-in habilitado.

    • sit=2: Inicia os timers ao enviar o RECOGNIZE.

    • nit=3000: Aguarda 3 segundos para detectar inicio de fala.

    • dit=3500: Aguarda 3.5 segundos entre dígitos DTMF.

    • dttc=#: Utiliza o caractere “#” para indicar fim da entrada de DTMF.

  7. Treinamento de identidade de voz

    exten => 2022,1,Answer
    same => n,MRCPVerif(vm=enroll&rpuri=https://SERVER_HOST:PORT&vpid=marysmith&p=default&f=please-try-again&sct=2000&sit=1)
    same => n,Verbose(1, Status: ${VERIFSTATUS})
    same => n,Verbose(1, Cause: ${VERIF_COMPLETION_CAUSE})
    same => n,Verbose(1, Result: ${VERIF_RESULT})
    same => n,Verbose(1, SID: ${VERIF_SID})
    same => n,Hangup
    

    Os paramêtros utilizados nesse exemplo são:

    • vm=enroll: modo de treinamento

    • rpuri=https://SERVER_HOST:PORT: URL de repositório de biometria

    • vpid=marysmith: voiceprint Id para treinamento

    • p=default: profile default

    • f=please-try-again: arquivo de áudio usado como prompt

    • sct=2000: speech complete timeout em ms

    • sit=1: Inicia os timers no fim do prompt.

  8. Verificação de identidade de voz

    exten => 2023,1,Answer
    same => n,MRCPVerif(vm=verify&rpuri=https://SERVER_HOST:PORT&vpid=johnsmith,marysmith&p=default&f=please-try-again&sct=2000&sit=1)
    same => n,Verbose(1, Status: ${VERIFSTATUS})
    same => n,Verbose(1, Cause: ${VERIF_COMPLETION_CAUSE})
    same => n,Verbose(1, Result: ${VERIF_RESULT})
    same => n,Verbose(1, SID: ${VERIF_SID})
    same => n,Hangup
    

    Os paramêtros utilizados nesse exemplo são:

    • vm=verify: modo de verificação

    • rpuri=https://SERVER_HOST:PORT: URL de repositório de biometria

    • vpid=jonhsmith,marysmith: lista de voiceprint Ids para verificação

    • p=default: profile default

    • f=please-try-again: arquivo de áudio usado como prompt

    • sct=2000: speech complete timeout em ms

    • sit=1: Inicia os timers no fim do prompt.

  9. Reconhecimento e Verificação de identidade de voz

    exten => 203,1,Answer
    same => n,MRCPRecogVerif(builtin:slm/general, p=default&f=hello-world&vm=verify&rpuri=https://SERVER_HOST:PORT&vpid=johnsmith&p=default&f=hello-world&sct=2000&sit=0)
    same => n,Verbose(1, Recog Verif Status: ${RECOG_VERIF_STATUS})
    same => n,Verbose(1, Recog Cause: ${RECOG_COMPLETION_CAUSE})
    same => n,Verbose(1, Recog result: ${RECOG_RESULT})
    same => n,Verbose(1, Recog SID: ${RECOG_SID})
    same => n,Verbose(1, Verif Cause: ${VERIF_COMPLETION_CAUSE})
    same => n,Verbose(1, Verif result: ${VERIF_RESULT})
    same => n,Verbose(1, Verif SID: ${VERIF_SID})
    same => n,Hangup
    

    Os paramêtros utilizados nesse exemplo são:

    • builtin:slm/general: gramática, parâmentro mandatório

    • vm=verify: modo de verificação

    • rpuri=https://SERVER_HOST:PORT: URL de repositório de biometria

    • vpid=jonhsmith: voiceprint Id para verificação

    • p=default: profile default

    • f=hello-world: arquivo de áudio usado como prompt

    • sct=2000: speech complete timeout em ms

    • sit=1: Inicia os timers no fim do prompt.

  10. Reconhecimento e Verificação de identidade de voz com persistência entre aplicações

A utilização de persitência entre aplicações é útil quando se pretende implementar cenários com diálogos mais complexos, como no caso de verificação de locutor com senha falada. Mais detalhes em: Session Persistence

exten => 301,1,Answer
same => n,MRCPRecog(builtin:slm/general, p=default&f=hello-world&sct=2000&vbu=true&plt=1)
same => n,Verbose(1, ${RECOGSTATUS}, ${RECOG_COMPLETION_CAUSE}, ${RECOG_RESULT})
same => n,MRCPVerif(vm=verify&rpuri=https://ocibio2.aquarius.cpqd.com.br:8665&vpid=johnsmith,marysmith&p=default&f=please-try-again&sct=2000&sit=1&plt=1&bufh=verify-from-buffer)
same => n,Verbose(2, ${VERIFSTATUS}, ${VERIF_COMPLETION_CAUSE}, ${VERIF_RESULT}), ${VERIF_SID})
same => n,Hangup

Nota

  • Observar o uso da opção plt para realizar a persistência, garantindo o mesmo Ch-Id entre as aplicações de reconhecimento e verificação.

  • A opção vbu realiza a preservação do buffer de áudio do reconhecimento.

  • A opção bufh realiza a manipulação do buffer podendo assumir os valores: verify-from-buffer, clear e rollback.

  • É possível inserir vários reconhecimentos antes da verificação final, para acrescentar áudio no buffer para uso na verificação de locutor.

  • O encerramento da sessão é feito somente após o Hangup.

Nota

As linhas com Verbose mostram os valores retornados como resultado da operação.

Monitoramento

Para fazer o «rastreamento» das ligações entre Asterisk (URA) -> MRCP -> ASR:
  • Habilitar o tuning log do ASR.

  • Utilizar no log do Asterisk o channel-identifier.

  • No log do MRCP usar o channel-identifier e session-id (cruzar as informações).

  • Procurar no tuning-log o session-id correspondente.

  • O tuning log contém o áudio no formato pcm (RAW) e o resultado do reconhecimento.