Как использовать виртуальный номер в умном доме: звоним и управляем голосом через SIP

Представьте ситуацию: вы лежите на диване, заняты делами или просто не хотите искать телефон, и говорите «Алиса, включи свет на кухне». А теперь добавьте к этому возможность в тот же голосовой сценарий встроить звонок — например, на городскую поликлинику или домофон в загородном доме. Звучит фантастично? На самом деле, связка «виртуальный номер + SIP + умный дом» уже работает, и это проще, чем кажется. Ниже — практический разбор без теории, только то, что нужно, чтобы собрать такую систему и пользоваться ею.

Зачем вообще заморачиваться с виртуальным номером

Обычный мобильный номер жёстко привязан к SIM-карте и физическому устройству. Виртуальный номер существует в облаке — это просто логический адрес, который можно привязать к любому SIP-клиенту, маршрутизировать куда угодно и комбинировать с голосовыми сценариями.

В контексте умного дома это даёт три конкретных преимущества:

  • Единая точка входа для внешних звонков. Городской номер или номер 8-800 можно направить прямо на SIP-клиент внутри умного дома, и тот будет обрабатывать вызов по вашим правилам.
  • Интеграция с голосовыми ассистентами. Вы можете связать входящий вызов с автоматическим сценарием — например, при звонке на виртуальный номер умный дом открывает дверь или включает камеру с изображением на телевизор.
  • Гибкая маршрутизация. Позвонили в домофон — звук пошёл на колонку в спальне. Позвонили на запасной номер — переадресация на мобильный телефон, если вас нет дома.

SIP: что это и почему именно он

SIP (Session Initiation Protocol) — это протокол, через который устанавливается голосовая или видео-сессия между двумя точками. Когда говорят «SIP-телефония», имеют в виду именно способ соединения, а не конкретного оператора.

Для умного дома SIP удобен тем, что:

  • Это открытый стандарт — не привязываетесь к одному вендору.
  • Работает поверх обычного интернета — не нужны выделенные телефонные линии.
  • Поддерживается большинством платформ: Asterisk, FreeSWITCH, 3CX, а также множеством бытовых устройств — от SIP-домофонов до умных колонок с поддержкой телефонии.
  • Легко программируется — можно писать скрипты обработки вызовов и привязывать их к событиям умного дома.

Как выглядит схема на практике

Разберём реальную задачу: у вас загородный дом с домофоном, который умеет звонить по SIP. Вы хотите, чтобы при нажатии кнопки на домофоне звук шёл на умную колонку в гостиной, а если вас нет дома — вызов переадресовывался на мобильный телефон.

Схема будет такой:

  1. Виртуальный номер — подключается у SIP-провайдера. Это ваш внешний адрес, на который звонит домофон.
  2. SIP-сервер (Asterisk, FreeSWITCH или облачный PBX) — принимает вызов и выполняет скрипт обработки.
  3. Умный дом — получает команду от SIP-сервера и запускает нужный сценарий (вывод звука на колонку, включение камеры, открытие двери).
  4. Мобильный телефон — получает вызов, если умный дом не ответил в течение заданного времени.

Что понадобится для настройки

Вот минимальный набор компонентов, без которых система не заработает:

  • SIP-провайдер, дающий виртуальный номер. Выбирайте того, кто предоставляет доступ по SIP-trunk, а не просто мобильное приложение.
  • Сервер с Asterisk или аналогом. Для домашнего использования хватит слабого VPS или даже Raspberry Pi 4.
  • Умный дом с возможностью запуска сценариев по внешнему событию — через webhook, MQTT или API.
  • Устройство для ввода/вывода звука: умная колонка с поддержкой SIP, IP-телефон или обычный динамик, подключённый через шлюз.

Настройка по шагам

