diff --git a/Lib/ConfigureAsterisk.php b/Lib/ConfigureAsterisk.php index 3147365..720add5 100644 --- a/Lib/ConfigureAsterisk.php +++ b/Lib/ConfigureAsterisk.php @@ -152,9 +152,16 @@ private function makeExtensions():void }elseif (intval($provider['providerType']) === TrunksFMC::PROVIDER_TYPE_MCN){ $sipPort= PbxSettings::getValueByKey('SIPPort'); + // Маршруты FMC создаём только для сотрудников, реально подключённых к FMC данного провайдера. + // Иначе мобильный номер обычного сотрудника ошибочно трактуется как FMC-SIM и + // звонок на него заворачивается на внутренний номер вместо выхода в город. + $fmcExtensions = array_filter(explode(',', (string)$provider['extensions'])); $extensionData = ConfigureAsterisk::getPbxNumbers(); $userExtensions.= '[users-extensions-'.$provider['endpoint'].']'.PHP_EOL; foreach ($extensionData as $number => $mobile){ + if(!in_array((string)$number, $fmcExtensions, true)){ + continue; + } $shotMobile = substr($mobile, -10); $extensionsConf.= "; For exten: $number mobile: $mobile".PHP_EOL; $extensionsConf.= "exten => _X!/_X".$shotMobile.",1,Dial(PJSIP/\${EXTEN}@$number,600,Tt)".PHP_EOL; diff --git a/Lib/ConnectorFMCConf.php b/Lib/ConnectorFMCConf.php index c6f0b2d..e7641cd 100644 --- a/Lib/ConnectorFMCConf.php +++ b/Lib/ConnectorFMCConf.php @@ -62,7 +62,7 @@ public function extensionGenContexts(): string if(!$settings){ return ''; } - $trunks = TrunksFMC::find(['columns' => 'outputEndpoint AS id,providerType'])->toArray(); + $trunks = TrunksFMC::find(['columns' => 'outputEndpoint AS id,providerType,extensions'])->toArray(); foreach ($trunks as $trunk){ if(intval($trunk['providerType']) === TrunksFMC::PROVIDER_TYPE_B24){ $conf.= '['.$trunk['id'].'-incoming]'.PHP_EOL. @@ -89,7 +89,15 @@ public function extensionGenContexts(): string $conf .= ' same => n,Dial(Local/did2user@internal-incoming,600,${TRANSFER_OPTIONS}Kg)'.PHP_EOL; $conf .= ' same => n,Hangup()'.PHP_EOL.PHP_EOL; - $extensionData = ConfigureAsterisk::getPbxNumbers(); + // Только сотрудники, реально подключённые к FMC данного провайдера (см. ConfigureAsterisk::makeExtensions). + $fmcExtensions = array_filter(explode(',', (string)$trunk['extensions'])); + $extensionData = array_filter( + ConfigureAsterisk::getPbxNumbers(), + static function ($number) use ($fmcExtensions) { + return in_array((string)$number, $fmcExtensions, true); + }, + ARRAY_FILTER_USE_KEY + ); $conf .= '['.$trunk['id'].'-find-did-incoming]'.PHP_EOL; foreach ($extensionData as $number => $mobile){ $conf .= "exten => $number,1,NoOp(--- Incoming call ---)".PHP_EOL;