Яндекс.Метрика

RealTime в Asterisk: архитектура и конфигурация

RealTime в Asterisk: архитектура и конфигурация с 5 октября по 9 октября

Количество
свободных мест

8 Записаться

Курсы по Mikrotik MTCNA

Курсы по Mikrotik MTCNA с 6 апреля по 10 апреля

Количество
свободных мест

1 Записаться

Курс по Zabbix

Zabbix: мониторинг Asterisk и VoIP с 7 сентября по 11 сентября

Количество
свободных мест

8 Записаться
Переадресация это не просто
71
Доклад
Евгений Телевич
Переадресация это не просто

Реализация переадресации вызовов в современных системах IP-телефонии на базе SIP-протокола и Asterisk часто воспринимается как рядовая задача, не требующая глубоких изысканий. Однако на практике технические специалисты постоянно натыкаются на подводные камни. Проблемы начинаются буквально с порога — с терминологической путаницы — и уходят глубоко в уровни работы протоколов, вопросы безопасности, сложности биллинга и удобство тех, кто этими телефонами пользуется каждый день. Чтобы построить действительно рабочую и логичную систему связи, нужно понимать, как эти механизмы крутятся «под капотом».

Путаница в терминах: что мы на самом деле настраиваем

Первая и самая большая сложность — это каша в понятиях. Когда нужно соединить двух абонентов, обычно говорят про три разные вещи: переадресацию, маршрутизацию и перевод вызова. В обычной жизни их часто путают, и если маршрутизацию с переадресацией еще можно различить по контексту (часто одно реализуют через другое), то с переводом вызова всё сложнее. Даже в английском языке слово forwarding может значить что угодно в зависимости от ситуации.

Интересный пример из практики колл-центров — термин «патчинг» (patching). Это специфический вид перевода, когда внешняя линия (например, аутсорс-оператор) соединяет важного клиента напрямую с владельцем бизнеса. Но если отбросить экзотику, основные отличия выглядят так:

  • Перевод вызова (Transfer): здесь всегда участвует человек. Он должен поднять трубку, ответить голосом, а уже потом нажать кнопку и перекинуть звонок дальше.
  • Переадресация (Forwarding): это автоматика. Она срабатывает сама, без участия абонента, прямо в момент прилета вызова. Обычно ее вешают на входящие звонки: если занято, если не отвечают или если просто включен безусловный режим.
  • Маршрутизация: это общие правила, по которым система решает, куда отправить звонок в принципе.

Важно четко понимать эти границы, когда вы обсуждаете ТЗ с заказчиком. Часто под фразой «сделайте мне переадресацию» скрывается сложный сценарий перевода с консультацией, и наоборот.

Где должна жить логика: телефон или сервер

Когда решение о переадресации принято, возникает вопрос: где именно настраивать правила? Варианта два: на самом SIP-аппарате или на стороне Asterisk. У каждого пути свои грабли.

Если отдать это на откуп телефону, то пользователи получают свободу. Они сами заходят в меню, нажимают кнопки и включают переадресацию на мобильный. Но для администратора это превращается в кошмар. Контролировать такие настройки централизованно почти невозможно. Более того, у многих вендоров (например, Yealink или Cisco) есть вечная беда с синхронизацией: настройки в веб-интерфейсе живут своей жизнью, а кнопки на панели — своей. В итоге на экране написано одно, а звонки улетают совсем в другую сторону.

Когда логика живет на сервере, всё становится прозрачным и управляемым. Можно городить любые сложные условия, привязываться к графику работы или статусу сотрудника в CRM. Единственный минус — пользователь не всегда видит на экране своего аппарата, что у него включен «форвард». Но это легко лечится: можно добавить короткое звуковое уведомление (playback) перед тем, как человек начнет набирать номер. Так он точно не забудет, что его звонки уходят коллеге. Для реализации таких серверных сценариев обычно требуется грамотная установка Asterisk, чтобы вся логика диалплана работала как часы.

Технические нюансы SIP и магия 302-го ответа

С точки зрения протокола SIP, когда телефон хочет переадресовать звонок, он не просто «перекладывает» его. Допустим, абонент А звонит абоненту Б, а у того стоит безусловная переадресация на номер С. Сервер шлет INVITE на телефон Б, а тот в ответ выдает сообщение 302 Moved Temporarily.

Что происходит в этот момент? Asterisk получает 302-ю ошибку, видит внутри заголовок с новым адресом (номером С) и начинает новый цикл. Он отправляет вызывающему абоненту А сообщение 181 Call Is Being Forwarded (мол, подожди, мы перенаправляем твой звонок) и инициирует новый вызов. Здесь важно помнить про опции приложения Dial:

  1. Опция i (маленькая): если вы ее добавите, Asterisk будет игнорировать любые попытки телефона сделать переадресацию через 302-й ответ. Телефон скажет «перенаправь», а сервер ответит «нет, занято».
  2. Опция I (большая): она нужна, чтобы скрыть от звонящего информацию о том, куда в итоге ушел звонок. Это вопрос приватности и корпоративной этики.
  3. Опция U: позволяет выполнить определенный подпрограммный код (gosub) в момент, когда переадресация уже случилась, но разговор еще не начался.

Разбираться во всех этих флагах и нюансах передачи сигнализации лучше всего на практике, для чего существуют профильные курсы по Asterisk, где эти сценарии разбираются буквально по косточкам.

