IP-телефония на базе Asterisk
Введите свой номер телефона
и мы перезвоним вам
Решаем Ваши бизнес-задачи с помощью IT-технологий. Знаем, как сделать лучше, быстрее и дешевле. Наш опыт – на службе Вашего бизнеса.
Не все герои носят плащи. Сотни техических статей, написанных инженерами нашей компании. Делимся опытом и своими знаниями со всем сообществом.
Сотни функций и возможностей Asterisk помогут вывести коммуникации в Вашей компании на принципиально новый уровень. Технические ограничения – фантазия Заказчика.
Вы платите за систему, которая будет полностью соответствовать Вашим ожиданиям, требованиям и будет драйвером роста Вашего бизнеса
Идти в ногу со временем или оставаться на старых технологиях? Такой вопрос не стоит перед нашими клиентами. Решаем самые смелые задачи для Колл-Центров. Строим с нуля или работаем с существующими.
Поместите свой бизнес в эпицентр продаж. Интеграция IP-телефонии и CRM даст новый и мощный импульс Вашему Отделу Продаж и выведет компанию на три шага впереди конкурентов.
Подбираем для клиентов такие тарифы, которые ему редко получится найти на рынке самостоятельно. Работаем с 100+ операторов связи в интересах клиента.
Разработки, созданные нашей командой под запросы клиентов. Не отказывайтесь от инноваций. Мы поможем идти с ногу со временем.
Умные всю жизнь учатся, а остальные всегда все и так знают. Мы проводим обучение более 8 лет и выпустили более 1000 специалистов по Asterisk и Mikrotik. Проводим ежегодную конференцию Asterisk.
Купить наш опыт дешевле, чем набивать свои шишки. Мы реализовали более 800 проектов и накопили экспертизу для того, чтобы идеально выполнить Ваш проект.
Правильный выбор оборудования позволяет сэкономить от 20 до 50% бюджета телефонии. Мы предельно внимательно подойдем к выбору «железа» в Ваш проект.
Наши цены доступны не только для Москвы, но и для регионов. А вложения в нашу экспертизу обычно окупаются за несколько месяцев.
Работаем с 2011 года. Собрали отличную команду реальных фанатов своего дела. Подходим к работе с душой и ответственностью.
На практике работы с платформой Asterisk возникает множество нестандартных ситуаций при работе с переменными в Dialplan. Некоторые из них могут быть ошибочными с архитектурной точки зрения, другие — устаревшими. В ходе работы вырабатываются корректные и устойчивые подходы, которыми и стоит поделиться.
Одна из типичных задач — передача переменных между каналами. Это особенно актуально при работе с Dialplan, когда создаётся несколько каналов, и необходимо передавать переменные от одного канала к другому.
С самого начала Asterisk поддерживает определённые механизмы для этого. Однако понимание синтаксиса и логики их работы часто вызывает затруднения, особенно у инженеров, впервые сталкивающихся с такими задачами. Например, вопросы вызывают различия между одной и двумя подчёркиваниями в именах переменных.
Согласно внутренней логике Asterisk:
Эта логика реализована в коде Asterisk и встречается во множестве функций. Внутри функции создания канала производится выбор переменных: _ удаляется, __ остаётся. Это позволяет обеспечить корректную передачу переменных между локальными каналами.
Если переменные были переданы от одного канала к другому, возникает следующая задача — вернуть обратно результаты (например, статус вызова, продолжительность и т.п.). Здесь появляется функция MASTER_CHANNEL.
Эта функция находит канал с тем же linkedid, что и текущий, и выбирает самый «старый» из них. Однако при сложных сценариях следует учитывать, что канал, породивший другие, может уже завершить своё существование. Тогда обращение через MASTER_CHANNEL может привести к другому, более «живому» каналу, имеющему тот же linkedid.
Важно понимать, что MASTER_CHANNEL не ищет «родителя» в дереве каналов, а просто находит первый канал с совпадающим linkedid. Это касается и случаев, когда каналы были разделены (например, через transfer).
MASTER_CHANNEL работает также при инициировании вызова через AMI Originate. В этом случае создаются два независимых канала, но у них один linkedid, что позволяет использовать один из них как хранилище общих переменных.
Для передачи переменных между независимыми каналами можно использовать функции IMPORT и EXPORT. Эти функции позволяют работать с переменными канала, зная его полное имя.
Пример использования: в конференц-сценарии канал A запускает каналы B и C. Необходимо, чтобы B и C знали общие переменные из A. Сначала через EXPORT переменные задаются в A, затем в B и C импортируются через IMPORT. Таким образом, переменные сохраняются в пространстве канала A.
Функции работают и с другими функциями Asterisk — можно, например, вызывать RTPSTAT или другие, если требуется получить данные другого канала.
При работе с несколькими серверами (например, продукт типа спикет-антибот), переменные приходится передавать между серверами.
Передача в прямом направлении возможна через SIP-заголовки. Заголовки задаются в INVITE
при создании канала и передаются в SIP. Однако они добавляются только на этапе инициации вызова.
Для передачи данных обратно (например, при завершении вызова), не всегда возможно пересоздать вызов. В таких случаях можно использовать функцию CONNECTEDLINE
. Она отправляет reINVITE
с нужными заголовками и может быть использована для записи статистики или других параметров в CDR.
Другой способ — завершить вызов и инициировать новый, передавая параметры в номере. Например, затрансферить звонок обратно на исходный сервер с параметрами, закодированными в exten
.
Нередко используется AStDB как способ хранения переменных. Это внутреннее хранилище Asterisk, но оно не предназначено для частого чтения и записи. При высоких нагрузках возможны задержки и отсутствие логов об ошибках. Рекомендуется использовать ODBC-хранилище, если необходима работа с базой данных.
Вместо AStDB можно использовать MASTER_CHANNEL
, передавая переменные с уникальными идентификаторами.
Также встречается использование функции SHARED
. Она создаёт отдельное хранилище переменных, прикреплённое к каналу, но работает нестабильно. В документации прямо говорится о возможных состояниях гонки и отсутствии гарантий, в какой канал переменная будет установлена. Функция может использовать префикс вместо имени канала, что делает поведение непредсказуемым.
Если всё же используется SHARED
, крайне рекомендуется применять LOCK/UNLOCK
для управления доступом к переменным.
Работа с переменными в Asterisk требует аккуратного подхода. Использование нативных средств — __, MASTER_CHANNEL, IMPORT/EXPORT, CONNECTEDLINE — позволяет решать большинство задач без привлечения внешних механизмов.
При проектировании систем на Asterisk важно отдавать предпочтение прозрачным и управляемым средствам передачи переменных, избегая неочевидных или устаревших решений.
Билеты уже в продаже!
Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.