Criação de IVR com base no Asterisk, com reconhecimento de DTMF e nomes de funcionários (com base no Voicer de um
antirek respeitado) e conexão com um PABX existente.
O próximo ano novo trouxe para a empresa onde trabalho, as (in) alegres notícias - um servidor antigo com sistema IVR e placa PCI para 4 portas analógicas da Dialogic. De repente, ficou claro que os sistemas modernos não possuem slots PCI, os antigos não são compatíveis com as novas versões do sistema operacional e não se sabe quanto tempo eles durarão, e a licença está disponível apenas para uma versão antiga específica do programa.
Assim, nasceu a ideia de aumentar a URA sem uma placa (e grátis) em uma máquina virtual com o Asterisk.
Total, precisamos de:
- PBX existente com assinantes
- Máquina virtual (no exemplo, ubuntu 18.04 lts).
- Registro em qualquer serviço de reconhecimento de voz: wit.ai, google ou Yandex
- Conhecimento mínimo de sistemas Linux
- O desejo de lidar com o Asterisk
Se todos os pontos forem concluídos com sucesso - você pode prosseguir. A primeira coisa a fazer é colocar o próprio asterisco, avisos de voz para o teste, além de nodejs e npm.
apt install nodejs asterisk npm asterisk-core-sounds-ru-gsm
Em seguida, precisamos do serviço de reconhecimento de voz e do próprio gerente de processos para iniciá-lo:
npm install voicer -g npm install pm2 -g
Crie pastas e configurações para o voicer:
mkdir -p /etc/voicer/data
E escreva a configuração no arquivo /etc/voicer/config.js, adicionando seu nome de usuário / senha e chave (developer_key) ao serviço desejado. No meu caso, o wit.ai foi escolhido - livre, preciso o suficiente para nossas tarefas.
module.exports = { agi: { port: 3000 }, web: { port: 3100, auth: true, username: '_', password: '_', realm: '_' }, processing: { totalAttempts: 2, playGreeting: true, playBeepBeforeRecording: false
Em seguida, precisamos criar um serviço para executar o voicer. Este será o arquivo /etc/init.d/voicer:
Bem, ative-o:
systemctl daemon-reload systemctl enable voicer systemctl start voicer
Note-se que o voicer armazenará os arquivos gravados na pasta / tmp e seria bom limpá-lo periodicamente. Crie um script simples para isso e adicione-o ao /etc/cron.daily
Bem, agora a parte mais difícil permanece - configurar o próprio asterisco. Como já temos um PBX e todos os clientes o utilizam, não precisamos da maior parte da configuração. Excluímos (ou salvamos em um local escuro, fresco e seco - se desejado) tudo da pasta / etc / asterisk, exceto asterisk.conf, modules.conf e sip.conf. E adicionamos a configuração sip.conf com as seguintes linhas, adicionando os valores que precisamos:
- fromdomain - endereço do servidor com um asterisco
- host - endereço do PBX
- fromuser: secret e defaultuser: remotesecret - login: pares de senhas trocados por asterisco e PBX
[main_link] fromdomain=xxx.xxx.xxx.xxx host=xxx.xxx.xxx.yyy insecure=port port=5060 realm=asterisk sendrpid=pai fromuser=111 secret=111 defaultuser=222 remotesecret=222 qualify=yes type=friend disallow=all allow=alaw context=main_link promiscredir=yes dtmfmode=auto
Aqui vale a pena prestar atenção no modo em que os comandos dtmf funcionam no seu PBX. Observe que eles podem ser processados por métodos diferentes para chamadas externas de PBX (por exemplo, de uma cidade ou de um telefone celular) e chamadas internas entre os assinantes do seu PBX. No meu caso, na primeira versão, era sinais de banda dtmf, na segunda - rfc2833. Mas o auto fez isso. Além disso, recursos interessantes de interação com o seu PBX podem esperar por você - você terá que descobrir em primeira mão o que é necessário, por exemplo, para salvar o assinante de identificação de chamada (externa) ao retornar uma chamada do IVR para o PBX (linha sendrpid).
E havia mais um arquivo de configuração. O mais importante. Dialplan, também conhecido como extensions.conf. Nele, você definitivamente precisa indicar seu número externo (para o qual as pessoas ligarão), o número da secretária (que será usado por padrão) e o caminho para suas solicitações de voz.
[general] static=yes writeprotect=no [globals] [main_link] exten => __,1,Goto(ivr_tree,s,1) [ivr_tree] ;allow direct dialing to internal users exten => _40XX,1,Background(custom/common/SoedinyauVas) ;check user voice existance same => n,Set(exists=${STAT(e,${ASTDATADIR}/sounds/custom/${EXTEN}.vox)}) same => n,Playback(custom/${IF($[ ${exists} = 1 ] ? ${EXTEN} : Sotrudnik)}) same => n,Transfer(SIP/${EXTEN}@_) ;start intro exten => s,1,Answer() same => n,Set(CHANNEL(language)=ru) same => n,Background(custom/common/Welcome) ;start recognition same => n,AGI(agi://localhost:3000) same => n,GotoIf($[${RECOGNITION_RESULT}=SUCCESS]?:default) same => n,Background(custom/common/SoedinyauVas) ;check user voice existance same => n,Set(exists=${STAT(e,${ASTDATADIR}/sounds/custom/${RECOGNITION_TARGET}.vox)}) ;play user name or default name same => n,Playback(custom/${IF($[ ${exists} = 1 ] ? ${RECOGNITION_TARGET} : Sotrudnik)}) same => n,Transfer(SIP/${RECOGNITION_TARGET}@_) same => n,Hangup() ;default route same => n(default),Transfer(SIP/4001@_)
Este exemplo usa saudações, nomes de funcionários e a frase "conectar você". Ao mesmo tempo, uma dica para um funcionário é procurada pelo seu número e, se não for pronunciada simplesmente "com o funcionário". Eu recomendo encomendar essas dicas para os estúdios - os sistemas de síntese de fala, infelizmente, não são perfeitos e a pronúncia do nome da sua empresa e do nome dos funcionários é adequada apenas para entretenimento. 40XX - números na empresa, 4001 - secretário.
A peculiaridade dessa situação é que é o PBX que lida com nossas chamadas. Portanto, em vez do comando de discagem usual, usamos o comando Transferir - e, em seguida, a chamada recebida após o IVR sai completamente do asterisco e libera os canais sip do PBX (o número deles geralmente é codificado pela licença). Na maioria dos casos, o comando Transfer é aconselhado a usar o nome da direção (main_link), mas para o meu PBX apenas uma indicação direta do endereço da estação era adequada.
É hora de adicionar usuários ao sistema de reconhecimento. Para fazer isso, vá para o endereço do servidor e porta 3100, após o qual escrevemos os nomes, sobrenomes e números de funcionários.
Agora, nosso asterisco é capaz de receber chamadas, reconhecer sinais DTMF, reconhecer nomes de funcionários e redirecioná-los para seus números internos. Resta apenas convencer a estação de que precisa enviar chamadas recebidas para o nosso servidor. Dependendo do fabricante, essas configurações podem ser completamente diversas, mas o caminho desejado conterá as palavras ARS e roteamento de chamadas. Mas esta é uma história completamente diferente.