Заголовок Diversion и переменные канала

Чтобы система понимала, кто и куда переадресовал звонок, используется заголовок Diversion. Это своего рода «паспорт» переадресации в SIP-пакете. Без него невозможно понять, почему звонок вообще пришел на номер С. В Asterisk для работы с этими данными есть несколько инструментов, но с ними нужно быть аккуратным.

Например, есть переменная ${FORWARDERNAME}. Она кажется очень удобной, чтобы выцепить номер того, кто сделал переадресацию. Но есть нюанс: эта переменная не живет вечно. Вы не сможете прочитать ее в хендлерах или в начале диалплана до того, как фактически произойдет вызов третьего плеча. Если вам нужно передать информацию о «переадресаторе» дальше (например, в CRM), придется использовать _ (одинарное подчеркивание) перед именем переменной, чтобы она наследовалась в дочерние каналы.

Также полезно знать про переменную forward_context. По умолчанию Asterisk ищет номер С в том же контексте, где находился номер Б. Но если вам нужно отправить переадресованный вызов по какому-то особому маршруту (например, запретить переадресацию на межгород), эта переменная позволит принудительно сменить контекст.

Проблемы с провайдерами и «петли» маршрутизации

Когда вызов выходит за пределы вашей АТС к оператору связи, начинаются настоящие танцы с бубном. Самая частая проблема — это когда звонок возвращается к вам же. Представьте: вызов пришел от провайдера, вы его переадресовали, и он через того же провайдера должен уйти на мобильный.

Тут возникают две беды:

  • Безопасность: Asterisk может увидеть «чужой» CallerID на своем транке и решить, что это попытка взлома. Чтобы этого не происходило, часто используют параметр insecurity=invite.
  • Блокировки оператора: многие провайдеры просто не пропускают вызовы, если видят внутри заголовок Diversion или если CallerID не совпадает с вашим реальным номером.

Чтобы обойти эти грабли, иногда приходится принудительно вырезать заголовок Diversion из SIP-пакета перед отправкой вызова в мир. Или, наоборот, подменять CallerID на свой городской, теряя при этом информацию о том, кто звонил изначально. Чтобы такие схемы не превратились в дыру в безопасности, требуется вдумчивое проектирование и настройка сети на всех этапах прохождения трафика.

Экономика и безопасность: почему переадресация — риск

Переадресация — это любимая лазейка для мошенников (toll fraud). Если у сотрудника на телефоне стоит простой пароль, злоумышленник может зайти в веб-интерфейс, поставить безусловную переадресацию на какую-нибудь Кубу или спутниковый номер и оставить компанию с огромным счетом. Поэтому Защита IP-ATC должна включать в себя жесткие лимиты на переадресацию.

В плане тарификации тоже всё не слава богу. Стандартные CDR (записи о вызовах) в Asterisk часто «сходят с ума», когда звонок переадресовывается. Сложно понять, на кого вешать расходы: на того, кто звонил, или на того, кто поставил «форвард»? Самый честный способ — считать деньги, опираясь на данные из заголовка Diversion. Тот, кто инициировал пересылку вызова, тот за нее и платит. Но для этого нужно уметь правильно парсить заголовки, учитывая, что при цепочке переадресаций они могут дублироваться и накапливаться.

Для предотвращения подобных ситуаций и поиска узких мест рекомендуется проводить регулярный аудит IP-ATC, который покажет, нет ли в системе «левых» пересылок и несанкционированных маршрутов.

Удобство пользователя: BLF и XML-события

Техника — это хорошо, но человеку на другом конце провода должно быть удобно. Как понять, что у коллеги включена переадресация?

  1. Индикация BLF (Busy Lamp Field): можно настроить кнопку на телефоне так, чтобы она горела красным, когда включен «форвард». Это реализуется через hints в диалплане Asterisk.
  2. XML Events: более продвинутая штука, которая позволяет синхронизировать состояние. Вы нажали кнопку на телефоне — на сервере изменился статус. Изменили статус в веб-панели — на телефоне загорелась лампочка. Это круто, но опасно: кривая реализация XML-событий у некоторых вендоров может привести к тому, что телефон уйдет в бесконечный цикл перезагрузки при получении пакета.

Для крупных компаний хорошим тоном считается использование сторонних уведомлений. Например, пришел звонок — сотруднику в мессенджер падает пуш: «Вам звонили с такого-то номера, сработала переадресация». Это снимает массу вопросов и делает работу со связью намного прозрачнее. Подобная защита IP-ATC и мониторинг помогают держать систему под контролем 24/7.

 

Заключение

Переадресация не равно просто «перекинуть звонок». Это сложный процесс, завязанный на логику SIP-ответов, манипуляции с заголовками и правила безопасности. Чтобы она работала и не приносила убытков, лучше всего:

  • Держать всю логику на сервере, а не на телефонах.
  • Всегда проверять, как ваши провайдеры относятся к заголовку Diversion.
  • Настраивать детальное логирование и мониторинг через BLF или внешние системы.
  • Не забывать про безопасность: ограничивать направления переадресации и следить за правами пользователей.

Только при таком подходе система телефонии будет помогать бизнесу, а не создавать новые проблемы для техподдержки.

Ежегодная конференция по Asterisk 2026!

Билеты уже в продаже!

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

Наши
клиенты

Посмотреть все