VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

invalid extension при использовании Goto и s

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Iskatel
Сообщения: 34
Зарегистрирован: 29 янв 2022, 10:41

invalid extension при использовании Goto и s

Сообщение Iskatel »

Понадобилось написать диалплан в котором для исходящих фильтрация по экстеншенам осуществляется в одном экстеншене, потом делается Goto в другой экстеншен, и там уже осуществляется постобработка, сделал так:

Код: Выделить всё

[outcalls]
;внутризоновые вызовы
exten => _XXXXXXX,1,Goto(inzone,${EXTEN},1)
;вызовы с использованием ABC и DEF кодов
exten => _83XXXXXXXX.,1,Goto(abcdef,${EXTEN},1)
exten => _84XXXXXXXX.,1,Goto(abcdef,${EXTEN},1)
exten => _88XXXXXXXX.,1,Goto(abcdef,${EXTEN},1)
exten => _89XXXXXXXX.,1,Goto(abcdef,${EXTEN},1)
;международные вызовы
exten => _810X.,1,Goto(international,${EXTEN},1)
;экстренные службы
exten => 100,1,Goto(emergency,${EXTEN},1)
exten => 112,1,Goto(emergency,${EXTEN},1)

[abcdef]
exten => s,1,Dial(SIP/main_asterisk)
exten => s,n,Hangup()
Словил ошибку "sent to invalid extension but no invalid handler", полез в гугл, нашёл кучу аналогичных ситуаций, где авторы используют Goto и экстеншен 's' и везде им объясняют что они не правы, но суть ПОЧЕМУ они не правы не раскрывается, должно же ведь работать, правда должно? Что нужно было написать чтобы было правильно?
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

Re: invalid extension при использовании Goto и s

Сообщение ded »

Потому что экстен s (start) используется в основном в макросах.
В макрос передают параметры, он выполняется, и возвращает результат в ту же точку диаплана, откуда был вызван.

У вас же при вызове
exten => _88XXXXXXXX.,1,Goto(abcdef,${EXTEN},1)
переменная EXTEN получит значение набранного номера, например 8812345678, и согласно указанию Got пойдёт в контекст abcdef и там будет искать себя - 8812345678, чтобы выполнить первый шаг. Но её там нет, там только s.
Конструкция
Dial(SIP/main_asterisk)
вообще безродная, без рук и без ног. Одно слово - инвалид! Отправляю вас читать учебник.
Iskatel
Сообщения: 34
Зарегистрирован: 29 янв 2022, 10:41

Re: invalid extension при использовании Goto и s

Сообщение Iskatel »

Отправляю вас читать учебник.
Так в учебнике же и написано, что 's' использовать правильнее чем '_.' потому что последний будет обрабатывать вообще все экстеншены, включая служебные, что будет приводить к непредсказуемым последствиям. Тогда я вообще не понимаю, если s не означает любые цифры, в том числе и 8812345678, то какой шаблон будет означать любые цифры?
Конструкция
Dial(SIP/main_asterisk)
вообще безродная, без рук и без ног. Одно слово - инвалид!
Ну опустил те параметры функции Dial, которые в квадратных скобках. На других серверах работало. Что, не стоит так писать?
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

Re: invalid extension при использовании Goto и s

Сообщение ded »

s не означает любые цифры, в том числе и 8812345678, можно убедиться вставляя на любом шаге проверку
NoOp(my exten now is ${EXTEN})
Iskatel писал(а):Тогда я вообще не понимаю, если s не означает любые цифры, в том числе и 8812345678, то какой шаблон будет означать любые цифры?
exten => X.,1,
Iskatel писал(а):Что, не стоит так писать?
Не стоит. Учебник много раз указывает на формулу успеха:
Dial(Технология/узел/номер)
то есть

Код: Выделить всё

[abcdef]
exten => _X.,1,Dial(SIP/main_asterisk/${EXTEN})
Iskatel
Сообщения: 34
Зарегистрирован: 29 янв 2022, 10:41

Re: invalid extension при использовании Goto и s

Сообщение Iskatel »

Да, но в шаблон _X. не попадут экстеншены состоящие из одной цифры.
Получается, что задача была: в контексте outcalls выполнить фильтрацию по экстеншенам и переадресовать в другой контекст, а потом из-за особенностей в этом самом другом контексте нужно снова прописывать фильтрацию, весь изначальный смысл теряется.
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

Re: invalid extension при использовании Goto и s

Сообщение ded »

Если у вас всё как в примере (выше), то в контекст abcdef никак не попадают экстеншены, состоящие из одной цифры, а только десятизнак, начинающийся с 83, 84, 88, 89..
Не нужно в этом контексте снова прописывать фильтрацию, Второй раз предлагаю понавставлять везде проверки
NoOp(my exten now is ${EXTEN})

Фильтрацию можно вообще задать одной строкой

Код: Выделить всё

exten => _8[3489]XXXXXXXX.,1,Goto(abcdef,${EXTEN},1)
Как-то вам подучиться нужно ещё, и попрактиковаться.
Зачёт не сдан.
Iskatel
Сообщения: 34
Зарегистрирован: 29 янв 2022, 10:41

Re: invalid extension при использовании Goto и s

Сообщение Iskatel »

Функция NoOp у меня ничего в консоль не пишет, пробовал поставить verbose 9 и debug 9. На другом сервере где asterisk 11 - пишет, а на этом где 16 - не пишет.
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

Re: invalid extension при использовании Goto и s

Сообщение ded »

Не верю. (с)
Iskatel
Сообщения: 34
Зарегистрирован: 29 янв 2022, 10:41

Re: invalid extension при использовании Goto и s

Сообщение Iskatel »

Это уже вышло за рамки изначального вопроса, но короче функция NoOp не работает. Попробовал в дополнении к verbose=9 и debug=9 добавить опцию console=yes, стало сыпаться такое сообщение:

Код: Выделить всё

Executing [891664?????@outcalls:1] NoOp("SIP/???????1015-00000004", "my exten now is 891664?????") in new stack
Но опять же это debug-сообщение, а не NoOp.
Аватара пользователя
Zavr2008
Сообщения: 2211
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: invalid extension при использовании Goto и s

Сообщение Zavr2008 »

Ого как тут всё запущено)))

logger.conf нужно смотреть, там как раз и задается что куда при verbose выводить.

Код: Выделить всё

console => notice,warning,error
;console => notice,warning,error,debug
Так по самой теме тут уже разжевано до нельзя.
Разве только я бы вот так не делал
;международные вызовы
exten => _810X.,1,Goto(international,${EXTEN},1)
Делать лучше

Код: Выделить всё

exten => _810XXXXXXXXX.,1,Goto(international,${EXTEN},1)
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH