Интеграция ручных настроек с FreePBX
В предыдущей теме мы научились создавать собственные контексты в файле extensions_custom.conf. Это дало свободу в написании логики, но пока ваш код существует изолированно. Пора объединить эти два мира.
Кто главный в конфигурации
В экосистеме FreePBX действует жесткое правило: веб-интерфейс — это «автор» большинства файлов. Если вы внесете изменения в extensions_additional.conf напрямую, система сотрет их при первом же нажатии кнопки Apply Config.
Чтобы ручной код и GUI не конфликтовали, Asterisk использует иерархию включений. Основной файл extensions.conf через директиву #include собирает диалплан из разных частей. Ваша «безопасная гавань» — файлы с суффиксом _custom.conf. FreePBX никогда их не трогает, что гарантирует сохранение ручных изменений при любых обновлениях.
Схема 1 показывает, как ваш код вплетается в общую логику обработки вызова.
Custom Destinations: мост между кодом и интерфейсом
Чтобы направить входящий звонок или пункт IVR на ваш контекст, используйте механизм Custom Destinations. Это и есть полноценная интеграция с FreePBX.
Алгоритм простой:
- Пишете код в
extensions_custom.conf. - Регистрируете этот контекст в GUI (Admin → Custom Destinations).
- Используете его в любых выпадающих списках выбора направления.
Пример: Сервис проверки баланса
Добавим в /etc/asterisk/extensions_custom.conf такой блок:
[custom-check-balance]
exten => s,1,Answer()
same => n,Playback(demo-congrats)
same => n,SayNumber(150)
same => n,Playback(vm-rubles)
same => n,Hangup()
Чтобы этот код стал доступен в интерфейсе, создайте Custom Destination:
- Target:
custom-check-balance,s,1(строго в форматеконтекст,экстеншен,приоритет). - Description: Проверка баланса (это имя отобразится в GUI).
Теперь в модуле Inbound Routes в поле Set Destination можно выбрать созданный пункт. Это и есть вызов из GUI.
🛠 Совет эксперта: Перед нажатием Apply Config в браузере всегда проверяйте синтаксис командой
dialplan reloadв консоли Asterisk. Опечатка в кастомном файле может «уронить» весь диалплан.
Как вернуть вызов в логику FreePBX
Иногда нужно выполнить проверку в коде и вернуть абонента обратно — например, в стандартную очередь.
Для этого в настройках Custom Destination включите опцию Return. В диалплане используйте приложение Return(), и FreePBX направит вызов дальше по цепочке.
Чего делать не стоит:
Не используйте extensions_override_freepbx.conf для подмены стандартных функций. Это «грязный» хак 🚩, который делает поведение АТС непредсказуемым при обновлениях.
Правильный путь:
Создавайте уникальные контексты и подключайте их через Custom Destinations или стандартные «крючки» (hooks) вроде [from-internal-custom].
Схема 2 демонстрирует правильный цикл разработки.
Мы научились расширять FreePBX, не ломая его структуру. Теперь, когда мы управляем логикой звонка, пора разобраться, как эти звонки передаются по сети.
Впереди — глубокое изучение драйвера PJSIP. Мы разберем его объектную модель и поймем, почему он вытеснил классический chan_sip.
Понравился урок?
Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей
Продолжить в Telegram