Проблема с Asterisk IVR и номером расширения ‘1’

Вопрос или проблема

У меня есть установка FreePBX 15. Я успешно добавил несколько внутренних номеров.

Числа включают некоторые трехзначные номера и ‘1’ внутренний номер, который является обычным IP-телефоном, как и другие, с точно такой же конфигурацией.

Я могу звонить им без проблем. Я также настроил IVR, который не имеет записей, он просто позволяет напрямую набирать все внутренние номера. Это работает для всех, кроме ‘1’.

Пример для ‘213’:

app_read.c: Пользователь ввел '213'  
VERBOSE[6729][C-00000003] pbx.c: Выполнение [s@ivr-1:10] GotoIf("PJSIP/x-00000002", "0?#,1") в новом стеке    
VERBOSE[6729][C-00000003] pbx.c: Выполнение [s@ivr-1:11] GotoIf("PJSIP/x-00000002", "0?t,1") в новом стеке    
VERBOSE[6729][C-00000003] pbx.c: Выполнение [s@ivr-1:12] ExecIf("PJSIP/x-00000002", "1?Set(LOCALEXT=1)") в новом стеке    
VERBOSE[6729][C-00000003] pbx.c: Выполнение [s@ivr-1:13] GotoIf("PJSIP/x-00000002", "0?i,1") в новом стеке    
VERBOSE[6729][C-00000003] pbx.c: Выполнение [s@ivr-1:14] GotoIf("PJSIP/x-00000002", "1?from-did-direct-ivr,2137,1") в новом стеке 
VERBOSE[6729][C-00000003] pbx_builtins.c: Переход (from-did-direct-ivr,213,1)  

И вызов проходит успешно. Однако для ‘1’:

app_read.c: Пользователь ввел '1'    
VERBOSE[10123][C-00000004] pbx.c: Выполнение [s@ivr-1:10] GotoIf("PJSIP/x-00000003", "0?#,1") в новом стеке   
VERBOSE[10123][C-00000004] pbx.c: Выполнение [s@ivr-1:11] GotoIf("PJSIP/x-00000003", "0?t,1") в новом стеке   
VERBOSE[10123][C-00000004] pbx.c: Выполнение [s@ivr-1:12] ExecIf("PJSIP/x-00000003", "1?Set(LOCALEXT=1)") в новом стеке   
VERBOSE[10123][C-00000004] pbx.c: Выполнение [s@ivr-1:13] GotoIf("PJSIP/x-00000003", "1?i,1") в новом стеке   
VERBOSE[10123][C-00000004] pbx_builtins.c: Переход (ivr-1,i,1) 
VERBOSE[10123][C-00000004] pbx.c: Выполнение [i@ivr-1:1] Set("PJSIP/x-00000003", "INVALID_LOOPCOUNT=1") в новом стеке

Я получаю ошибку: недопустимый адрес

Я также пытался добавить запись IVR для ‘1’, чтобы перенаправить ее на внутренний номер ‘1’.

app_read.c: Пользователь ввел '1'    
VERBOSE[6334][C-00000002] pbx.c: Выполнение [s@ivr-1:10] GotoIf("PJSIP/x-00000001", "0?#,1") в новом стеке    
VERBOSE[6334][C-00000002] pbx.c: Выполнение [s@ivr-1:11] GotoIf("PJSIP/x-00000001", "0?t,1") в новом стеке    
VERBOSE[6334][C-00000002] pbx.c: Выполнение [s@ivr-1:12] ExecIf("PJSIP/x-00000001", "1?Set(LOCALEXT=1)") в новом стеке    
VERBOSE[6334][C-00000002] pbx.c: Выполнение [s@ivr-1:13] GotoIf("PJSIP/x-00000001", "0?i,1") в новом стеке    
VERBOSE[6334][C-00000002] pbx.c: Выполнение [s@ivr-1:14] GotoIf("PJSIP/x-00000001", "1?from-did-direct-ivr,1,1") в новом стеке    
VERBOSE[6334][C-00000002] pbx_builtins.c: Переход (from-did-direct-ivr,1,1)    
WARNING[6334][C-00000002] pbx.c: Канал 'PJSIP/x-00000001' отправлен на недействительное расширение, но не обработчик недействительных: context,exten,priority=from-did-direct-ivr,1,1

Когда я добавляю запись IVR для ‘2’, чтобы перенаправить на ‘1’, это работает:

