Страница 1 из 1
Как одному из абонентов подменить А-номер звонящего.
Добавлено: 21 янв 2015, 07:43
Reader
Здравствуйте, уважаемые эксперты. у меня Elastix 2.4.0 x86.
Имеется вот какая задача:
Приходит из города звонок в дежурную службу. Там имеется сотрудник. PBX должна дублировать звонки ему на стационарный локальный EXTEN и на мобильный делать копию. Если сотрудник обходит территорию - он должен отвечать с мобильинка. Если же он непосредственно на рабочем месте - с целью экономии средств предприятия он должен отвечать на локальном стационарном телефоне. Пока всё реализовано так (extensions_custom.conf):
[from-pstn-custom]
exten => 7160,1,NoOp()
exten => 7160,2,Dial(DAHDI/g0/8922???????,60&Local/7160)
exten => 7160,3,Hangup()
И всё работает.
Но работает не так как бы хотелось. При звонке в частности на мобильный телефон дежурного А-номер у дежурного отображается некий произвольный (его генерирует PBX традиционного присоединяющего оператора) для того, чтобы звонок хотя бы осуществился. А по окончанию месяца техотдел присоединяющего оператора присылает каждый раз бумагу мне - а чего ты присылаешь нам какой-то левый А-номер (Низзя !).
Понятно что нельзя. Так вот, как бы насильно средствами Asterisk присвоить исключительно звонку на мобильный телефон дежурного существующий городской номер (конкретный А-номер стационарного телефона дежурного "3366000"), а при звонке на локальный телефон оставить А-номер звонящего абонента (Заявителя) неизменным ? Чтобы потом можно было в журнале заявок прописывать конкретный А-номер конкретного Заявителя.
внимательно перечитал описание команды Dial - что-то простая и понятная конструкция не рождается ...
Re: Как одному из абонентов подменить А-номер звонящего.
Добавлено: 21 янв 2015, 08:16
virus_net
Reader писал(а):при звонке на локальный телефон оставить А-номер звонящего абонента (Заявителя) неизменным ?
для этого вышестоящий оператор, через которого совершается этот вызов, должен позволять выставлять любой номер А.
Reader писал(а):При звонке в частности на мобильный телефон дежурного А-номер у дежурного отображается некий произвольный
так и будет, т.к. оператор туда подставит номер из своего пула, который как раз для таких случаев.
в данном случае максимум что вы можете сделать, это подставить в номер А свой же номер, на который вы и принимаете вызовы.
либо искать оператора, который позволит подменять номер А (например
tma)
Re: Как одному из абонентов подменить А-номер звонящего.
Добавлено: 21 янв 2015, 08:25
Reader
to virus_net:
По А-номеру при организации входящего звонка никаких проблем нет. Звонить на Local EXTEN дежурного может кто угодно откуда угодно. Хоть с городских,хоть с мобильных, хоть с Американии. С А-номером любой длины. Присоединяющий оператор все входящие пропускает прозрачно. Нет проблем.
А вот по исходящей связи Присоединяющий оператор позволяет мне вставлять в качестве А-номера только и только А-номера из ограниченного пула А-номеров, выделенных Минсвязью. Вот оччень бы хотелось в кач-ве А-номера прикрутить абоненту "3366000". Этот номер разрешён Присоединяемым и я уже так пробовал, и работает, но при создании одного единственного исходящего звонка. Типа
...............................
exten => 7160,3,Set(CALLERID(num)=3366000)
exten => 7160,4,Hangup()
Но это работает только когда Asterisk формирует 1 одновременный вызов на одну ответную позицию. А в моей задачке Asterisk должен позвонить 2м абонентам одновременно ... О как !
Re: Как одному из абонентов подменить А-номер звонящего.
Добавлено: 21 янв 2015, 08:38
virus_net
Reader писал(а):По А-номеру при организации входящего звонка
я про входящие речи и не вел, речь про исходящие
пример:
Код: Выделить всё
[CallMe]
exten => 6003,1,NoOp(Call to me)
exten => 6003,n,Dial(SIP/6003&SIP/6010&Local/6003-mob@CallMe,60,ti)
exten => 6003-mob,1,Wait(10)
exten => 6003-mob,n,Set(CALLERID(num)=XXXXXXXXXXX)
exten => 6003-mob,n,Macro(call2city,916XXXXXXX)
надеюсь сообразите как подправить под свои реалии.
Re: Как одному из абонентов подменить А-номер звонящего.
Добавлено: 21 янв 2015, 12:42
Reader
to virus_net:
Огромное спасибо за оперативный ответ.
Почти всё у меня заработало. Но с макросом я не разобрался. Я так понял, что это должен быть некий самописный макрос. Пока в теории макросов я слабоват - я заменил эту последнюю строку на строку System(call-script+call-file), где прописал и А-номер и длительность звонка и кол-во попыток вызова. И всё заработало как нужно ... Понятно, что скрипт и колл-файл также самопальные (мои). Зато работают чётко и практ. не грузят процессор. Макросы - конечно интереснейшая тема, но потребуется опять вагон времени чтобы разложить её по полочкам ... Увы, со временем полный швах.
Re: Как одному из абонентов подменить А-номер звонящего.
Добавлено: 21 янв 2015, 21:51
virus_net
да макрос то тут причем ? у меня там макрос, т.к. у меня там необходимые мне вещи при наборе мобилок сотрудников
в вашем случае, из вашего примера, там просто:
должно было быть
System тоже пойдет конечно, но смысл городить огород ?
Re: Как одному из абонентов подменить А-номер звонящего.
Добавлено: 22 янв 2015, 06:27
Reader
Спасибо за ответ.
Dial(DAHDI/g0/8922???????,60) вместо макроса я вчера пробовал. Работает. Да, Заявитель просил сделать ему дозвон на мобильник по-любому, чтобы не случилось такого, что он проходя через металлические ограждения (будучи изолирован от сигнала базовых станций сот. связи) не потерял звонок вследствии генерации PBX всего одного звонка. Я напихал в call-file целых 4 попытки. И уведомления перед каждой следующей для Звонящего шоб тот не отчаивался и подождал ещё чуток ... Но это я полагаю детали, касающиеся моего конкр. клиента. А с вашей идеей звонить на 6003-mob - для меня свежая идея, вставляет так сказать не слабо ... Так что спасибо. Основная задача решена. Детали буду допиливать по ходу читки описания команд ... Главное, клиента не потерял ... Конкурренция, знаете ли ...
Re: Как одному из абонентов подменить А-номер звонящего.
Добавлено: 22 янв 2015, 08:05
virus_net
идея не моя, на данном форуме таких идей море.
как пример.
P.S. Повтор набора номера можно и без call файла сделать, а прямо в dialplan`е.
- набор номера
проверка состояния вызова после
если не ANSWER, то goto в строку с dial
и так по кругу, но, чтобы набор не был бесконечным, ввести переменную, которую увеличивать с каждым "кругом" и когда она достигнет нужного кол-ва попыток произносить "ну не ШмОгла я, не ШмОгла" и вешать трубу.
Re: Как одному из абонентов подменить А-номер звонящего.
Добавлено: 22 янв 2015, 13:38
Reader
to virus_net:
Спасибо за новые идеи. Уже начинаю подумывать, что call-files - это действительно слишком тяжёлая артиллерия для 1го единственного хоть и моб. аб-та.
Уже даже подумываю достать из штанов относительно компактную функцию RetryDial (like that):
[vcon]
exten => 1,1,Voicemail(${BOX})
[mycon]
exten => _1XXX,1,SetVar(BOX=${EXTEN})
exten => _1XXX,2,RetryDial(please-wait|vcon|5|3:SIP/${BOX}|60|d)
exten => _1XXX,3,Playback(sorry-pal)
exten => _1XXX,4,Hangup
В файле записан анонс: "На данный момент я очень занят, нажмите 1 для того, чтобы оставить мне голосовое сообщение или дождитесь, пока я отвечу на Ваш звонок"
Так как, Вы добавили флаг 'd', то Вы можете набрать '1' даже если соединение с абонентом еще не установлено (происходит его вызов). Если Вы хотите, чтобы вызывающий абонент слушал музыку, вместо сигналов вызова, то также добавьте флаг 'm'.
В данном примере, вызов абонента будет производиться в течение 60 секунд, с промежутками ожидания в 5 секунд между попытками повторного вызова. Попытки повторного вызова будут совершаться три раза (для этого и описано: 5|3)
... Таки и без циклов, счётчиков, разбросанных по всему Астериску колл-файлов покатит быстрее ветра ... И проц особо не грузид. Всёж элегантнее ...
... Отдельно снимаю шляпу перед разработчиками Asterisk за многообразие подходов к решению ...
Re: Как одному из абонентов подменить А-номер звонящего.
Добавлено: 22 янв 2015, 20:28
virus_net
вот и тебе спасибо за RetryDial, ранее не встречал упоминаний и сам внимания не обращал.
как говорится "сто лет живи, сто лет учись"
P.S. Тока разделители в ф-ции это запятая, т.к. разделитель | деприкейтнут