- PVSM.RU - https://www.pvsm.ru -
Всем доброго времени суток!
В данной статье хочу описать свой вариант реализации некоторого функционала, реализованного на моем Asterisk-сервере.
Описано:
— вариант реализации переадресации на мобильные, используя двухканальный SIP-GSM шлюз и многоканальный Мультифон;
— SMS-уведомление абонента посредством бесплатной услуги email2sms;
— реализация «прямого» входа в общий внутренний план нумерации для мобильного абонента программным (для Android) и аппаратным (SIM-Dialer для обычных мобильников) способами.
Подробности под катом.
Не претендую на идеальность представляемого сообществу кода, выкладываю «как есть». Буду рад, если кому-либо пригодятся мои наработки.
В нашей организации ведомственная телефонная сеть преимущественно построена на Si2000 и только у нас используется DX-500.
Для стыка «моего» IP-сервера с «моей» АТС (DX-500) используется Quasar-M (PCI-шина) на один поток PRI E1. Внутренняя нумерация в пределах предприятия преимущественно пятизначная: 2хххх — 5хххх. В «моем» филиале (на моей DX-500) выделены и используются номера 54ххх. Весь сегмент 55ххх у меня уходит на Asterisk.
Переадресацию абоненты устанавливают и снимают сами -112 55ххх. Нумерация прозрачная — номеру 54705 на DX соответствует 55705 на Asterisk.
Asterisk, получая из потока Е1 входящий на «виртуальный» номер вида 55xxx, проверяет его базе transfer и в случае наличия осуществляет исходящий вызов на соответствующий мобильный.
У меня в системе используется «железный» GSM-шлюз — каналы 1 и 2, аккаунт мультифона прикручен каналом номер 3.
Исходящие идут по свободному каналу. Приоритеты заданы условиями в диалплане 1->2->3. Создана отдельная база GSM-Channels — в ней я иногда выключаю какой-либо канал по мере необходимости.
exten => s,n,NoOP(«USLOVIE CHANNEL 2»)
exten => s,n(dial_ch2),GotoIf($["${DB(GSM-Channels/GSM-Channel-2_status)}" = «off»]?dial_ch3); проверяем включен ли канал
; в базе данных GSM-Channels
exten => s,n,Dial(${GSM-Channel-2}/01${ARG1},30,gmt); Звоним через 2-й GSM-канал — 0117
exten => s,n,Set(Call_Dial_status=${DIALSTATUS}); передаем результат вызова для анализа
exten => s,n,Noop(«Dialstatus is — ${Call_Dial_status}»)
exten => s,n,GotoIf($["${Call_Dial_status}" = «BUSY»]?sms); если абонент занят или отбил звонок
exten => s,n,GotoIf($["${Call_Dial_status}" = «CANCEL»]?sms); если нет — продолжаем
exten => s,n,GotoIf($["${Call_Dial_status}" = «CONGESTION»]?sms); если нет — продолжаем
exten => s,n,GotoIf($["${Call_Dial_status}" = «NOANSWER»]?sms); если нет — продолжаем
exten => s,n,GotoIf($["${Call_Dial_status}" = «ANSWER»]?complete_call); если нет — продолжаем
…
3-й канал — «многоканальный» мультифон, ограничен лишь опцией call-limit в sip.conf.
Увы, через GSM-шлюзы и мультифон мы не можем подменять CallerID и абонент видит входящий с номера сим-карты установленной в шлюзе — он не знает кто ему звонит. В случае его не ответа (либо принудительного отбоя входящего вызова), абоненту отправляется SMS-уведомление с номером звонившего(и временем звонка).
Наш Asterisk отправляет сформированное специальным образом e-mail письмо на почтовый ящик мобильного абонента. В итоге мобильный абонент получает текст письма в виде SMS. Реализованная функция совершенно бесплатна и работает без ощутимых задержек.
Лично для меня весьма накладно отсылать обычные SMS-ки с GSM-модема, но может быть с подключенным пакетом SMS кто-то решит поступить именно так с целью изолированности Asteriska от «внешних воздействий».
exten => s,n(sms),Background(busy_now); «Аппарат абонента занят.»
exten => s,n, System(rm /my_scripts/sms/sendfile_mail${ARG1})
exten => s,n, System(touch /my_scripts/sms/sendfile_mail${ARG1})
exten => s,n, System(chmod 777 -R /my_scripts/sms/sendfile_mail${ARG1})
exten => s,n, System(echo «Subject: 'HOMEP — ${ARG2}'» >>/my_scripts/sms/sendfile_mail${ARG1})
exten => s,n, System(echo «Mime-Version: 1.0» >>/my_scripts/sms/sendfile_mail${ARG1})
exten => s,n, System(echo «Content-Type: text/plain; charset=»UTF-8"" >>/my_scripts/sms/sendfile_mail${ARG1})
exten => s,n, System(echo «Content-Transfer-Encoding: 8bit» >>/my_scripts/sms/sendfile_mail${ARG1})
exten => s,n, System(echo "" >>/my_scripts/sms/sendfile_mail${ARG1})
exten => s,n, System(echo "${STRFTIME(${EPOCH},,%d.%m.-%H:%M:)}" >>/my_scripts/sms/sendfile_mail${ARG1})
exten => s,n, System(echo "" >>/my_scripts/sms/sendfile_mail${ARG1})
exten => s,n, System(echo "." >>/my_scripts/sms/sendfile_mail${ARG1})
exten => s,n, System(echo "" >>/my_scripts/sms/sendfile_mail${ARG1})
exten => s,n, System(cat /my_scripts/sms/sendfile_mail${ARG1} |sendmail -f XXxxXX@mail.ru -t ${ARG1}sms [1].ugsm.ru)
exten => s,n, NoOp(«SMS to ${ARG1} from number ${Dest_number} sent now.»)
exten => s,n,Background(sms_sended); «Ему отправлено смс с вашим номером.»
exten => s,n, Hangup()
…
Идем дальше.
Для полного отказа от развернутого решения Информтехники — DECT-трубок (и расставленных по территории промплощадки базовых станций), как от отжившего себя атавизма, сделано еще кое-что.
«Мои» мобильные абоненты делятся по оснащенности на две условные категории: Android-пользователи и пользователи обычных древних мобильников (обычно руководство в возрасте). Все они используют корпоративный тариф, где все внутрикорпоративные звонки бесплатны/безлимитны.
Мультифоновский аккаунт, благодаря своей многоканальности, прекрасно работает на входящую связь.
У Android-пользователей используется приложение Prefixer(найдете в маркете [2] — не реклама). Для исходящих во внутренную ведомственную сеть по привычным номерам достаточно одного правила:
When number matches — [2-5].* — правилом обрабатываются все номера начинающиеся с 2,3,4,5.
Add prefix: 8922xxxXXxx,,, — мультифоновский аккаунт сервера Asterisk, три запятые — это пауза в три секунды после соединения (в это время DISA сервера Asterisk радостно приветствует позвонившего).
Таким образом, когда мобильный абонент набирает на своем мобильном привычный ему номер 54705, приложение перехватывает управление вызовом, набирает определенный в правиле префикс (номер мультифоновского аккаунта), выжидает паузу в три секунды для пропуска голосового приветствия и набирает в канал цифры 5 4 7 0 5 с помощью DTMF.
В ближайшее время поправлю диалплан касаемо DISA на проверку CallerID входящего звонка в базе transfer — не зачем каждый раз слушать голосовое приветствие и просьбу набрать добавочный номер абонентам у которых настроен Prefixer — пусть сразу номер донабирается.
Вторая категория абонентов в силу некоторых причин до сих пор использует обычные мобильники. Для них заказаны с Китая интересные девайсы — SIM-Dialer. Они представляют собой этакую «подкладку» под SIM-карту, настраиваются абсолютно просто и обеспечивают функционал аналогичный Prefixer-у. Цена вопроса на момент заказа 4,5-5 USD за шт.
Таким образом, мои мобильные абоненты имеют удобные (для себя) и бесплатные (для бюджета предприятия) звонки во внутреннюю учрежденческую сеть.
Автор: b_aalexx
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/telefoniya/74392
Ссылки в тексте:
[1] sms: http://habrahabr.ru/users/sms/
[2] в маркете: https://play.google.com/store/apps/details?id=com.tftbelow.prefixer
[3] toster.ru/answer?answer_id=418483: http://toster.ru/answer?answer_id=418483
[4] Источник: http://habrahabr.ru/post/243139/
Нажмите здесь для печати.