Дайте устаревшим устройствам под Linux голос

Источник: Twilio•

Дайте устаревшим устройствам под Linux голос

Подключайте устаревшие устройства под управлением Linux к Twilio Voice и ИИ через SIP. Предоставьте лифтовым домофонам, киоскам и другим устройствам возможность работать с IVR, ТфОП и операторами без замены оборудования.

28 октября 2026 г.

Автор

Рецензент

Добавление голоса, SIP и ИИ в старое «железо» под управлением Linux с помощью Twilio

21:00. Лифт в офисном здании застрял между 17-м и 18-м этажами. Внутри находится только инженер, который засиделся допоздна и собирается домой. Он нажимает кнопку вызова. Панели уже десять лет, а пульт охраны, куда она должна звонить, опустел несколько часов назад.

Теперь представьте другой сценарий: через несколько секунд после нажатия кнопки трубку берет ИИ-агент. На его родном языке он спрашивает, на каком этаже он находится, сколько людей с ним и есть ли пострадавшие. Убедившись, что требуется помощь, агент переводит звонок в круглосуточный центр мониторинга и отправляет местоположение лифта и сводку звонка в браузер дежурного оператора.

И при этом не пришлось менять ни единой детали в этой десятилетней панели.

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

Демонтаж и замена этих устройств обходятся дорого, отнимают много времени и доставляют неудобства. Но теперь есть другой вариант: добавьте стандартный SIP-клиент на имеющееся оборудование и перенесите голосовые функции в облако.

В этой статье я расскажу, как это работает. PJSIP, SIP-стек с открытым исходным кодом, работает на самом устройстве, а домен SIP в Twilio соединяет его с IVR, ТфОП, живыми операторами и голосовым ИИ. Затем я поделюсь небольшим доказательством концепции (PoC), которое вы сможете запустить уже сегодня. Давайте начнем!

Главная идея: устройство говорит на SIP, облако делает все остальное

Кто за что отвечает

PJSIP — это мультимедийная библиотека связи с открытым исходным кодом, написанная на языке C. Она реализует стандартные протоколы, такие как SIP, SDP, RTP, STUN, TURN и ICE, и работает на настольных, мобильных и встраиваемых системах.

Вместо того чтобы встраивать SDK для работы с браузером на устройство Linux, вы проведете четкую границу между протоколами. Каждый вызов проходит через три уровня:

  • Устройство (PJSIP) захватывает и воспроизводит аудио, регистрируется в SIP-домене, настраивает вызовы, передает медиапоток и выполняет переподключение после обрыва связи.
  • Twilio (SIP-домен и Programmable Voice) аутентифицирует устройство, принимает вызов и предоставляет базовые голосовые компоненты: IVR, подключение к ТфОП, живых операторов и ИИ.
  • Логика вашего приложения (Studio Flow, TwiML или собственный бэкенд) определяет дальнейшие действия.

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

Почему не WebRTC?

WebRTC — отличная технология для передачи голоса в реальном времени, но она подходит далеко не для каждого устройства.

Многие старые устройства Linux не имеют браузера и надежной среды выполнения WebRTC. Часто они сочетают в себе старый дистрибутив, кастомное ядро, однокристальную систему (SoC) ARM и проприетарный аудиоинтерфейс. Их процессор, память и процесс обновления изначально не были рассчитаны на запуск медиастека браузерного уровня.

SIP уже является родным языком телефонной сети, поэтому выбор сводится к практичности:

  • Для браузеров и современных приложений WebRTC обычно является естественным выбором.
  • Для встраиваемых устройств, устаревшего «железа» и всего, что должно взаимодействовать с телефонной сетью, SIP обычно оказывается более прямым путем.

