Понятие контекста и его роль в диалплане
Мы уже видели, как FreePBX создаёт конфигурационные файлы Asterisk, например extensions_additional.conf. Теперь давай разберёмся, как Asterisk их читает. Начнём с основы — контекста.
Что такое Контекст в Asterisk?
Контекст в Asterisk — это логическая группа правил. Он определяет, кто и как может звонить и принимать звонки. Представь его как отдельную "песочницу" или "виртуальную АТС" внутри Asterisk.
Каждый звонок или регистрация SIP-телефона всегда привязаны к определённому контексту. Это нужно, чтобы:
- Разграничить доступ: Одни сотрудники звонят только внутри отдела, другие — на внешние линии.
- Применить разные правила: Для разных групп пользователей или типов звонков действуют свои правила.
- Обеспечить безопасность: Изолируя номера, ты предотвращаешь случайные действия или несанкционированный доступ.
Важно: Если звонок попадает в контекст, где нет правила для набранного номера, Asterisk не сможет его обработать. Это частая причина, почему "номер не существует" или "недозвон".
Как выглядит контекст в extensions.conf
В файлах extensions.conf (или его частях, вроде extensions_additional.conf и extensions_custom.conf) контексты выглядят так:
[имя_контекста]
; Здесь твои экстеншены и правила
Имя контекста должно быть уникальным, без пробелов. Обычно используют латинские буквы, цифры и нижнее подчёркивание.
Примеры:
[general]
; Общие настройки
[internal-users]
; Номера для внутренних пользователей
[external-trunk]
; Правила для входящих с внешнего транка
Как Asterisk выбирает контекст для звонка?
Asterisk решает, куда направить звонок, по нескольким признакам:
- SIP-пиры/PJSIP-эндпоинты: Когда ты регистрируешь SIP-телефон или настраиваешь транк (в FreePBX или напрямую в Asterisk), ты указываешь, к какому контексту он относится. Например, для внутренних номеров это может быть
from-internal, для внешних транков —from-pstn.- В FreePBX это настраивается в "Device Options" для экстеншенов или в параметрах транков.
- Входящие звонки с транков: Для внешних транков (например, от SIP-провайдера) ты также указываешь контекст, куда должны попадать входящие звонки.
- Приложения диалплана: Некоторые приложения Asterisk могут переводить звонок из одного контекста в другой (например,
GotoилиGosub).
Роль контекстов в FreePBX
FreePBX активно использует контексты для маршрутизации. Ты уже сталкивался с ними, даже не зная этого:
from-internal: Главный контекст для внутренних номеров. Все внутренние пользователи FreePBX по умолчанию здесь.from-pstn: Контекст для входящих звонков с внешних транков. Сюда FreePBX направляет звонки от твоего провайдера.from-did-e164-custom,ext-group,ext-queuesи другие: FreePBX создаёт много специфических контекстов для разных функций — групп вызова, очередей, IVR и так далее.
Совет: В логах Asterisk ты часто увидишь, как звонок "путешествует" между разными контекстами. Понимание этого — ключ к диагностике проблем.
Практика: загляни в контексты
Открой SSH-сессию к своей FreePBX Distro и выполни команды:
- Зайди в консоль Asterisk:
sudo asterisk -rvvv - Посмотри список всех активных контекстов:
Ты увидишь длинный список, сгенерированный FreePBX. Найдиdialplan show contextsfrom-internalиfrom-pstn. - Посмотри, что внутри конкретного контекста, например
from-internal:
Здесь ты увидишь все экстеншены и правила, которые FreePBX создал для внутренних пользователей.dialplan show from-internal
Понимание контекстов — это твой первый шаг к тому, чтобы выйти за рамки GUI FreePBX и начать по-настоящему управлять логикой звонков в Asterisk. Дальше мы углубимся в то, как именно внутри этих контекстов определяются правила — экстеншены и их приоритеты.