mikopbx / Core

Main repository! MikoPBX - is free, easy to setup PBX for small business based on Asterisk 16 core
https://www.mikopbx.com
GNU General Public License v3.0
377 stars 62 forks source link

Context 'check-out-work-time' disappears #652

Closed ivstep closed 10 months ago

ivstep commented 11 months ago

MikoPBX 2023.2.206

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

Настроено нерабочее время, включено только для одного вх. маршрута.

В логах ошибка:

Dec 13 15:08:49 daemon.err php.backend[26289]: Whoops\Exception\ErrorException: Undefined offset: 51 in file /offload/rootfs/usr/www/src/Core/Asterisk/Configs/ExtensionsOutWorkTimeConf.php on line 144 Dec 13 15:08:49 daemon.err php.backend[26289]: Stack trace: Dec 13 15:08:49 daemon.err php.backend[26289]: 1. Whoops\Exception\ErrorException->() /offload/rootfs/usr/www/src/Core/Asterisk/Configs/ExtensionsOutWorkTimeConf.php:144 Dec 13 15:08:49 daemon.err php.backend[26289]: 2. Whoops\Run->handleError() /offload/rootfs/usr/www/src/Core/Asterisk/Configs/ExtensionsOutWorkTimeConf.php:144 Dec 13 15:08:49 daemon.err php.backend[26289]: 3. MikoPBX\Core\Asterisk\Configs\ExtensionsOutWorkTimeConf->getRoutesData() /offload/rootfs/usr/www/src/Core/Asterisk/Configs/ExtensionsOutWorkTimeConf.php:158 Dec 13 15:08:49 daemon.err php.backend[26289]: 4. MikoPBX\Core\Asterisk\Configs\ExtensionsOutWorkTimeConf->getWorkTimeDialplan() /offload/rootfs/usr/www/src/Core/Asterisk/Configs/ExtensionsOutWorkTimeConf.php:86 Dec 13 15:08:49 daemon.err php.backend[26289]: 5. MikoPBX\Core\Asterisk\Configs\ExtensionsOutWorkTimeConf->generateOutWorkTimes() /offload/rootfs/usr/www/src/Core/Asterisk/Configs/ExtensionsOutWorkTimeConf.php:52 Dec 13 15:08:49 daemon.err php.backend[26289]: 6. MikoPBX\Core\Asterisk\Configs\ExtensionsOutWorkTimeConf->extensionGenContexts() /offload/rootfs/usr/www/src/Core/Asterisk/Configs/AsteriskConfigClass.php:124 Dec 13 15:08:49 daemon.err php.backend[26289]: 7. call_user_func_array() /offload/rootfs/usr/www/src/Core/Asterisk/Configs/AsteriskConfigClass.php:124 Dec 13 15:08:49 daemon.err php.backend[26289]: 8. MikoPBX\Core\Asterisk\Configs\AsteriskConfigClass->hookModulesMethod() /offload/rootfs/usr/www/src/Core/Asterisk/Configs/Generators/Extensions/InternalContexts.php:134 Dec 13 15:08:49 daemon.err php.backend[26289]: 9. MikoPBX\Core\Asterisk\Configs\Generators\Extensions\InternalContexts->generateAdditionalModulesContext() /offload/rootfs/usr/www/src/Core/Asterisk/Configs/Generators/Extensions/InternalContexts.php:87 Dec 13 15:08:49 daemon.err php.backend[26289]: 10. MikoPBX\Core\Asterisk\Configs\Generators\Extensions\InternalContexts->makeDialplan() /offload/rootfs/usr/www/src/Core/Asterisk/Configs/Generators/Extensions/InternalContexts.php:63 Dec 13 15:08:49 daemon.err php.backend[26289]: 11. MikoPBX\Core\Asterisk\Configs\Generators\Extensions\InternalContexts->generate() /offload/rootfs/usr/www/src/Core/Asterisk/Configs/ExtensionsConf.php:83 Dec 13 15:08:49 daemon.err php.backend[26289]: 12. MikoPBX\Core\Asterisk\Configs\ExtensionsConf->generateConfigProtected() /offload/rootfs/usr/www/src/Core/Asterisk/Configs/AsteriskConfigClass.php:178 Dec 13 15:08:49 daemon.err php.backend[26289]: 13. MikoPBX\Core\Asterisk\Configs\AsteriskConfigClass->generateConfig() /offload/rootfs/usr/www/src/Core/System/PBX.php:403 Dec 13 15:08:49 daemon.err php.backend[26289]: 14. MikoPBX\Core\System\PBX->dialplanReload() /offload/rootfs/usr/www/src/Core/Workers/WorkerModelsEvents.php:959 Dec 13 15:08:49 daemon.err php.backend[26289]: 15. MikoPBX\Core\Workers\WorkerModelsEvents->reloadDialplan() /offload/rootfs/usr/www/src/Core/Workers/WorkerModelsEvents.php:714 Dec 13 15:08:49 daemon.err php.backend[26289]: 16. MikoPBX\Core\Workers\WorkerModelsEvents->startReload() /offload/rootfs/usr/www/src/Core/Workers/WorkerModelsEvents.php:678 Dec 13 15:08:49 daemon.err php.backend[26289]: 17. MikoPBX\Core\Workers\WorkerModelsEvents->timeoutHandler() /offload/rootfs/usr/www/src/Core/System/BeanstalkClient.php:331 Dec 13 15:08:49 daemon.err php.backend[26289]: 18. call_user_func() /offload/rootfs/usr/www/src/Core/System/BeanstalkClient.php:331 Dec 13 15:08:49 daemon.err php.backend[26289]: 19. MikoPBX\Core\System\BeanstalkClient->wait() /offload/rootfs/usr/www/src/Core/Workers/WorkerModelsEvents.php:219 Dec 13 15:08:49 daemon.err php.backend[26289]: 20. MikoPBX\Core\Workers\WorkerModelsEvents->start() /offload/rootfs/usr/www/src/Core/Workers/WorkerBase.php:150 Dec 13 15:08:49 daemon.err php.backend[26289]: 21. MikoPBX\Core\Workers\WorkerBase->startWorker() /offload/rootfs/usr/www/src/Core/Workers/WorkerModelsEvents.php:1239 Dec 13 15:08:49 daemon.err php.backend[26289]: on EXCEPTION

boffart commented 10 months ago

если есть пример конфиг файла с затертыми паролями sip, то могу повспроизвести и поправить. А так, не ясно как воспроизвести. 

Newcss commented 10 months ago

Столкнулся с аналогичной проблемой. Перестали работать входящие звонки, хотя по умолчанию стоит - переводить на IVR-меню. Помог хак - добавить в нерабочее время период с рабочим и там настроить перевод на IVR.

Утром снова перестали работать маршруты, пришлось снова делать фокус с нерабочим временем.

boffart commented 10 months ago

нужен пример конфига (бекап без паролей) или хотябы в скриншотах как воспроизвести проблему

boffart commented 10 months ago

Dec 13 15:08:49 daemon.err php.backend[26289]: Whoops\Exception\ErrorException: Undefined offset: 51 in file /offload/rootfs/usr/www/src/Core/Asterisk/Configs/ExtensionsOutWorkTimeConf.php on line 144

ошибка локализована и исправлена. порядок воспроизведения:

  1. Добавляем входящий маршрут
  2. Настраиваем нерабочее время для этого маршрута (только для него)
  3. Удаляем маршрут
  4. В логах появится ошибка при попытке генерации dialplan

Не удалось воспроизвести проблему, когда контекст "check-out-work-time" отсутствует. согласно http://github.com/mikopbx/Core/blob/0cfeef4d681b37e8f5a11bb9c33f1d21491128c1/src/Core/Asterisk/Configs/ExtensionsOutWorkTimeConf.php#L166-L166 он должен создаваться всегда.