Сообщения о недоступности абонента
Сообщений: 866
|
Re: Сообщения о недоступности абонента
наверное будет вызываться только sip-юзер, даже если будет зарегистрирован iax-юзер?
точно!
и мименно поэтому:
так вот при таком раскладе "срать" будет еще больше, потому что обе команды Dial окажутся в одном контексте ... а
вообще не имеет смысла. Вторая команда Dial "срать" не будет вообше - до нее в принципе никогда не дойдет управление. prioity 2 extension будет всегда вызываться из sipusers и никогда из iaxusers. И поэтому разделять sipusers и iaxusers нелья - должен быть один контектс users и одна команда Dial в нем которая звонит сразу и на SIP и на IAX.
вы хотите сказать, что WARNING в вашем случае не выскочит??? При попытке набрать не зарегистрированного в системе юзера ...
Да, не выскочит ибо не будет найден prioity 1 extension для такого звонка и диалплан не попытается выполнить ChanIsAvail и Dial.
Что конкретно произойдет зависит от того как вы обрабатываете экстеншен "i" если вообще обрабатываете. У меня в обработчике идет DUNDi lookup на сервера в других офисах чтобы найти не там ли в данный момент этот юзер.
|
Сообщений: 1573
|
Re: Сообщения о недоступности абонента
dimas: Вторая команда Dial "срать" не будет вообше - до нее в принципе никогда не дойдет управление. prioity 2 extension будет всегда вызываться из sipusers и никогда из iaxusers.
Это смотря, как вы их разместите и include на контексты ... :))
dimas: И поэтому разделять sipusers и iaxusers нелья - должен быть один контектс users и одна команда Dial в нем которая звонит сразу и на SIP и на IAX.
т.е. то что предложил я, только через одно место. Правильно? )
dimas:
вы хотите сказать, что WARNING в вашем случае не выскочит??? При попытке набрать не зарегистрированного в системе юзера ...
Да, не выскочит ибо не будет найден prioity 1 extension для такого звонка и диалплан не попытается выполнить ChanIsAvail и Dial.
:)) - а вы попробуйте ...
dimas:
Что конкретно произойдет зависит от того как вы обрабатываете экстеншен "i" если вообще обрабатываете. У меня в обработчике идет DUNDi lookup на сервера в других офисах чтобы найти не там ли в данный момент этот юзер.
только с "i" и не выскочит (выскочят другие строчки). Но что то вариант уже ушел от первоначально предложенного - очень далеко ... Просто на глазах вышлифовыается (простым от этого не станоится ес-но). И все это - с "рабочего сервера" ... ;)
Вся эта каша из за одной строчки WARNING, которую заменит другая строчка ...
Круто! :)
|
Сообщений: 866
|
Re: Сообщения о недоступности абонента
Это смотря, как вы их разместите и include на контексты ... :))
Да как ни размещай. Если поменять местами инклюды - звонок всегда будет уходить на IAX но никогда на SIP. Чтобы работало и то и то вы не добъетесь. Проблема в том что Астериск будет искать priority 2 в контексте users очень простым перебором - в самом users не найдет - значит будем искать в его инклюдах в том порядке в котором они объявлены. И поэтому если написано
includes => iaxregs
includes => sipregs
то всегда будет находится priority 2 в iaxregs даже несмотря на то что priority 1 для этого звонка был найден в sipregs а не в iaxregs. Не верите - проверьте.
т.е. то что предложил я, только через одно место. Правильно? )
Не понятно на какое предожений вы ссылаетесь. Выше я говорил про ваше:
regxontext = sipregs
в iax.conf:
regxontext = iaxregs
и делать что-то вроде
[sipregs]
exten => _XXX,2,Dial(SIP/${EXTEN})
exten => _XXX,n,Hangup
exten => h,1,Hangup
[iaxregs]
exten => _XXX,2,Dial(IAX2/${EXTEN})
exten => _XXX,n,Hangup
exten => h,1,Hangup
[users]
includes => sipregs
includes => iaxregs
А оно по причинам описаным выше - работать не будет. ибо Dial должен быть один SIP&IAX а не два разных.
:)) - а вы попробуйте ...
У меня не выскакивает. Лог в студию.
Просто на глазах вышлифовыается (простым от этого не станоится ес-но). И все это - с "рабочего сервера" ... ;)
У меня на рабочем сервере нет ни одной строчки "обычного" диалплана - только AEL. Макрос dial-user - скопирован с сервера (только лишнее убрано). А все остальное не копировалось а просто набиралось как иллюстрация. Копировать то что на сервере чтобы проиллюстрировать простую мысль я смысла не видел т.к. там обработка звонка на внутренний экстеншен существенно сложнее - с followme и voicemail в случае недоступности абонента, с dundi lookup & передачей на другую машину если нужно. Вряд ли бы эта куча кода добавила ясности тому то изначально задал вопрос.
Вся эта каша из за одной строчки WARNING, которую заменит другая строчка ...
Да какая строчка-то его заменит в итоге? Вы все ходите вокруг да около но строчку так и не показали.
|
Сообщений: 1573
|
Re: Сообщения о недоступности абонента
dimas: Это смотря, как вы их разместите и include на контексты ... :))
Да как ни размещай. Если поменять местами инклюды - звонок всегда будет уходить на IAX но никогда на SIP. Чтобы работало и то и то вы не добъетесь. Проблема в том что Астериск будет искать priority 2 в контексте users очень простым перебором - в самом users не найдет - значит будем искать в его инклюдах в том порядке в котором они объявлены. И поэтому если написано
includes => iaxregs
includes => sipregs
то всегда будет находится priority 2 в iaxregs даже несмотря на то что priority 1 для этого звонка был найден в sipregs а не в iaxregs. Не верите - проверьте.
вы же предлагали поставить обе команды в один контекст ... Или это были не вы?
А теперь попробуйте поиграться с инклюдами и расположением Dial в одном контексте ...
Только работу над ошибками можно не комментировать.
dimas:
т.е. то что предложил я, только через одно место. Правильно? )
Не понятно на какое предожений вы ссылаетесь. Выше я говорил про ваше:
на предложенный мной вариант: exten => _XXX,1,Macro(stdexten,,SIP/${EXTEN}&IAX2/${EXTEN})
dimas:
А оно по причинам описаным выше - работать не будет. ибо Dial должен быть один SIP&IAX а не два разных.
спасибо, что вы мне это объяснили ...
dimas:
У меня не выскакивает. Лог в студию.
пожалуйста:
Executing [6001@new:1] Dial("SIP/6500-08277808", "SIP/6001") in new stack
[Feb 18 14:35:22] WARNING[30998]: app_dial.c:1242 dial_exec_full: Unable to create channel of type 'SIP' (cause 20 - Unknown)
== Everyone is busy/congested at this time (1:0/0/1)
конфиги:
[sipusers]
include => sipregs
exten => _XXXX,1,Dial(SIP/${EXTEN})
exten => _XXXX,n,Hangup
[iaxusers]
include => iaxregs
exten => _XXXX,2,Dial(IAX2/${EXTEN})
exten => _XXXX,n,Hangup
[new]
include => sipusers
include => iaxusers
только больше не просите меня приводить логи. Проводите свой лик.без. самостоятельно - ок
dimas:
У меня на рабочем сервере нет ни одной строчки "обычного" диалплана - только AEL. Макрос dial-user - скопирован с сервера (только лишнее убрано). А все остальное не копировалось а просто набиралось как иллюстрация. Копировать то что на сервере чтобы проиллюстрировать простую мысль я смысла не видел т.к.
т.е. скопировать из AEL вы решились, а из extensions.conf - смысла не было. Опят логика покинула вас ... )
Вам ничего не говорит поговорка - "как уж на сковородке"?
Слукавив раз, попадаешь в водоворот, особенно, если собеседник - "въедливый" ... ;)
Как говорят англичане - "дьявол кроется в деталях"!. Наглядная иллюстрация ...
Только не знаю, зачем вы сказали про свой сервер и т.д. Мне не интересно, из головы вы взяли свой вариант, или, как вы говорите - с "рабочего сервера" не решились копировать. Сути это не меняет, даже если вы приведете свой вариант в рабочее состояние - он не упрощает план, а только усложняет, так, что сами запутались, не говоря о начинающих пользовтелях
dimas:
Вся эта каша из за одной строчки WARNING, которую заменит другая строчка ...
Да какая строчка-то его заменит в итоге? Вы все ходите вокруг да около но строчку так и не показали.
по поводу экспериментов и лик.беза написал выше ...
На этом хотел бы закончить.
P.S. Хотя последний вопрос, вы никогда не далали так:
GRP=SIP/555&SIP/777&SIP/888&IAX2/444&ZAP/2
...
exten => _X.,n,Dial(${GRP})
...
как вы собираете пользоватей в группы? Варнингов там не избежать ... ;)
|
Сообщений: 866
|
Re: Сообщения о недоступности абонента
вы же предлагали поставить обе команды в один контекст ... Или это были не вы?
Давайте без догадок, лучше цитату где я предлагаю два Dial'а.
Я, пока нахожу только "Единственно где перемудрил - нельзя делать разделение на sip/iax - надо и регистрировать в один контекст и инклюдить в один в котором Dial сразу и SIP и IAX делает. Ибо отдельными контекстами работать не будет." в этом тексте речь идет про один "Dial сразу и SIP и IAX делает".
А теперь попробуйте поиграться с инклюдами и расположением Dial в одном контексте ...
Я бы с радостью, если бы понимал что именно вы хотите чтобы я сделал.
на предложенный мной вариант: exten => _XXX,1,Macro(stdexten,,SIP/${EXTEN}&IAX2/${EXTEN})
Опять двадцать пять. Ваш вариант безусловно работать будет кто ж спорит. Но варнинг в консоль будет писать. А мой - с regcontext+ChanIsAvail - не будет варнинг писать.
пожалуйста:
Executing [6001@new:1] Dial("SIP/6500-08277808", "SIP/6001") in new stack
[Feb 18 14:35:22] WARNING[30998]: app_dial.c:1242 dial_exec_full: Unable to create channel of type 'SIP' (cause 20 - Unknown)
== Everyone is busy/congested at this time (1:0/0/1)
Это, простите что? оно не может дойти до Dial потому что ChanIsAvail не вернет этот канал в случае его отсутствия. Только не говорит что "ну вот теперь вы chanisavail придумали". я про него уже писал. Цитирую чтобы сомнений не было:
1. "срать" в консоль не будет потому что в dial-user улетают только звонки на зарегистрированные _в данный момент_ экстеншены. И во-вторых, dial-user делает ChanIsAvail чтобы найти кто именно жив из двух протоколов и может обработать ситуацию когда не жив ни один.
т.е. скопировать из AEL вы решились, а из extensions.conf - смысла не было. Опят логика покинула вас ... )
Скажите, вы читаете вообще что я пишу или сразу "ответить" жмете? Я русским языком написал что у меня НИ ОДНОЙ СТРОЧКИ "обычного" диалплана, ТОЛЬКО AEL. Соответственно, вот вам:
[root@spb-voip2 ~]# ls -l /etc/asterisk/extensions.conf
-rw-r--r-- 1 root root 1 Jun 30 2008 /etc/asterisk/extensions.conf
Длину 1 байт видите? Это перевод строки. Надо было копировать?
Вам ничего не говорит поговорка - "как уж на сковородке"?
Слукавив раз, попадаешь в водоворот, особенно, если собеседник - "въедливый" ... ;)
...
Только не знаю, зачем вы сказали про свой сервер и т.д. Мне не интересно, из головы вы взяли свой вариант, или, как вы говорите - с "рабочего сервера" не решились копировать.
Вы меня раскрыли. Смысла врать больше нет - я вчера прочитал книжку про астериск и решил повыделываться. Реального опыта у меня, конечно не было - кто ж мне сервер-то доверит.
P.S. Хотя последний вопрос, вы никогда не далали так:
GRP=SIP/555&SIP/777&SIP/888&IAX2/444&ZAP/2
...
exten => _X.,n,Dial(${GRP})
...
как вы собираете пользоватей в группы? Варнингов там не избежать ... ;)
не поверите. У меня нет групп. Поэтом да, никогда не делал.
|
Сообщений: 1573
|
Re: Сообщения о недоступности абонента
Итог:
мой вариант (при задаче исключить страшнейшее из зол - появление сообщения WARNING) c проверкой канала выглядит так:
[context]
exten => _X.,1,ChanIsAvail(SIP/${EXTEN}&IAX2/${EXTEN},j)
exten => _X.,n,Dial(${AVAILORIGCHAN})
exten => _X.,102,Hangup
не требует никаких доп. настроек (уверен, непонятных, абсолютно всем начинающим юзерам, да и вообще с сомнителной пользой в данном случае) и сложностей диалплана, что даже опытные юзеры ;) путаются, и т.д.
Студия ждет ваш, dimas!
|
Сообщений: 866
|
Re: Сообщения о недоступности абонента
Окей, мой ниже. Специально для вас, с копипастами.
в sip.conf:
regxontext = registrations
в iax.conf:
regxontext = registrations
extensions.ael:
// Call a locally registered SIP/IAX user.
//
// Avoid calling this macro unless you are sure the user is regisetred locally. This is because
// 1. ChanIsAvail complaints when we are querying non-existant extension (like 7xxx)
// 2. ChanIsAvail actually creates IAX peers for known extensions
//
macro dial-user( ext ) {
ChanIsAvail(SIP/${ext}&IAX2/${ext});
Noop(AVAILSTATUS=${AVAILSTATUS}, AVAILORIGCHAN=${AVAILORIGCHAN});
if ("${AVAILSTATUS}" != "0") {
Congestion;
DIALSTATUS = "CHANUNAVAIL";
return;
}
// We have user registered locally
Dial(${AVAILORIGCHAN},15);
Noop(DIALSTATUS=${DIALSTATUS});
return;
};
context users {
includes {
registrations;
};
// "registrations" context has priority 1 NoOp for each extension registered with SIP/IAX.
// Use "regexten" to append dialplan for these.
regexten _XXXX => {
// It must be SIP/IAX user who registered locally
&dial-user(${EXTEN});
// Dialplan continues here only if dial was unsuccessful.
// CODE REMOVED...
};
// CODE REMOVED...
}
(к сожалению тег quote в форуме убивает все форматирование. код реально отступами выделен и чинается нормально а не как мешанина :)
Можно не рассказывать насколько ваш вариант короче, это видно невооруженным взглядом :) Однако:
1. priority jumping (переход на priority + 101 в случае неудачи) сами разработчики астериска считают злым делом и его уже deprecate в 1.6 поэтому вам по-хорошему надо после ChanIsAvail сделать GotoIf
2. Если мы боремся за звание "самый короткий код" то я тоже могу выкинуть у себя noop'ы, комментарии и заинлайнть макро dial-user в то место где он используется. и по длине код станет сравнимым а сгенеренный диалплан так вообще практически идентичным. Однако же т.к. у меня макро dial-user используется еще и из других мест - я его держу именно в виде макро.
|
Сообщений: 1573
|
Re: Сообщения о недоступности абонента
dimas:
1. priority jumping (переход на priority + 101 в случае неудачи) сами разработчики астериска считают злым делом и его уже deprecate в 1.6 поэтому вам по-хорошему надо после ChanIsAvail сделать GotoIf
:))) спасибо, но не воспользуюсь вашим советом. Все и так прекрасно работает ...
dimas:
2. Если мы боремся за звание "самый короткий код" то я тоже могу выкинуть у себя noop'ы, комментарии и заинлайнть макро dial-user в то место где он используется. и по длине код станет сравнимым а сгенеренный диалплан так вообще идентичным. (поспорим? могу сделать) Однако же т.к. у меня макро dial-user используется еще и из других мест - я его держу именно в виде макро.
Формат AEL сам по себе короче стандартного. Поэтому для объективности потрудитесь перевести это в
extensions.conf
Если вы имеете ввиду переход в макросс, то можно вместо Dial это сделать.
[context]
exten => _X.,1,ChanIsAvail(SIP/${EXTEN}&IAX2/${EXTEN},j)
exten => _X.,n,Macro(stdexten,,${AVAILORIGCHAN})
exten => _X.,102,Hangup
при всем при том, что для тех, кого не пугают отладочные сообщения WARNING, предложенный мной вариант - всего лишь одна строчка.
Вы так и не поняли, что есть еще понятие - ПРОСТОТА! (идет вторым номером, после длины кода)
По какому из этих двух параметров (длина, простота) ваш вариант лучше?
|
Сообщений: 866
|
Re: Сообщения о недоступности абонента
:))) спасибо, но не воспользуюсь вашим советом. Все и так прекрасно работает ...
Хозяин - барин. В 1.6 опции j нет, так что когда-то переделывать все равно придется.
при всем при том, что для тех, кого не пугают отладочные сообщения WARNING, предложенный мной вариант - всего лишь одна строчка.
Отладочный сообщения это DEBUG. А WARNING это НЕ отладочные сообщения. Это предупреждения и при нормальной работе системы их быть не должно. Я видал горе-разработчиков у которых gcc при компиляции их программы варнингами поливает а они говорят "а чо? не ошибки же, мне не мешает...". У всех свои ценности.
Если вы имеете переход в макросс, то можно вместо Dial это сделать.
Нет, я имею в виду что весь блок chanisavail+dial мне нужен в виде макроса - именно поэтому у меня есть макрос dial-user.
Вы так и не поняли, что есть еще понятие - ПРОСТОТА! (идет вторым номером, после длины кода)
Куда мне, недалекому понять мысли такого гуру!
Только не знаю даже, слышал ли великий гуру о том что кроме простых бывают и сложные ситуации - много астерисков в филиалах, общая база пользователей которые могут зарегистрироваться на любом из астерисков и при каждом звонке надо искать где же пользователь сейчас. И ко всему этому еще надо Followme+voicemail если не ответили за 15 сек. И когда великий гуру прикрутит к своему диалплану все вышеперечисленное, озарение снизойдет на него и о чудо, увидит он что ну никак его исходные три строчки не могут остаться одним красивым целым и разъехались они в разные стороны, и обросло все кучей разных контекстов.
По какому из этих двух параметров (длина, простота) ваш вариант лучше?
по тому что все вышеперечисленное у меня работает.
PS: кстати, ваш "финальный" вариант по прежнему не финальный потому как без regcontext и ChanIsAvail БУДЕТ ругаться в консоль при попытке обратится к енсуществующим экстеншенам. Вернулись к тому с чего начали.
|
Сообщений: 1573
|
Re: Сообщения о недоступности абонента
dimas:
при всем при том, что для тех, кого не пугают отладочные сообщения WARNING, предложенный мной вариант - всего лишь одна строчка.
Отладочный сообщения это DEBUG. А WARNING это НЕ отладочные сообщения. Это предупреждения и при нормальной работе системы их быть не должно. Я видал горе-разработчиков у которых gcc при компиляции их программы варнингами поливает а они говорят "а чо? не ошибки же, мне не мешает...". У всех свои ценности.
я понимаю, что когда нечего сказать, нужно цепляться хоть за что то ... Скоро похоже будет - а ты кто такой? ... :))
dimas:
Нет, я имею в виду что весь блок chanisavail+dial мне нужен в виде макроса - именно поэтому у меня есть макрос dial-user.
причем здесь ваш сервер (похоже единственный) с вашим конфигом. Я предложил вам изобразить то, что вы назвали правильным вариантом ... Похоже - тупик ...
dimas:
Вы так и не поняли, что есть еще понятие - ПРОСТОТА! (идет вторым номером, после длины кода)
Куда мне, недалекому понять мысли!
Ну не спорю ...
dimas:
Только не знаю даже, слышал ли великий гуру о том что кроме простых бывают и сложные ситуации - много астерисков в филиалах, общая база пользователей которые могут зарегистрироваться на любом из астерисков и при каждом звонке надо искать где же пользователь сейчас.
первый свой кластер я собрал года 3-3,5 назад ... После этого их было уже за десяток ... И сейчас рулю распределенными системами ...
Но ведь это вообще к делу не относится. Если вы в простом случае идете трущобами, могу представить, что у вас в сложной конфигурации будет.
dimas:
И ко всему этому еще надо Followme+voicemail если не ответили за 15 сек.
офигеть, как вы это подняли .... О ....! Респект!!! ... :)))
dimas:
И когда великий гуру прикрутит к своему диалплану все вышеперечисленное, озарение снизойдет на него и о чудо, увидит он что ну никак его исходные три строчки не могут остаться одним красивым целым и разъехались они в разные стороны, и обросло все кучей разных контекстов.
уважаемый dimas, вы похоже вообще потеряли связь с миром. Ибо это у вас все обросло всевозможными контестами, даже в простейшем, детском варианте. Но почему то это приписывается мне. Почему - х.з.?
dimas: По какому из этих двух параметров (длина, простота) ваш вариант лучше?
опять молчок ... Или вас вопрос ставит в тупик?
dimas:
PS: кстати, ваш "финальный" вариант по прежнему не финальный потому как без regcontext и ChanIsAvail БУДЕТ ругаться в консоль при попытке обратится к енсуществующим экстеншенам. Вернулись к тому с чего начали.
вы случаем в него чего нибудь от себя не добавили ... :)))
юзер отсутствует:
-- Executing [6007@new:1] ChanIsAvail("SIP/6500-b5a08f30", "SIP/6007&IAX2/6007|j") in new stack
-- Executing [6007@new:102] Hangup("SIP/6500-b5a08f30", "") in new stack
== Spawn extension (new, 6007, 102) exited non-zero on 'SIP/6500-b5a08f30'
юзер зарегистрирован:
-- Executing [6007@new:1] ChanIsAvail("SIP/6500-b5a00f18", "SIP/6007&IAX2/6007|j") in new stack
-- Executing [6007@new:2] Dial("SIP/6500-b5a00f18", "SIP/6007") in new stack
-- Called 6007
-- SIP/6007-08240700 is ringing
последний раз выложил логи ... Но это для того, что бы у вас появился стимул вылечить руки ...
Ну так от вас ожидать ваш финальный вариант. Или - все ступор?
P.S. Только душу просьба больше не изливать, и опытом не хвастаться ...
Как говорится покажите на деле, а не на словах.
|
|