Одно SIP-соединение, четыре варианта голосового взаимодействия

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

  • Самообслуживание через IVR. Не каждое нажатие кнопки означает чрезвычайную ситуацию. В обычный день та же панель может воспроизводить объявления и позволять людям нажать клавишу, чтобы сообщить о проблеме, связаться с управлением здания или узнать часы работы. Меню находятся в Studio, TwiML или на вашем бэкенде, поэтому вы можете обновлять их, не касаясь ни единого устройства.
  • Переадресация в ТфОП. В реальной чрезвычайной ситуации звонящему нужен живой человек. С помощью <Dial> вы можете переадресать вызов охране здания, подрядной организации по обслуживанию или в круглосуточный центр мониторинга.
  • Живые операторы с использованием Voice SDK. Само устройство не запускает Voice SDK от Twilio, но человек, отвечающий на звонок, может это сделать. Например, вы можете перенаправить вызов на оператора в браузере, который видит, из какого здания и какого лифта поступает вызов, а также всю информацию, собранную ИИ, и взять управление на себя. Оператор также может перезвонить на устройство прямо из браузера.
  • Голосовой ИИ. На звонок может ответить ИИ-агент. Он может собрать детали, выполнить перевод, помочь в устранении неполадок и выполнить первичную сортировку. Conversation Relay обрабатывает распознавание речи в реальном времени, синтез речи и очередность реплик, либо вы можете использовать Media Streams для отправки необработанного аудио в ваш собственный конвейер ИИ. Руководства по ИИ-агентам охватывают оба подхода. Для сценариев с высоким уровнем риска задача ИИ заключается в сборе информации и ускорении реагирования, а не в замене людей. Всегда оставляйте путь к ТфОП или живому оператору.

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

Попробуйте самостоятельно на Mac или Ubuntu

Хватит теории. Давайте посмотрим, как это работает!

Я протестировал это сквозным образом на MacBook и виртуальной машине Ubuntu, запущенной на том же ноутбуке. Ни то, ни другое не является производственным устройством, но оба отлично подходят для тестирования SIP-интероперабельности. Любое устройство, способное собрать и запустить PJSIP, будет следовать по тому же пути протокола.

Предварительные требования

Для прохождения материала вам понадобятся:

  • Устройство, способное запускать PJSIP, такое как устройство Linux, виртуальная машина или Mac (я использовал Apple Silicon MacBook и ВМ Ubuntu)
  • Исходный код PJSIP 2.17
  • Аккаунт Twilio. Если у вас его еще нет, вы можете зарегистрироваться бесплатно
  • Номер Twilio с поддержкой голосовой связи. Узнайте, как найти и купить его здесь
  • Настоятельно рекомендуется использовать агента кодирования, такого как Claude Code или Codex, что сэкономит вам массу времени

Создание линии помощи лифта в Studio

Начните с голосового сценария в облаке. Для этого PoC я создал простую линию помощи лифта в Twilio Studio — сценарий Studio Flow должен существовать и быть опубликованным до того, как SIP-домен сможет направлять на него вызовы.

Когда пассажир нажимает кнопку домофона, он слышит:

"Здравствуйте, это линия помощи лифта. Для инструкций по пользованию лифтом нажмите 1. Чтобы сообщить о проблеме, нажмите 2. Чтобы поговорить с дежурным оператором, нажмите 3. Если вы застряли, сохраняйте спокойствие. Ничего нажимать не нужно. Мы немедленно свяжем вас со специалистом."

Сценарий использует только встроенные виджеты Studio, поэтому писать код не требуется:

Копировать код

Одно проектное решение важнее остальных: в случае сомнений соединяйте с человеком. Застрявший пассажир может быть слишком встревожен, чтобы вспомнить, какую клавишу нажать. Если он ничего не нажимает, произносит что-то другое или нажимает не ту клавишу, вызов направляется напрямую дежурному оператору, а не воспроизводит меню заново.

Полное определение Flow вы найдете в studio-flow-elevator-ivr.en.json . Чтобы использовать его, в Twilio Console создайте новый Flow в Studio и выберите Импорт из JSON (Import from JSON) . Перед публикацией замените телефонные номера в виджете connect_agent на свой номер дежурного и номер Twilio.

Поскольку меню находится в облаке, его обновление не затрагивает само устройство. Сегодня это кнопочное меню. Завтра вы сможете заменить welcome_menu на виджет Connect Virtual Agent или перенаправить вызов в приложение Conversation Relay, и первым голосом, который услышит пассажир, будет голос ИИ-агента.

Подключение устройства PJSIP по протоколу SIP

pjsua — это эталонный клиент командной строки PJSIP, который используется здесь для тестирования регистрации, вызовов, аудио и DTMF. В готовом к производству устройстве тот же стек обычно работает внутри приложения продукта или фоновой службы, причем аппаратные кнопки или пользовательский интерфейс устройства инициируют вызовы.

1. Сборка PJSIP.

для получения клиента pjsua. В этом проекте скомпилированный клиент представлен как ./bin/pjsua; адаптация сборки для промышленного оборудования лежит на производителе устройства.

2. Создание SIP-домена и подключение его к Studio.

В Twilio Console создайте <your-domain>.sip.twilio.com, а затем создайте список учетных данных (Credential List) с SIP-именем пользователя и паролем. Привяжите его как к аутентификации вызовов, так и к SIP-регистрации. Это SIP-учетные данные, а не ваши Account SID и Auth Token. В разделе A CALL COMES IN выберите Studio и опубликованный выше Flow.

3. Настройка PJSUA локально.

В каталоге проекта создайте каталог конфигурации:

Copy code

Сохраните следующий текст как .pjsua/twilio-mac.cfg, заменив заполнители созданными выше SIP-доменом и учетными данными. Имя пользователя должно точно совпадать с именем пользователя в сопоставленном списке учетных данных.

Copy code

Используйте reg-timeout=600, так как Twilio принимает значения срока действия регистрации от 600 до 3600 секунд.

Данный концепт-прототип отключает SRTP для простоты; настраивайте TLS и SRTP в рабочей среде.

Защитите учетные данные перед продолжением:

Copy code

Не публикуйте этот файл и не фиксируйте настоящий пароль в системе контроля версий.

4. Регистрация и совершение вызова.

В каталоге проекта выполните:

Copy code

Эта команда выполняет SIP-регистрацию для настроенной конечной точки перед отправкой начального SIP-запроса INVITE прямо на SIP-URI, а не на стандартный телефонный номер. В строке sip:ivr@<your-domain>.sip.twilio.com часть ivr обозначает имя пользователя назначения, в то время как адрес домена указывает на ваш конкретный SIP-домен Twilio. Как только Twilio проверяет входящий запрос, он запускает ваш настроенный обработчик вызовов — в данном случае запускает Flow Studio.

Когда вы находитесь на активном вызове, pjsua работает как интерактивный терминал, а не как стандартная клавиатура набора номера. Чтобы передать выбранные в тональном меню пункты, введите #, нажмите Enter , затем введите нужную цифру — например, 1, 2 или 3 — в ответ на приглашение и снова подтвердите ввод.

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

Что показал тест

Запись демонстрирует один полный цикл выполнения из терминала PJSUA. Я отправил DTMF 1, чтобы прослушать инструкции самообслуживания, затем отправил 3 и убедился, что Studio перевела вызов на номер PSTN и заставила телефон назначения звонить.

Ваш браузер не поддерживает аудиоэлемент.

В более масштабном тесте, когда Flow был опубликован, а SIP-домен указывал на него, я попробовал все три разработанных пути. Клиент показал статус регистрации 200 OK, за которым последовал 180 Ringing и состояние вызова CONFIRMED, в то время как журналы выполнения Studio фиксировали каждый путь:

  • Нажатие 1 для получения инструкций. Studio распознала клавишу, воспроизвела инструкции и вернулась в главное меню.
  • Нажатие 2 для сообщения о проблеме. После звукового сигнала я описал проблему и нажал # для завершения. Twilio сохранил запись, воспроизвел подтверждение и повесил трубку. В рабочей среде эта запись может поступать прямо в систему технического обслуживания или расшифровываться в тикет.
  • Ничего не нажимать. Через пять секунд после окончания приветствия Flow перешел к переводу, Studio совершила звонок PSTN, и зазвонил мой телефон. Это тот путь, который имеет наибольшее значение : живой человек все равно ответит.

Нажатия клавиш работали сразу после установки. PJSIP и Twilio согласовали событие телефона (RFC 4733) в SDP, поэтому цифры DTMF передаются внутри мультимедийного потока, и устройство не требует специальной обработки.

Другой тест с виртуальной машины Ubuntu подтвердил несколько деталей на уровне протокола на основе журнала вызовов Twilio Console и захвата сигнализации:

  • Это клиент Linux. User-Agent — PJSUA/v2.17 Linux aarch64 glibc, а Twilio указывает тип соединения как sip_interface .
  • Кодеки согласовываются автоматически. PJSIP предложил Speex, iLBC, GSM, G.722, PCMU, PCMA и другие. Twilio выбрал PCMU (G.711 μ-law) и telephone-event с пакетированием 20 мс.
  • Все это стандартный SIP. INVITE, согласование SDP, ACK, медиаданные и BYE следуют стандартному потоку вызовов без проприетарных расширений.

Самообслуживание, сообщение о проблемах и перевод вызова по PSTN на живого человека — все это работало через одно и то же SIP-соединение.

От концепт-прототипа к производству

Агент по кодированию может запустить PJSIP на реальном оборудовании, но большая часть оставшейся работы связана с качеством звука и надежностью в полевых условиях. На стороне устройства запланируйте:

  • Настройку микрофона и динамика, а также эхоподавление, чтобы звонящих было слышно в шумных помещениях с эхом
  • Работу в качестве фоновой службы, запуск при загрузке, переподключение после сбоев и доставку обновлений программного обеспечения
  • Уникальные SIP-учетные данные для каждого устройства с включенными TLS и SRTP в рабочей среде (в этом концепт-прототипе я их отключил для простоты)
  • Лицензирование: PJSIP имеет двойную лицензию под GPLv2 и коммерческой лицензией, поэтому проверьте, какая из них применима, прежде чем выпускать его во встроенном ПО с закрытым исходным кодом

В облаке ваше приложение направляет каждый вызов на основе идентификации устройства и ваших бизнес-правил, а также координирует IVR, PSTN, живых операторов и ИИ. Проще говоря, PJSIP превращает устройство в надежную конечную точку SIP, а Programmable Voice решает, что вызов может делать дальше.

Что дальше: каждое устройство становится каналом обслуживания

Инженеру, застрявшему в этом лифте, никогда не придется узнавать, что такое SIP, PJSIP или TwiML — он запомнит только то, что когда он нажал кнопку, кто-то ответил.

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

Отступите еще немного назад. ИИ-агенты уходят с наших экранов в физический мир. Устройства, уже установленные в лифтах, у входных дверей, на производственных линиях и в холлах, представляют собой готовые уши и голоса для этого ИИ. Их не нужно заменять, и вам не нужно обновлять их прошивку каждый раз при выходе новой модели. По мере совершенствования ИИ в облаке каждое устройство «в поле» совершенствуется вместе с ним.

Вашим устройствам не нужен браузер. Им нужны лишь голос и стандартный способ подключения.

Если вы управляете парком бесшумных устройств Linux, начните с одного SIP-домена и простого Studio Flow, и позвольте им произнести свои первые слова. Чтобы узнать больше, ознакомьтесь с документацией по интерфейсу SIP, функциями SIP в PJSIP и руководствами по ИИ-агентам для голосовой связи. Мне не терпится увидеть, какие устройства выживите!

Хао Ван (Hao Wang) — архитектор решений в Twilio, увлеченный голосовым ИИ и новыми технологиями.

О чём эта статья

Ещё в разделе «Телеком и сети»

Все →

Ещё от Twilio