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

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

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

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

suncheez
Сообщения: 15
Зарегистрирован: 15 апр 2016, 14:38

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

Сообщение 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
Но не знаю как

Вправьте мне мозги, пожалуйста?
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение ded »

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

P.S. Если бы использовали FreePBX, то ничего изобретать не пришлось, всё уже хорошо продумано - Follow me.
Glukinho
Сообщения: 661
Зарегистрирован: 07 янв 2011, 20:05

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

Сообщение Glukinho »

sip.conf

[peername]
...
setvar=mobile=79161234567


При звонке к или от этого пира будет выставляться переменная ${mobile}, равная "79161234567".
Glukinho
Сообщения: 661
Зарегистрирован: 07 янв 2011, 20:05

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

Сообщение Glukinho »

Но вообще, такие вещи лучше держать в БД с доступом через func_odbc, или, на худой конец, во встроенной БД астериска.
suncheez
Сообщения: 15
Зарегистрирован: 15 апр 2016, 14:38

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

Сообщение suncheez »

за setvar вот-такенное спасибо!

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

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

А вот с настоящим программированием у меня всё печально, поэтому я и не хочу пока связываться с БД.
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

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

Сообщение tol_iwan »

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

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

Сообщение suncheez »

Извините, снова подниму топик, так как не получается использовать переменную.

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

Пожалуйста, научите, как сделать то что мне надо?
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

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

Сообщение virus_net »

suncheez писал(а):Идти через [globals] мне кажется неправильным.
И в чем же заключается неправильность ?
suncheez писал(а):как сделать то что мне надо?
Вы уже озвучили два способа, третий обращаться за данными во вне через AGI.
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
Аватара пользователя
Obi Van
Сообщения: 340
Зарегистрирован: 03 сен 2010, 11:21

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

Сообщение Obi Van »

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

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

Сообщение suncheez »

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

В итоге, пришлось в некотором роде смириться с этим и пошёл через Gotoif и вызов внутреннего номера в другом контексте, в котором для каждого номера прописан Dial на мобилу. Знатный костыль, но работает. И нет десятков отдельных контекстов.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH