Elastix 2.4. У специалиста техподдержки стоит 2 локальных SIP-телефона: 1 его собственный. 2й достался от сотрудника, который в настоящее время в отпуске и часть проблем оставил специалисту техподдержки (вот такой вот добросовестный совместитель). Суть. Звонят клиенты и формулируют проблемы. Иногда оба телефона звонят одновременно. Так вот. Специалист просит меня настроить оба телефона так,чтобы во время разговора о одному из них второй телефон вответ на любой звонок выдавал "Busy". Чтобы успеть нормально записать заявку. Или ответить на ранее оставленную заявку. Я предложил ему сделать как в современных фирмах Queue, со всеми сопутствующими приветствиями. Но он категорически отказался. Я а всякий случай по очте ему направил подробное описание Queue. Но получил письменный отказ. Требуется только и только "Busy".
Какую бы функцию мне почитать ?
Уж лучше колымить в Гондурасе, чем гондурасить на Колыме !
Вызов на каждый экстен 111 и 222 надо свести на третий номер 333 - вспомогательный, на котором настроить
ChanIsAvail(SIP/111&SIP/222)
Который вернёт вам статус ${AVAILSTATUS}: The device state for the device
если один из них занят - то
PlayTones(busy)
Hangup()
Правильней, конечно, использовать многоканальный ИП-телефон, на него свести оба внутренних номера, ограничить на нём приём только 1 входящего (Callwaiting=no). И busy бы само пиликало, и он смог бы даже отзванивать по неотвеченным.
Reader писал(а): Я предложил ему сделать как в современных фирмах Queue, со всеми сопутствующими приветствиями. Но он категорически отказался. Я а всякий случай по очте ему направил подробное описание Queue. Но получил письменный отказ. Требуется только и только "Busy".
Гм. Не получается с функцией ChanIsAvail().
Что делал ?
Есть 2 телефона: 7201 и 2455. Оба локальные телефоны Астериска, софтфоны (SIP). Тупо занимаю оба, надолго. Создаю виртуальный SIP-exten. 2456. На него прописываю функцию ChanIsAvail(). И пишу контекст:
Сохраняю, рестартую Астериск. Звоню с 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 мин. выступления заигрывать сразу с несколькими избирателями (ничего личного). Посему хотелось бы почитать про какую-н. другую функцию Астериска, не просто анализирующую канал доступности данного софтфона, а ещё и выявляющую факт занятости данного экстена.
Для убедительности своих слов стираю первый контекст и рисую другой:
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 из них - хоть на оба ...
Собс-но разыскиваю какую-н. другую функцию Астериска, чтобы почитать и позже реализовать заданную в теме задачку ...
Уж лучше колымить в Гондурасе, чем гондурасить на Колыме !
Существует даже предположение, что в моём случае нужно использовать анализ распечатки core show hints.
Там выскочит подряд состояние всех экстенов в Астериске. Дальше нужно автоматизировать анализ строки, имеющей вид:
2455@ext-local : SIP/2455 State:InUse Watchers 0
И по параметру State: чётко сказать дальнейшему контексту:
Ежели InUse - тогда на аппараты не звонить вообще.
Ежели Idle - тогда анализировать соседский аппарат SIP/7201 и в зависимости от его текущего состояния - звонит на него или не звонить.
Ежели Unavailable - додумать, что анализировать SIP/7201 и в зависимости от его текущего состояния - звонит на него или не звонить.
Вот чем и занимаюсь.
А может быть существует какое-то более простое и элегантное решение задачки ? Ибо экстенов-то много. Каждый раз всю таблицу анализировать ... А дальше вроде только расширяться планируют ...
Уж лучше колымить в Гондурасе, чем гондурасить на Колыме !