Страница 1 из 2

Как не звонить на 2й телефон, если первый занят соединением

Добавлено: 04 сен 2015, 17:34
Reader
Elastix 2.4. У специалиста техподдержки стоит 2 локальных SIP-телефона: 1 его собственный. 2й достался от сотрудника, который в настоящее время в отпуске и часть проблем оставил специалисту техподдержки (вот такой вот добросовестный совместитель). Суть. Звонят клиенты и формулируют проблемы. Иногда оба телефона звонят одновременно. Так вот. Специалист просит меня настроить оба телефона так,чтобы во время разговора о одному из них второй телефон вответ на любой звонок выдавал "Busy". Чтобы успеть нормально записать заявку. Или ответить на ранее оставленную заявку. Я предложил ему сделать как в современных фирмах Queue, со всеми сопутствующими приветствиями. Но он категорически отказался. Я а всякий случай по очте ему направил подробное описание Queue. Но получил письменный отказ. Требуется только и только "Busy".
Какую бы функцию мне почитать ?

Re: Как не звонить на 2й телефон, если первый занят соединен

Добавлено: 04 сен 2015, 17:44
Glukinho
Пока будете делать, второй выйдет из отпуска, предлагаю так и написать в ответной служебке на имя председателя совета директоров.

Re: Как не звонить на 2й телефон, если первый занят соединен

Добавлено: 04 сен 2015, 18:23
Reader
Да, делаю я очень медленно. Но записки писать - не мой метод ... Нужен функционал !..

Re: Как не звонить на 2й телефон, если первый занят соединен

Добавлено: 04 сен 2015, 20:46
ded
Вызов на каждый экстен 111 и 222 надо свести на третий номер 333 - вспомогательный, на котором настроить
ChanIsAvail(SIP/111&SIP/222)
Который вернёт вам статус ${AVAILSTATUS}: The device state for the device
если один из них занят - то
PlayTones(busy)
Hangup()

Правильней, конечно, использовать многоканальный ИП-телефон, на него свести оба внутренних номера, ограничить на нём приём только 1 входящего (Callwaiting=no). И busy бы само пиликало, и он смог бы даже отзванивать по неотвеченным.

Re: Как не звонить на 2й телефон, если первый занят соединен

Добавлено: 04 сен 2015, 22:14
april22
а очередь не выход ?!

Re: Как не звонить на 2й телефон, если первый занят соединен

Добавлено: 05 сен 2015, 01:02
ded
Reader писал(а): Я предложил ему сделать как в современных фирмах Queue, со всеми сопутствующими приветствиями. Но он категорически отказался. Я а всякий случай по очте ему направил подробное описание Queue. Но получил письменный отказ. Требуется только и только "Busy".

Re: Как не звонить на 2й телефон, если первый занят соединен

Добавлено: 06 сен 2015, 13:52
Reader
Гм. Не получается с функцией ChanIsAvail().
Что делал ?
Есть 2 телефона: 7201 и 2455. Оба локальные телефоны Астериска, софтфоны (SIP). Тупо занимаю оба, надолго. Создаю виртуальный SIP-exten. 2456. На него прописываю функцию ChanIsAvail(). И пишу контекст:

[from-pstn-custom]
exten => 2456,1,NoOp(begin_of_test)
exten => 2456,2,Set(CDR(accountcode)=begin_of_test)
exten => 2456,3,ChanIsAvail(SIP/7201&SIP/2455)
exten => 2456,4,NoOp(${AVAILCHAN})
exten => 2456,5,NoOp(${AVAILORIGCHAN})
exten => 2456,6,NoOp(${AVAILSTATUS})
exten => 2456,7,Hangup()

Сохраняю, рестартую Астериск. Звоню с TDM-cети на Asterisk ext. 6576. И получаю:
-- Accepting call from '6576' to '2456' on channel 0/15, span 1
-- Executing [2456@from-pstn:1] NoOp("DAHDI/i1/6576-15f8", "begin_of_test") in new stack
-- Executing [2456@from-pstn:2] Set("DAHDI/i1/6576-15f8", "CDR(accountcode)=begin_of_test") in new stack
-- Executing [2456@from-pstn:3] ChanIsAvail("DAHDI/i3/6576-ec3", "SIP/2455&SIP/7201") in new stack
== Using SIP VIDEO TOS bits 136
== Using SIP VIDEO CoS mark 6
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Executing [2456@from-pstn:4] NoOp("DAHDI/i3/6576-ec3", "SIP/2455-00001719") in new stack
-- Executing [2456@from-pstn:5] NoOp("DAHDI/i3/6576-ec3", "SIP/2455") in new stack
-- Executing [2456@from-pstn:6] NoOp("DAHDI/i3/6576-ec3", "0") in new stack
-- Executing [2456@from-pstn:7] Hangup()

