Skip to main content
Голосовые вызовы для OpenClaw через плагин: исходящие уведомления, многоходовые диалоги, полнодуплексная голосовая связь в реальном времени, потоковая транскрипция и входящие вызовы с политиками списков разрешений. Провайдеры: mock (для разработки, без сети), plivo (Voice API + передача XML + распознавание речи GetInput), telnyx (Call Control v2), twilio (Programmable Voice + Media Streams).
Плагин голосовых вызовов работает внутри процесса Gateway. Если вы используете удалённый Gateway, установите и настройте плагин на компьютере, где запущен Gateway, а затем перезапустите Gateway, чтобы загрузить его.

Быстрый старт

1

Установите плагин

Используйте пакет без указания версии, чтобы следовать текущему тегу выпуска. Закрепляйте точную версию только тогда, когда требуется воспроизводимая установка. После этого перезапустите Gateway, чтобы плагин загрузился.
2

Настройте провайдера и Webhook

Задайте конфигурацию в plugins.entries.voice-call.config (см. раздел Конфигурация ниже). Необходимый минимум: provider, учётные данные провайдера, fromNumber и общедоступный URL-адрес Webhook.
3

Проверьте настройку

Проверяет, включён ли плагин, учётные данные провайдера, доступность Webhook и активен ли только один аудиорежим (streaming или realtime).
4

Выполните быструю проверку

По умолчанию обе команды выполняются в тестовом режиме без реального вызова. Добавьте --yes, чтобы совершить короткий исходящий вызов с уведомлением:
Для Twilio, Telnyx и Plivo настройка должна определять общедоступный URL-адрес Webhook. Если publicUrl, URL-адрес туннеля, URL-адрес Tailscale или резервный адрес сервера указывает на loopback-адрес или адрес в частной сети, настройка завершается с ошибкой вместо запуска провайдера, который не сможет получать Webhook от оператора связи.

Конфигурация

Если enabled: true, но у выбранного провайдера отсутствуют учётные данные, при запуске Gateway в журнал записывается предупреждение о незавершённой настройке с перечислением отсутствующих ключей, а среда выполнения не запускается. При использовании команд, вызовов RPC и инструментов агента они по-прежнему возвращают точный список отсутствующих параметров конфигурации.
Учётные данные голосовых вызовов поддерживают SecretRefs. plugins.entries.voice-call.config.twilio.authToken, plugins.entries.voice-call.config.realtime.providers.*.apiKey, plugins.entries.voice-call.config.streaming.providers.*.apiKey и plugins.entries.voice-call.config.tts.providers.*.apiKey разрешаются через стандартный интерфейс SecretRef; см. Интерфейс учётных данных SecretRef.

Справочник по конфигурации

Ключи верхнего уровня в plugins.entries.voice-call.config, не показанные выше: По умолчанию Twilio использует конечную точку REST для US1. Чтобы обрабатывать вызовы в поддерживаемом регионе за пределами США, задайте для twilio.region значение ie1 или au1 и используйте учётные данные из этого региона. См. руководство Twilio по использованию REST API в регионах за пределами США.
  • Для Twilio, Telnyx и Plivo требуется общедоступный URL-адрес Webhook.
  • mock — локальный провайдер для разработки (без сетевых вызовов).
  • Для Telnyx требуется telnyx.publicKey (или TELNYX_PUBLIC_KEY), если skipSignatureVerification не имеет значения true.
  • skipSignatureVerification предназначен только для локального тестирования.
  • На бесплатном тарифе ngrok задайте для publicUrl точный URL-адрес ngrok; проверка подписи выполняется всегда.
  • tunnel.allowNgrokFreeTierLoopbackBypass: true разрешает Webhook Twilio с недействительными подписями только когда tunnel.provider="ngrok", а serve.bind является loopback-адресом (локальный агент ngrok). Только для локальной разработки.
  • URL-адреса бесплатного тарифа ngrok могут изменяться или добавлять промежуточную страницу; если publicUrl изменится, проверка подписей Twilio завершится ошибкой. Для рабочей среды предпочтительнее стабильный домен или туннель Tailscale.
  • streaming.preStartTimeoutMs (по умолчанию 5000) закрывает сокеты, которые так и не отправили допустимый кадр start.
  • streaming.maxPendingConnections (по умолчанию 32) ограничивает общее количество неаутентифицированных сокетов до начала сеанса.
  • streaming.maxPendingConnectionsPerIp (по умолчанию 4) ограничивает количество неаутентифицированных сокетов до начала сеанса для каждого IP-адреса источника.
  • streaming.maxConnections (по умолчанию 128) ограничивает общее количество открытых сокетов медиапотоков (ожидающих и активных).
При разборе конфигурации эти устаревшие ключи автоматически нормализуются, а в журнал записывается предупреждение с путём замены; совместимый переходный слой будет удалён в будущем выпуске (2026.6.0), поэтому запустите openclaw doctor --fix, чтобы преобразовать сохранённую конфигурацию в каноническую форму:
  • provider: "log"provider: "mock"
  • twilio.fromfromNumber
  • streaming.sttProviderstreaming.provider
  • streaming.openaiApiKeystreaming.providers.openai.apiKey
  • streaming.sttModelstreaming.providers.openai.model
  • streaming.silenceDurationMsstreaming.providers.openai.silenceDurationMs
  • streaming.vadThresholdstreaming.providers.openai.vadThreshold
  • realtime.agentContext.includeSystemPrompt удалён (контекст реального времени теперь использует сгенерированную инструкцию агента)

Область действия сеанса

По умолчанию плагин голосовых вызовов использует sessionScope: "per-phone", поэтому повторные вызовы от одного и того же звонящего сохраняют память диалога. Задайте sessionScope: "per-call", если каждый вызов через оператора должен начинаться с нового контекста, например для службы приёма, бронирования, IVR или подключения к Google Meet, где один и тот же номер телефона может соответствовать разным встречам. Плагин голосовых вызовов сохраняет сгенерированные ключи сеансов в пространстве имён настроенного агента (agent:<agentId>:voice:*). Явно заданные необработанные ключи интеграции разрешаются в том же пространстве имён: канонический ключ agent:<configuredAgentId>:* сохраняет этого владельца и учитывает псевдонимы основного session.mainKey/глобальной области; сторонний или некорректный ввод agent:* помещается в область настроенного агента как непрозрачный ключ; global и unknown остаются глобальными сигнальными значениями.

Голосовые диалоги в реальном времени

realtime выбирает провайдера полнодуплексной голосовой связи в реальном времени для звука активного вызова. Он не связан с streaming, который только перенаправляет звук провайдерам транскрипции в реальном времени.
realtime.enabled нельзя использовать совместно с streaming.enabled. Выберите один аудиорежим для каждого вызова.
Текущее поведение среды выполнения:
  • realtime.enabled поддерживается для Twilio и Telnyx.
  • realtime.provider является необязательным. Если значение не задано, Voice Call использует первого зарегистрированного провайдера голосовой связи в реальном времени.
  • Встроенные провайдеры голосовой связи в реальном времени: Google Gemini Live (google) и OpenAI (openai), зарегистрированные соответствующими плагинами провайдеров.
  • Необработанная конфигурация, принадлежащая провайдеру, находится в realtime.providers.<providerId>.
  • По умолчанию Voice Call предоставляет общий инструмент реального времени openclaw_agent_consult. Модель реального времени может вызывать его, когда абонент просит провести более глубокий анализ, получить актуальную информацию или использовать обычные инструменты OpenClaw.
  • realtime.consultPolicy при необходимости добавляет указания о том, когда модель реального времени должна вызывать openclaw_agent_consult.
  • realtime.agentContext.enabled по умолчанию отключён. Если он включён, при настройке сеанса Voice Call добавляет в инструкции провайдера реального времени ограниченный контекст с идентичностью агента и выбранными файлами рабочего пространства.
  • realtime.fastContext.enabled по умолчанию отключён. Если он включён, Voice Call сначала ищет вопрос консультации в индексированном контексте памяти и сеанса и возвращает найденные фрагменты модели реального времени в пределах realtime.fastContext.timeoutMs, а затем обращается к полноценному агенту консультации, только если realtime.fastContext.fallbackToConsult имеет значение true.
  • Если realtime.provider указывает на незарегистрированного провайдера или ни один провайдер голосовой связи в реальном времени вообще не зарегистрирован, Voice Call записывает предупреждение в журнал и пропускает обработку мультимедиа в реальном времени вместо завершения всего плагина с ошибкой.
  • inboundPolicy не должен иметь значение "disabled", когда realtime.enabled имеет значение true; validateProviderConfig отклоняет такое сочетание.
  • Ключи сеанса консультации при наличии повторно используют сохранённый сеанс вызова, а иначе используют настроенный sessionScope (по умолчанию per-phone или per-call для изолированных вызовов).

Политика инструментов

realtime.toolPolicy управляет запуском консультации: realtime.consultPolicy управляет только инструкциями модели реального времени:

Голосовой контекст агента

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

Примеры провайдеров реального времени

Значения по умолчанию: ключ API из realtime.providers.google.apiKey, GEMINI_API_KEY или GOOGLE_API_KEY; модель gemini-3.1-flash-live-preview; голос Kore. sessionResumption и contextWindowCompression по умолчанию включены для более длительных вызовов с возможностью переподключения. Используйте silenceDurationMs, startSensitivity и endSensitivity, чтобы настроить более быструю смену реплик для телефонного аудио.
См. разделы Провайдер Google и Провайдер OpenAI, посвящённые параметрам голосовой связи в реальном времени для конкретных провайдеров.

Потоковая транскрипция

streaming подключает Twilio Media Streams к провайдеру транскрипции в реальном времени. Для классического потокового пути требуется provider: "twilio"; конфигурация с Telnyx, Plivo или mock отклоняется. Для передачи аудио Telnyx в реальном времени вместо этого используется отдельно аутентифицируемый путь realtime.enabled. Текущее поведение среды выполнения:
  • streaming.provider является необязательным. Если значение не задано, Voice Call использует первого зарегистрированного провайдера транскрипции в реальном времени.
  • Встроенные провайдеры транскрипции в реальном времени: Deepgram (deepgram), ElevenLabs (elevenlabs), Mistral (mistral), OpenAI (openai) и xAI (xai), зарегистрированные соответствующими плагинами провайдеров.
  • Необработанная конфигурация, принадлежащая провайдеру, находится в streaming.providers.<providerId>.
  • После получения от Twilio принятого сообщения потока start Voice Call немедленно регистрирует поток, ставит входящие мультимедийные данные в очередь для обработки провайдером транскрипции, пока тот подключается, и запускает начальное приветствие только после готовности транскрипции в реальном времени.
  • Если streaming.provider указывает на незарегистрированного провайдера или ни один провайдер не зарегистрирован, Voice Call записывает предупреждение в журнал и пропускает потоковую передачу мультимедиа вместо завершения всего плагина с ошибкой.

Примеры потоковых провайдеров

Значения по умолчанию: ключ API streaming.providers.openai.apiKey или OPENAI_API_KEY; модель gpt-4o-transcribe; silenceDurationMs: 800; vadThreshold: 0.5.

TTS для вызовов

Voice Call использует основную конфигурацию messages.tts для потокового синтеза речи во время вызовов. Её можно переопределить в конфигурации плагина, используя ту же структуру — она глубоко объединяется с messages.tts.
Синтез речи Microsoft игнорируется для голосовых вызовов. Для телефонного синтеза требуется провайдер, реализующий вывод для телефонии; провайдер синтеза речи Microsoft его не реализует, поэтому при вызовах он пропускается, а вместо него выполняются попытки использовать другие провайдеры из цепочки резервных вариантов.
Примечания о поведении:
  • Устаревшие ключи tts.<provider> в конфигурации плагина (openai, elevenlabs, microsoft, edge) исправляются командой openclaw doctor --fix; в сохраняемой конфигурации следует использовать tts.providers.<provider>.
  • Основной TTS используется, когда включена потоковая передача мультимедиа Twilio; в противном случае для вызовов используются встроенные голоса провайдера.
  • Если поток мультимедиа Twilio уже активен, Voice Call не переключается на резервный вариант TwiML <Say>. Если в этом состоянии телефонный TTS недоступен, запрос воспроизведения завершается с ошибкой вместо смешивания двух путей воспроизведения.
  • Когда телефонный TTS переключается на резервного провайдера, Voice Call записывает в журнал предупреждение с цепочкой провайдеров (from, to, attempts) для отладки.
  • Когда прерывание речи Twilio или завершение потока очищает очередь ожидающих запросов TTS, поставленные в очередь запросы воспроизведения завершаются, а не зависают, оставляя абонентов в ожидании окончания воспроизведения.

Примеры TTS

Входящие звонки

По умолчанию политика входящих звонков — disabled. Чтобы разрешить входящие звонки, задайте:
inboundPolicy: "allowlist" — это проверка идентификатора вызывающего абонента с низким уровнем достоверности. Плагин нормализует предоставленное провайдером значение From и сравнивает его с allowFrom. Проверка Webhook подтверждает доставку провайдером и целостность полезной нагрузки, но не подтверждает принадлежность номера вызывающему абоненту PSTN/VoIP. Рассматривайте allowFrom как фильтрацию идентификатора вызывающего абонента, а не как надёжное подтверждение его личности.
Автоматические ответы используют систему агентов. Настройте их с помощью responseModel, responseSystemPrompt и responseTimeoutMs.

Маршрутизация по номерам

Используйте numbers, когда один плагин Voice Call принимает звонки на несколько телефонных номеров и каждый номер должен работать как отдельная линия. Например, для одного номера можно использовать неформального личного помощника, а для другого — деловой образ, другого агента ответов и другой голос TTS. Маршруты выбираются по предоставленному провайдером набранному номеру To. Ключи должны быть номерами в формате E.164. При поступлении звонка Voice Call однократно определяет подходящий маршрут, сохраняет его в записи звонка и повторно использует эту итоговую конфигурацию для приветствия, классического пути автоматического ответа, пути консультации в реальном времени и воспроизведения TTS. Если подходящего маршрута нет, используется глобальная конфигурация Voice Call. Исходящие звонки не используют numbers; при инициировании звонка явно передавайте адресата исходящего звонка, сообщение и сеанс. Переопределения маршрутов в настоящее время поддерживают:
  • inboundGreeting
  • tts
  • agentId
  • responseModel
  • responseSystemPrompt
  • responseTimeoutMs
Значение маршрута tts глубоко сливается с глобальной конфигурацией Voice Call tts, поэтому обычно достаточно переопределить только голос провайдера:

Контракт речевого вывода

Для автоматических ответов Voice Call добавляет в системную подсказку строгий контракт речевого вывода, требующий ответа JSON {"spoken":"..."}. Voice Call защитным образом извлекает текст речи:
  • Игнорирует полезные нагрузки, помеченные как содержимое рассуждения или ошибки.
  • Анализирует непосредственно JSON, JSON в блоке кода или встроенные ключи "spoken".
  • При невозможности анализа использует обычный текст и удаляет начальные абзацы, предположительно содержащие планирование или метаданные.
Благодаря этому воспроизводимая речь содержит только текст, предназначенный для вызывающего абонента, а текст планирования не попадает в аудио.

Поведение при начале разговора

Для исходящих звонков conversation обработка первого сообщения связана с текущим состоянием воспроизведения:
  • Очистка очереди при перебивании и автоматический ответ подавляются только пока начальное приветствие активно воспроизводится.
  • Если начальное воспроизведение завершается ошибкой, звонок возвращается в состояние listening, а начальное сообщение остаётся в очереди для повторной попытки.
  • Начальное воспроизведение для потоковой передачи Twilio запускается при подключении потока без дополнительной задержки.
  • Перебивание прерывает активное воспроизведение и удаляет из очереди ещё не воспроизводимые записи TTS Twilio. Удалённые записи завершаются со статусом пропущенных, поэтому логика последующего ответа может продолжить работу, не ожидая аудио, которое уже не будет воспроизведено.
  • Голосовые разговоры в реальном времени используют собственную начальную реплику потока реального времени. Voice Call не отправляет устаревшее обновление TwiML <Say> для этого начального сообщения, поэтому исходящие сеансы <Connect><Stream> остаются подключёнными.

Льготный период при отключении потока Twilio

Когда медиапоток Twilio отключается, Voice Call ожидает 2000 мс, прежде чем автоматически завершить звонок:
  • Если поток повторно подключается в течение этого периода, автоматическое завершение отменяется.
  • Если после окончания льготного периода поток не регистрируется повторно, звонок завершается, чтобы активные звонки не зависали.

Очистка устаревших звонков

Используйте staleCallReaperSeconds (по умолчанию 120), чтобы завершать звонки, на которые не ответили и которые не перешли в состояние активного разговора, например звонки в режиме уведомления, для которых провайдер так и не отправил завершающий Webhook. Установите значение 0, чтобы отключить эту функцию. Очистка выполняется каждые 30 секунд и завершает только звонки, у которых отсутствует временная метка answeredAt и которые ещё не находятся в конечном состоянии или состоянии активного разговора (speaking/listening), поэтому отвеченные разговоры никогда не завершаются этим таймером; maxDurationSeconds (по умолчанию 300) — это отдельное ограничение, завершающее отвеченные звонки, которые длятся слишком долго. Для потоков в стиле уведомлений, где операторы могут медленно доставлять Webhook о звонке или ответе, увеличьте staleCallReaperSeconds относительно значения по умолчанию, чтобы медленные, но нормальные звонки не завершались преждевременно; 120300 секунд — разумный диапазон для промышленной эксплуатации.

Безопасность Webhook

Если перед Gateway расположен прокси-сервер или туннель, плагин восстанавливает публичный URL для проверки подписи. Эти параметры определяют, каким переадресованным заголовкам следует доверять:
string[]
Разрешённые хосты из переадресованных заголовков.
boolean
Доверять переадресованным заголовкам без списка разрешённых значений.
string[]
Доверять переадресованным заголовкам, только если удалённый IP-адрес запроса присутствует в списке.
Дополнительные меры защиты:
  • Защита Webhook от повторного воспроизведения включена для Twilio, Telnyx и Plivo. Повторно отправленные допустимые запросы Webhook подтверждаются, но их побочные эффекты пропускаются.
  • Реплики разговора Twilio содержат токен отдельной реплики в обратных вызовах <Gather>, поэтому устаревшие или повторно воспроизведённые обратные вызовы речи не могут удовлетворить ожидание более новой расшифровки реплики.
  • Неаутентифицированные запросы Webhook отклоняются до чтения тела, если отсутствуют обязательные заголовки подписи провайдера.
  • Webhook voice-call использует общий профиль чтения тела до аутентификации (максимальный размер тела 64 КБ, тайм-аут чтения 5 секунд), а также ограничение количества выполняющихся запросов для каждого ключа (по умолчанию 8 одновременных запросов на ключ) до проверки подписи.
Пример со стабильным публичным хостом:

CLI

Если Gateway уже запущен, рабочие команды voicecall делегируются среде выполнения voice-call, принадлежащей Gateway, чтобы CLI не привязывал второй сервер Webhook. Если Gateway недоступен, команды переключаются на автономную среду выполнения CLI. latency считывает calls.jsonl из стандартного пути хранилища voice-call. Используйте --file <path>, чтобы указать другой журнал, и --last <n>, чтобы ограничить анализ последними N записями (по умолчанию 200). Вывод включает минимальное, максимальное и среднее значения, p50 и p95 для задержки реплики и времени ожидания прослушивания.

Инструмент агента

Имя инструмента: voice_call. Плагин voice-call поставляется с соответствующим навыком агента.

RPC Gateway

dtmfSequence допустим только с mode: "conversation"; вызовы в режиме уведомления, которым после установления соединения требуется передача цифр, должны использовать voicecall.dtmf после создания вызова.

Устранение неполадок

Во время настройки не удаётся открыть доступ к Webhook

Запустите настройку в той же среде, где работает Gateway:
Для twilio, telnyx и plivo состояние webhook-exposure должно быть успешным. Даже настроенный publicUrl не работает, если он указывает на локальное или частное сетевое пространство, поскольку оператор не может выполнить обратный вызов по таким адресам. Не используйте localhost, 127.0.0.1, 0.0.0.0, 10.x, 172.16.x-172.31.x, 192.168.x, 169.254.x, fc00::/7, fd00::/8 и другие диапазоны NAT операторского класса в качестве publicUrl. Исходящие вызовы Twilio в режиме уведомления отправляют исходный TwiML <Say> непосредственно в запросе на создание вызова, поэтому первое голосовое сообщение не зависит от получения TwiML для Webhook службой Twilio. Публичный Webhook по-прежнему необходим для обратных вызовов состояния, разговорных вызовов, DTMF до подключения, потоков реального времени и управления вызовом после подключения. Используйте один способ открытия публичного доступа:
После изменения конфигурации перезапустите или перезагрузите Gateway, затем выполните:
voicecall smoke выполняется в тестовом режиме, если не передан --yes.

Ошибка учётных данных провайдера

Проверьте выбранного провайдера и обязательные поля учётных данных:
  • Twilio: twilio.accountSid, twilio.authToken и fromNumber либо TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN и TWILIO_FROM_NUMBER.
  • Telnyx: telnyx.apiKey, telnyx.connectionId, telnyx.publicKey и fromNumber либо TELNYX_API_KEY, TELNYX_CONNECTION_ID и TELNYX_PUBLIC_KEY.
  • Plivo: plivo.authId, plivo.authToken и fromNumber либо PLIVO_AUTH_ID и PLIVO_AUTH_TOKEN.
Учётные данные должны находиться на хосте Gateway. Изменение локального профиля оболочки не влияет на уже работающий Gateway, пока он не будет перезапущен или не перезагрузит своё окружение.

Вызовы начинаются, но Webhook от провайдера не поступают

Убедитесь, что в консоли провайдера указан точный URL публичного Webhook:
Затем проверьте состояние среды выполнения:
Распространённые причины:
  • publicUrl указывает на путь, отличный от serve.path.
  • URL туннеля изменился после запуска Gateway.
  • Прокси перенаправляет запрос, но удаляет или изменяет заголовки хоста или протокола.
  • Брандмауэр или DNS направляет публичное имя хоста не на Gateway.
  • Gateway был перезапущен без включённого плагина Voice Call.
Если перед Gateway расположен обратный прокси или туннель, задайте в webhookSecurity.allowedHosts публичное имя хоста либо используйте webhookSecurity.trustedProxyIPs для известного адреса прокси. Используйте webhookSecurity.trustForwardingHeaders только тогда, когда граница прокси находится под вашим контролем.

Ошибка проверки подписи

Подписи провайдера проверяются относительно публичного URL, который OpenClaw восстанавливает из входящего запроса. Если проверка подписи завершается ошибкой:
  • Убедитесь, что URL Webhook провайдера в точности совпадает с publicUrl, включая схему, хост и путь.
  • Для URL бесплатного тарифа ngrok обновляйте publicUrl при изменении имени хоста туннеля.
  • Убедитесь, что прокси сохраняет исходные заголовки хоста и протокола, либо настройте webhookSecurity.allowedHosts.
  • Не включайте skipSignatureVerification за пределами локального тестирования.

Не удаётся подключиться к Google Meet через Twilio

Google Meet использует этот плагин для подключения через телефонный доступ Twilio. Сначала проверьте Voice Call:
Затем отдельно проверьте транспорт Google Meet:
Если Voice Call работает, но участник не подключается к встрече, проверьте номер телефонного доступа Meet, PIN-код и --dtmf-sequence. Телефонный вызов может работать нормально, даже если встреча отклоняет или игнорирует неверную последовательность DTMF. Google Meet запускает телефонный сегмент Twilio через voicecall.start с последовательностью DTMF до подключения. Последовательности, производные от PIN-кода, включают voiceCall.dtmfDelayMs плагина Google Meet (по умолчанию 12000 ms) в качестве начальных цифр ожидания Twilio, поскольку подсказки телефонного доступа Meet могут поступать с задержкой. Затем Voice Call перенаправляет вызов обратно на обработку в реальном времени до запроса вступительного приветствия. Используйте openclaw logs --follow для просмотра трассировки этапов в реальном времени. При успешном подключении Twilio к Meet события регистрируются в следующем порядке:
  • Google Meet передаёт подключение через Twilio плагину Voice Call.
  • Voice Call сохраняет TwiML с DTMF до подключения.
  • Исходный TwiML Twilio обрабатывается и передаётся до начала обработки в реальном времени.
  • Voice Call передаёт TwiML реального времени для вызова Twilio.
  • Google Meet запрашивает вступительную речь с voicecall.speak после задержки, следующей за DTMF.
openclaw voicecall tail по-прежнему показывает сохранённые записи вызовов; это полезно для просмотра состояния вызовов и расшифровок, но не все переходы Webhook и обработки в реальном времени отображаются там.

В вызове реального времени отсутствует речь

Убедитесь, что включён только один режим аудио: realtime.enabled и streaming.enabled не могут одновременно иметь значение true. Для вызовов Twilio/Telnyx в реальном времени также проверьте следующее:
  • Плагин провайдера реального времени загружен и зарегистрирован.
  • realtime.provider не задан или содержит имя зарегистрированного провайдера.
  • Ключ API провайдера доступен процессу Gateway.
  • openclaw logs --follow показывает, что TwiML реального времени передан, мост реального времени запущен, а исходное приветствие поставлено в очередь.

Связанные разделы