Dodano produkt do koszyka

Case study - infolinia handlowa i kierowanie oddzwaniających klientów do ich opiekuna

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.

Data publikacji: 26.04.2021 00:00:00

Zaloguj się aby skomentować