/
mikopbx
/
ModuleMonitorActiveCalls
Обзор
Документация
Войти
/
mikopbx
/
ModuleMonitorActiveCalls
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
Lib/WorkerMonitorActiveCallsAMI.php
89 строк
2 KB
boffart
init...
29 окт 2025, 12:33
29 окт 2025, 12:33
f1b2f6b
Код
Авторство
О чём код?
<?php namespace Modules\ModuleMonitorActiveCalls\Lib; use MikoPBX\Core\System\Util; use MikoPBX\Core\Workers\WorkerBase; use MikoPBX\Core\Asterisk\AsteriskManager; use Error; require_once 'Globals.php'; class WorkerMonitorActiveCallsAMI extends WorkerBase { protected AsteriskManager $am; protected MonitorActiveCallsMain $templateMain; /** * Старт работы листнера. * * @param $argv */ public function start($argv): void { $this->templateMain = new MonitorActiveCallsMain(); $this->am = Util::getAstManager(); $this->setFilter(); $this->am->addEventHandler("userevent", [$this, "callback"]); while (true) { $result = $this->am->waitUserEvent(true); if ($result === []) { // Need reconnect to Asterisk AMI usleep(100000); $this->am = Util::getAstManager(); $this->setFilter(); } } } /** * Setup ami events filter * * @return array */ private function setFilter(): array { // Ping event to check module is allive $pingTube = $this->makePingTubeName(self::class); $params = ['Operation' => 'Add', 'Filter' => 'UserEvent: ' . $pingTube]; $this->am->sendRequestTimeout('Filter', $params); // Interception event - it is example event. It happens when PBX receive inbound call $params = ['Operation' => 'Add', 'Filter' => 'UserEvent: Interception']; return $this->am->sendRequestTimeout('Filter', $params); } /** * Callback processor * * @param $parameters */ public function callback($parameters): void { if ($this->replyOnPingRequest($parameters)) { return; } if (stripos($parameters['UserEvent'],'Interception' ) === false) { return; } $this->templateMain->processAmiMessage($parameters); } } // Start worker process $workerClassname = WorkerMonitorActiveCallsAMI::class; if (isset($argv) && count($argv) > 1) { cli_set_process_title($workerClassname); try { $worker = new $workerClassname(); $worker->start($argv); } catch (\Throwable $e) { global $errorLogger; $errorLogger->captureException($e); Util::sysLogMsg("{$workerClassname}_EXCEPTION", $e->getMessage(), LOG_ERR); } }