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

Нет сигнала линия занята

0

Когда 2 абонента разговаривают между собой, если третий абонент позвонит к одному из них ему не отдается сигнал линия занята. Все абоненты подключены по sip. Я читал что данный вопрос далеко не у меня одного? даже примеры есть, но ни один из них я так и не смог заставить работать, в данный момент у меня контексты описаны следующим образом:

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

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

Вызов происходит из контекста [outgoing]. Вот лог 1 вызова:

Executing [1111@outgoing:1] Set("SIP/1108-000000d8", "GROUP()=1108") in new stack
    -- Executing [1111@outgoing:2] NoOp("SIP/1108-000000d8", "GROUP_COUNT(1108) = 1") in new stack
    -- Executing [1111@outgoing:3] NoOp("SIP/1108-000000d8", "GROUP_COUNT(1111) = 0") in new stack
    -- Executing [1111@outgoing:4] Dial("SIP/1108-000000d8", "Local/1111@incoming") in new stack
    -- Called Local/1111@incoming
    -- Executing [1111@incoming:1] NoOp("Local/1111@incoming-00000034;2", "GROUP_COUNT(1111) = 0") in new stack
    -- Executing [1111@incoming:2] GotoIf("Local/1111@incoming-00000034;2", "0?busy") in new stack
    -- Executing [1111@incoming:3] Set("Local/1111@incoming-00000034;2", "GROUP()=1111") in new stack
    -- Executing [1111@incoming:4] NoOp("Local/1111@incoming-00000034;2", "GROUP_COUNT(1111) = 1") in new stack
    -- Executing [1111@incoming:5] Dial("Local/1111@incoming-00000034;2", "SIP/1111") in new stack

Вот лог 2 параллельного вызова:

-- Executing [1111@outgoing:1] Set("SIP/1110-000000da", "GROUP()=1110") in new stack
    -- Executing [1111@outgoing:2] NoOp("SIP/1110-000000da", "GROUP_COUNT(1110) = 1") in new stack
    -- Executing [1111@outgoing:3] NoOp("SIP/1110-000000da", "GROUP_COUNT(1111) = 0") in new stack
    -- Executing [1111@outgoing:4] Dial("SIP/1110-000000da", "Local/1111@incoming") in new stack
    -- Called Local/1111@incoming
    -- Executing [1111@incoming:1] NoOp("Local/1111@incoming-00000035;2", "GROUP_COUNT(1111) = 0") in new stack
    -- Executing [1111@incoming:2] GotoIf("Local/1111@incoming-00000035;2", "0?busy") in new stack
    -- Executing [1111@incoming:3] Set("Local/1111@incoming-00000035;2", "GROUP()=1111") in new stack
    -- Executing [1111@incoming:4] NoOp("Local/1111@incoming-00000035;2", "GROUP_COUNT(1111) = 1") in new stack
    -- Executing [1111@incoming:5] Dial("Local/1111@incoming-00000035;2", "SIP/1111") in new stack

Т.е. GROUP_COUNT не считает количество. В чем моя ошибка подскажите пожалуйста.

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

спросил 2014-01-29 08:47:32 +0400

bigluc Gravatar bigluc
27 2 4

обновил 2014-01-29 08:49:55 +0400

2 Ответа

0

Ваша ошибка в том, что Вы пытаетесь включить счетчик еще не объявленной группы. Сначала надо объявить и включить канал в группу Set(GROUP(...)=...), и лишь после анализировать счетчик GROUP_COUNT(...)

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

ответил 2014-01-29 15:58:04 +0400

mistral Gravatar mistral flag of Ukraine
370 2 5 19

Comments

да нет. он же не с 1 сравнивает. а с 0. такчто там все ок. так как вы делаете сравнивать с 1. одинаково вобщемто. у него просто имена груп странно берутся.

meral ( 2014-01-29 16:10:23 +0400 )редактировать

я просто пытаюсь установить при входе в контекст [outgoing] что вызывающий абонент занят, при переходе в контекст [incoming] я проверяю не занят ли вызываемый номер, если не занят выставляю, что он занят, и набираю его. По идее другой абонент который будет набирать вызывающего или вызываемого абонента должен по GROUP_COUNT получить значение больше нуля и отдать сигнал занято, но этого не происходит. Я понимаю что где то я дурак, поэтому прощу помощи у знатоков.

bigluc ( 2014-01-29 17:36:05 +0400 )редактировать

1108 у вас callerid, а не 1111. либо установите callerid одинаковый, либо логику перепишите.

meral ( 2014-01-29 19:29:03 +0400 )редактировать

Что не так в логике? Если не трудно распишите как понимает данный контекст астериск, как понимаю его я расписал в предыдущем посте. переписал контексты вот так, логика не менялась, эффекта ноль: [incoming] exten => XXXX,1,GotoIf($[${GROUPCOUNT(${EXTEN})} > 0]?busy) exten => _XXXX,n,Set(GROUP(in)=${EXTEN}) exten => _XXXX,n,Dial(SIP/${EXTEN}) exten => _XXXX,n,Hangup() exten => _XXXX,n(busy),Busy()

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

bigluc ( 2014-01-30 03:37:59 +0400 )редактировать

чего тут расписывать. у вас же есть verbose output выполнения. там четко видно что группы РАЗНЫЕ. приведу бытовой пример. у вас два ящика. вы ложите в один красное яблоко, в другой зеленое. потом считаете в каждом отдельно и удивляетесь что яблока в ящике не два.

meral ( 2014-01-30 11:50:20 +0400 )редактировать
0

У вас диалпдан странный

все просто. функция GROUP() добавляет данный канал в ту группу которую вы присвоите.

GROUP_COUNT считает.

соответсвенно у вас так все и оотбражает.

к тому же вот это

 exten => _XXXX,n,Dial(Local/${EXTEN}@incoming)

очевидно еще раз посчитает.

вобщем непонятно чего вы добиваетесь, я лично за вас не буду у заказчика выяснять что хочется и писать диалплан.

может вы freepbx себе поставите? там не надо навыков логического мышления и программирования особых.

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

ответил 2014-01-29 09:34:42 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Comments

Я пытаюсь сделать так чтобы при звонке внутри asterisk, когда абоненты разговаривают между собой, если на их номер идет звонок от третьего абонента, он слышал сигнал занято. А не обыкновенные гудки из-за которых у него может сложится впечатление что абонент просто не берет трубку.

bigluc ( 2014-01-29 09:38:26 +0400 )редактировать

ну так что вы от нас хотите то? хотите чтоб вам ваш диалплан написали? вот смотрите у вас на входе 1108 а на исходе ОДНОВРЕМЕННО 1110 и 1111. и как по вашему это должно сработать?

meral ( 2014-01-29 10:15:04 +0400 )редактировать

Вы может быть не заметили но там идет вызов 1111, в обоих случаях, т.е. абонент 1111 уже разговаривает с 1108, в это время идет звонок с 1110 на номер 1111, и абонент 1110 слышит обыкновенные гудки, что трубку не поднимают, а НЕ сигнал занято.

bigluc ( 2014-01-29 11:14:04 +0400 )редактировать

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

meral ( 2014-01-29 11:41:11 +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)!
[скрыть предварительный просмотр]

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

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

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

Статистика

Задан: 2014-01-29 08:47:32 +0400

Просмотрен: 1,625 раз

Обновлен: Jan 29 '14

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

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