Hay un asterisco, un grupo de operadores (3-5 personas) con una gran carga (tiempo de espera promedio> 2 minutos)
La tarea es para los suscriptores con una determinada geografía para dar la oportunidad de no esperar hasta que el operador esté libre, y al presionar 0 escuche "Gracias por la llamada. Definitivamente le devolveremos la llamada ", desconecte y espere tranquilamente una llamada del operador, bien o
en la gente común por Smart Callback
Crear tablas
CREATE TABLE asterisk.callback (
id int (11) NOT NULL AUTO_INCREMENT,
dt marca de tiempo DEFAULT CURRENT_TIMESTAMP,
cid varchar (32) NULO POR DEFECTO,
dst varchar (32) NULO POR DEFECTO,
status smallint (6) NO NULO POR DEFECTO 0,
tot_calls int (11) NO NULL DEFAULT 0,
marca de tiempo de última llamada DEFAULT '0000-00-00 00:00:00',
compl_dt timestamp DEFAULT '0000-00-00 00:00:00',
uniqueid varchar (32) DEFAULT NULL,
cola varchar (255) NULO POR DEFECTO,
CLAVE PRIMARIA (ID)
)
MOTOR = INNODB
CREATE TABLE asterisk.callback_log (
id int (11) NOT NULL AUTO_INCREMENT,
callback_id int (11) NOT NULL,
dt marca de tiempo DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
status varchar (32) DEFAULT NULL,
params varchar (2048) NULO POR DEFECTO,
CLAVE PRIMARIA (id)
CONSTRAINT callback_log_fk1 FOREIGN KEY (callback_id)
REFERENCIAS asterisk.callback (id) EN ELIMINAR CASCADA EN ACTUALIZAR CASCADA
)
MOTOR = INNODB
Edición de extensiones.conf
exten => 88142590067, s, 1
mismo => n, GotoIf ($ ["$ {CALLERID (num): 0: 4}" = "8814"]? extra); si el número es local, entonces permita CALLBACK
.... puedes insertar más cheques aquí ...
igual => n, Ir a (llamada)
mismo => n (extra), NoOp (Permitir devolución de llamada para $ {CALLERID (num)})
mismo => n, Conjunto (ALLOW_CALLBACK = 1)
mismo => n, Conjunto (CALLBACK_QUEUE = operadores)
mismo => n, Fondo (vse / press0-to-callback)
mismo => n (llamada), NoOp (Pregunte por operadores. GROUP_COUNT = $ {GROUP_COUNT (operadores)})
igual => n, cola (operadores, tThH)
mismo => n, Hangup
include => main_menu_press
[main_menu_press]
exten => 0.1, NoOp ('-------------------- $ {CALLERID (num)} BOTÓN DE PRESIÓN $ {EXTEN}. ALLOW_CALLBACK = $ {ALLOW_CALLBACK} ')
mismo => n, GotoIf ($ [$ {ALLOW_CALLBACK} = 1]? devolución de llamada, s, 1: i, 1)
[devolución de llamada]
exten => s, 1, NoOp (CALLBACK)
mismo => n, Reproducción (gracias por llamar y vse / my-vam-perezvonim)
mismo => n, Hangup
exten => h, 1, agi (callback.php, gen, 0, $ {CALLBACK_QUEUE})
[devolución de llamada]
exten => _X., 1, NoOp (Intente marcar para hacer cola ($ {CALLBACK_QUEUE}) y devolver la llamada a $ {CALLBACK_NUM})
mismo => n, Conjunto (__ DST = "?")
mismo => n, Establecer (CALLERID (num) = $ {CALLBACK_NUM})
mismo => n (llamada), cola ($ {CALLBACK_QUEUE}, tT)
mismo => n, NoOp (LLAMADA QUEUESTATUS = $ {QUEUESTATUS})
[macro-queue-answ]; Llegamos aquí cuando el operador respondió.
exten => s, 1, NoOp (el miembro de la cola respondió uniq = $ {UNIQUEID} cid = $ {CALLERID (num)} chan = $ {CHANNEL} callback_id = $ {CALLBACK_ID} callback_num = $ {CALLBACK_NU
same => n, GotoIf ($ ["$ {CALLBACK_ID} x" = "x"]? skip)
mismo => n, Establecer (DST = $ {CHANNEL})
mismo => n, Establecer (CALLERID (num) = 067)
mismo => n, Reproducción (priv-try); Operador de reproducción "Esperar conexión"
mismo => n, agi (callback.php, quewing-answing, $ {CALLBACK_ID}, $ {CHANNEL}, $ {UNIQUEID})
mismo => n, Marque (Local / $ {CALLBACK_NUM} @from_office_new)
mismo => n, NoOp (tiempo de espera de marcado [macro-queue-answ])
mismo => n (omitir), NoOp ()
exten => h, 1, NoOp (bloqueo de marcado [macro-queue-answing])
same => n, GotoIf ($ ["$ {CALLBACK_ID} x" = "x"]? end)
mismo => n, NoOp (dialstatus = $ {DIALSTATUS} hangupcause = $ {HANGUPCAUSE} queuestatus = $ {QUEUESTATUS})
mismo => n, NoOp (my_dialstatus = $ {MY_DIALSTATUS} my_hangupcause = $ {MY_HANGUPCAUSE})
mismo => n, agi (callback.php, hangup-queue-answing, $ {CALLBACK_ID}, $ {CHANNEL}, $ {UNIQUEID})
mismo => n (final), NoOp
[devolución de llamada completa]
exten => s, 1, NoOp (Devolución de llamada completa. CALLBACK_ID = $ {CALLBACK_ID}, uniq = $ {UNIQUEID}, dst = $ {DST} chan = $ {CHANNEL})
mismo => n, NoOp (dialstatus = $ {DIALSTATUS} hangupcause = $ {HANGUPCAUSE} queuestatus = $ {QUEUESTATUS})
mismo => n, NoOp (my_dialstatus = $ {MY_DIALSTATUS} my_hangupcause = $ {MY_HANGUPCAUSE})
Archivo Queues.conf
[operadores]
ringinuse = no
estrategia = memoria
música = predeterminado
miembro => SIP / 321
miembro => SIP / 322
miembro => SIP / 323
miembro => SIP / 324
miembro => SIP / 325
miembro => Agente / 1
miembro => Agente / 2
miembro => Agente / 3
miembro => Agente / 4
miembro => Agente / 5
context = main_menu_press
tiempo de espera = 0
anunciar-posición = sí
anunciar frecuencia = 60
frecuencia de anuncio periódico = 30
queue-youarenext = queue-youarenext
membermacro = queue-answ
Bueno, en realidad los 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
Y ponemos un archivo callback-regen.php más para la regeneración de archivos de llamadas en coronas cada 5 minutos de 8 a.m. a 8 p.m.
Con cada intento, el tiempo de la llamada repetida aumenta en 5 minutos. Después de 10 intentos de burlarse del operador, pare