Привожу конкретную последовательность действий для связки Asterisk + виртуальный номер + умный дом на базе Home Assistant. Принцип будет тем же для других платформ, только интерфейсы отличатся.

  1. Получаем виртуальный номер и SIP-учётные данные у провайдера. Вам дадут адрес SIP-сервера, логин, пароль и номер в формате E.164.
  2. Устанавливаем Asterisk. На чистой Ubuntu Server это делается одной командой. Для домашнего использования можно взять готовый образ — например, Issabel или FreePBX, если не хотите настраивать конфиги вручную.
  3. Регистрируем SIP-trunk. Прописываем данные провайдера в конфигурационном файле pjsip.conf или sip.conf. После перезагрузки Asterisk проверяем статус командой pjsip show registrations.
  4. Создаём внутренний SIP-абонент. Это будет «внутренний номер» вашего умного дома — например, 100. Настраиваем его в том же конфиге.
  5. Пишем диплан (dialplan) в extensions.conf. Здесь указываем: когда приходит вызов на внешний номер, набрать внутренний 100, и если он не ответил за 25 секунд — переадресовать на мобильный.
  6. Добавляем интеграцию с умным домом. В диплане после ответа на внутренний номер выполняем команду, которая через webhook или API запускает нужный сценарий в Home Assistant.
  7. Проверяем тестовым звонком. Звоним на виртуальный номер с мобильного и смотрим, что вызов прошёл по нужному маршруту.

Пример диплана для Asterisk

Вот минимальный рабочий фрагмент, который можно адаптировать под себя:

[incoming]
exten => _X.,1,Answer()
same => n,Wait(1)
same => n,Dial(SIP/100,25)
same => n,GotoIf(["{DIALSTATUS}" = "NOANSWER"]?mobile)
same => n,Hangup()

exten => mobile,1,Dial(SIP/trunk/79001234567,30)
same => n,Hangup()

Здесь мы отвечаем на входящий, пытаемся дозвониться до внутреннего абонента 100 в течение 25 секунд, и если никто не ответил — отправляем вызов на мобильный через SIP-trunk.

Как встроить это в голосовое управление

Самый частый вопрос: «А можно ли управлять этим голосом, через того же Алису или Google Ассистента?» — Да, но тут есть нюанс.

Голосовые ассистенты потребительского уровня не умеют напрямую работать с SIP. Они работают через свои облачные API. Поэтому связка выглядит так:

  • Вы говорите ассистенту команду.
  • Ассистент отправляет событие в ваш сервер умного дома.
  • Умный дом через API или MQTT отправляет команду на Asterisk.
  • Asterisk инициирует вызов через SIP-trunk на нужный номер.

Например, в Home Assistant это можно реализовать через интеграцию asterisk_cdr или через кастомный компонент, который умеет отправлять команду Originate через AMI (Asterisk Manager Interface).

Сравнение подходов: облачный PBX vs свой сервер

Прежде чем выбрать решение, полезно сравнить два основных варианта. Я собрал ключевые различия в таблицу:

Параметр Облачный PBX (например, Манго Офис, Задарма) Свой сервер (Asterisk на VPS или Raspberry Pi)
Сложность настройки Низкая — панель управления, всё через веб-интерфейс Высокая — нужно понимать диплан, сеть, протоколы
Гибкость сценариев Ограничена тем, что умеет платформа Почти безграничная — можно написать любую логику
Зависимость от интернета Высокая — если нет связи, работает только маршрутизация на мобильный Та же, но часть логики можно выполнить локально
Стоимость От нескольких сотен рублей в месяц за номер + функции Только стоимость VPS или железа, номер оплачивается отдельно
Поддержка интеграций Готовые коннекторы к популярным системам Нужно настраивать вручную через API или webhook
Надёжность Зависит от провайдера, обычно высокая Зависит от вас и вашего интернет-канала

Что выбрать в зависимости от вашей ситуации

Ситуация 1: вам нужно просто принимать звонки домофона на телефон. Берите облачный PBX. Никакого Asterisk не нужно — на стороне провайдера настраиваете переадресацию на мобильный, и всё. Виртуальный номер в этом случае нужен только как красивый номер для домофона.

Ситуация 2: хотите голосовое управление звонками через умную колонку. Тут нужен свой сервер. Без Asterisk или аналога не обойтись, потому что потребуется программная инициация вызова по команде из умного дома.

Ситуация 3: у вас уже есть локальная система умного дома на базе Home Assistant или OpenHAB. Скорее всего, проще всего поднять Asterisk в Docker на том же сервере и связать его с умным домом через REST API или MQTT. Это даст максимальную гибкость без лишних затрат.

Ситуация 4: нужна работа при нестабильном интернете. Рассмотрите GSM-шлюз как резервный канал. Виртуальный номер в этом случае — основной, а при потере связи система автоматически переключается на мобильную сеть.

