====== Перехват на ответственного в панели телефонии 4.0 как в панели 1.0 ======
[[:faq|Обратно к перечню инструкций]]\\ \\
По умолчанию функция "**Перехват на ответственного**" в панели телефонии 4.0 выполняется параллельно основному маршруту на АТС ([[https://docs.telefon1c.ru/user-guides/panel/call-pickup/ | см. документацию]]). Клиент будет слышать голосовое меню и одновременно вызов будет поступать на ответственного сотрудника.
В ряде случаев, необходимо скорректировать это поведение, вызов должен поступать сразу на ответственного сотрудника (см. описание в [[https://blog.telefon1c.ru/pieriekhvat-vyzova-na-otvietstviennogho-mieniedzhiera/ | блоге]]).
- Подключитесь к АТС по SSH [[faq:putty|по инструкции]]
- Выполните: mkdir /storage/usbdisk1/mikopbx/custom_modules/Interception;
touch /storage/usbdisk1/mikopbx/custom_modules/Interception/resp-redirect.php
chmod +x /storage/usbdisk1/mikopbx/custom_modules/Interception/resp-redirect.php
cat > /storage/usbdisk1/mikopbx/custom_modules/Interception/resp-redirect.php
- Вставьте содержимое скрипта: #!/usr/bin/env php
_X!,1,AGI(/usr/src/miko/resp-redirect.php)
*/
const DURATION = 10;
if(file_exists('/etc/freepbx.conf')){
include '/etc/freepbx.conf';
$agidir = FreePBX::Config()->get('ASTAGIDIR');
require_once $agidir.'/phpagi.php';
$agi = new \AGI();
$contextIn = 'ext-local';
$stateFunc = "EXTENSION_STATE(\$extension@ext-local)";
}else {
require_once 'Globals.php';
$agi = new MikoPBX\Core\Asterisk\AGI();
$contextHint = 'internal-hints';
$stateFunc = 'DEVICE_STATE(PJSIP/$extension)';
$contextIn = 'internal-incoming';
}
$agi->exec('Ringing', '');
$agi->set_variable('__DIRECTION', 'INBOUND');
if(strlen($agi->request['agi_extension']) === 1){
exit(0);
}
$countTry = $agi->get_variable("MIKO_TRY_INTERCEPTION")['data'];
if($countTry === '1'){
exit(0);
}
$agi->set_variable('MIKO_TRY_INTERCEPTION', '1');
$agi->set_variable('AGIEXITONHANGUP', 'yes');
$agi->set_variable('AGISIGHUP', 'yes');
$agi->set_variable('__ENDCALLONANSWER', 'yes');
$number = $agi->request['agi_callerid'];
try {
$curl = curl_init();
$url = 'http://127.0.0.1:8224/getcallerid?number='.$number;
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 3);
$resultRequest = curl_exec($curl);
$http_code = (int)curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
$result = json_decode($resultRequest, true);
}catch (Exception $e){
$agi->verbose("MIKO: Error receiving the responsible employee...", 1);
$resultRequest = null;
}
if($result){
$extension = $result['data']['responsible'][0]['extension']??'';
if(!empty($extension)){
$state = $agi->get_variable(str_replace('$extension',$extension, $stateFunc))['data'];
if('NOT_INUSE' !== $state){
$agi->verbose("MIKO: Extension $extension is '$state', not 'NOT_INUSE'", 1);
exit(0);
}
$agi->set_variable('MIKO_DST', "Local/$extension@$contextIn,".DURATION.",Kt");
$agi->verbose("MIKO: Try dial $extension ...", 1);
$agi->exec_dial('Local', "$extension@$contextIn", DURATION, 'Kt');
$state = $agi->get_variable("DIALSTATUS")['data'];
if($state === 'ANSWER'){
$FROM_CHAN = $agi->get_variable("FROM_CHAN")['data']??'';
if(!empty($FROM_CHAN)){
$agi->set_variable('EXPORT('.$FROM_CHAN.',MASTER_CHANNEL(M_DIALSTATUS))', "ANSWER");
}
if(file_exists('/etc/freepbx.conf')){
$agi->hangup();
}else{
$agi->exec_goto('internal', 'hangup', '1');
}
}
}else{
$agi->verbose("MIKO: Empty value of \$extension $url", 1);
}
}else{
$agi->verbose("MIKO: Empty response from 1C", 1);
}
- Нажмите дважды **CTRL + D** для завершения редактирования файла
- Перейдите в раздел "**Система**" - "**Кастомизация системных файлов**"
- Выберите файл "**/etc/asterisk/extensions.conf**"
- Выберите действие "**Добавить в конец файла**"
- Добавьте следующий код: [add-trim-prefix-clid-custom]
exten => _.X!,1,ExecIf($["${EXTEN}" == "h"]?Hangup())
same => n,AGI(/storage/usbdisk1/mikopbx/custom_modules/Interception/resp-redirect.php)
same => n,return
- Проверьте работу функции на входящих звонках
===== Проверка =====
Выполните команду: curl 'http://127.0.0.1:8224/getcallerid?number=+79257184200'
Пример корректного ответа: {
"result": "Success",
"data": {
"number": " 79257184200",
"number_format": "+7 (925) 718-42-00",
"client": "Портнов Алексей Владимирович",
"contact": "",
"caller_id": "Портнов Алексей",
"is_employee": true,
"extension": "204",
"ref": "e1cib/data/Справочник.Пользователи?ref=842000505694000611e35e52402ca528",
"responsible": null
}
}
[[:faq|Обратно к перечню инструкций]]\\ \\