Страница 1 из 3
Выбор исходящего транка
Добавлено: 30 янв 2018, 14:11
sergio
Добрый день.
Подскажите кто-как решил или решает задачу привязки внутреннего абонента к внешнему номеру при выполнении исходящего вызова?
Опыта у меня немного и возможно я чего-то еще не знаю. Потому и обращаюсь за советом.
Конфигурация такая: астериск, голосовые шлюзы FXS, SIP транк от провайдера с выделенным пулом номеров. В sip.conf на каждый номер предполагается свой транк со своим fromuser (иль есть вариант динамически подставлять fromuser при вызове? )
Пока у меня есть два варианта, но как мне кажется оба не очень изящны:
Вариант 1:
- прописывать каждому внутреннему абоненту context соотвествующий внешнему номеру или группе номеров
- в этом контексте с помощью переменной задавать исходящий транк и обходные пути в случае занятости и сбоев
- далее направлять в контекст или макрос с общими правилами фильтрации/маршрутизации
- совершать вызов
Недостаток много контекстов.
Вариант 2:
- направлять всех в один контекст и с общими правилами фильтрации/маршрутизации
- далее направлять в макрос и извратными условиями проверять соответствие внутренний номер - внешний номер и задавать переменной исходящий транк, обходные пути
- совершать вызов
Недостаток каша из условий соответствия внутренний номер - внешний номер.
Для себя выбрал первый вариант но решил посоветоваться, вдруг есть еще проще?
Re: Выбор исходящего транка
Добавлено: 30 янв 2018, 14:30
ded
Всё было бы проще, используй Вы какую-то оболочку типа FreePBX, Elastix, AsteriskNOW, etc.
Где это легко делается вписыванием внешнего номера в поле Outbound CID у каждого внутреннего номера.
В вашем случае с самописанными текстовыми конфигурациями проверять соответствие внутренний номер - внешний номер и задавать переменной исходящий транк можно без макроса
Код: Выделить всё
exten => _ZXXXXXX/123,1,Set(CALLERID(num)=6543210)
exten => _ZXXXXXX,n,Dial(SIP/Operator/${EXTEN})
или даже по маске, назначая внешний номер группе экстенов
Код: Выделить всё
exten => _ZXXXXXX/1XX,1,Set(CALLERID(num)=6543210)
exten => _ZXXXXXX/2XX,1,Set(CALLERID(num)=7654321)
exten => _ZXXXXXX,n,Dial(SIP/Operator/${EXTEN})
Re: Выбор исходящего транка
Добавлено: 30 янв 2018, 14:39
Zavr2008
Нужно только осознавать, что после
Код: Выделить всё
exten => _ZXXXXXX/123,1,Set(CALLERID(num)=6543210)
следующая будет не
,а:
или
Код: Выделить всё
exten => _ZXXXXXX/6543210,2,Noop(Opa-opa-opa)
Re: Выбор исходящего транка
Добавлено: 30 янв 2018, 15:10
sergio
ded писал(а):...
проверять соответствие внутренний номер - внешний номер и задавать переменной исходящий транк можно без макроса
Да согласен, но это будет бесконечно долго при большом количестве внешних номеров и внутренних абонентов, вспотеешь когда потребуется внести изменения...
Насчет маски было интересно но у меня почему-то не получилось, я хотел сделать примерно так:
Код: Выделить всё
exten => _ZXXXXXX/10[1-7],1,Macro(outbound,6543210,${EXTEN},32,ktS(3600))
...
[macro-outbound]
...
exten => s,n,Dial(SIP/trunk${ARG1}/${ARG2},${ARG3},${ARG4})
...
Но не работает, видать маску CID можно задавать только так 1XX, в целом это не сильно облегчит жизнь.
Фокус с подстановкой CALLERID(num) во fromuser транка не проходит. Иль я не правильно это делаю? :
Код: Выделить всё
[rt_trunk]
...
fromuser=${CALLERID(num)}
...
Re: Выбор исходящего транка
Добавлено: 30 янв 2018, 15:52
april22
могу покащаться банальным , но я делал немного по другому.
перед Dial делал макрос
Код: Выделить всё
exten => s,1,NoOp(-------${ARG1}---${OUT_${DIAL_TRUNK}}---${CALLERID(number)}-----)
exten => s,n,Set(CALLERID(number)=1)
exten => s,n,NoOp(тут будет всякая подстановка определителя )
exten => s,n,Set(CALLERID(number)=${DB(USER/${ARG1}/callerid)})
exten => s,n,Execif($["${CALLERID(number)}"=""]?Hangup())
exten => s,n,NoOp(-------------${CALLERID(number)}---------------- )
в астДБ храню отпределители как мне заблагорассудится . может пригодится
Re: Выбор исходящего транка
Добавлено: 30 янв 2018, 16:05
sergio
april22 писал(а):
в астДБ храню отпределители как мне заблагорассудится . может пригодится
Не очень понял что происходит в этом куске кода. Не хватает части кода откуда вызывается макрос, что в качестве arg1 передается, и что подставляется в dial.
Re: Выбор исходящего транка
Добавлено: 30 янв 2018, 16:08
Wapo
Уууу как все запущено... (да еще с 2014 года)
exten => _X.,n,Macro(selectnum,${CALLERID(num)})
[macro-selectnum]
....
далее по тексту
Re: Выбор исходящего транка
Добавлено: 30 янв 2018, 16:20
sergio
Wapo писал(а):
...
далее по тексту
Пардон, но что далее по тексту предлагаете? портянку из конструкции _X./2222 ? вариант 1 или вариант 2 ?
Иль быть может вариант n ?
Попробуйте еще раз перечитать стартовый пост. Я за советом пришел. Реализация то как у вас выполнена?
Re: Выбор исходящего транка
Добавлено: 30 янв 2018, 16:49
ded
sergio писал(а):Фокус с подстановкой CALLERID(num) во fromuser транка не проходит. Иль я не правильно это делаю? :
Код: Выделить всё
[rt_trunk]
...
fromuser=${CALLERID(num)}
...
Нет единой схемы для всех провайдеров. У некоторых user= CallerID, у некоторых это разные вещи, и под одним юзером он может оригинировать в мир закреплённые за ним CallerID.
Кроме того,, провайдер не только может, но и обязан прикрывать вас, если Вы сознательно или по ошибек подставляете левые CallerID. Тема легитимности "прозрачных" CID широко освещена в сети.
Re: Выбор исходящего транка
Добавлено: 30 янв 2018, 17:01
april22
sergio писал(а):Пардон, но что далее по тексту предлагаете?
Код: Выделить всё
asterisk -rx 'database put USER/154 callerid 79089999999'
как то так наверное