Поскольку оба софтфона - типа 3CX (многоканальные), то Астериск предполагает, что все они свободны и звонить на них можно сколько угодно.
Но это не так. Человек - существо ограниченных возможностей. И нормально он может общаться только с одним собеседником. Я не беру в пример депутатов, которые пытаются за 1 мин. выступления заигрывать сразу с несколькими избирателями (ничего личного). Посему хотелось бы почитать про какую-н. другую функцию Астериска, не просто анализирующую канал доступности данного софтфона, а ещё и выявляющую факт занятости данного экстена.

Для убедительности своих слов стираю первый контекст и рисую другой:

[from-pstn-custom]
exten => 2456,1,NoOp(begin_of_test)
exten => 2456,2,Set(CDR(accountcode)=begin_of_test)
exten => 2456,3,ChanIsAvail(SIP/7201)
exten => 2456,4,NoOp(${AVAILCHAN})
exten => 2456,5,NoOp(${AVAILORIGCHAN})
exten => 2456,6,NoOp(${AVAILSTATUS})
exten => 2456,7,ChanIsAvail(SIP/2455)
exten => 2456,8,NoOp(${AVAILCHAN})
exten => 2456,9,NoOp(${AVAILORIGCHAN})
exten => 2456,10,NoOp(${AVAILSTATUS})
exten => 2456,11,Hangup()

Save -> Restart.
Опять занимаю оба софтфона длительной беседой c автоответчиками. А сам звоню на 2456 и снимаю трассировку (CLI). И что я вижу:

-- Accepting call from '6576' to '2456' on channel 0/15, span 1
-- Executing [2456@from-pstn:1] NoOp("DAHDI/i1/6576-15f8", "begin_of_test") in new stack
-- Executing [2456@from-pstn:2] Set("DAHDI/i1/6576-15f8", "CDR(accountcode)=begin_of_test") in new stack
-- Executing [2456@from-pstn:3] ChanIsAvail("DAHDI/i1/6576-15f8", "SIP/2455") in new stack
== Using SIP VIDEO TOS bits 136
== Using SIP VIDEO CoS mark 6
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Executing [2456@from-pstn:4] NoOp("DAHDI/i1/6576-15f8", "SIP/2455-0000171b") in new stack
-- Executing [2456@from-pstn:5] NoOp("DAHDI/i1/6576-15f8", "SIP/2455") in new stack
-- Executing [2456@from-pstn:6] NoOp("DAHDI/i1/6576-15f8", "0") in new stack
-- Executing [2456@from-pstn:7] ChanIsAvail("DAHDI/i1/6576-15f8", "SIP/7201") in new stack
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Executing [2456@from-pstn:8] NoOp("DAHDI/i1/6576-15f8", "SIP/7201-0000171c") in new stack
-- Executing [2456@from-pstn:9] NoOp("DAHDI/i1/6576-15f8", "SIP/7201") in new stack
-- Executing [2456@from-pstn:10] NoOp("DAHDI/i1/6576-15f8", "0") in new stack
-- Executing [2456@from-pstn:11] Hangup("DAHDI/i1/6576-15f8", "") in new stack

Таким образом Астериск по-прежнему думает, что оба канальчика свободны для звонка, ${AVAILORIGCHAN} = 0 и вообще следующим номером программы вполне можно звонить хоть на 1 из них - хоть на оба ...

Собс-но разыскиваю какую-н. другую функцию Астериска, чтобы почитать и позже реализовать заданную в теме задачку ...

Re: Как не звонить на 2й телефон, если первый занят соединен

Добавлено: 06 сен 2015, 14:15
Reader
Существует даже предположение, что в моём случае нужно использовать анализ распечатки core show hints.
Там выскочит подряд состояние всех экстенов в Астериске. Дальше нужно автоматизировать анализ строки, имеющей вид:
2455@ext-local : SIP/2455 State:InUse Watchers 0
И по параметру State: чётко сказать дальнейшему контексту:
Ежели InUse - тогда на аппараты не звонить вообще.
Ежели Idle - тогда анализировать соседский аппарат SIP/7201 и в зависимости от его текущего состояния - звонит на него или не звонить.
Ежели Unavailable - додумать, что анализировать SIP/7201 и в зависимости от его текущего состояния - звонит на него или не звонить.
Вот чем и занимаюсь.

А может быть существует какое-то более простое и элегантное решение задачки ? Ибо экстенов-то много. Каждый раз всю таблицу анализировать ... А дальше вроде только расширяться планируют ...

Re: Как не звонить на 2й телефон, если первый занят соединен

Добавлено: 07 сен 2015, 08:01
virus_net
Можно воспользоваться функцией GROUP:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
CLI> core show function GROUP

-= Info about function 'GROUP' =-

[Synopsis]
Gets or sets the channel group.

[Description]
<category> can be employed for more fine grained group management. Each channel
can only be member of exactly one group per <category>.

[Syntax]
GROUP([category])

[Arguments]
category
Category name.

Re: Как не звонить на 2й телефон, если первый занят соединен

Добавлено: 07 сен 2015, 08:49
awsswa
тупой вопрос:

может просто нажать DND на телефоне которым не пользуемся ?