asterisk переадресация на внутренний номер
Переадресация вызовов в Asterisk
Приведу пример настройки переадресации вызовов в Asterisk.
К примеру на IP-телефонах Grandstream можно включить переадресацию функциями самого телефона, но если телефон находится далеко и нет возможности на нем этого сделать, а есть возможность залогинится под SIP номером этого телефона, то для активации переадресации можно сделать голосовое меню при наборе определенного номера, например *21 для активации переадресации и ввода номера телефона на который будут переадресованы звонки, а *22 для отмены переадресации.
В файле /etc/asterisk/extensions.conf я сначала описал эти два коротких номера для активации и отмены переадресации:
Если позвонить на номер *21 и ввести номер на который нужно переадресовать звонки, то этот номер просто сохранится в базе данных Asterisk (AstDB), если набрать *22, то этот номер удалится из базы данных.
В этом же файле у меня был диалплан для локального номера 207:
Который я изменил к следующему виду, а именно добавил проверку есть ли номер в базе и если есть то выполнять переадресацию на него, если номера нет — то звонить как обычно на локальный номер:
Goip4/1 это у меня шлюз с SIM картами, цифра 1 означает что звонить нужно через первую SIM карту, если первая SIM карта уже занята другим звонком, то чтобы точно дозвонится можно указать несколько шлюзов, например:
Это всего лишь простой пример переадресации, который я быстро написал когда понадобилось часто дистанционно включать переадресацию, еще желательно записать и указать правильные звуки для номеров *21 и *22, а также можно сделать условную переадресацию, например когда вызываемый номер не отвечает 10 секунд и т.д.
Посмотреть данные в базе AstDB можно командой:
Сервисные коды custom переадресаций
В данной статье рассмотрим реализацию своих переадресаций, помимо стандартных переадресаций, существующих во FreePBX. Ниже приведу список рассматриваемых переадресаций: Безусловная переадресация на внутренний номер, Безусловная переадресация на мобильный номер, Параллельная переадресация на мобильный номер, Безусловная переадресация на группу (очередь), А также рассмотрим сервисный код по включению/выключению записей на внутреннем номере. Поскольку во время переадресации через сервисный […]
В данной статье рассмотрим реализацию своих переадресаций, помимо стандартных переадресаций, существующих во FreePBX.
Ниже приведу список рассматриваемых переадресаций:
Поскольку во время переадресации через сервисный код во FreePBX, на внутреннем номере устанавливается статус Busy, необходимо переделать встроенный во FreePBX контекст установки/снятия переадресации, который мы можем найти в extensions_additional.conf.
Ниже прописываем контексты, полученные из additional, с некоторыми изменениями.
И начинаем прописывать сервисные коды:
Также сервисный снятия безусловной переадресации на группу:
И сервисный код отключения всех переадресаций:
В зависимости от типа переадресации отправляем на свое голосовое сообщение в контексте
Однако это еще не все, если безусловные переадресации основываются на переадресации FreePBX, то параллельная переадресация работает несколько иначе, следовательно, для нее необходимо переделать вызовы на внутренние номера, через macro-dial-one.
В самом макросе необходимо изменить строку с dial, заменив ее на следующее:
Соответственно в данном примере переадресация параллельного мобильного номера срабатывает по всем исходящим маршрутам, чтобы это изменить можно изменить строку dial (например вносить ее в базу переадресации).
Сначала отобразим запись в БД для определенного номера:
Нас интересуют пункты: /recording/, в частности in/out internal/external, соответственно входящие внутренние/внешние, исходящие внутренние/внешние. Чтобы отключить запись на внутреннем номере полностью, они должны быть в значении never (поскольку dontcare все равно зависит от предыдущего канала), для включения всех записей соответственно в force.
Установка будет выглядеть следующим образом:
Для применения этих настроек перезагружать конфигурации не нужно. Также перед вызовом обязательно нужна проверка, существует ли данный внутренний номер на АТС или нет, поскольку запись произойдет в базу в любом случае.
Остались вопросы?
категории
VoIP оборудование
Fanvil X3S
3 900 руб
Fanvil X3S
2 990 руб
Fanvil X3S
2 990 руб
Fanvil X3S
2 990 руб
Fanvil X3S
2 990 руб
Fanvil X3S
2 990 руб
ближайшие курсы
Курсы по Asterisk
последняя неделя
каждого месяца
Новые статьи
Zulu – обзор, установка
Ограничение вызовов на определенные группы внутренних номеров. Разграничение для различных звонящих. Использование AstDB, сервисные коды добавления запретов/разрешений
Провиженинг софтфона Zoiper
ближайшие Вебинары
LTE-интернет на роутерах Mikrotik SXT LTE. Особенности, плюсы и минусы.
Инструменты troubleshooting сети на MikroTik
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.
Подпишийтесь и получайте
только свежие новости и материалы
Перевод звонка с помощью скрипта в Asterisk
Не так давно у одного из наших клиентов возникла необходимость переводить звонки (входящие и исходящие) по клику из браузера. Логика такова: группа операторов колл-центра принимает и осуществляет звонки, и после разговора и выяснения потребностей им нужно соединить клиента с одним из заказчиков или другим специалистом организации.
Казалось бы, оператор может перевести звонок классическим способом — “слепым” переводом на нужный номер со своего телефонного аппарата или софтфона, но на деле оказалось, что номеров, на которые требуется осуществлять перевод, более пяти сотен и они постоянно добавляются и меняются, так что даже централизованное автоматическое заполнение телефонной книги софтфона не дает возможности комфортной и быстрой работы операторов: сначала нужно выяснить потребность клиента, потом найти в CRM номер, с которым его требуется соединить, затем или вручную ввести номер, или найти тот же номер в телефонной книге софтфона. Это приводит к нерациональному использованию рабочего времени операторов, высокой вероятности ошибки при переводе и снижению качества обслуживания клиентов в целом.
В некоторых случаях подобную задачу решают следующим образом: по событию в CRM в некую базу данных заносится номер оператора, и номер, с которым нужно соединить его собеседника. После этого оператор осуществляет перевод звонка на служебный номер, в контексте перевода осуществляется запрос к базе данных и звонок наконец переводится на нужный номер. Диалплан для исходящих в таком случае выглядит примерно так:
При исходящем звонке устанавливается переменная канала TRANSFER_CONTEXT, которая переопределяет контекст для перевода звонков, и если звонок будет переведен на номер 800, используя ODBC, мы получаем номер, на который нужно на самом деле осуществить перевод. Однако, до самого перевода в соответствующие поля таблицы должно быть занесено однозначное соответствие внутреннего номера оператора и номера, на который именно сейчас нужно переводить звонок, что требует как минимум одного лишнего действия со стороны работника (в CRM ему требуется выбрать номер, куда он хочет перевести звонок, а потом на телефоне или софтфоне выполнить сам перевод), да еще и нужно следить за тем, чтобы данные в таблице были верны: удалять запись сразу после перевода, проверять и обрабатывать в диалплане пустые записи.
При всех недостатках подобный метод можно применять в том случае, если заранее известно, на какой номер может потребоваться перевести звонок. Предположим, колл-центр работает на исходящие звонки по клиентам нескольких заказчиков. Звонок формируется автоматически из CRM(с использованием callfile или через originate в AMI), где оператор нажимает кнопку “следующий звонок” и видит скрипт разговора с клиентом. Тогда можно просто добавить наследуемую переменную с номером, и переводить звонок на него:
В callfile добавить наследуемую переменную __num:
Channel: Local/101@from-internal
Callerid: 74950000000
MaxRetries: 2
RetryTime: 600
WaitTime: 30
Context: from-internal
Extension: 74950000000
Priority: 1
Set: __num=79991112233
А контекст перевода будет выглядеть еще проще:
Однако, в нашем случае, как было сказано выше, такой метод применять нежелательно.
К счастью, разработчики asterisk позаботились о нас, и через cli можно осуществить перевод определенного канала в заданный контекст:
Аналогичный функционал есть и в AMI:
Action: Redirect
[ActionID:] value
Channel: value
[ExtraChannel:] value
Exten: value
[ExtraExten:] value
Context: value
[ExtraContext:] value
Priority: value
[ExtraPriority:] value>
Остался только один вопрос: как определить канал, который нам нужно перевести, ведь мы знаем только номер оператора.
Нужно понимать, что обычный разговор есть соединение двух каналов. В консоли мы можем выполнить bridge show all и увидеть все идентификаторы соединений.
> bridge show all
Bridge-ID Chans Type Technology
14418b64-0635-46e7-bd48-f4b820461eaa 2 basic simple_bridge
А командой bridge show
посмотреть информацию о том, какие именно каналы участвуют в соединении.
Понятно, что перебирать все bridge-id в поисках нужного канала неудобно, и проще получить подробную информацию о каналах и найти в выдаче bridge-id, на основании которого можно будет идентифицировать нужный нам канал:
> core show channels concise
SIP/RT-00000453!incoming!!1!Up!AppDial!(Outgoing Line)!89063448810. 3!134!14418b64-0635-46e7-bd48-f4b820461eaa!1479984681.1659
SIP/67-00000452!macro-dialout-trunk!s!23!Up!Dial!SIP/RT/89063448810,300,TtL(7200000)!67. 3!134!14418b64-0635-46e7-bd48-f4b820461eaa!1479984681.1658
Мы видим, что на текущий момент у нас есть 2 канала с одинаковым bridge-id(14418b64-0635-46e7-bd48-f4b820461eaa), и мы знаем внутренний номер оператора. Остается только получить имя второго канала и осуществить перевод. Рассмотрим пример bash-скрипта, который реализует нужный функционал (протестировано на FreePBX 13):
Что же мы получили в итоге? Возможность перевода звонка оператора по одному клику без необходимости использования баз данных и дополнительных действий со стороны работника, не используя готовые CRM и модули для работы с asterisk для них. При этом, скрипт одинаково работает как с входящими, так и с исходящими вызовами.
Подобная реализация будет полезна для аутсорс-колл-центров, справочных и иных служб, где требуется быстро переводить звонки на большое число номеров, а также может применяться для облегчения труда секретаря в крупной организации.
Включение и отключение переадресации по звонку
Часто происходит так, что уйдя с работы мы забываем включить переадресацию на мобильный либо на какой либо другой номер, а рядом с рабочим местом никого нет. В таком случае вам может быть полезен функционал включения/выключения переадресации по звонку.
Для этого нам понадобится настроить все аналогично включения/отключения DND по звонку. То есть нам понадобится создать список паролей для внутренних номеров, ИВР для ввода внутреннего номера и контексты для обработки.
Следует помнить что открывать внешний номер для всех звонков можно только если вы уверены что его никто не знает, ведь даже с защитой по паролю люди все равно будут звонить, к тому же номер может быть использован для других нужд, в таком случае нужно создавать маршрут по приоритету CID, для мобильных сотрудников.
В отличие от DND тут нам так же понадобится вводить номер для переадресации (если включаем).
Для тестов использовалась АТС с Asterisk 11 & FreePBX 12.
Для включения и выключения будем использовать стандартные контексты FreePBX: app-cf-on & app-cf-off, предварительно изменив их. Изменить нужно будет название (поскольку именно их будем использовать только для данного функционала). Назовем, например, app-cf-outbound-on & app-cf-outbound-off.
Контексты можно найти в файле extensions_additional.conf, копируем их в extensions_custom.conf и изменяем название и extension.
Маска _XXX предназначена для 3х значных номеров, если у вас иной номерной план следует это учесть, но можно и указать более общую маску.
Для ввода пароля воспользуемся аналогичным DND механизмом:
[ivr-9]
exten => _XXX,1,Set(pass=$
same => n,Authenticate($
same => n,Set(num=$
same => n,Read(toggle,ru/custom/hello-test,1)
same => n,GotoIf($[«$
same => n,GotoIf($[«$
same => n,Playback(beep)
same => n,Macro(hangupcall,)
Соответственно ivr-9 должна быть создана, аналогично той что для DND.
Примечание! Номер ИВР можно узнать через веб-интерфейс, он будет подписан как id в адресной строке при открытии нужного голосового меню.
Пароль для внутренних номеров так же получаем из базы, можно использовать ту же базу что и для DND, а можно создать новую.
Применяем изменения диалплана:
Asterisk –rx ‘dialplan reload’
И можем тестировать.
Для управления паролями будем использовать web-форму.
Для основы используем форму управления DND из прошлой статьи (Управление DND через web).
Оттуда возьмем вывод всех операторов и их текущие пароли:
Данный скрипт помещаем как обычно в веб-директорию и даем ему пользователя asterisk.
Создание переадресаций по расписанию
Многие используют переадресации на мобильные или стационарные телефоны, возможно еще на автоответчик. Однако иногда требуется создать не абсолютную переадресацию, а переадресацию по времени. Например переадресация по пятницам. Для реализации используем запись расписания в базу данных, в которой будем указывать номер на котором необходимо включать переадресацию, время в которое она должна работать и номер на который […]
Многие используют переадресации на мобильные или стационарные телефоны, возможно еще на автоответчик. Однако иногда требуется создать не абсолютную переадресацию, а переадресацию по времени. Например переадресация по пятницам.
Для реализации используем запись расписания в базу данных, в которой будем указывать номер на котором необходимо включать переадресацию, время в которое она должна работать и номер на который переадресовывать вызов.
Пример заполнения даты и времени можно посмотреть в базе asterisk, таблице timegroups_details.
Соответственно необходимо создать свою таблицу с необходимыми полями:
Для создания расписания необходимо реализовать веб-интерфейс управления, для достпа к нему создадим виртуальный хост в конфигах apache.
В корне указанной директории создаем файл index.php, который будет стартовой страницей.
На странице создаем поля ввода номеров и интервала дней месяца, недели и времени, которые должны быть обязательно заполнены (required).
Предварительная форма ввода
Реализуем обработчик нажатия (для теста можно вывести все, что отправляется через POST запрос:
Сам обработчик дополним проверкой совпадений введенных значений и пустых значений:
Как видно из базовой таблицы freepbx нам необходимо указывать дату и время в определенном формате. Выведем в необходимом виде, чтобы проверить правильность заполнения:
Проверка вывода информации
Пишем и проверяем заполнение базы данных.
Помимо ввода данных, необходимо отображение текущего расписания, добавим его, а также возможность удалять записи. Добавлять будем отдельной страницей:
Вывод списка текущих переадресаций, добавим обработчик удаления из списка и конпку возврата на страницу добавления:
При вызове на указанный номер проверяется наличие записи для вызываемого номера в базе, при нахождении проверяется время и при совпадении выполняется переадресация, если же совпадения по какому либо пункту нет, вызов осуществляется в обычном режиме.
Соответственно сами функции:
Проверяем добавление и переадресации:
Проверка