/
mikopbx
/
ModuleAutoDialer
Обзор
Документация
Войти
/
mikopbx
/
ModuleAutoDialer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
agi-bin/change-state-task.php
87 строк
4 KB
boffart
Правка ошибок логирования результата обзвона. Правка оформления кода
29 янв 2025, 15:02
29 янв 2025, 15:02
3b5bcf7
Код
Авторство
О чём код?
#!/usr/bin/php <?php /* * MikoPBX - free phone system for small business * Copyright © 2017-2023 Alexey Portnov and Nikolay Beketov * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with this program. * If not, see <https://www.gnu.org/licenses/>. */ use MikoPBX\Core\Asterisk\AGI; use Modules\ModuleAutoDialer\bin\ConnectorDB; use Modules\ModuleAutoDialer\bin\WorkerAMI; use Modules\ModuleAutoDialer\Lib\AutoDialerMain; require_once 'Globals.php'; $agi = new AGI(); $event = $argv[1]??''; if(empty($event)){ exit(0); } $taskId = $agi->get_variable('M_TASK_ID',true); if(empty($taskId)){ return; } $outNum = $agi->get_variable('M_OUT_NUMBER',true); $data = [ 'ID' => $agi->get_variable('CHANNEL(linkedid)',true), 'CALL_ID' => $agi->get_variable('CHANNEL(callid)',true), 'IS_CALLBACK' => $agi->get_variable('M_IS_CALLBACK',true), 'TIME' => time(), 'MAX_ATTEMPT' => $agi->get_variable('M_MAX_ATTEMPT',true), 'ATTEMPT_UTIL_SIGNAL'=> $agi->get_variable('M_ATTEMPT_UTIL_SIGNAL',true), 'MAX_RETRY' => $agi->get_variable('M_MAX_RETRY',true), 'TRY_INTERVAL'=> $agi->get_variable('M_TRY_INTERVAL',true), ]; if(ConnectorDB::EVENT_START_DIAL_IN === $event){ // Событие возникает перед Dial на внутренний номер. ConnectorDB::invoke(ConnectorDB::FUNC_SAVE_STATE, [$event, $outNum, $taskId, $data], false); }elseif (ConnectorDB::EVENT_USER_CANCEL_CALLBACK === $event){ ConnectorDB::invoke(ConnectorDB::FUNC_SAVE_STATE, [$event, $outNum, $taskId, $data], false); $agi->noop('Extension '.$agi->request['agi_extension'].'EVENT_USER_CANCEL_CALLBACK...'); $agi->hangup(); exit(0); }elseif (ConnectorDB::EVENT_ALL_USER_BUSY === $event){ $statuses = AutoDialerMain::getCacheData('statuses'); $state = $statuses[$agi->request['agi_extension']]??WorkerAMI::STATE_IDLE; if( $state !== WorkerAMI::STATE_IDLE){ ConnectorDB::invoke(ConnectorDB::FUNC_SAVE_STATE, [$event, $outNum, $taskId, $data], false); $agi->noop('Extension '.$agi->request['agi_extension'].'is busy...'); $agi->hangup(); exit(0); } $agi->noop('Extension state'.$agi->request['agi_extension'].'is ...'.$state); }elseif (ConnectorDB::EVENT_END_DIAL_IN === $event){ // Событие возникает после обработки Dial на внутренний номер. $data['DIALSTATUS'] = $agi->get_variable('M_DIALSTATUS',true); ConnectorDB::invoke(ConnectorDB::FUNC_SAVE_STATE, [$event, $outNum, $taskId, $data], false); }elseif (ConnectorDB::EVENT_POLLING === $event || ConnectorDB::EVENT_POLLING_END === $event){ // Начало опроса ConnectorDB::invoke(ConnectorDB::FUNC_SAVE_STATE, [$event, $outNum, $taskId, $data], false); }elseif (ConnectorDB::EVENT_FAIL_ORIGINATE === $event){ // Вызов на внешний номер завершился неудачно. ConnectorDB::invoke(ConnectorDB::FUNC_SAVE_STATE, [$event, $outNum, $taskId, $data], false); }elseif (ConnectorDB::EVENT_AFTER_DIAL_OUT === $event){ // Событие возникает после обработки Dial на внешний номер телефона. $data['DIALSTATUS'] = $agi->get_variable('DIALSTATUS',true); ConnectorDB::invoke(ConnectorDB::FUNC_SAVE_STATE, [$event, $outNum, $taskId, $data], false); }elseif (ConnectorDB::EVENT_END_CALL === $event){ $chan = $agi->get_variable('CHANNEL',true); // Событие возникает при hangup канала, связанного с внешним номером. $data['DIALSTATUS'] = $agi->get_variable('M_DIALSTATUS',true); $data['TECH_CAUSE'] = $agi->get_variable("HANGUPCAUSE($chan,tech)",true); $data['ATS_CAUSE'] = $agi->get_variable("HANGUPCAUSE($chan,ast)",true); ConnectorDB::invoke(ConnectorDB::FUNC_SAVE_STATE, [$event, $outNum, $taskId, $data], false); }