app_read.c: Пользователь ввел '2'    
VERBOSE[30910][C-00000012] pbx.c: Выполнение [s@ivr-1:10] GotoIf("PJSIP/x-00000011", "0?#,1") в новом стеке   
VERBOSE[30910][C-00000012] pbx.c: Выполнение [s@ivr-1:11] GotoIf("PJSIP/x-00000011", "0?t,1") в новом стеке   
VERBOSE[30910][C-00000012] pbx.c: Выполнение [s@ivr-1:12] ExecIf("PJSIP/x-00000011", "0?Set(LOCALEXT=1)") в новом стеке   
VERBOSE[30910][C-00000012] pbx.c: Выполнение [s@ivr-1:13] GotoIf("PJSIP/x-00000011", "0?i,1") в новом стеке   
VERBOSE[30910][C-00000012] pbx.c: Выполнение [s@ivr-1:14] GotoIf("PJSIP/x-00000011", "0?from-did-direct-ivr,2,1") в новом стеке   
VERBOSE[30910][C-00000012] pbx.c: Выполнение [s@ivr-1:15] Goto("PJSIP/x-00000011", "2,1") в новом стеке   
VERBOSE[30910][C-00000012] pbx_builtins.c: Переход (ivr-1,2,1) 
VERBOSE[30910][C-00000012] pbx.c: Выполнение [2@ivr-1:1] Set("PJSIP/x-00000011", "__ivrreturn=0") в новом стеке   
VERBOSE[30910][C-00000012] pbx.c: Выполнение [2@ivr-1:2] Goto("PJSIP/x-00000011", "from-did-direct,1,1") в новом стеке    
VERBOSE[30910][C-00000012] pbx_builtins.c: Переход (from-did-direct,1,1)

Как видите, у вас нет внутреннего номера 1

 недействительное расширение, но не обработчик недействительных: context,exten,priority=from-did-direct-ivr,1,1

Почему его нет – это другой вопрос. Я могу предложить вам найти контекст from-did-direct-ivr и посмотреть, там ли он.

Все файлы находятся в папке /etc/asterisk/

Примечание: from-did-direct-ivr и from-did-direct – это РАЗНЫЕ контексты.

Ответ или решение

Проблема, связанная с невозможностью маршрутизации звонков на номер «1» в вашем установлении FreePBX 15, используя IVR, требует глубокого теоретического и практического анализа, чтобы выявить и устранить причину сбоев. Давайте рассмотрим шаги, которые могут помочь исправить возникшую ситуацию:

Теория

В Asterisk, система обработки вызовов активно использует контексты для организации маршрутизации и обработки вызовов. Контекст определяет набор правил, которые диктуют, что должно произойти, когда поступает вызов. Если вызов не соответствует ни одному правилу в контексте, система отмечает это как «недействительное направление» (invalid extension).

В случае стандартного IP-телефона, для успешного маршрута вызова необходимо, чтобы в соответствующем контексте было наличие определения номера. Очевидно, из вашего пояснения: когда пользователь вводит «1», вы получаете сообщение об ошибке «invalid extension» в контексте от ivr, что означает, что в текущем контексте нет обработки для введенного номинала.

Пример

Из рассмотренных логов видно, что система FreePBX и Asterisk некорректно обрабатывают ввод цифры «1», что приводит к переходу в контекст с отсутствующим маршрутом для «1». Рассмотрим часть лога:

WARNING[6334][C-00000002] pbx.c: Channel 'PJSIP/x-00000001' sent to invalid extension but no invalid handler: context,exten,priority=from-did-direct-ivr,1,1

Этот логный сегмент указывает, что в контексте from-did-direct-ivr, где предполагается обработка «прямого вызова», номер «1» не обрабатывается, в отличие от других номеров, таких как «213». Проблема еще и в том, что пользователь уже внес IVR-переход к внешнему контексту from-did-direct-ivr, но обработки, тем не менее, не происходит корректно.

Применение

  1. Проверка конфигурации Контекста: Проверьте, существует ли в действительности контекст from-did-direct-ivr для определения номера «1». Нужно удостовериться, что указанный контекст содержит необходимые инструкции для направления вызова. Все необходимые файлы находятся в директории /etc/asterisk/.

  2. Обновление и отладка маршрутизации: Убедитесь, что Asterisk находит и использует правильные контексты при прямой маршрутизации вызовов. Используйте команды консоли Asterisk для отладки:

    asterisk -r
    dialplan show from-did-direct-ivr

    Это покажет вам конфигурацию и последовательность, чтобы проверить, существует ли направляющее правило для номера «1».

  3. Создание или правка правила: Если этого правила нет, добавьте вручную следующее в соответствующий конфигурационный файл (например, extensions_custom.conf):

    [from-did-direct-ivr]
    exten => 1,1,Goto(from-did-direct,1,1)

    Этим вы создадите прямую маршрутизацию для входящего вызова с введенной цифрой «1» к существующему внутреннему определению.

  4. Перезагрузка конфигурации: После внесения изменений, не забудьте перезагрузить конфигурацию диалплана Asterisk, чтобы изменения вступили в силу:

    asterisk -rx "dialplan reload"
  5. Проверка корректности определения прав доступа: Проверьте, что у всех участников (включая ваш IP-телефон) есть соответствующие права доступа на использование и набор в рамках предоставленного контекста.

Эти шаги помогут устранить проблему маршрутизации вызовов на IP-телефон с номером ‘1’ в вашей системе и обеспечат корректную работу IVR. Работая с контекстами и маршрутными таблицами Asterisk, важно понимать логику и нюансы работы системы маршрутизации, чтобы эффективно управлять вызовами и устранять возможные сбои.

Оцените материал
Добавить комментарий

Капча загружается...