Анализ активных вызовов и диалплана

Мы научились проверять статус регистраций и эндпоинтов, но в работе администратора часто возникает ситуация: «Пир в сети, но что с ним происходит прямо сейчас?». Чтобы не гадать, мы должны заглянуть внутрь ядра Asterisk. Командная строка (CLI) предоставляет нам инструменты для моментального анализа вызовов и проверки логики прохождения звонка по диалплану.

Мониторинг нагрузки и активных соединений

Первое, с чего стоит начать диагностику при жалобах на связь или подозрениях на взлом — оценка общего состояния системы. Для этого используйте команду core show calls. Она выводит краткую статистику по количеству активных звонков с момента последнего запуска сервера.

Для детального изучения ситуации используйте core show channels. Команда выводит список всех активных каналов. Помните: в архитектуре Asterisk один «вызов» (call) обычно состоит минимум из двух «каналов» (channels). Например: входящее плечо от телефона и исходящее плечо в сторону провайдера.

Как показано в Сравнении 1, вывод этой команды позволяет сопоставить абонентов и понять, на каком этапе находится соединение.

Пример вывода списка каналов:

asterisk -rvv
*CLI> core show channels
Channel              Location             State   Application(Data)
PJSIP/101-000000a1   s@macro-dialout-one: Up      AppDial((Outgoing Line))
PJSIP/trunk-000000a2 101@from-internal:   Up      Dial(PJSIP/101,,HhTtr)
2 active channels
1 active call

Здесь один вызов (1 active call) занимает два канала. Оба в состоянии Up — разговор идет.

Детальный анализ канала

Если у абонента проблемы со звуком или специфические ошибки, изучите конкретный канал командой core show channel <имя_канала>. Она выводит:

  • переменные диалплана;
  • используемые кодеки;
  • уникальный идентификатор (LinkedID);
  • время создания.

Если вы обнаружили «зависший» канал, который не закрылся после завершения разговора, его можно сбросить принудительно: soft hangup <имя_канала>.

Проверка логики через dialplan show

Даже если каналы создаются, вызов может уйти по неверному маршруту. Во FreePBX диалплан огромен и состоит из сотен вложенных контекстов. Искать ошибку в конфигурационных файлах вручную долго. Используйте команду dialplan show.

Она показывает «рентгеновский снимок» логики Asterisk именно в том виде, в котором она загружена в оперативную память. Можно проверить как весь диалплан, так и конкретный номер в контексте.

Проверка маршрутизации для номера 101:

*CLI> dialplan show 101@from-internal
[ Context 'from-internal'  Extension '101' Priority 1 ]
  1. Set(DIALED_EXTEN=101)                    [pbx_config]
  2. Answer()                                 [pbx_config]
  3. Dial(PJSIP/101,20)                       [pbx_config]

Если команда возвращает Search for '101' in 'from-internal' failed, Asterisk не знает, что делать с этим номером в данном контексте. В GUI FreePBX номер может выглядеть корректным, но звонить он не будет.

Алгоритм оперативной диагностики

Проводя анализ вызовов, двигайтесь от общего к частному:

  1. core show calls: есть ли вызов в системе вообще?
  2. core show channels: какой статус у каналов (Ringing или Up)?
  3. dialplan show <номер>@<контекст>: верна ли логика прохождения звонка?
  4. core show channel <имя>: если логика верна, ищем технические детали (кодеки, переменные).

Зайдите в CLI и выполните dialplan show from-internal. Обратите внимание на объем данных и наличие include в конце. Попробуйте найти свой внутренний номер с помощью фильтра: dialplan show <ваш_номер>@from-internal.

Мы научились видеть, как Asterisk обрабатывает звонки на уровне логики. Однако бывают случаи, когда в CLI «все хорошо», а звука в трубке нет или регистрация постоянно обрывается. Чтобы решить такие задачи, нужно спуститься на уровень сетевых пакетов. В следующей теме мы разберем, как использовать tcpdump для захвата трафика и почему это критически важный навык для администратора VoIP.

Понравился урок?

Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей

Продолжить в Telegram