Asterisk® SCF™ + LUA: IVR e alguns outros pontos

Olá de novo! IVR - hoje não é nem um recurso, mas um certo padrão para as empresas. Em alguns casos, essencial, tanto para clientes, quanto para as empresas, os concorrentes, acreditam que, se esse IVR não estiver lá, então “lá” a qualidade dos serviços prestados é baixa ou de nenhuma qualidade. Você não vai surpreender ninguém se não tiver um IVR, pelo menos básico, hoje em dia. No entanto, estamos falando sobre a implementação do IVR na linguagem LUA sob o Asterisk® SCF™. E se você está mudando de um Dialplan regular (extensions.conf) para LUA, há algo a esclarecer aqui.

Suponha que você já tenha os arquivos necessários (prompt de áudios) para o menu e eles estejam na pasta certa. É importante ter certeza que eles estão na configuração correta de áudio para telefonia. Você pode fazer isso usando o PBXware Sound Converter Wizard. Então, ao descrever o menu de voz (ou Portal de Voz) em LUA, fazemos (eu fiz) o seguinte:

Descrevemos em algum lugar no início do arquivo uma pasta com os arquivos (prompt de áudios). Tudo é mais conveniente em um lugar para mudar, se necessário:
 
mhold = { m_hello = "custom/message_01"; -- Cumprimento -- m_menu = "custom/message_02"; -- Descrição do menu -- m_thx = "custom/message_05"; -- Obrigado por escolher nossa empresa -- good_day = "custom/wav_gd_2"; -- Tenha um bom dia -- comerc = "custom/com_1"; -- Digite 1 para algo -- live = "custom/live_2"; -- Bem, etc. Outras escolhas e Dígitos -- other = "custom/other_3"; }
 
Assim, você descreveu nesse bloco, a pasta, e os campos que indicam os arquivos utilizados. No meu caso - arquivos com uma saudação, algumas palavras de agradecimento e uma seleção do menu. Havia também uma opção de backup (por precaução), em que cada menu era dividido em seu próprio arquivo ...

Além disso, no primeiro artigo, na descrição das chamadas recebidas, na função foo() indiquei a chamada ivr(). Então, na verdade, no meu exemplo funcionou assim: Evento => Chamada de entrada. Chamando foo(). Verificando algumas condições => tocando saudação => chamando ivr(). Toquei a saudação antes de chamar ivr().
 
function ivr(d) app.noop("Portal de Voz Ativado!") app.noop("DID: "..d) app.background(mhold.m_menu,"","","menu") app.waitexten(3) return end

Não é um recurso tão sofisticado. app.background aqui é uma chamada do núcleo (CORE/LOCAL) do Asterisk® SCF™, usado no Portal de Voz/IVR/URA. Mas, ao mesmo tempo, você também precisa fazer uma descrição do evento do menu nas extensões:

menu = { ["1"] = function(c,e) app.noop("Calling from menu by 1") app.playback(mhold.m_thx) CallSKS() -- Para o manipulador de chamadas SAC -- end; ["2"] = function(c,e) app.noop("Calling from menu by 2") app.playback(mhold.m_thx) app.goto("local_ext","4690",1) -- Aqui é onde eu ligo para assinantes em grupos ao mesmo tempo -- end; ["3"] = function(c,e) app.noop("Calling from menu by 3") app.playback(mhold.m_thx) app.goto("local_ext","4579",1) end; ["4"] = function(c,e) app.noop("Calling from menu by 4") app.playback(mhold.m_thx) CallSKS() -- Também é uma opção para entrar em contato com o SAC -- end; };

Ao mesmo tempo, na descrição das chamadas recebidas from_trunk, você precisa adicionar processamento de tempo limite (TIMING), caso contrário, se o cliente não fez uma escolha dentro do tempo exigido, o cliente ouvirá bipes curtos e no console do Asterisk® SCF™ você verá um erro de execução de código.
 
from_trunk = { t = function() app.playback(mhold.m_thx) app.goto("local_ext","7090",1) end; -- Além do resto da descrição dos eventos --
 
Tudo parece ser sobre Portal de Voz/IVR/URA. Agora mais uma coisa: o tempo limite da ligação (TIMING). Sim, infelizmente eu também tive que fazer isso. Havia pessoas na empresa que adorava longa distância (DDD), por mês, dezenas de minutos de DDD foram pagos. - conversando por horas com amigos, namoradas, irmãos, etc. Claro, essas pessoas eram punidas, além de pagar a conta que é um uso particular, mas a posição da administração era tal que era preciso trabalhar durante o horario de trabalho. Eles pediram para limitar os usários durante o periodo de trabalho O exemplo a seguir mostrará como você pode fazer isso globalmente, com a devida aprovação da diretoria da empresa  (acredito que tenha uma melhor opção que a adotada).
 
-- Em algum lugar dentro da função trunk_test -- if string.len(num) > 7 and not string.find(string.sub(num,1,4),"8383",1) then app.noop("A duração da chamada é limitada a 10 minutos!!!") app.dial(string.format("%s%s,60,tTL(600000:480000:60000)",trunk.startel,num)) else app.noop("Chamada Cidade - LDD.") app.dial(string.format("%s%s,60,tT",trunk.startel,num)) end

Nesse caso, fiz uma seleção pelo número de caracteres do número discado. Se o número de caracteres exceder o número de caracteres em nossa cidade (LDD - Local Direct Dialing), excluindo nosso código de cidade, então esta é uma chamada de longa distância (DDD - Discagem Direta a Distância). Os celulares locais são processados ​​separadamente, portanto, esta regra não se enquadra nesta regra (no artigo sobre códigos DEF deixo isso mais claro). Mas o celular intermunicipal - bateu. No meu exemplo, o limite é de 10 minutos. em 7 (ou 8?) minutos, o assinante ouve um leve bipe. Nesta função, você pode adicionar o processamento de apenas "informações" específicos. Você pode colocar esses áudios informativos na tabela e pegar eles via UnixODBC via banco de dados mysql, ou o que quiser.

Tkat's All Folks! (É por hoje é só, pessoal!).

 
Temos uma comunidade, ainda pequena no Telegram, para estudos exclusivos em Dialplan com LUA no Asterisk® SCF™, você é bem vindo! (Telegram: https://t.me/asteriskluabr)

Nenhum comentário

Toda vez que um homem supera os reveses, torna-se mentalmente e espiritualmente mais forte!

Tecnologia do Blogger.