Es gibt ein Sternchen, eine Gruppe von Bedienern (3-5 Personen) mit einer großen Last (durchschnittliche Wartezeit> 2 Minuten)
Die Aufgabe besteht darin, dass Teilnehmer mit einer bestimmten geografischen Lage die Möglichkeit haben, nicht zu warten, bis der Betreiber frei ist, und durch Drücken von 0 „Danke für den Anruf“ zu hören. Wir werden Sie auf jeden Fall zurückrufen. “Trennen Sie die Verbindung und warten Sie ruhig auf einen Anruf vom Betreiber, oder
von den normalen Leuten per Smart Callback
Erstellen Sie Tabellen
CREATE TABLE asterisk.callback (
id int (11) NICHT NULL AUTO_INCREMENT,
dt timestamp DEFAULT CURRENT_TIMESTAMP,
cid varchar (32) STANDARD NULL,
dst varchar (32) STANDARD NULL,
Status smallint (6) NOT NULL DEFAULT 0,
tot_calls int (11) NOT NULL DEFAULT 0,
last_call timestamp DEFAULT '0000-00-00 00:00:00',
compl_dt timestamp DEFAULT '0000-00-00 00:00:00',
uniqueid varchar (32) STANDARD NULL,
Warteschlange varchar (255) DEFAULT NULL,
Primärschlüssel (ID)
)
ENGINE = INNODB
CREATE TABLE asterisk.callback_log (
id int (11) NICHT NULL AUTO_INCREMENT,
callback_id int (11) NICHT NULL,
dt timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
Status varchar (32) STANDARD NULL,
params varchar (2048) STANDARD NULL,
Primärschlüssel (ID),
CONSTRAINT callback_log_fk1 AUSLÄNDISCHER SCHLÜSSEL (callback_id)
REFERENZEN asterisk.callback (id) ON DELETE CASCADE ON UPDATE CASCADE
)
ENGINE = INNODB
Bearbeiten von extensions.conf
exten => 88142590067, s, 1
same => n, GotoIf ($ ["$ {CALLERID (num): 0: 4}" = "8814"]? extra); Wenn die Nummer lokal ist, lassen Sie CALLBACK zu
.... hier können Sie weitere Schecks einfügen ...
same => n, Goto (Anruf)
same => n (extra), NoOp (Rückruf für $ {CALLERID (num)} zulassen)
same => n, Set (ALLOW_CALLBACK = 1)
same => n, Set (CALLBACK_QUEUE = Operatoren)
same => n, Hintergrund (vse / press0-to-callback)
same => n (Aufruf), NoOp (Nach Operatoren fragen. GROUP_COUNT = $ {GROUP_COUNT (Operatoren)})
same => n, queue (Operatoren, tThH)
same => n, Auflegen
include => main_menu_press
[main_menu_press]
exten => 0.1, NoOp ('-------------------- $ {CALLERID (num)} DRUCKTASTE $ {EXTEN}. ALLOW_CALLBACK = $ {ALLOW_CALLBACK} ')
same => n, GotoIf ($ [$ {ALLOW_CALLBACK} = 1]? Rückruf, s, 1: i, 1)
[Rückruf]
exten => s, 1, NoOp (CALLBACK)
same => n, Wiedergabe (danke für den Anruf & vse / my-vam-perezvonim)
same => n, Auflegen
exten => h, 1, agi (callback.php, gen, 0, $ {CALLBACK_QUEUE})
[Rückruf]
exten => _X., 1, NoOp (Versuchen Sie, in die Warteschlange zu wählen ($ {CALLBACK_QUEUE}) und rufen Sie $ {CALLBACK_NUM} zurück)
same => n, Set (__ DST = "?")
same => n, Set (CALLERID (num) = $ {CALLBACK_NUM})
same => n (Aufruf), Warteschlange ($ {CALLBACK_QUEUE}, tT)
same => n, NoOp (CALLBACK QUEUESTATUS = $ {QUEUESTATUS})
[Makro-Warteschlangen-Antwort]; Wir kommen hierher, als der Betreiber antwortete.
exten => s, 1, NoOp (Warteschlangenmitglied beantwortet uniq = $ {UNIQUEID} cid = $ {CALLERID (num)} chan = $ {CHANNEL} callback_id = $ {CALLBACK_ID} callback_num = $ {CALLBACK_NU
same => n, GotoIf ($ ["$ {CALLBACK_ID} x" = "x"]? überspringen)
same => n, Set (DST = $ {CHANNEL})
same => n, Set (CALLERID (num) = 067)
same => n, Wiedergabe (priv-try); Spielbetreiber "Warte auf Verbindung"
same => n, agi (callback.php, Warteschlangenantwort, $ {CALLBACK_ID}, $ {CHANNEL}, $ {UNIQUEID})
same => n, Dial (Local / $ {CALLBACK_NUM} @from_office_new)
same => n, NoOp (Zeitlimit für [Makrowarteschlange-Antwort] wählen)
same => n (überspringen), NoOp ()
exten => h, 1, NoOp ([Makro-Warteschlangen-Antwort] Dial Hangup)
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, Auflegen der Warteschlange, $ {CALLBACK_ID}, $ {CHANNEL}, $ {UNIQUEID})
gleich => n (Ende), NoOp
[Rückruf abgeschlossen]
exten => s, 1, NoOp (Rückruf abgeschlossen. 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})
Queues.conf-Datei
[Betreiber]
ringinuse = nein
Strategie = Erinnerung
Musik = Standard
Mitglied => SIP / 321
Mitglied => SIP / 322
Mitglied => SIP / 323
Mitglied => SIP / 324
Mitglied => SIP / 325
Mitglied => Agent / 1
Mitglied => Agent / 2
Mitglied => Agent / 3
Mitglied => Agent / 4
Mitglied => Agent / 5
context = main_menu_press
Zeitüberschreitung = 0
Ankündigungsposition = ja
Ansagefrequenz = 60
periodische Ansagefrequenz = 30
queue-youarenext = queue-youarenext
membermacro = Warteschlange-Antwort
Nun, eigentlich die Skripte (PHP erkannt)
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
Und wir legen alle 5 Minuten zwischen 8 und 20 Uhr eine weitere callback-regen.php-Datei für die Regeneration von Call-Dateien in Kronen ab.
Bei jedem Versuch wird die Zeit des wiederholten Anrufs um 5 Minuten erhöht. Stoppen Sie nach 10 Versuchen, den Bediener zu verspotten