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

ChanIsAvail бред какойто

Проблемы Asterisk без вэб-оболочек и их решения

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

kiralex
Сообщения: 23
Зарегистрирован: 08 дек 2013, 21:52

ChanIsAvail бред какойто

Сообщение kiralex »

Немного раскачался в познании Asterisk :geek: , хотел избавиться от варнинга невозможности установить соединение по каналу IAX2 а получил еще больше ошибок.

asterisk-11.8.1

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

[macro-dial] 				; Немного расширенная комманда Dial()
; Macro(dial,SIP/0000&IAX/0000,120,Ttrg)
exten = s,1,NoOp()
same  = n,Macro(monitor)
same  = n,ChanIsAvail(${ARG1},t)
same  = n,Dial(${AVAILORIGCHAN},${ARG2},${ARG3})
same  = n,Goto(STATUS-${DIALSTATUS},1)
same  = n,Macro(hangup)

exten = STATUS-CANCEL,1,Macro(hangup)			; Вызов отменен
exten = STATUS-ANSWER,1,Macro(hangup)			; На вызов был получен ответ
exten = STATUS-NOANSWER,1,Macro(hangup)			; На вызов не ответили
exten = STATUS-BUSY,1,Macro(hangup)				; Получен сигнал занято
exten = STATUS-CONGESTION,1,Macro(hangup)		; Канал перегружен
exten = STATUS-CHANUNAVAIL,1,Macro(hangup)		; Канал не доступен
exten = _STATUS-.,1,Macro(hangup)				; Неизвестно что

exten = i,1,Macro(hangup)
exten = h,1,Macro(hangup)
Выполняю вызов на заранее не существующего номера по двум каналам SIP и IAX2

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

-- Executing [0088@from_phones:5] Macro("IAX2/0055-15536", "dial,SIP/0088&IAX2/0088,120,trg") in new stack
Получаю ошибки DNS

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

-- Executing [s@macro-dial:4] ChanIsAvail("IAX2/0055-15536", "SIP/0088&IAX2/0088,t") in new stack
  == Begin MixMonitor Recording IAX2/0055-15536
[2014-05-09 01:39:24] WARNING[31082][C-000004b1]: chan_sip.c:6162 create_addr: Purely numeric hostname (0088), and not a peer--rejecting!
[2014-05-09 01:39:24] ERROR[31082][C-000004b1]: netsock2.c:269 ast_sockaddr_resolve: getaddrinfo("0088", "(null)", ...): Name or service not known
[2014-05-09 01:39:24] WARNING[31082][C-000004b1]: acl.c:833 resolve_first: Unable to lookup '0088'
[2014-05-09 01:39:24] WARNING[31082][C-000004b1]: chan_iax2.c:4640 create_addr: No such host: 0088
    -- Executing [s@macro-dial:5] Dial("IAX2/0055-15536", ",120,trg") in new stack
[2014-05-09 01:39:24] WARNING[31082][C-000004b1]: app_dial.c:2141 dial_exec_full: Dial requires an argument (technology/resource)
Даже специально проверил srvlookup = no никак не влияет.

Выдержка из мануала
ChanIsAvail([Technology2/Resource2[&...]][,options])
Опции
a: Check for all available channels, not only the first one
s: Consider the channel unavailable if the channel is in use at all
t: Simply checks if specified channels exist in the channel list

В идеале хотелось бы отловить ошибку и сообщить пользователю о невозможности дозвониться.

Получается придется делать не очень красиво с функциями IAXPEER() и SIPPEER()?
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: ChanIsAvail бред какойто

Сообщение zzuz »

chan_iax2.c:4640 create_addr: No such host: 0088
Переведу за $50 .
Линия24 - Системы Массового Телефонного Обслуживания
kiralex
Сообщения: 23
Зарегистрирован: 08 дек 2013, 21:52

Re: ChanIsAvail бред какойто

Сообщение kiralex »

Переведу за $50 .
Я и сам перевести могу.

Я хочу обработать звонок на не существующего пира, для чего использую приложение ChanIsAvail().
Отключение dnsmgr также не помогло.
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: ChanIsAvail бред какойто

Сообщение ded »

DNSmgr тут при чём? Оно проверяет есть ли ДНС запись о ресурсе у ДНС сервера (или не проверяет, если =no).

Пиры надо создать, неважно - будут они зарегистрированы в дальнейшем или нет. Иначе ChanIsAvail воздух проверяет, точнее - несуществующий ресурс, пытаясь превратить SIP/0088 в SIP URI - думает что 0088 - это ДНС имя.

