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

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

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

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

Аватара пользователя
Reader
Сообщения: 152
Зарегистрирован: 24 апр 2013, 10:35

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

Сообщение Reader »

Elastix 2.4. У специалиста техподдержки стоит 2 локальных SIP-телефона: 1 его собственный. 2й достался от сотрудника, который в настоящее время в отпуске и часть проблем оставил специалисту техподдержки (вот такой вот добросовестный совместитель). Суть. Звонят клиенты и формулируют проблемы. Иногда оба телефона звонят одновременно. Так вот. Специалист просит меня настроить оба телефона так,чтобы во время разговора о одному из них второй телефон вответ на любой звонок выдавал "Busy". Чтобы успеть нормально записать заявку. Или ответить на ранее оставленную заявку. Я предложил ему сделать как в современных фирмах Queue, со всеми сопутствующими приветствиями. Но он категорически отказался. Я а всякий случай по очте ему направил подробное описание Queue. Но получил письменный отказ. Требуется только и только "Busy".
Какую бы функцию мне почитать ?
Уж лучше колымить в Гондурасе, чем гондурасить на Колыме !
Glukinho
Сообщения: 661
Зарегистрирован: 07 янв 2011, 20:05

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

Сообщение Glukinho »

Пока будете делать, второй выйдет из отпуска, предлагаю так и написать в ответной служебке на имя председателя совета директоров.
Аватара пользователя
Reader
Сообщения: 152
Зарегистрирован: 24 апр 2013, 10:35

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

Сообщение Reader »

Да, делаю я очень медленно. Но записки писать - не мой метод ... Нужен функционал !..
Уж лучше колымить в Гондурасе, чем гондурасить на Колыме !
ded
Сообщения: 15630
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение ded »

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

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

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

Сообщение april22 »

а очередь не выход ?!
Своими вопросами , вы загоняете меня в ГУГЛЬ.
ded
Сообщения: 15630
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение ded »

Reader писал(а): Я предложил ему сделать как в современных фирмах Queue, со всеми сопутствующими приветствиями. Но он категорически отказался. Я а всякий случай по очте ему направил подробное описание Queue. Но получил письменный отказ. Требуется только и только "Busy".
Аватара пользователя
Reader
Сообщения: 152
Зарегистрирован: 24 апр 2013, 10:35

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

Сообщение 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 из них - хоть на оба ...

Собс-но разыскиваю какую-н. другую функцию Астериска, чтобы почитать и позже реализовать заданную в теме задачку ...
Уж лучше колымить в Гондурасе, чем гондурасить на Колыме !
Аватара пользователя
Reader
Сообщения: 152
Зарегистрирован: 24 апр 2013, 10:35

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

Сообщение Reader »

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

А может быть существует какое-то более простое и элегантное решение задачки ? Ибо экстенов-то много. Каждый раз всю таблицу анализировать ... А дальше вроде только расширяться планируют ...
Уж лучше колымить в Гондурасе, чем гондурасить на Колыме !
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

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

Сообщение 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.
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
awsswa
Сообщения: 2390
Зарегистрирован: 09 июн 2012, 10:52
Откуда: Россия, Пермь skype: yarick_perm

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

Сообщение awsswa »

тупой вопрос:

может просто нажать DND на телефоне которым не пользуемся ?
платный суппорт по мере возможностей
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH