IVR utilizando Asterisk e MySQL
Neste post vou dar um rápido exemplo de como fazer uma URA com consulta a banco de dados, neste caso o MySQL.
é um exemplo bem simples que foi meu primeiro teste com com mysql é legal para ver como funciona.. e apartir dele da pra criar várias coisas legais.
Uma atendente digital que solicita o numero de contrato do cliente, caso o numero esteja no banco de dados ele é direcionado para a fila de suporte.
Caso não esteja no banco é solicitado que digite novamente o numero e retorna pro comeco do dialplan.
Comecei criando um banco que no meu caso chamei de clientes:
mysql> create database clientes;
Query OK, 1 row affected (0.01 sec)
mysql> use clientes
Database changed
Depois criei a tabela chamada de contratos:
mysql> create table contratos ( id int(10) not null auto_increment, numero varchar(20) not null, nome varchar(20) not null, primary key (id));
Query OK, 0 rows affected (0.01 sec)
mysql>
Inseri um cliente com o numero de contrato 0000000010
mysql> INSERT into contratos SET id=0, numero="0000000010" ,nome="Renato Malta";
Query OK, 1 row affected (0.00 sec)
mysql> select * from contratos;
+----+------------+--------------+
| id | numero���� | nome�������� |
+----+------------+--------------+
|� 1 | 0000000010 | Renato Malta |
+----+------------+--------------+
1 row in set (0.00 sec)
mysql>
E vamos inserir isto no seu dialplan no contexto de entrada:
exten => s,1,Playback(bemvindo)
exten => s,2,MYSQL(Connect connid localhost root senha clientes)
exten => s,3,Playback(insiranumerodecontrato)
exten => s,4,Read(numerodecontrato,,10)
exten => s,5,MYSQL(Query resultid ${connid} SELECT\ id\ from\ contratos\ where\ numero=${numerodecontrato})
exten => s,6,MYSQL(Fetch fetchid ${resultid} idcontrato)
exten => s,7,GotoIf($["${idcontrato}" = ""]?9:8)
exten => s,8,Queue(suporte)
exten => s,9,Playback(contratonaoencontrado)
exten => s,10,Goto(3)
Segue uma breve explicação das linhas pelo número das prioridades:
1 – Mensagem de boas vindas. **
2 – Conexao com o servidor MySQL. *
3 – Mensagem solicitando o numero de contrato. **
4 – Parte em que o usuário digita algo para ser consultado no banco. Ex. numero do contrato.
5 – Consulta no banco se existe o id digitado.
6 – Armazena o resultado da consulta na variavel idcontrato.
7 – Testa se existe o numero do contrato ou se o resultado voltou em branco. Caso seja em branco ele pula para a prioridade 9 caso exista ele continua na prioridade 8.
8 – Direciona para a fila de atendimento do suporte por exemplo
9 – Mensagem informando que o numero de contrato nao foi encontrado. **
10 – Volta para a prioridade 3 onde ele escutara novamente a mensagem solicitando o numero de contrato.
*: É necessária a instalação do pacote de addons do Asterisk para que o comando MYSQL exista.
**: Os nomes das mensagens de voz nas prioridades 1, 3 e 9 nao existem por padrão no diretório do Asterisk. Crie as suas
Mais informações sobre o comando MYSQL do Asterisk: http://www.voip-info.org/wiki/view/Asterisk+cmd+MYSQL
Então é isso!
Dúvidas, sugestões?
Olá Renato, em primeiro lugar quero parabenizá-lo pelo site, está ótimo, bom.. vou direto
eu estou tentando desenvolver um sistema assim:
funcionario liga para para central onde tenho trixbox uma placa fax modem, o trixbox atende e manda IVR trabalhar, IVR fala digite o contrato, funcionario digita contrato, IVR reconhece reconhece o digito e presquisa contrato, se encontrar ela teria que trazer o nome e endereço do contrato, tipo
rua fernando meireles
nome: joão batista
até ai tudo bem? para você é fácil? por que para mim ainda não é risos
mas vamos la
como faço para a IVR falar este nome tipo um sintetizador de voz, a IVR tem esta funcionalidade? ou eu teria que gravar o João batitista, Endereço : Rua Fernando Meireles,
se não puder ser feito com IVR, existe outra maneira de fazer isto? mas teria que ser por telefone, e com várias ligações simultaneas para o mesmo número, pode me dar um help?
Muito obrigado pela atenção chará
ou seja ela teria que pronunciar o valor que está dentro desta variável
variavel endereço = rua fernando meireles…
se não puder ser feito com IVR, existe outra forma de fazer? abraço