JSON Ligações de entrada -------------------------------------------------------------------------------------------------------------------------------- CMDs -------------------------------------------------------------------------------------------------------------------------------- start Determina o inicio do fluxograma, passando o numero do DID no atributo value. { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, -------------------------------------------------------------------------------------------------------------------------------- blacklist.check Verifica se o callerid esta na blacklist. Caso esteja na lista, a ligação é encaminhado para o CMD blacklist.true Caso não esteja na lista, a ligação é encaminhado para o CMD blacklist.false [ { "id": "1", "idmaster": "1", "cmd": "start", "value": "2000" }, { "id": "2", "idmaster": "1", "cmd": "blacklist.check", "value": "" }, { "id": "3", "idmaster": "2", "cmd": "blacklist.true", "value": "" }, { "id": "4", "idmaster": "3", "cmd": "playaudio", "value": "vm-goodbye.wav", "value2": "2", "value3": "1", "value4": "false" }, { "id": "5", "idmaster": "2", "cmd": "blacklist.false", "value": "" }, { "id": "6", "idmaster": "5", "cmd": "playaudio", "value": "demo-echotest.wav", "value2": "2", "value3": "1", "value4": "false" } ] -------------------------------------------------------------------------------------------------------------------------------- callerid.change Altera o callerid passado pelo atributo value O parametro pode ser passado em value2 num, all, name, etc... Se não passar ele usa num [ { "id": "1", "idmaster": "1", "cmd": "start", "value": "2000" }, { "id": "2", "idmaster": "1", "cmd": "callerid.change", "value": "5555555", "value2": "num" }, { "id": "3", "idmaster": "2", "cmd": "playaudio", "value": "vm-goodbye.wav", "value2": "2", "value3": "1", "value4": "false" } ] -------------------------------------------------------------------------------------------------------------------------------- digit Confere o valor digitado se igual ao passado no atributo value. Caso ocorra um digito. Encaminha a ligação para o CMD seguintem referente ao valor do digito. Caso não ocorra um digito em 10 segundos. Encaminha para o CMD "timeout" em paralelo ao CMD "digit". { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "playaudio", "value": "demo-echotest.wav" }, { "id": "3", "idmaster": "2", "cmd": "digit", "value": "1" }, { "id": "4", "idmaster": "3", "cmd": "dialgroupextension", "value": "7" }, { "id": "5", "idmaster": "2", "cmd": "timeout", "value": "" } -------------------------------------------------------------------------------------------------------------------------------- dialdigit Toca o ramal digitado. { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "playaudio", "value": "demo-echotest.wav" }, { "id": "3", "idmaster": "2", "cmd": "dialdigit", "value": "" } -------------------------------------------------------------------------------------------------------------------------------- dialgroupextension Toca todos os ramais que pertencem ao id de grupo passado no atributo value: { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "dialgroupextension", "value": "7" } -------------------------------------------------------------------------------------------------------------------------------- dialplan.checkvar Coleta variável da memória do asterisk, verificando se "deu match". Para seguir um rota específica do IVR após o "match". { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "playaudio", "value": "bemvindo-digitecpf.wav" }, { "id": "3", "idmaster": "2", "cmd": "custom", "variation": "1", "defaultvalues": { "cmd": "dialplan.setvar", "varname": "CPF" } }, { "id": "4", "idmaster": "3", "cmd": "custom", "variation": "2", "defaultvalues": { "cmd": "dialplan.checkvar", "varname": "CPF", "varvalue": "123456" } }, { "id": "5", "idmaster": "4", "cmd": "playaudio", "value": "cpfvalidado.wav" } -------------------------------------------------------------------------------------------------------------------------------- dialplan.gosub Direciona a ligação para um trecho do dialplan do asterisk (A ligação volta ao IVR, caso não execute hangup no dialplan). Atributo ctxname é o nome do contexto no dialplan. Atributo ctxexten é o ${EXTEN} passado para o contexto do diaplan (Se não informado vai passar o valor 1001). { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "playaudio", "value": "bemvindo-digitecpf.wav" }, { "id": "3", "idmaster": "2", "cmd": "custom", "variation": "1", "defaultvalues": { "cmd": "dialplan.gosub", "ctxname": "unimed", "ctxexten": "1001" } } -------------------------------------------------------------------------------------------------------------------------------- dialplan.setvar Armazena na memória do asterisk, variável de nome passado no atributo "varname", o último valor digitado no IVR. { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "playaudio", "value": "bemvindo-digitecpf.wav" }, { "id": "3", "idmaster": "2", "cmd": "custom", "variation": "1", "defaultvalues": { "cmd": "dialplan.setvar", "varname": "CPF" } } -------------------------------------------------------------------------------------------------------------------------------- digitinvalid Encaminha a ligação para o CMD seguinte, caso tenha sido digitado uma opção "inválida" de digito na URA. { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "playaudio", "value": "demo-echotest.wav" }, { "id": "3", "idmaster": "2", "cmd": "digit", "value": "1" }, { "id": "4", "idmaster": "3", "cmd": "dialgroupextension", "value": "7" }, { "id": "5", "idmaster": "2", "cmd": "digitinvalid", "value": "" }, { "id": "6", "idmaster": "5", "cmd": "playaudio", "value": "ddigito-invalido.wav" } -------------------------------------------------------------------------------------------------------------------------------- dialextension Toca o ramal informado no atributo value. { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "dialextension", "value": "2601" } -------------------------------------------------------------------------------------------------------------------------------- cnpj.check Verifica se o CNPJ digitado é válido. No atributo value é passao o número máximo de tentativas (zero ou vazio para infinitas) Caso seja válido. A ligação é encaminhado para o CMD cnpj.true Caso não seja válido. A ligação é encaminhado para o CMD cnpj.false Caso atinja o limite. A ligação é encaminhado para o CMD cnpj.limit { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "playaudio", "value": "demo-echotest.wav", "value2": "3", "value3": "11", "value4": "true" }, { "id": "3", "idmaster": "2", "cmd": "cnpj.check", "value": "" }, { "id": "4", "idmaster": "3", "cmd": "cnpj.true", "value": "" }, { "id": "5", "idmaster": "3", "cmd": "cnpj.false", "value": "" } -------------------------------------------------------------------------------------------------------------------------------- condtempo.check Verifica se esta em alguma condição de tempo. Caso positivo. A ligação é encaminhado para o CMD condtempo.true Caso negativo. A ligação é encaminhado para o CMD condtempo.false O campo value é o id da tab_periodo { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "condtempo.check", "value": "12" }, { "id": "3", "idmaster": "2", "cmd": "condtempo.true", "value": "" }, { "id": "4", "idmaster": "2", "cmd": "condtempo.false", "value": "" } -------------------------------------------------------------------------------------------------------------------------------- cpf.check Verifica se o CPF digitado é válido. No atributo value é passao o número máximo de tentativas (zero ou vazio para infinitas) Caso seja válido. A ligação é encaminhado para o CMD cpf.true Caso não seja válido. A ligação é encaminhado para o CMD cpf.false Caso atinja o limite. A ligação é encaminhado para o CMD cnpj.limit [ { "id": "1", "idmaster": "1", "cmd": "start", "value": "2000" }, { "id": "2", "idmaster": "1", "cmd": "playaudio", "value": "demo-echotest.wav", "value2": "3", "value3": "11", "value4": "false" }, { "id": "3", "idmaster": "2", "cmd": "cpf.check", "value": "2" }, { "id": "4", "idmaster": "3", "cmd": "cpf.true", "value": "" }, { "id": "5", "idmaster": "3", "idnext": "2", "cmd": "cpf.false", "value": "" }, { "id": "6", "idmaster": "3", "cmd": "cpf.limit", "value": "" }, { "id": "7", "idmaster": "6", "cmd": "playaudio", "value": "vm-goodbye.wav", "value2": "2", "value3": "1", "value4": "false" }, { "id": "8", "idmaster": "4", "cmd": "playaudio", "value": "vm-intro.wav", "value2": "2", "value3": "1", "value4": "false" } ] -------------------------------------------------------------------------------------------------------------------------------- expediente.check Verifica se esta em horário de expediente. Não precisa passar nenhuma informação nos atributos value. Caso estaja em horário de expediente. A ligação é encaminhado para o CMD expediente.true Caso não estaja em horário de expediente. A ligação é encaminhado para o CMD expediente.false { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "expediente.check", "value": "" }, { "id": "3", "idmaster": "2", "cmd": "expediente.true", "value": "" }, { "id": "4", "idmaster": "2", "cmd": "expediente.false", "value": "" } -------------------------------------------------------------------------------------------------------------------------------- feriado.check Verifica se é feriado cadastrado. Não precisa passar nenhuma informação nos atributos value. Caso seja feriado cadastrado. A ligação é encaminhado para o CMD feriado.true Caso não seja feriado cadastrado. A ligação é encaminhado para o CMD feriado.false { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "feriado.check", "value": "" }, { "id": "3", "idmaster": "2", "cmd": "feriado.true", "value": "" }, { "id": "4", "idmaster": "2", "cmd": "expediente.false", "value": "" } -------------------------------------------------------------------------------------------------------------------------------- ivr.redirect Encaminha a ligação para outro IVR (passado no atributo value). { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "ivr.redirect", "value": "080012344321" } -------------------------------------------------------------------------------------------------------------------------------- pesqsat Executa o audio da pesquisa de satisfação e salva a nota digitada no id da pesquisa de satisfação passada no atributo value { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "playaudio", "value": "pesquisa.wav" }, { "id": "3", "idmaster": "2", "cmd": "pesqsat", "value": "1" }, -------------------------------------------------------------------------------------------------------------------------------- playaudio Toca um arquivo de audio informando o arquivo no atributo value. Atributo value2 => Timeout em segundos Atributo value3 => Máximo de digitos esperado Atributo value4 => Pronuncia os numeros digitados se passado o valor: true { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "playaudio", "value": "demo-echotest.wav", "value2": "3", "value3": "11", "value4": "true" } -------------------------------------------------------------------------------------------------------------------------------- playaudiotext Toca um audio a partir do texto passado no atributo value. Atributo value2 => Timeout em segundos Atributo value3 => Máximo de digitos esperado Atributo value4 => Pronuncia os numeros digitados se passado o valor: true { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "playaudiotext", "value": "Testando 123" "value2": "3", "value3": "11", "value4": "true" } -------------------------------------------------------------------------------------------------------------------------------- queue Executa uma fila de antendimento. O id da fila é passado no atributo value. { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "queue", "value": "4" } -------------------------------------------------------------------------------------------------------------------------------- queue.logadd Adiciona registro no queuelog. value é o id da fila de atendimento value2 pode ser IVRSTART ou IVRAPPEND value3 é o texto digitado no IVR { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "queue.logadd", "value": "3", "value2": "IVRSTART", "value3": "AGUARDOU" } -------------------------------------------------------------------------------------------------------------------------------- record Inicia a gravação da ligação. Não precisa passar nenhuma informação nos atributos value. { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "record", "value": "" } -------------------------------------------------------------------------------------------------------------------------------- timeout Executa a partir de um evento "timeout" do CMD anterior ou em paralelo (ex.: CMD "digit"). Encaminhando a ligação para o CMD seguinte. { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "playaudio", "value": "demo-echotest.wav" }, { "id": "3", "idmaster": "2", "cmd": "digit", "value": "1" }, { "id": "4", "idmaster": "3", "cmd": "dialgroupextension", "value": "7" }, { "id": "5", "idmaster": "2", "cmd": "timeout", "value": "" }, { "id": "6", "idmaster": "5", "cmd": "dialextension", "value": "2601" } -------------------------------------------------------------------------------------------------------------------------------- whitelist.check Verifica se o callerid esta na whitelist. Caso esteja na lista, a ligação é encaminhado para o CMD whitelist.true Caso não esteja na lista, a ligação é encaminhado para o CMD whitelist.false [ { "id": "1", "idmaster": "1", "cmd": "start", "value": "2000" }, { "id": "2", "idmaster": "1", "cmd": "whitelist.check", "value": "" }, { "id": "3", "idmaster": "2", "cmd": "whitelist.true", "value": "" }, { "id": "4", "idmaster": "3", "cmd": "playaudio", "value": "demo-echotest.wav", "value2": "2", "value3": "1", "value4": "false" }, { "id": "5", "idmaster": "2", "cmd": "whitelist.false", "value": "" }, { "id": "6", "idmaster": "5", "cmd": "playaudio", "value": "vm-goodbye.wav", "value2": "2", "value3": "1", "value4": "false" } ] -------------------------------------------------------------------------------------------------------------------------------- CMD que conecta com outro CMD -------------------------------------------------------------------------------------------------------------------------------- Informe o "idnext" para após executar o comando, o fluxo seguir para o próximo item que esta no "idnext" Abaixo, exemplo de loop infinito tocando o audio. { "id": "1", "idmaster": "1", "cmd": "start", "value": "551138118400" }, { "id": "2", "idmaster": "1", "cmd": "playaudio", "value": "demo-echotest.wav" }, { "id": "3", "idmaster": "2", "idnext": "2", "cmd": "timeout", "value": "" } -------------------------------------------------------------------------------------------------------------------------------- Regras de negócio -------------------------------------------------------------------------------------------------------------------------------- Conexões CMD "master" => "child" permitidas start => callerid.change start => dialgroupextension start => dialextention start => cnpj.check start => cpf.check start => expediente.check start => feriado.check start => playaudio start => playaudiotext start => queue start => record callerid.change => dialgroupextension callerid.change => dialextention callerid.change => cnpj.check callerid.change => cpf.check callerid.change => expediente.check callerid.change => feriado.check callerid.change => playaudio callerid.change => playaudiotext callerid.change => queue callerid.change => record dialgroupextension => timeout dialextension => timeout digit => callerid.change digit => dialgroupextension digit => dialextention digit => cnpj.check digit => cpf.check digit => expediente.check digit => feriado.check digit => playaudio digit => playaudiotext digit => queue digit => record digitinvalid => callerid.change digitinvalid => dialgroupextension digitinvalid => dialextention digitinvalid => cnpj.check digitinvalid => cpf.check digitinvalid => expediente.check digitinvalid => feriado.check digitinvalid => playaudio digitinvalid => playaudiotext digitinvalid => queue digitinvalid => record blacklist.check => blacklist.false blacklist.check => blacklist.true blacklist.false => callerid.change blacklist.false => dialgroupextension blacklist.false => dialextension blacklist.false => expediente.check blacklist.false => feriado.check blacklist.false => playaudio blacklist.false => playaudiotext blacklist.false => queue blacklist.false => record blacklist.true => callerid.change blacklist.true => dialgroupextension blacklist.true => dialextension blacklist.true => feriado.check blacklist.true => expediente.check blacklist.true => playaudio blacklist.true => playaudiotext blacklist.true => queue blacklist.true => record cnpj.check => cnpj.false cnpj.check => cnpj.true cnpj.check => cnpj.limit cnpj.false => callerid.change cnpj.false => dialgroupextension cnpj.false => dialextension cnpj.false => expediente.check cnpj.false => feriado.check cnpj.false => playaudio cnpj.false => playaudiotext cnpj.false => queue cnpj.false => record cnpj.true => callerid.change cnpj.true => dialgroupextension cnpj.true => dialextension cnpj.true => feriado.check cnpj.true => expediente.check cnpj.true => playaudio cnpj.true => playaudiotext cnpj.true => queue cnpj.true => record cnpj.limit => callerid.change cnpj.limit => dialgroupextension cnpj.limit => dialextension cnpj.limit => feriado.check cnpj.limit => expediente.check cnpj.limit => playaudio cnpj.limit => playaudiotext cnpj.limit => queue cnpj.limit => record cpf.check => cpf.false cpf.check => cpf.true cpf.check => cpf.limit cpf.false => callerid.change cpf.false => dialgroupextension cpf.false => dialextension cpf.false => expediente.check cpf.false => feriado.check cpf.false => playaudio cpf.false => playaudiotext cpf.false => queue cpf.false => record cpf.true => callerid.change cpf.true => dialgroupextension cpf.true => dialextension cpf.true => feriado.check cpf.true => expediente.check cpf.true => playaudio cpf.true => playaudiotext cpf.true => queue cpf.true => record cpf.limit => callerid.change cpf.limit => dialgroupextension cpf.limit => dialextension cpf.limit => feriado.check cpf.limit => expediente.check cpf.limit => playaudio cpf.limit => playaudiotext cpf.limit => queue cpf.limit => record expediente.check => expediente.false expediente.check => expediente.true expediente.false => callerid.change expediente.false => dialgroupextension expediente.false => dialextention expediente.false => feriado.check expediente.false => playaudio expediente.false => playaudiotext expediente.false => queue expediente.false => record expediente.true => callerid.change expediente.true => dialgroupextension expediente.true => dialextention expediente.true => feriado.check expediente.true => playaudio expediente.true => playaudiotext expediente.true => queue expediente.true => record feriado.check => feriado.false feriado.check => feriado.true feriado.false => callerid.change feriado.false => dialgroupextension feriado.false => dialextention feriado.false => expediente.check feriado.false => playaudio feriado.false => playaudiotext feriado.false => queue feriado.false => record feriado.true => callerid.change feriado.true => dialgroupextension feriado.true => dialextention feriado.true => expediente.check feriado.true => playaudio feriado.true => playaudiotext feriado.true => queue feriado.true => record playaudio => callerid.change playaudio => dialgroupextension playaudio => dialextention playaudio => digit playaudio => digitinvalid playaudio => cnpj.check playaudio => cpf.check playaudio => expediente.check playaudio => feriado.check playaudio => playaudio playaudio => playaudiotext playaudio => queue playaudio => record playaudiotext => callerid.change playaudiotext => dialgroupextension playaudiotext => dialextention playaudiotext => digit playaudiotext => digitinvalid playaudiotext => cnpj.check playaudiotext => cpf.check playaudiotext => expediente.check playaudiotext => feriado.check playaudiotext => playaudio playaudiotext => playaudiotext playaudiotext => queue playaudiotext => record record => callerid.change record => dialgroupextension record => dialextention record => expediente.check record => feriado.check record => playaudio record => playaudiotext record => queue timeout => callerid.change timeout => dialgroupextension timeout => dialextention timeout => expediente.check timeout => feriado.check timeout => playaudio timeout => playaudiotext timeout => queue timeout => record whitelist.check => whitelist.false whitelist.check => whitelist.true whitelist.false => callerid.change whitelist.false => dialgroupextension whitelist.false => dialextension whitelist.false => expediente.check whitelist.false => feriado.check whitelist.false => playaudio whitelist.false => playaudiotext whitelist.false => queue whitelist.false => record whitelist.true => callerid.change whitelist.true => dialgroupextension whitelist.true => dialextension whitelist.true => feriado.check whitelist.true => expediente.check whitelist.true => playaudio whitelist.true => playaudiotext whitelist.true => queue whitelist.true => record -------------------------------------------------------------------------------------------------------------------------------- Conexões CMD permitidas em paralelo blacklist.true => blacklist.false blacklist.false => blacklist.true cnpj.true => cnpj.false cnpj.true => cnpj.limit cnpj.false => cnpj.limit cnpj.false => cnpj.true cnpj.limit => cnpj.false cnpj.limit => cnpj.true cpf.true => cpf.false cpf.true => cpf.limit cpf.false => cpf.limit cpf.false => cpf.true cpf.limit => cpf.false cpf.limit => cpf.true digit <=> digit digit <=> digitinvalid digit <=> timeout expediente.true <=> expediente.false expediente.false <=> expediente.true feriado.true <=> feriado.false feriado.false <=> feriado.true timeout <=> digit timeout <=> digitinvalid whitelist.true <=> whitelist.false whitelist.false <=> whitelist.true --------------------------------------------------------------------------------------------------------------------------------