Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

проблема с ограничением на входящие/исходящие вызовы.

1

Стоит астериск 1.6.2.9. Задача сделать так чтобы ограничить число входящих звонков до 1 и при этом чтобы не было проблем с переводом звонка(т.е. call-limit=1 не подходит, а опции limitonpeers здесь нет). Можно сделать это через group_count для входящей свзяи - не проблема. Но проблема в том, что когда абонент совершает исходящий вызов и ему в этот момент кто то звонит по внутренней сети или с наружи, то он слышит гудки в трубке(уведомления о поступающем звонке) и соответственно при звонках из города, вместо того чтобы сразу перевести звонок на незанятую линию, астериск долбится в уже разговаривающего абонента. Подскажите как можно решить эту проблему. Понимаю что тема уже поднималась, но внятного ответа так и не было дано. Если можно хотел бы получить комментарии по callcounetr=yes и hint не совсем пойму как это работает...

удалить закрыть спам изменить тег редактировать

спросил 2011-07-15 08:55:47 +0400

Seven Gravatar Seven
59 9 4 13

4 Ответа

1

Я делаю так (моя внутреняя нумерация 10ХХ):

exten => 10XX,1,Set(foo=${SIPPEER(${EXTEN},curcalls)})
exten => 10XX,n,GotoIf($["${foo}" = "0"]?4)
exten => 10XX,n,Goto("то что вам надо",s,1)
exten => 10XX,n,Dial(SIP/${EXTEN})
exten => 10XX,n,Hangup()

Если экстеншн уже занят одним звонком, то перевожу в другой контекст, а там уже далаю с этим звонком, то что мне надо.

ссылка удалить спам редактировать

ответил 2011-07-15 10:36:27 +0400

alphil Gravatar alphil flag of Spain
520 11 5 16
http://www.damal.es/

Comments

во это работает! тока так проще: GotoIf($[${SIPPEER(${EXTEN},curcalls)} = "0"]?4) Seven ( 2011-07-15 12:23:12 +0400 )редактировать
0

Кто мешает устанавливать group для входящих и исходящих вызовов?

ссылка удалить спам редактировать

ответил 2011-07-15 09:09:02 +0400

krensky Gravatar krensky
159 8 3 9
http://www.asterisk63.ru/

Comments

Че то я тогда не соображу каким образом выставить группу для исходящих вызовов. Для входящих я это делаю по экстену, а как выставить группу для исходящего вызова с учетом того кто вызывает, а не кого, особенно для исходящих в город. Seven ( 2011-07-15 09:12:40 +0400 )редактировать
для входящих так: Set(GROUP()=${EXTEN}) для исходящих можно сделать так: Set(GROUP()=${CALLERID(num)}) krensky ( 2011-07-15 09:36:04 +0400 )редактировать
А при звонках внутри сети придется использовать группу с CID и EXTEN, а это разные категории, а это значит что в условии надо проверять 4 варинта что как то грамоздко получается Seven ( 2011-07-15 11:13:04 +0400 )редактировать
Никаких 4 вариантов. CID и EXTEN будут равны вашему внутреннему номеру.Соответственно проверять нужно при звонке только GROUP_COUNT(ваш внутренний номер). krensky ( 2011-07-15 11:17:04 +0400 )редактировать
0

Надеюсь так будет понятнее:

[incoming]
exten => _1XXX,1,GotoIf($[${GROUP_COUNT(${EXTEN})} > 0]?busy)
exten => _1XXX,n,Set(GROUP()=${EXTEN})
exten => _1XXX,n,Dial(SIP/${EXTEN})
exten => _1XXX,n,Hangup()
exten => _1XXX,n(busy),Busy()

[outgoing]
exten => _1XXX,n,Set(GROUP()=${CALLERID(num)})
exten => _1XXX,n,Dial(Local/${EXTEN}@incoming)
exten => _1XXX,n,Hangup()
ссылка удалить спам редактировать

ответил 2011-07-15 11:49:52 +0400

krensky Gravatar krensky
159 8 3 9
http://www.asterisk63.ru/

Comments

А с внутренними то вызовами как быть, там должен заниматься и водящий и исходящий канал? Seven ( 2011-07-15 12:22:57 +0400 )редактировать
Внимательнее смотрите на пример, а лучше попробуйте выполнить его. Какая разница, входящий или исходящий? Главное установить переменную, что телефон занят разговором. При входящих эта переменная проверяется и выполняются альтернативные действия, если разговор уже есть. krensky ( 2011-07-15 12:35:52 +0400 )редактировать
В данном примере при исходящем звонке ставится переменная по CID, и для исходящего звонка в город этого будет достаточно, но если звонок идет между внутренними абонентами надо выставлять обе переменные по CID и Exten, а вот это уже не получается сделать, т.к. в одном канале может быть выставлена только одна группа в каждой категории. Seven ( 2011-07-16 10:58:14 +0400 )редактировать
В данном примере при исходящем звонке ставится переменная по CID, и для исходящего звонка в город этого будет достаточно, но если звонок идет между внутренними абонентами надо выставлять обе переменные по CID и Exten, а вот это уже не получается сделать, т.к. в одном канале может быть выставлена только одна группа в каждой категории. Seven ( 2011-07-16 10:58:32 +0400 )редактировать
0
[incoming]
exten => _1XXX,1,GotoIf($[${GROUP_COUNT(${EXTEN})} > 0]?busy)
exten => _1XXX,n,Set(GROUP(in)=${EXTEN})
exten => _1XXX,n,Dial(SIP/${EXTEN})
exten => _1XXX,n,Hangup()
exten => _1XXX,n(busy),Busy()

[outgoing]
exten => _1XXX,n,Set(GROUP(out)=${CALLERID(num)})
exten => _1XXX,n,Dial(Local/${EXTEN}@incoming)
exten => _1XXX,n,Hangup()

Теперь у входящего и исходящего разные категории (in и out) и обе переменные будут установлены в одном канале. GROUP_COUNT считает независимо от категорий. Протестировал на внутренних номерах.

ссылка удалить спам редактировать

ответил 2011-07-20 13:01:13 +0400

krensky Gravatar krensky
159 8 3 9
http://www.asterisk63.ru/

обновил 2011-07-20 13:02:42 +0400

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку
1 закладка

подписаться на rss ленту новостей

Статистика

Задан: 2011-07-15 08:55:47 +0400

Просмотрен: 2,645 раз

Обновлен: Jul 20 '11

Похожие вопросы:

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.