Asterisk: Unable to create channel SIP cause 34 Circuit busy (Траблшутинг транков)
- В журнале фиксируется
WARNING[9012]: app_dial.c: Unable to create channel of type 'PJSIP' (cause 34 - Circuit/channel congestion). - Клиенты получают отбой с сигналом
SIP/2.0 503 Service UnavailableилиSIP/2.0 500 Server Internal Error. - Исходящие звонки через внешнего SIP-провайдера сбрасываются в моменты пиковой нагрузки.
- Переменная
${DIALSTATUS}возвращает значениеCONGESTION.
1. Анализ SIP-диалога через pjsip logger
asterisk -rx "pjsip set logger on"
# Изучите ответ провайдера (503 Service Unavailable / 486 Busy / 404 Not Found)2. Проверка одновременных линий и лимитов провайдера
Провайдеры связи часто жестко ограничивают количество одновременных вызовов (CPS / Concurrent Calls). Ограничьте число одновременных соединений в extensions.conf через механизм GROUP():
[to-trunk-provider]
exten => _X.,1,NoOp(Исходящий через транк с лимитом)
same => n,Set(GROUP()=trunk_provider)
same => n,GotoIf($[${GROUP_COUNT(trunk_provider)} > 30]?trunk_busy)
same => n,Dial(PJSIP/${EXTEN}@trunk-provider,60)
same => n,Hangup()
same => n(trunk_busy),NoOp(Превышен лимит одновременных линий! Резервный транк)
same => n,Dial(PJSIP/${EXTEN}@backup-provider,60)
same => n,Hangup()3. Проверка параметров DAHDI / E1 (если используется цифровой поток)
Если ошибка возникает на цифровых потоках E1, проверьте доступность таймслотов (B-каналов):
asterisk -rx "dahdi show channels"
asterisk -rx "pri show spans"4. Проверка локальных лимитов дескрипторов (ulimit)
prlimit --pid=$(pidof asterisk) --nofile Частые вопросы (FAQ)
Что означает код ISDN Q.850 Cause 34?
Cause 34 (No circuit/channel available) означает перегрузку сети, отсутствие свободных таймслотов в потоке E1/T1 или превышение лимита купленных SIP-линий у оператора.
Как автоматически переключать вызов на резервного провайдера при Cause 34?
Проверяйте переменную ${DIALSTATUS} сразу после Dial(). Если она равна CONGESTION или CHANUNAVAIL, отправляйте вызов через альтернативный транк: same => n,ExecIf($["${DIALSTATUS}"="CONGESTION"]?Dial(PJSIP/${EXTEN}@backup-trunk)).
Почему оператор возвращает 503 Service Unavailable?
Оператор может возвращать 503 при превышении допустимой частоты звонков (Calls Per Second limit), проведении технических работ на своей стороне или при исчерпании вашего баланса.
Как параметр call_counter в PJSIP помогает отслеживать лимиты?
Параметр call_counter = yes в секции endpoint позволяет Asterisk вести точный учет активных звонков и отображать их статус в pjsip show endpoints.