Зачем первый бессмысленный шаг? exten = s,1,NoOp()
Хоть бы считали содержимое аргументов!
exten = s,1,NoOp(${ARG1} ${ARG2} ${ARG3})
(А зачем Вам по два нуля впереди каждого экстена? Это обычно признак международного кода по Е164, и планируете дорастать до 10 000 абонентов?)
awsswa
Сообщения: 2390
Зарегистрирован: 09 июн 2012, 10:52
Откуда: Россия, Пермь skype: yarick_perm

Re: ChanIsAvail бред какойто

Сообщение awsswa »

и chanisavail обычно вызывается с аргумнтами as.
платный суппорт по мере возможностей
kiralex
Сообщения: 23
Зарегистрирован: 08 дек 2013, 21:52

Re: ChanIsAvail бред какойто

Сообщение kiralex »

DNSmgr тут при чём?
Действительно не причем.
Пиры надо создать, неважно - будут они зарегистрированы в дальнейшем или нет.
Учту, но это не очень удобно поскольку некоторая часть номеров просто переадресуется в аналоговую АТС.

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

exten = _00XX,1,NoOp(CALLER: ${CALLERID(all)} EXTEN: ${EXTEN})	; Набор на внутренние телефоны 4 цифры
same  = n,Set(__DYNAMIC_FEATURES=conference-start); Даем возможность начать конференцию по *0
same  = n,Set(DBNUM=TDA200_REWRITE/${EXTEN})				; Переменная для сокращения длины выражения
same  = n,ExecIf(${DB_EXISTS(${DBNUM})}?Dial(LOCAL/${DB(${DBNUM})}@to_dahdi,120,Ttrg)) ; Проверяем проброшенные номера
same  = n,Macro(dial,SIP/${EXTEN}&IAX2/${EXTEN},120,trg)	; Производим дозвон
same  = hint,SIP/${EXTEN}									; Надо для BLF SPA500S
Зачем первый бессмысленный шаг? exten = s,1,NoOp()
Хоть бы считали содержимое аргументов!
Да полностью с вами согласен это очень логично. Стандартно привык уже писать для первого приоритета NoOp(). Обычно пишу даже так, для отладки

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

exten = s,1,NoOp(CALLER: ${CALLERID(all)} EXTEN: ${EXTEN})
А зачем Вам по два нуля впереди каждого экстена?
Первые две цифры это номер филиала, каждому филиалу выдается пул по 100 номеров.
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: ChanIsAvail бред какойто

Сообщение ded »

Нет и не может быть филиала 00. Откажитесь от двух нулей. Я бы даже вообще от нулей предложил бы отказаться, т.е. начинать с 10, 11, 12 и т.д. в качестве номера филиала.
kiralex
Сообщения: 23
Зарегистрирован: 08 дек 2013, 21:52

Re: ChanIsAvail бред какойто

Сообщение kiralex »

Но почему номера на 0 нельзя? Ведь пока все работает нормально даже при связи с Elastix.
Знаю что в TDA200 0 это вызов оператора, но звонки с TDA выход на VOIP у меня через 7 то есть 70088
В Elastix нашел.

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

[ Context 'from-pstn-e164-us' created by 'pbx_config' ]
's' (CID match '_011X.') =>  2. Goto(from-pstn,${EXTEN},1)                 [pbx_config]
Телефонный Эфир
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: ChanIsAvail бред какойто

Сообщение ded »

Можно хоть на три, хоть на четыре нуля. Но во всём мире почти 00 впереди, а также знак плюс - признак международного кода. А один ноль - признак национального звонка.
Использовать префиксы - выход на такую линию у нас через 9, а на другую линию - 7 это старорежимный подход, наследие декадно шаговых станций.
kiralex
Сообщения: 23
Зарегистрирован: 08 дек 2013, 21:52

Re: ChanIsAvail бред какойто

Сообщение kiralex »

Но ведь используется правило _00XX а не _00XX!, с таким же успехом я смогу звонить _00XXX! по меж городу... Но общий смысл я понял попробую это провести пока еще телефония находится в тестировании..
К томуже SIP телефоны(те которые я видел) не могут Overlap т.е набирают номер сразу целиком, а значит даже спутать 00XX и 00XXX! будет трудно.
Использовать префиксы - выход на такую линию у нас через 9, а на другую линию - 7 это старорежимный подход, наследие декадно шаговых станций.
Я не смог заставить TDA100\200 маршрутизировать звонки так чтобы одновременно существовали внутренние номера 1XX и 1XXX.
Поэтому проще было сделать если первой цифрой в номере будет 7 то удалять эту 7-ку и сразу слать звонок в поток, а при звонках из VOIP просто дописывать 7, таким простым образом и Redial работает.
9-ку я не трогал она уже была...
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH