Existe o asterisco, um grupo de operadores (3-5 pessoas) com uma grande carga (tempo médio de espera> 2 minutos)
A tarefa é que os assinantes com uma determinada região geográfica ofereçam a oportunidade de não esperar até que o operador esteja livre e, pressionando 0, ouça “Obrigado pela ligação. Definitivamente ligaremos para você ”, desconecte e espere calmamente uma ligação do operador, bem ou
das pessoas comuns através do Smart Callback
Criar tabelas
CREATE TABLE asterisk.callback (
id int (11) NÃO NULL AUTO_INCREMENT,
timestamp dt DEFAULT CURRENT_TIMESTAMP,
cid varchar (32) NÚMERO PADRÃO,
dst varchar (32) NÚMERO PADRÃO,
status smallint (6) NÃO NULL PADRÃO 0,
tot_calls int (11) NÃO NULL PADRÃO 0,
timestamp last_call DEFAULT '0000-00-00 00:00:00',
timestamp compl_dt DEFAULT '0000-00-00 00:00:00',
uniqueid varchar (32) DEFAULT NULL,
fila varchar (255) DEFAULT NULL,
CHAVE PRIMÁRIA (ID)
)
MOTOR = INNODB
CREATE TABLE asterisk.callback_log (
id int (11) NÃO NULL AUTO_INCREMENT,
callback_id int (11) NÃO NULL,
registro de data e hora dt DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
status varchar (32) DEFAULT NULL,
params varchar (2048) DEFAULT NULL,
CHAVE PRIMÁRIA (id),
CONSTRAINT callback_log_fk1 CHAVE ESTRANGEIRA (callback_id)
REFERÊNCIAS asterisk.callback (id) ON DELETE CASCADE ON UPDATE CASCADE
)
MOTOR = INNODB
Editando extensions.conf
extensão => 88142590067, s, 1
igual => n, GotoIf ($ ["$ {CALLERID (num): 0: 4}" = "8814"]? extra); se o número for local, permita CALLBACK
.... você pode inserir mais verificações aqui ...
same => n, Saltar (chamada)
same => n (extra), NoOp (Permitir retorno de chamada para $ {CALLERID (num)})
igual => n, conjunto (ALLOW_CALLBACK = 1)
same => n, Set (CALLBACK_QUEUE = operadores)
same => n, Segundo plano (vse / pressione 0 para retorno de chamada)
same => n (call), NoOp (solicite operadores. GROUP_COUNT = $ {GROUP_COUNT (operadores)})
igual => n, fila (operadores, tThH)
same => n, Hangup
include => main_menu_press
[main_menu_press]
exten => 0.1, NoOp ('-------------------- $ {CALLERID (num)} BOTÃO DE IMPRENSA $ {EXTEN}. ALLOW_CALLBACK = $ {ALLOW_CALLBACK} ')
same => n, GotoIf ($ [$ {ALLOW_CALLBACK} = 1]? retorno de chamada, s, 1: i, 1)
[retorno]
exten => s, 1, NoOp (CALLBACK)
same => n, Playback (obrigado por ligar & vse / my-vam-perezvonim)
same => n, Hangup
exten => h, 1, agi (callback.php, gen, 0, $ {CALLBACK_QUEUE})
[retorno de chamada]
exten => _X., 1, NoOp (tente discar para a fila ($ {CALLBACK_QUEUE}) e retorne a chamada para $ {CALLBACK_NUM})
mesmo => n, conjunto (__ DST = "?")
same => n, Set (CALLERID (num) = $ {CALLBACK_NUM})
igual => n (chamada), fila ($ {CALLBACK_QUEUE}, tT)
same => n, NoOp (CALLBACK QUEUESTATUS = $ {QUEUESTATUS})
[resposta de fila de macro]; Chegamos aqui quando o operador atendeu.
exten => s, 1, NoOp (o membro da fila respondeu uniq = $ {UNIQUEID} cid = $ {CALLERID (num)} chan = $ {CHANNEL} callback_id = $ {CALLBACK_ID} callback_num = $ {CALLBACK_NU
same => n, GotoIf ($ ["$ {CALLBACK_ID} x" = "x"]? pule)
same => n, Set (DST = $ {CHANNEL})
igual => n, conjunto (CALLERID (num) = 067)
same => n, Reprodução (tentativa privada); Operador Play "Aguardar conexão"
same => n, agi (callback.php, resposta a fila, $ {CALLBACK_ID}, $ {CHANNEL}, $ {UNIQUEID})
same => n, Discar (Local / $ {CALLBACK_NUM} @from_office_new)
same => n, NoOp (tempo limite de discagem [macro-fila-resposta])
igual => n (pular), NoOp ()
exten => h, 1, NoOp ([macro-queue-respondendo] discar desligado)
same => n, GotoIf ($ ["$ {CALLBACK_ID} x" = "x"]? end)
same => n, NoOp (dialstatus = $ {DIALSTATUS} hangupcause = $ {HANGUPCAUSE} queuestatus = $ {QUEUESTATUS})
same => n, NoOp (my_dialstatus = $ {MY_DIALSTATUS} my_hangupcause = $ {MY_HANGUPCAUSE})
same => n, agi (callback.php, resposta de espera da fila, $ {CALLBACK_ID}, $ {CHANNEL}, $ {UNIQUEID})
igual => n (final), NoOp
[retorno de chamada completo]
exten => s, 1, NoOp (retorno de chamada concluído. CALLBACK_ID = $ {CALLBACK_ID}, uniq = $ {UNIQUEID}, dst = $ {DST} chan = $ {CHANNEL})
same => n, NoOp (dialstatus = $ {DIALSTATUS} hangupcause = $ {HANGUPCAUSE} queuestatus = $ {QUEUESTATUS})
same => n, NoOp (my_dialstatus = $ {MY_DIALSTATUS} my_hangupcause = $ {MY_HANGUPCAUSE})
Arquivo Queues.conf
[operadores]
ringinuse = no
estratégia = rrmemory
música = padrão
membro => SIP / 321
membro => SIP / 322
membro => SIP / 323
membro => SIP / 324
membro => SIP / 325
member => Agent / 1
member => Agent / 2
member => Agent / 3
member => Agent / 4
member => Agent / 5
context = main_menu_press
timeout = 0
anunciar-posição = sim
frequência de anúncio = 60
periodic-anuncie-frequência = 30
queue-youarenext = queue-youarenext
membermacro = resposta da fila
Bem, na verdade os scripts (PHP detectado)
config.php
<?php ob_implicit_flush(true); set_time_limit(6); date_default_timezone_set('Europe/Moscow'); mysql_connect("localhost","asterisk","***") or die('Mysql connect error'); mysql_select_db("asterisk");
callback.php
E colocamos mais um arquivo callback-regen.php para a regeneração de arquivos de chamada em coroas a cada 5 minutos entre as 8h e as 20h.
A cada tentativa, o tempo da chamada repetida aumenta em 5 minutos. Após 10 tentativas de zombar do operador, pare