Александр Мисюрин
25.07.2019
178

Инициация повторного звонка клиенту по сервисному коду, при входящих вызовах

В данной статье рассмотрим реализацию события повторного звонка клиенту, с которым оператор находится на линии. Это может пригодиться, например если после разговора оператор должен перезвонить клиенту ровно через какое либо время, либо за работой может забыть за время звонка. Используемая система: CentOs 6.9, Asterisk 13.21 собранный с res_odbc, FreePBX 14. Вызывать можно следующим образом: Во […]

В данной статье рассмотрим реализацию события повторного звонка клиенту, с которым оператор находится на линии. Это может пригодиться, например если после разговора оператор должен перезвонить клиенту ровно через какое либо время, либо за работой может забыть за время звонка.

Используемая система: CentOs 6.9, Asterisk 13.21 собранный с res_odbc, FreePBX 14.

!Реализовать будем через call файлы Asterisk, основываясь на особенности сервера телефонии отрабатывать их, только если время на сервере равно или больше времени создания файла.

Вызывать можно следующим образом:

  1. Во время разговора с клиентом, набирая какую либо комбинацию клавиш
  2. После разговора с клиентом, в таком случае отправка будет осуществляться на последний принятый телефон

Реализуем через сервисные коды.

Правим файл /etc/asterisk/features_applicationmap_custom.conf

recall => *5,self,Macro,recall-start

Для того, чтобы вызов сервисного кода проходил, вносим в /etc/asterisk/globals_custom.conf

DYNAMIC_FEATURES = recall

При вызове данного сервисного кода, необходимо отправлять вызов в контекст диалплана, с возможностью выбора времени повторного звонка в минутах. На данном этапе просто выведем данные в консоль.

[macro-recall-start]
exten => s,1,Read(time,beep,20,1)
same =>n,NoOp(==== ${time} ====)
Отработка сервисного кода

В созданный контекст необходимо добавить вызов скрипта создания call файла.

[macro-recall-start]
exten => s,1,Read(time,beep,20,1)
same => n,Set(rcall=${SHELL(/var/lib/asterisk/agi-bin/recall.php ${FROMEXTEN} ${CALLERID(num)} ${time})})

И сам скрипт:

#!/usr/bin/php -q
<?php
$client_num=$argv[1];
$operator=$argv[2];
$time=$argv[3];
	$fp = fopen("/usr/src/test/$operator-$client_num-$time.call", 'w');
	fwrite($fp, "Channel: Local/$operator@from-internal"."\n");
	fwrite($fp, "MaxRetries: 1"."\n");
	fwrite($fp, "RetryTime: 30"."\n");
	fwrite($fp, "WaitTime: 30"."\n");
	fwrite($fp, "Context: from-internal"."\n");
	fwrite($fp, "Extension: $client_num"."\n");
	fwrite($fp, "Priority: 1"."\n");
	fclose($fp);

$date=date("j M Y H:i:s", mktime(date('H'), date('i')+$time, date('s'), date('m'), date('j'), date('Y')));//Приводим время в нужный формат и добавляем необходимый интервал

$chownfile=`chown asterisk:asterisk /usr/src/test/ -R`;

$touchfile=`touch -d "$date" /usr/src/test/$operator-$client_num-$time.call`;
$mvfile=`mv /usr/src/test/$operator-$client_num-$time.call /var/spool/asterisk/outgoing`;
?>

Сервисный код при вызове работает, реализуем возможность создания подобного функционала, с использованием последнего вызова.

Добавляем exten в контекст from-internal-custom (либо можно использовать Misc Apps + Custom Destinations во FreePBX).

exten => 9976,1,Read(time,beep,20,1)
same => n,Set(client=${ODBC_LASTNUM()})
same => n,Set(rcall=${SHELL(/var/lib/asterisk/agi-bin/recall.php ${client} ${CALLERID(num)} ${time})})
same => n,Hangup

Скрипт оставляем без изменения, создаем функцию func_odbc.conf:

[LASTNUM]
dsn=asteriskcdrdb
readsql=select src from cdr where dst='${CALLERID(num)}' order by calldate desc limit 1;
Создание файла по вызову exten

Номер можно использовать любой, также можно устанавливать время более точно, например используя ввод цифр разделенных *.

 
avatar
  Подписаться  
Уведомление о

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices