Как создать голосового ИИ-агента с помощью OpenAI GPT-Live, Twilio Agent Connect и TypeScript

Источник: Twilio•

Как создать голосового ИИ-агента с помощью OpenAI GPT-Live, Twilio Agent Connect и TypeScript

Создавайте входящие и исходящие голосовые ИИ-ассистенты, способные выполнять вызовы инструментов, используя TypeScript, Twilio Agent Connect и OpenAI GPT-Live.

15 октября 2026 г.

Автор:

Редактор:

Как создать голосового AI-агента с помощью OpenAI GPT-Live, Twilio Agent Connect и TypeScript

«В моем тестовом скрипте все работает отлично, но как только мы запускаем это на реальном телефонном звонке, все разваливается». Это распространенная жалоба, когда демо-версия голосового ИИ сталкивается с реальным трафиком.

OpenAI GPT-Live — это семейство полнодуплексных моделей преобразования речи в речь (S2S). Они разделяют разговор и любую необходимую фоновую работу, позволяя делегировать задачи вашему собственному бэкенду или модели, размещенной на OpenAI.

Twilio Agent Connect — это SDK с открытым исходным кодом на TypeScript от Twilio для создания голосовых и текстовых AI-агентов. Теперь мы поставляем GPTLiveProvider, который напрямую связывает Twilio Programmable Voice Media Streams с GPT-Live-1 in the OpenAI API. Все это работает через гибкий декларативный интерфейс конфигурации — вам не нужно настраивать WebSocket вручную.

В этом руководстве вы будете использовать TypeScript и создадите телефонный номер, который соединяет входящих абонентов с голосовым агентом на базе GPT-Live. Он поприветствует абонента, а тот сможет задать вопрос, который вызовет вызов функции (tool call). Затем я покажу, как совершить исходящий вызов с помощью Twilio и GPT-Live.

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

Предварительные требования и распространенные ошибки при начале работы

  • Бесплатная учетная запись Twilio — зарегистрируйтесь здесь.
  • Телефонный номер Twilio с поддержкой голосовой связи — купите его в консоли Twilio.
  • API-ключ OpenAI из проекта с доступом к GPT-Live.
  • Установленные Node.js 22.13+ и SDK Twilio Agent Connect версии 2.4.0+, а также dotenv (npm install twilio-agent-connect dotenv).
  • Публичный HTTPS/WSS эндпоинт для локальной разработки — ngrok отлично подходит для этого.

Создание приложения

Полный рабочий пример находится по адресу getting_started/examples/gpt-live. Следуйте инструкциям ниже или клонируйте репозиторий и запустите этот пример напрямую.

Шаг 1: Настройка TAC и сервера Fastify

Каждое голосовое приложение TAC начинается с экземпляра Twilio Agent Connect и VoiceChannel. VoiceChannel не зависит от провайдера: один и тот же класс поддерживает Conversation Relay, GPT Realtime и GPT-Live, в зависимости от того, какую конфигурацию вы передаете.

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

TACConfig.fromEnv() считывает настройки из переменных окружения.

Создайте файл .env в корне проекта с TWILIO_ACCOUNT_SID и TWILIO_AUTH_TOKEN (находятся на панели управления консоли), TWILIO_API_KEY и TWILIO_API_SECRET (из раздела API keys & tokens), TWILIO_PHONE_NUMBER (из Phone Numbers > Manage > Active Numbers), TWILIO_VOICE_PUBLIC_DOMAIN (ваш домен ngrok из шага с предварительными требованиями) и OPENAI_API_KEY. Импорт dotenv/config выше автоматически подхватит их.

Шаг 2: Настройка сессии GPT-Live и приветствия

defaultSessionConfig отправляется как полезная нагрузка session.start для GPT-Live в момент подключения модели. Как минимум, необходимо установить модель, инструкции (системный промпт) и audio.format в значение TWILIO_AUDIO_FORMAT_FOR_GPT_LIVE.

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

Установка welcomeInstruction заставляет агента говорить первым, не дожидаясь абонента, что полезно для любого звонка, где абонент еще не знает, что попал на AI-агента.

Шаг 3: Подключение вызова функции (tool call)

GPT-Live не вызывает функции напрямую — вместо этого он делегирует вызовы инструментов либо через Client Delegation (где вам нужно создать интеграцию делегирования), либо через модель Responses API. В этом руководстве мы будем использовать делегирование Responses.

Любой инструмент, созданный с помощью defineTool(), может быть представлен таким образом: зарегистрируйте его в tools: [...] чтобы Twilio Agent Connect мог его выполнить, и отдельно перечислите его схему в delegation.responses.tools, чтобы модель знала о его существовании.

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

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

3-секундный setTimeout в коде выше делает преимущество этой модели очевидным: запустите демо, и звонок продолжится, пока выполняется инструмент. GPT-Live делегирует решение о вызове инструмента модели Responses API, затем Twilio Agent Connect выполняет фактическую функцию TypeScript и озвучивает результат.

Надеюсь, это показывает, насколько просто работает делегирование Responses в OpenAI. Конечно, когда вы будете создавать своего собственного агента, замените getWeather на функцию, которая обращается к вашему бэкенду. Например, вы можете искать статус заказа, проверять доступность записи или получать данные учетной записи. Все те же принципы подключения применяются без необходимости менять что-либо еще.

Шаг 4: Подключение сервера

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

TACServer по умолчанию монтирует TwiML-эндпоинт по адресу /twiml.

Шаг 5: Укажите ваш номер Twilio для вебхука

Когда сервер запущен за публичным туннелем (например, ngrok), сообщите Twilio, куда отправлять входящие вызовы:

  • В консоли Twilio перейдите в Phone Numbers > Manage > Active Numbers и выберите свой номер.
  • В разделе Voice Configuration установите «A call comes in» на Webhook и введите https://<your-domain>/twiml.
  • Установите метод HTTP на POST, затем сохраните.

Теперь вы готовы принимать звонки! ☎️

Вот и все: теперь у вас есть телефонный номер, который приветствует абонентов, отвечает на вопросы и вызывает реальные функции, без необходимости писать код WebSocket.

Запуск, тестирование, устранение неполадок

Позвоните на свой номер Twilio… если все настроено правильно, вы должны сразу услышать welcomeInstruction агента, ничего не говоря в ответ. После приветствия спросите «какая погода в Лос-Анджелесе?» — модель должна вызвать get_weather через делегирование Responses и зачитать результат в том же диалоге.

Получайте удовольствие от общения с вашим агентом — а когда вы повесите трубку, расшифровка, накопленная в ConversationSession.metadata.transcript, будет выведена в консоль, если вы зарегистрируете обратный вызов onConversationEnded, который считывает ее из сессии по окончании звонка. Вот пример:

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

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

Если вы не слышите приветствие, дважды проверьте, что установлено welcomeInstruction.

Дальнейшие шаги: совершение исходящих вызовов

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

Совершение исходящего вызова

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

Чтобы завершить демо исходящего агента, продолжите работу в том же файле и повторно используйте voiceChannel, который вы уже создали на шагах 1-4.

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

Параметр to должен быть в формате E.164 (например, +15551234567), как того требует Voice API от Twilio.

В полном примере это работает с флагом --to. Запустите сервер с помощью npm run dev -- --to +15551234567, и он совершит вызов сразу после запуска сервера, продолжая при этом отвечать на входящие вызовы в обычном режиме.

Это весь процесс исходящего вызова. TAC обрабатывает совершение вызова, подключение Media Stream и связывание его с GPT-Live так же, как и для входящего вызова. С этого момента initiateOutboundConversation — это единственный API, который вам нужен, независимо от того, звоните ли вы на один номер или перебираете список для проведения целой исходящей кампании.

Другие функции для изучения

Этот учебник охватывает основы, но Twilio Agent Connect и GPT-Live поддерживают больше, чем показано здесь:

  • Один SDK, каждый канал. TAC также поставляется с провайдерами для SMS, RCS, WhatsApp и Chat, если вашему агенту нужно общаться с клиентами вне голосовой связи.

Один SDK, каждый канал. TAC также поставляется с провайдерами для SMS, RCS, WhatsApp и Chat, если вашему агенту нужно общаться с клиентами вне голосовой связи.

  • Подменяемые голосовые бэкенды. Тот же API VoiceChannel работает с Conversation Relay и OpenAI Realtime API.

Подменяемые голосовые бэкенды. Тот же API VoiceChannel работает с Conversation Relay и OpenAI Realtime API.

  • Готовые к продакшн вызовы. Статус, обнаружение автоответчика и обратные вызовы записи, плюс программное завершение звонка, чтобы превратить демо в что-то, что выдержит реальный телефонный трафик.

Готовые к продакшн вызовы. Статус, обнаружение автоответчика и обратные вызовы записи, плюс программное завершение звонка, чтобы превратить демо в что-то, что выдержит реальный телефонный трафик.

  • Настройка сессии на каждый звонок. Переопределите конфигурацию сессии для конкретного звонка, не трогая общие настройки канала.

Настройка сессии на каждый звонок. Переопределите конфигурацию сессии для конкретного звонка, не трогая общие настройки канала.

Заключение

Поздравляем! Теперь у вас есть номер телефона, который соединяет звонящих с голосовым агентом GPT-Live-1, будь то при приёме входящего звонка или при исходящем обзвоне. Ваш агент приветствует людей проактивно и может отвечать на более сложные вопросы, вызывая инструмент.

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

Отсюда ознакомьтесь с Twilio Agent Connect API reference для полного интерфейса VoiceProvider, или провайдером OpenAI Realtime API, если вам нужен альтернативный бэкенд speech-to-speech.

Дополнительные ресурсы

  • Twilio Agent Connect documentation

Twilio Agent Connect documentation

  • Twilio Programmable Voice Media Streams

Twilio Programmable Voice Media Streams

OpenAI’s GPT-Live API Docs

  • OpenAI's GPT-Live announcement

OpenAI's GPT-Live announcement

Вен Чжу – инженер-программист в Twilio. Вне клавиатуры он отправляется в походы, когда погода позволяет, обычно планирует следующую поездку до окончания текущей, и делает шоты на домашней эспрессо-машине с терпением, обычно сохраняемым для поиска нестабильных тестов. Вен можно связаться через LinkedIn.

Синхао Хуан – инженер-программист в Twilio. Вне рабочего времени он готовит блюда как китайской, так и западной кухни, держит кухонный шкафчик с несколькими десятками банок специй — все в порядке, естественно — лучше организован, чем большинство его кодовых баз, и поддерживает личный сайт рецептов. Его можно связать по адресу jahuang [at] twilio.com.

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

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

Все →

Ещё от Twilio