Понятие контекста и его роль в диалплане - Asterisk и FreePBX: От GUI к Глубокому Администрированию и Оптимизации - Qpel.AI

Понятие контекста и его роль в диалплане

Мы уже видели, как FreePBX создаёт конфигурационные файлы Asterisk, например extensions_additional.conf. Теперь давай разберёмся, как Asterisk их читает. Начнём с основы — контекста.

Что такое Контекст в Asterisk?

Контекст в Asterisk — это логическая группа правил. Он определяет, кто и как может звонить и принимать звонки. Представь его как отдельную "песочницу" или "виртуальную АТС" внутри Asterisk.

Каждый звонок или регистрация SIP-телефона всегда привязаны к определённому контексту. Это нужно, чтобы:

  1. Разграничить доступ: Одни сотрудники звонят только внутри отдела, другие — на внешние линии.
  2. Применить разные правила: Для разных групп пользователей или типов звонков действуют свои правила.
  3. Обеспечить безопасность: Изолируя номера, ты предотвращаешь случайные действия или несанкционированный доступ.

Важно: Если звонок попадает в контекст, где нет правила для набранного номера, Asterisk не сможет его обработать. Это частая причина, почему "номер не существует" или "недозвон".

Как выглядит контекст в extensions.conf

В файлах extensions.conf (или его частях, вроде extensions_additional.conf и extensions_custom.conf) контексты выглядят так:

[имя_контекста]
; Здесь твои экстеншены и правила

Имя контекста должно быть уникальным, без пробелов. Обычно используют латинские буквы, цифры и нижнее подчёркивание.

Примеры:

[general]
; Общие настройки

[internal-users]
; Номера для внутренних пользователей

[external-trunk]
; Правила для входящих с внешнего транка

Как Asterisk выбирает контекст для звонка?

Asterisk решает, куда направить звонок, по нескольким признакам:

  1. SIP-пиры/PJSIP-эндпоинты: Когда ты регистрируешь SIP-телефон или настраиваешь транк (в FreePBX или напрямую в Asterisk), ты указываешь, к какому контексту он относится. Например, для внутренних номеров это может быть from-internal, для внешних транков — from-pstn.
    • В FreePBX это настраивается в "Device Options" для экстеншенов или в параметрах транков.
  2. Входящие звонки с транков: Для внешних транков (например, от SIP-провайдера) ты также указываешь контекст, куда должны попадать входящие звонки.
  3. Приложения диалплана: Некоторые приложения 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 и выполни команды:

  1. Зайди в консоль Asterisk:
    sudo asterisk -rvvv
    
  2. Посмотри список всех активных контекстов:
    dialplan show contexts
    
    Ты увидишь длинный список, сгенерированный FreePBX. Найди from-internal и from-pstn.
  3. Посмотри, что внутри конкретного контекста, например from-internal:
    dialplan show from-internal
    
    Здесь ты увидишь все экстеншены и правила, которые FreePBX создал для внутренних пользователей.

Понимание контекстов — это твой первый шаг к тому, чтобы выйти за рамки GUI FreePBX и начать по-настоящему управлять логикой звонков в Asterisk. Дальше мы углубимся в то, как именно внутри этих контекстов определяются правила — экстеншены и их приоритеты.