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

Как назначать некую переменную для пиров?

Добавлено: 30 апр 2016, 13:06
suncheez
Добрый день.

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

Как сделать переадресацию по Dialstatus я знаю, но не знаю способа назначать пирам переменную с номером мобилы. Поэтому, сейчас мне приходится делать так:

Код: Выделить всё

[macro-dial-ext]
 exten => s,1,Answer()
 exten => s,n,Monitor(wav,,b)
 exten => s,n,Dial(SIP/ext${ARG1},20,tTr)
 exten => s,n,Goto(s-${DIALSTATUS},1)
 exten => s-NOANSWER,1,Macro(group-dial,${ARG1:0:2}00)
 exten => s-BUSY,1,Macro(group-dial,${ARG1:0:2}00)
 exten => s-CONGESTION,1,Macro(group-dial,${ARG1:0:2}00)
 exten => s-CHANUNAVAIL,1,GotoIfTime(9:00-21:00|mon-fri|*|*?${ARG1}mobile,s,1) ; <--- тут мы отправляем звонок на мобилу
 exten => s-CHANUNAVAIL,2,Macro(group-dial,${ARG1:0:2}00)
 exten => _s-.,1,Hangup
И отдельный контекст для мобилы каждого абонента

Код: Выделить всё

[1302mobile] ;Belov
exten => s,1,Dial(SIP/rinet/89365325215,60,Ttr)
Но, чую, что-то я не то нарисовал. Хочу прописывать переменную в свойства пира и звонить на мобилу через один контекст.
Вики про переменные прочитал, вроде внимательно, но так и не понял, как назначать переменные вне дайалплана.
Можно, конечно, пойти другим путём:
exten => s-CHANUNAVAIL,1,GotoIfTime(9:00-21:00|mon-fri|*|*?mobile,s,${ARG1})
и в дайалплане писать по строке на юзера, но это тоже какой-то неправильный вариант, кмк.

В идеале хотелось бы что-то типа вот такого:

Код: Выделить всё

[ext1302](peer)
callerid="Belov" <1302>
mobile=89365325215
callgroup = 13
pickupgroup = 13
secret=secretsecretsecret
Но не знаю как

Вправьте мне мозги, пожалуйста?

Re: Как назначать некую переменную для пиров?

Добавлено: 30 апр 2016, 16:01
ded
Из макроса вызывать другой макрос - можно, если знаете про наследование переменных. Это не очень хорошо, поэтому макросы в последних версиях уже давно мигрируют на GoSub.
В чём разница - читать документацию, спрашивать про это на форуме при наличии хорошо документированного функционала - нечестно. Вписывать в sip peer несуществующие параметры
mobile=89365325215 конечно можно, но для этого Вам надо переписать sip channel в Астериске.

P.S. Если бы использовали FreePBX, то ничего изобретать не пришлось, всё уже хорошо продумано - Follow me.

Re: Как назначать некую переменную для пиров?

Добавлено: 30 апр 2016, 22:57
Glukinho
sip.conf

[peername]
...
setvar=mobile=79161234567


При звонке к или от этого пира будет выставляться переменная ${mobile}, равная "79161234567".

Re: Как назначать некую переменную для пиров?

Добавлено: 30 апр 2016, 22:59
Glukinho
Но вообще, такие вещи лучше держать в БД с доступом через func_odbc, или, на худой конец, во встроенной БД астериска.

Re: Как назначать некую переменную для пиров?

Добавлено: 02 май 2016, 16:09
suncheez
за setvar вот-такенное спасибо!

На самом деле, там дело не только в followme. Это, как раз, решается в одну строку дайалплана. А вот, например, Followme + время уже печальнее, потому что у меня половина пользователей этой АТС в разных часовых поясах. И, соответственно, переадресацию надо осуществлять в разные часы. Городить контексты влом, проще через переменные и один макрос.

Плюс к этому, есть пользователи, которые перемещаются между поясами по строгому графику и это можно довольно просто запрограммировать в дайалплане.

А вот с настоящим программированием у меня всё печально, поэтому я и не хочу пока связываться с БД.

Re: Как назначать некую переменную для пиров?

Добавлено: 06 май 2016, 11:08
tol_iwan
suncheez писал(а):А вот с настоящим программированием у меня всё печально, поэтому я и не хочу пока связываться с БД.
Это не программирование, а настройка хранения в БД. Хотя само по себе написание диалплана есть программирование.
Потом Вам захочется, чтобы пользователь сам следил за актуальностью своего номера мобильного и столкнетесь с невозможностью изменить переменную, прописанную в пире. А с БД проблем никаких, ни в настройке, не в работе с ней, все также как и с переменной.

Re: Как назначать некую переменную для пиров?

Добавлено: 14 июн 2016, 11:19
suncheez
Извините, снова подниму топик, так как не получается использовать переменную.

В общем, я пытаюсь назначить переменную из sip.conf, чтобы использовать её для перенаправления на мобилу в случае отсутствия пира в сети. Дело в том что в офисе не слишком стабильное электричество (тухнет минимум раз в неделю посреди дня, потому что сеть не выдерживает кол-ва кондеев в здании), а я пытаюсь сделать так, чтобы все звонки переводились на мобилки в случае отсутствия клиента в сети, чтобы бизнес не так сильно страдал. Но, внезапно, в доке обнаружился подлый предлог: «setvar: Начиная с версии 1.4.x. В значении указывается пара "переменная=значение" для переменной канала, при вызовах С данного девайса.»
А мне-то надо "на данный девайс"..
Необходимо каждому экстенжну назначить мобильный номер и переводить на него в случае chanunavail. Идти через [globals] мне кажется неправильным. Через БД не умею и мне кажется это неудобным, потому что надо запоминать, что кусок конфига пира ещё и в другом месте живёт.
Есть-ли какой-либо способ подбирать переменную, назначенную через setvar в конфиге пира в sip.conf, чтобы использовать её в extensions.conf при входящих вызовах на данный пир?

Пожалуйста, научите, как сделать то что мне надо?

Re: Как назначать некую переменную для пиров?

Добавлено: 15 июн 2016, 12:34
virus_net
suncheez писал(а):Идти через [globals] мне кажется неправильным.
И в чем же заключается неправильность ?
suncheez писал(а):как сделать то что мне надо?
Вы уже озвучили два способа, третий обращаться за данными во вне через AGI.

Re: Как назначать некую переменную для пиров?

Добавлено: 15 июн 2016, 13:15
Obi Van
suncheez
Давным давно всё сделал руками через БД, которая правится через веб-морду. Для каждого можно назначить любую переброску вызова, включая комбинированные притом на разные номера. Чем вас страшит работа с БД ума не приложу. Так можно бояться ещё долго и искать разного рода неадекватные решения. :lol:

Re: Как назначать некую переменную для пиров?

Добавлено: 15 июн 2016, 14:47
suncheez
virus_net писал(а): И в чем же заключается неправильность ?
В дроблении конфигов и методов управления ими. После меня же кому-то придётся это когда-то поддерживать.

В итоге, пришлось в некотором роде смириться с этим и пошёл через Gotoif и вызов внутреннего номера в другом контексте, в котором для каждого номера прописан Dial на мобилу. Знатный костыль, но работает. И нет десятков отдельных контекстов.