Często pojawiającym się zapytaniem od naszych klientów, którzy posiadają Call Center realizujące kampanie wychodzące jest rozwiązanie następującego problemu:
Gdy nasi handlowcy dzwonią do klientów i nie uda im się do nich dodzwonić, to gdy klient oddzwania trafia na IVR i do kolejki oczekującej, a następnie do pierwszego wolnego pracownika. Pracownik musi sprawdzić w systemie kto ostatni dzwonił do klienta i w jakiej sprawie, a następnie przekierować połączenie do jego opiekuna. Czy nie da się tego zautomatyzować?
Najlepszym rozwiązaniem będzie powiązanie mechanizmów kierowania ruchem przychodzącym z wyszukiwaniem w bazie danych połączeń wychodzących. Wszystkie dane znajdują się na centrali telefonicznej pracującej pod kontrolą Asteriska w jego bazie danych CDR (asteriskcdrdb). W poniższych przykładach wykorzystujemy dystrybucję SNG7 - jest to dystrybucja Linux z centralą FreePBX.
W celu uzyskania dostępu do bazy danych należy zalogować się do mysql na serwerze z użyciem konta root i bez hasła.
Aby w łatwy sposób kierować takie połączenia do pracownika musimy sprawdzić jak wyselekcjonować połączenia które nie doszły do skutku. Po pierwsze inicjujemy połączenie z numeru wewnętrznego na numer komórkowy (np. z numeru 100 na numer 600700800) i rozłączamy się po tym jak usłyszymy sygnał. Dla celów tego ćwiczenia ponawiamy to połączenie. Zasymulowaliśmy scenariusz, który na interesuje. Wyszukajmy teraz to połączenie
W tym celu logujemy się do bazy danych Asteriska i wybieramy tabelę:
use asteriskcdrdb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
Sprawdźmy jakie dane mamy do wyboru:
mysql> show columns from cdr;
+---------------+--------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------------------+-------+
| calldate | datetime | NO | MUL | 0000-00-00 00:00:00 | |
| clid | varchar(80) | NO | | | |
| src | varchar(80) | NO | | | |
| dst | varchar(80) | NO | MUL | | |
| dcontext | varchar(80) | NO | | | |
| channel | varchar(80) | NO | | | |
| dstchannel | varchar(80) | NO | | | |
| lastapp | varchar(80) | NO | | | |
| lastdata | varchar(80) | NO | | | |
| duration | int(11) | NO | | 0 | |
| billsec | int(11) | NO | | 0 | |
| disposition | varchar(45) | NO | | | |
| amaflags | int(11) | NO | | 0 | |
| accountcode | varchar(20) | NO | MUL | | |
| uniqueid | varchar(32) | NO | MUL | | |
| userfield | varchar(255) | NO | | | |
| did | varchar(50) | NO | MUL | | |
| recordingfile | varchar(255) | NO | | | |
| cnum | varchar(40) | NO | | | |
| cnam | varchar(40) | NO | | | |
| outbound_cnum | varchar(40) | NO | | | |
| outbound_cnam | varchar(40) | NO | | | |
| dst_cnam | varchar(40) | NO | | | |
+---------------+--------------+------+-----+---------------------+-------+
23 rows in set (0.00 sec)
Interesuje nas znalezienie numeru, który dzwonił na zewnątrz i połączenie nie zostało zrealizowane, a więc interesują nas następujące kolumny:
src - numer źródłowy
dst - numer docelowy
disposition - rezultat rozmowy
Zawęzimy wyszukiwanie do dzisiejszego dnia i wyłącznie do numerów wewnętrznych (trzycyfrowych)
Wysyłamy zatem zapytanie:
SELECT src FROM cdr WHERE disposition = 'NO ANSWER' AND dst = '600700800' AND DATE(calldate) = CURDATE() AND src REGEXP '^[0-9]{3}$' ORDER BY calldate DESC;
+-----+
| src |
+-----+
| 100 |
| 100 |
+-----+
2 rows in set (0.01 sec)
Musimy zawęzić wyszukiwanie do ostatniego połączenia, żeby nie było niejednoznaczności.
mysql> SELECT src FROM cdr WHERE disposition = 'NO ANSWER' AND dst = '600700800' AND DATE(calldate) = CURDATE() AND src REGEXP '^[0-9]{3}$' ORDER BY calldate DESC LIMIT 1;
+-----+
| src |
+-----+
| 100 |
+-----+
1 row in set (0.00 sec)
Podczas połączenia przychodzącego musimy przechwycić z Asteriska CALLERID i przekazać go w zapytaniu mysql, a następnie użyć rezultatu jako numeru wewnętrznego, na który przekierujemy przychodzące połączenie.
Jeżeli nie jesteś osobą techniczną i interesuje cię wyłącznie rezultat końcowy takiej operacji zapraszamy do kontaktu z naszym działem technicznym pod numerem 122 100 900. Nasi inżynierowie omówią zasady wdrożenia takiego mechanizmu na Państwa centrali telefonicznej. Powyższy przykład pochodzi z centrali FreePBX.