Частые ошибки при настройке

Вот реальные проблемы, с которыми люди сталкиваются при сборке таких систем:

  • Забывают про NAT. Если Asterisk стоит за домашним роутером, звук может быть односторонним или не идти вовсе. Нужно правильно настроить NAT в конфиге (nat=force_rport,comedia) и пробросить порты на роутере.
  • Используют кодеки, которые не поддерживаются провайдером. Перед настройкой уточните у провайдера список поддерживаемых кодеков. Обычно это G.711 (alaw/ulaw) и G.729. Если кодеки не совпадут — вызов либо не установится, либо будет без звука.
  • Не накладывают ограничения на исходящие вызовы. Если ваш SIP-сервер взломают (а это случается при пароле «1234»), злоумышленник будет звонить на платные номены за ваш счёт. Обязательно настройте правила исходящей маршрутизации и ограничения по IP.
  • Путать SIP-регистрацию и SIP-trunk. Регистрация — это когда ваш сервер «представляется» провайдеру. Trunk — это просто канал без регистрации, где вы указываете IP-адрес провайдера. Не все провайдеры поддерживают оба варианта, уточняйте заранее.
  • Не тестируют при отключённом Wi-Fi. Полезно выключить Wi-Fi на телефоне и проверить, что вызов проходит через мобильный интернет. Так вы убедитесь, что система работает не только в идеальных условиях.

Практические рекомендации

Несколько советов, которые сэкономят вам время и нервы:

  • Начните с простого. Сначала настройте приём входящих звонков на Asterisk и переадресацию на мобильный. Когда это заработает стабильно — добавляйте интеграцию с умным домом.
  • Используйте Docker. Asterisk в контейнере проще обновлять и переносить. Есть готовые образы, которые разворачиваются одной командой.
  • Ведите логи. Включите подробное логирование в Asterisk (sip set debug on) хотя бы на этапе отладки. Без логов разбираться с тем, почему вызов не проходит — это гадание на кофейной гуще.
  • Позаботьтесь о звуке. Если выводите звук на умную колонку, учитывайте задержку. SIP-вызов через несколько шлюзов может давать задержку в 1–2 секунды, и это раздражает. Используйте локальные кодеки и минимизируйте количество трансляций.
  • Сделайте кнопку отмены. В умном доме должна быть возможность одним нажатием прервать текущий вызов или отключить звонок домофона. Это вопрос не только удобства, но и безопасности.

Безопасность — о чём молчат провайдеры

Когда вы открываете SIP-сервер в интернете, его обязательно начнут сканировать. Первые попытки несанкционированного доступа обычно появляются в течение первых суток. Поэтому:

  • Меняйте стандартный порт 5060 на любой другой — это не панацея, но от автоматических сканеров спасает.
  • Используйте Fail2Ban — он банит IP-адреса с неудачными попытками авторизации.
  • Ставьте сложные пароли на SIP-аккаунты. Минимум 12 символов, буквы, цифры, спецсимволы.
  • Ограничьте доступ к AMI (Asterisk Manager Interface) только доверенным IP или вообще локальной сетью.
  • Регулярно обновляйте Asterisk — в старых версиях бывают уязвимости, позволяющие выполнить произвольный код.

Итог: с чего начать прямо сейчас

Если вы дочитали до этого места и хотите попробовать, вот конкретный план на ближайшие выходные:

  1. Зарегистрируйтесь у SIP-провайдера и получите виртуальный номер с доступом по SIP-trunk.
  2. Установите Asterisk на VPS или локальный компьютер (можно в Docker).
  3. Настройте приём входящего вызова и переадресацию на свой мобильный телефон.
  4. Убедитесь, что всё работает — позвоните на виртуальный номер с другого устройства.
  5. Добавьте в диплан отправку webhook в ваш умный дом при входящем вызове.
  6. Свяжите webhook со сценарием — например, вывод звука на колонку или включение камеры.

Всё это реально сделать за один день, если есть базовое понимание сетей. Главное — не пытаться сразу собрать идеальную систему. Сделайте минимально рабочую версию, протестируйте её в реальных условиях, а потом наращивайте функциональность. Так вы получите работающий инструмент, а не вечный недоделанный проект.

Virtual-Sim.ru