Połączenia głosowe dla OpenClaw przez Plugin. Obsługuje powiadomienia wychodzące, wieloturowe rozmowy, pełnodupleksowy głos w czasie rzeczywistym, strumieniową transkrypcję oraz połączenia przychodzące z zasadami listy dozwolonych. Aktualni dostawcy:Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
twilio (Programmable Voice + Media Streams),
telnyx (Call Control v2), plivo (Voice API + XML transfer + GetInput
speech), mock (tryb deweloperski/bez sieci).
Plugin Voice Call działa wewnątrz procesu Gateway. Jeśli używasz
zdalnego Gateway, zainstaluj i skonfiguruj Plugin na maszynie, na której
działa Gateway, a następnie uruchom ponownie Gateway, aby go załadować.
Szybki start
Zainstaluj Plugin
- Z npm
- Z folderu lokalnego (dev)
Skonfiguruj dostawcę i Webhook
Ustaw konfigurację w
plugins.entries.voice-call.config (pełny kształt
znajdziesz poniżej w sekcji Konfiguracja). Minimalnie:
provider, dane uwierzytelniające dostawcy, fromNumber oraz publicznie
osiągalny adres URL Webhook.Zweryfikuj konfigurację
streaming albo realtime).
Użyj --json w skryptach.Konfiguracja
Jeślienabled: true, ale wybranemu dostawcy brakuje danych uwierzytelniających,
uruchomienie Gateway zapisuje ostrzeżenie o niekompletnej konfiguracji z
brakującymi kluczami i pomija uruchomienie środowiska wykonawczego. Polecenia,
wywołania RPC i narzędzia agenta nadal zwracają dokładną brakującą konfigurację
dostawcy, gdy są używane.
Dane uwierzytelniające voice-call akceptują SecretRefs.
plugins.entries.voice-call.config.twilio.authToken, plugins.entries.voice-call.config.realtime.providers.*.apiKey, plugins.entries.voice-call.config.streaming.providers.*.apiKey oraz plugins.entries.voice-call.config.tts.providers.*.apiKey są rozwiązywane przez standardową powierzchnię SecretRef; zobacz powierzchnię danych uwierzytelniających SecretRef.Ekspozycja dostawcy i uwagi dotyczące bezpieczeństwa
Ekspozycja dostawcy i uwagi dotyczące bezpieczeństwa
- Twilio, Telnyx i Plivo wymagają publicznie osiągalnego adresu URL Webhook.
mockto lokalny dostawca deweloperski (bez wywołań sieciowych).- Telnyx wymaga
telnyx.publicKey(alboTELNYX_PUBLIC_KEY), chyba żeskipSignatureVerificationma wartość true. skipSignatureVerificationsłuży tylko do testów lokalnych.- W bezpłatnej warstwie ngrok ustaw
publicUrlna dokładny URL ngrok; weryfikacja podpisów jest zawsze wymuszana. tunnel.allowNgrokFreeTierLoopbackBypass: truezezwala na Webhook Twilio z nieprawidłowymi podpisami tylko wtedy, gdytunnel.provider="ngrok"iserve.bindto local loopback (lokalny agent ngrok). Tylko lokalny dev.- Adresy URL bezpłatnej warstwy Ngrok mogą się zmieniać lub dodawać zachowanie pośrednie; jeśli
publicUrlsię rozjedzie, podpisy Twilio przestaną działać. Produkcja: preferuj stabilną domenę albo tunel Tailscale.
Limity połączeń strumieniowych
Limity połączeń strumieniowych
streaming.preStartTimeoutMszamyka gniazda, które nigdy nie wysyłają prawidłowej ramkistart.streaming.maxPendingConnectionsogranicza łączną liczbę nieuwierzytelnionych gniazd przed startem.streaming.maxPendingConnectionsPerIpogranicza nieuwierzytelnione gniazda przed startem na źródłowy adres IP.streaming.maxConnectionsogranicza łączną liczbę otwartych gniazd strumienia mediów (oczekujących + aktywnych).
Migracje starszej konfiguracji
Migracje starszej konfiguracji
Starsze konfiguracje używające
provider: "log", twilio.from albo starszych
kluczy OpenAI streaming.* są przepisywane przez openclaw doctor --fix.
Awaryjna obsługa w czasie wykonywania nadal akceptuje stare klucze voice-call,
ale ścieżką przepisywania jest openclaw doctor --fix, a warstwa zgodności
jest tymczasowa.Automatycznie migrowane klucze strumieniowania:streaming.sttProvider→streaming.providerstreaming.openaiApiKey→streaming.providers.openai.apiKeystreaming.sttModel→streaming.providers.openai.modelstreaming.silenceDurationMs→streaming.providers.openai.silenceDurationMsstreaming.vadThreshold→streaming.providers.openai.vadThreshold
Zakres sesji
Domyślnie Voice Call używasessionScope: "per-phone", więc powtórne połączenia
od tego samego dzwoniącego zachowują pamięć rozmowy. Ustaw sessionScope: "per-call",
gdy każde połączenie operatora powinno zaczynać ze świeżym kontekstem, na przykład
w przepływach recepcji, rezerwacji, IVR albo mostka Google Meet, gdzie ten sam
numer telefonu może reprezentować różne spotkania.
Rozmowy głosowe w czasie rzeczywistym
realtime wybiera pełnodupleksowego dostawcę głosu w czasie rzeczywistym dla
dźwięku połączeń na żywo. Jest oddzielny od streaming, które tylko przekazuje
dźwięk do dostawców transkrypcji w czasie rzeczywistym.
Aktualne zachowanie środowiska wykonawczego:
realtime.enabledjest obsługiwane dla Twilio Media Streams.realtime.providerjest opcjonalne. Jeśli nie jest ustawione, Voice Call używa pierwszego zarejestrowanego dostawcy głosu w czasie rzeczywistym.- Dołączani dostawcy głosu w czasie rzeczywistym: Google Gemini Live (
google) i OpenAI (openai), rejestrowani przez ich Plugin dostawców. - Surowa konfiguracja należąca do dostawcy znajduje się w
realtime.providers.<providerId>. - Voice Call domyślnie udostępnia współdzielone narzędzie czasu rzeczywistego
openclaw_agent_consult. Model czasu rzeczywistego może je wywołać, gdy dzwoniący prosi o głębsze rozumowanie, aktualne informacje albo normalne narzędzia OpenClaw. realtime.consultPolicyopcjonalnie dodaje wskazówki, kiedy model czasu rzeczywistego powinien wywołaćopenclaw_agent_consult.realtime.agentContext.enabledjest domyślnie wyłączone. Po włączeniu Voice Call wstrzykuje ograniczoną tożsamość agenta, nadpisanie promptu systemowego i wybraną kapsułę plików obszaru roboczego do instrukcji dostawcy czasu rzeczywistego podczas konfiguracji sesji.realtime.fastContext.enabledjest domyślnie wyłączone. Po włączeniu Voice Call najpierw przeszukuje zindeksowaną pamięć/kontekst sesji pod kątem pytania konsultacyjnego i zwraca te fragmenty do modelu czasu rzeczywistego w ramachrealtime.fastContext.timeoutMs, zanim przejdzie awaryjnie do pełnego agenta konsultacyjnego tylko wtedy, gdyrealtime.fastContext.fallbackToConsultma wartość true.- Jeśli
realtime.providerwskazuje niezarejestrowanego dostawcę albo żaden dostawca głosu w czasie rzeczywistym nie jest w ogóle zarejestrowany, Voice Call zapisuje ostrzeżenie i pomija media czasu rzeczywistego zamiast przerywać działanie całego Plugin. - Klucze sesji konsultacji ponownie używają zapisanej sesji połączenia, gdy jest dostępna, a następnie przechodzą awaryjnie do skonfigurowanego
sessionScope(per-phonedomyślnie alboper-calldla izolowanych połączeń).
Zasady narzędzi
realtime.toolPolicy steruje uruchomieniem konsultacji:
| Zasada | Zachowanie |
|---|---|
safe-read-only | Udostępnia narzędzie konsultacji i ogranicza zwykłego agenta do read, web_search, web_fetch, x_search, memory_search oraz memory_get. |
owner | Udostępnia narzędzie konsultacji i pozwala zwykłemu agentowi używać normalnych zasad narzędzi agenta. |
none | Nie udostępnia narzędzia konsultacji. Niestandardowe realtime.tools nadal są przekazywane do dostawcy czasu rzeczywistego. |
realtime.consultPolicy steruje tylko instrukcjami modelu czasu rzeczywistego:
| Zasada | Wskazówki |
|---|---|
auto | Zachowaj domyślny prompt i pozwól dostawcy zdecydować, kiedy wywołać narzędzie konsultacji. |
substantive | Odpowiadaj bezpośrednio na proste elementy rozmowy i konsultuj przed faktami, pamięcią, narzędziami lub kontekstem. |
always | Konsultuj przed każdą merytoryczną odpowiedzią. |
Kontekst głosowy agenta
Włączrealtime.agentContext, gdy mostek głosowy powinien brzmieć jak
skonfigurowany agent OpenClaw bez kosztu pełnej rundy agent-consult przy
zwykłych turach. Kapsuła kontekstu jest dodawana raz podczas tworzenia sesji
czasu rzeczywistego, więc nie dodaje opóźnienia na turę. Wywołania
openclaw_agent_consult nadal uruchamiają pełnego agenta OpenClaw i powinny
być używane do pracy z narzędziami, aktualnych informacji, wyszukiwania w
pamięci albo stanu obszaru roboczego.
Przykłady dostawców realtime
- Google Gemini Live
- OpenAI
Domyślne: klucz API z
realtime.providers.google.apiKey,
GEMINI_API_KEY albo GOOGLE_GENERATIVE_AI_API_KEY; model
gemini-2.5-flash-native-audio-preview-12-2025; głos Kore.
sessionResumption i contextWindowCompression są domyślnie włączone dla dłuższych,
możliwych do ponownego połączenia rozmów. Użyj silenceDurationMs, startSensitivity i
endSensitivity, aby dostroić szybsze przejmowanie tury w dźwięku telefonicznym.Transkrypcja strumieniowa
streaming wybiera dostawcę transkrypcji realtime dla dźwięku połączeń na żywo.
Bieżące zachowanie runtime:
streaming.providerjest opcjonalne. Jeśli nie jest ustawione, Voice Call używa pierwszego zarejestrowanego dostawcy transkrypcji realtime.- Wbudowani dostawcy transkrypcji realtime: Deepgram (
deepgram), ElevenLabs (elevenlabs), Mistral (mistral), OpenAI (openai) i xAI (xai), rejestrowani przez ich Plugin dostawców. - Surowa konfiguracja należąca do dostawcy znajduje się pod
streaming.providers.<providerId>. - Gdy Twilio wyśle zaakceptowaną wiadomość
startstrumienia, Voice Call natychmiast rejestruje strumień, kolejkuje przychodzące media przez dostawcę transkrypcji, gdy dostawca się łączy, i rozpoczyna początkowe powitanie dopiero po gotowości transkrypcji realtime. - Jeśli
streaming.providerwskazuje niezarejestrowanego dostawcę albo żaden nie jest zarejestrowany, Voice Call zapisuje ostrzeżenie w dzienniku i pomija strumieniowanie multimediów zamiast kończyć cały Plugin błędem.
Przykłady dostawców strumieniowania
- OpenAI
- xAI
Domyślne: klucz API
streaming.providers.openai.apiKey albo
OPENAI_API_KEY; model gpt-4o-transcribe; silenceDurationMs: 800;
vadThreshold: 0.5.TTS dla połączeń
Voice Call używa podstawowej konfiguracjimessages.tts do strumieniowania
mowy podczas połączeń. Możesz ją zastąpić w konfiguracji Plugin z
tym samym kształtem — zostanie głęboko scalona z messages.tts.
- Starsze klucze
tts.<provider>w konfiguracji Plugin (openai,elevenlabs,microsoft,edge) są naprawiane przezopenclaw doctor --fix; zatwierdzona konfiguracja powinna używaćtts.providers.<provider>. - Podstawowe TTS jest używane, gdy strumieniowanie multimediów Twilio jest włączone; w przeciwnym razie połączenia wracają do natywnych głosów dostawcy.
- Jeśli strumień multimediów Twilio jest już aktywny, Voice Call nie wraca do TwiML
<Say>. Jeśli TTS telefoniczny jest niedostępny w tym stanie, żądanie odtwarzania kończy się niepowodzeniem zamiast mieszać dwie ścieżki odtwarzania. - Gdy TTS telefoniczny wraca do dostawcy zapasowego, Voice Call zapisuje ostrzeżenie z łańcuchem dostawców (
from,to,attempts) na potrzeby debugowania. - Gdy Twilio barge-in lub zamknięcie strumienia czyści oczekującą kolejkę TTS, zakolejkowane żądania odtwarzania są rozstrzygane zamiast pozostawiać dzwoniących w oczekiwaniu na ukończenie odtwarzania.
Przykłady TTS
- Core TTS only
- Override to ElevenLabs (calls only)
- OpenAI model override (deep-merge)
Połączenia przychodzące
Domyślna polityka połączeń przychodzących todisabled. Aby włączyć połączenia przychodzące, ustaw:
responseModel,
responseSystemPrompt i responseTimeoutMs.
Routing według numeru
Użyjnumbers, gdy jeden Plugin Voice Call odbiera połączenia dla wielu numerów
telefonu, a każdy numer powinien zachowywać się jak osobna linia. Na przykład jeden
numer może używać swobodnego osobistego asystenta, a inny persony biznesowej,
innego agenta odpowiedzi i innego głosu TTS.
Trasy są wybierane na podstawie dostarczonego przez dostawcę wybranego numeru To. Klucze muszą być
numerami E.164. Gdy nadejdzie połączenie, Voice Call raz rozwiązuje pasującą trasę,
zapisuje dopasowaną trasę w rekordzie połączenia i ponownie używa tej efektywnej konfiguracji
dla powitania, klasycznej ścieżki automatycznej odpowiedzi, ścieżki konsultacji realtime i odtwarzania
TTS. Jeśli żadna trasa nie pasuje, używana jest globalna konfiguracja Voice Call.
Połączenia wychodzące nie używają numbers; podczas inicjowania połączenia przekaż jawnie
cel wychodzący, wiadomość i sesję.
Zastąpienia tras obecnie obsługują:
inboundGreetingttsagentIdresponseModelresponseSystemPromptresponseTimeoutMs
tts jest głęboko scalana z globalną konfiguracją tts Voice Call, więc
zwykle możesz zastąpić tylko głos dostawcy:
Kontrakt wypowiedzi mówionej
W przypadku automatycznych odpowiedzi Voice Call dołącza ścisły kontrakt wypowiedzi mówionej do promptu systemowego:- Ignoruje ładunki oznaczone jako treść rozumowania/błędu.
- Parsuje bezpośredni JSON, JSON w bloku kodu albo wbudowane klucze
"spoken". - Wraca do zwykłego tekstu i usuwa prawdopodobne akapity wprowadzające dotyczące planowania/metadanych.
Zachowanie uruchamiania rozmowy
W przypadku wychodzących połączeńconversation obsługa pierwszej wiadomości jest powiązana ze stanem
odtwarzania na żywo:
- Czyszczenie kolejki barge-in i automatyczna odpowiedź są wstrzymywane tylko wtedy, gdy początkowe powitanie jest aktywnie wypowiadane.
- Jeśli początkowe odtwarzanie się nie powiedzie, połączenie wraca do
listening, a początkowa wiadomość pozostaje w kolejce do ponowienia. - Początkowe odtwarzanie dla strumieniowania Twilio zaczyna się przy połączeniu strumienia bez dodatkowego opóźnienia.
- Barge-in przerywa aktywne odtwarzanie i czyści zakolejkowane, ale jeszcze nieodtwarzane wpisy Twilio TTS. Wyczyszczone wpisy rozstrzygają się jako pominięte, więc logika odpowiedzi uzupełniającej może kontynuować bez czekania na dźwięk, który nigdy nie zostanie odtworzony.
- Rozmowy głosowe realtime używają własnej początkowej tury strumienia realtime. Voice Call nie publikuje starszej aktualizacji TwiML
<Say>dla tej początkowej wiadomości, więc sesje wychodzące<Connect><Stream>pozostają podłączone.
Okres karencji rozłączenia strumienia Twilio
Gdy strumień multimediów Twilio zostanie rozłączony, Voice Call czeka 2000 ms przed automatycznym zakończeniem połączenia:- Jeśli strumień połączy się ponownie w tym oknie, automatyczne zakończenie zostaje anulowane.
- Jeśli po okresie karencji żaden strumień nie zarejestruje się ponownie, połączenie zostaje zakończone, aby zapobiec zablokowanym aktywnym połączeniom.
Czyszczenie nieaktualnych połączeń
UżyjstaleCallReaperSeconds, aby zakończyć połączenia, które nigdy nie otrzymują końcowego
Webhook (na przykład połączenia w trybie powiadamiania, które nigdy się nie kończą). Wartość domyślna
to 0 (wyłączone).
Zalecane zakresy:
- Produkcja:
120–300sekund dla przepływów typu powiadomieniowego. - Utrzymuj tę wartość wyższą niż
maxDurationSeconds, aby normalne wywołania mogły się zakończyć. Dobry punkt wyjścia tomaxDurationSeconds + 30–60sekund.
Zabezpieczenia Webhook
Gdy przed Gateway działa proxy lub tunel, plugin odtwarza publiczny adres URL do weryfikacji podpisu. Te opcje kontrolują, którym nagłówkom przekazywanym można ufać:Lista dozwolonych hostów z nagłówków przekazywania.
Ufaj nagłówkom przekazywanym bez listy dozwolonych.
Ufaj nagłówkom przekazywanym tylko wtedy, gdy zdalny adres IP żądania pasuje do listy.
- Ochrona przed ponownym odtworzeniem Webhook jest włączona dla Twilio i Plivo. Ponownie odtworzone prawidłowe żądania Webhook są potwierdzane, ale pomijane pod kątem skutków ubocznych.
- Tury konwersacji Twilio zawierają token dla każdej tury w wywołaniach zwrotnych
<Gather>, więc przestarzałe lub ponownie odtworzone wywołania zwrotne mowy nie mogą zaspokoić nowszej oczekującej tury transkrypcji. - Nieuwierzytelnione żądania Webhook są odrzucane przed odczytem treści, gdy brakuje wymaganych nagłówków podpisu dostawcy.
- Webhook połączeń głosowych używa współdzielonego profilu treści przed uwierzytelnieniem (64 KB / 5 sekund) oraz limitu trwających żądań dla adresu IP przed weryfikacją podpisu.
CLI
voicecall delegują do środowiska wykonawczego połączeń głosowych zarządzanego przez Gateway, aby CLI nie wiązało drugiego serwera Webhook. Jeśli żaden Gateway nie jest osiągalny, polecenia przechodzą awaryjnie na samodzielne środowisko wykonawcze CLI.
latency odczytuje calls.jsonl z domyślnej ścieżki przechowywania połączeń głosowych. Użyj --file <path>, aby wskazać inny dziennik, oraz --last <n>, aby ograniczyć analizę do ostatnich N rekordów (domyślnie 200). Dane wyjściowe zawierają p50/p90/p99 dla opóźnienia tury oraz czasów oczekiwania na słuchanie.
Narzędzie agenta
Nazwa narzędzia:voice_call.
| Akcja | Argumenty |
|---|---|
initiate_call | message, to?, mode?, dtmfSequence? |
continue_call | callId, message |
speak_to_user | callId, message |
send_dtmf | callId, digits |
end_call | callId |
get_status | callId |
skills/voice-call/SKILL.md.
RPC Gateway
| Metoda | Argumenty |
|---|---|
voicecall.initiate | to?, message, mode?, dtmfSequence? |
voicecall.continue | callId, message |
voicecall.speak | callId, message |
voicecall.dtmf | callId, digits |
voicecall.end | callId |
voicecall.status | callId |
dtmfSequence jest prawidłowe tylko z mode: "conversation". Połączenia w trybie powiadamiania powinny używać voicecall.dtmf po utworzeniu połączenia, jeśli potrzebują cyfr po nawiązaniu połączenia.
Rozwiązywanie problemów
Konfiguracja nie może udostępnić Webhook
Uruchom konfigurację z tego samego środowiska, w którym działa Gateway:twilio, telnyx i plivo element webhook-exposure musi być zielony. Skonfigurowany publicUrl nadal kończy się niepowodzeniem, gdy wskazuje lokalną lub prywatną przestrzeń sieciową, ponieważ operator nie może oddzwonić na te adresy. Nie używaj 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 ani fd00::/8 jako publicUrl.
Połączenia wychodzące Twilio w trybie powiadamiania wysyłają początkowy TwiML <Say> bezpośrednio w żądaniu utworzenia połączenia, więc pierwsza wypowiedziana wiadomość nie zależy od pobrania TwiML Webhook przez Twilio. Publiczny Webhook nadal jest wymagany do wywołań zwrotnych statusu, połączeń konwersacyjnych, DTMF przed nawiązaniem połączenia, strumieni czasu rzeczywistego oraz sterowania połączeniem po nawiązaniu.
Użyj jednej publicznej ścieżki udostępniania:
voicecall smoke jest przebiegiem próbnym, chyba że przekażesz --yes.
Dane uwierzytelniające dostawcy zawodzą
Sprawdź wybranego dostawcę i wymagane pola danych uwierzytelniających:- Twilio:
twilio.accountSid,twilio.authTokenifromNumberalboTWILIO_ACCOUNT_SID,TWILIO_AUTH_TOKENiTWILIO_FROM_NUMBER. - Telnyx:
telnyx.apiKey,telnyx.connectionId,telnyx.publicKeyifromNumber. - Plivo:
plivo.authId,plivo.authTokenifromNumber.
Połączenia się rozpoczynają, ale Webhook dostawcy nie docierają
Potwierdź, że konsola dostawcy wskazuje dokładny publiczny adres URL Webhook:publicUrlwskazuje inną ścieżkę niżserve.path.- Adres URL tunelu zmienił się po uruchomieniu Gateway.
- Proxy przekazuje żądanie, ale usuwa lub przepisuje nagłówki hosta albo protokołu.
- Zapora lub DNS kieruje publiczną nazwę hosta gdzie indziej niż do Gateway.
- Gateway został uruchomiony ponownie bez włączonego Plugin Voice Call.
webhookSecurity.allowedHosts na publiczną nazwę hosta albo użyj webhookSecurity.trustedProxyIPs dla znanego adresu proxy. Używaj webhookSecurity.trustForwardingHeaders tylko wtedy, gdy granica proxy jest pod Twoją kontrolą.
Weryfikacja podpisu kończy się niepowodzeniem
Podpisy dostawcy są sprawdzane względem publicznego adresu URL, który OpenClaw odtwarza z przychodzącego żądania. Jeśli podpisy zawodzą:- Potwierdź, że adres URL Webhook dostawcy dokładnie pasuje do
publicUrl, w tym schemat, host i ścieżkę. - W przypadku adresów URL darmowej warstwy ngrok zaktualizuj
publicUrl, gdy zmieni się nazwa hosta tunelu. - Upewnij się, że proxy zachowuje oryginalne nagłówki hosta i protokołu, albo skonfiguruj
webhookSecurity.allowedHosts. - Nie włączaj
skipSignatureVerificationpoza lokalnym testowaniem.
Dołączenia Google Meet przez Twilio zawodzą
Google Meet używa tego pluginu do dołączeń przez numer telefoniczny Twilio. Najpierw zweryfikuj Voice Call:--dtmf-sequence. Połączenie telefoniczne może być sprawne, podczas gdy spotkanie odrzuca lub ignoruje nieprawidłową sekwencję DTMF.
Google Meet uruchamia odcinek telefoniczny Twilio przez voicecall.start z sekwencją DTMF przed nawiązaniem połączenia. Sekwencje pochodzące z PIN-u zawierają voiceCall.dtmfDelayMs pluginu Google Meet jako początkowe cyfry oczekiwania Twilio. Domyślna wartość to 12 sekund, ponieważ monity dołączenia telefonicznego Meet mogą nadejść późno. Następnie Voice Call przekierowuje z powrotem do obsługi czasu rzeczywistego przed zażądaniem powitania wprowadzającego.
Użyj openclaw logs --follow dla śledzenia fazy na żywo. Zdrowe dołączenie Twilio Meet zapisuje w dzienniku tę kolejność:
- Google Meet deleguje dołączenie Twilio do Voice Call.
- Voice Call przechowuje TwiML DTMF przed nawiązaniem połączenia.
- Początkowy TwiML Twilio jest zużywany i serwowany przed obsługą czasu rzeczywistego.
- Voice Call serwuje TwiML czasu rzeczywistego dla połączenia Twilio.
- Google Meet żąda mowy wprowadzającej przez
voicecall.speakpo opóźnieniu po DTMF.
openclaw voicecall tail nadal pokazuje utrwalone rekordy połączeń; jest przydatne dla stanu połączenia i transkrypcji, ale nie każde przejście Webhook lub czasu rzeczywistego się tam pojawia.
Połączenie w czasie rzeczywistym nie ma mowy
Potwierdź, że włączony jest tylko jeden tryb audio.realtime.enabled i streaming.enabled nie mogą jednocześnie mieć wartości true.
Dla połączeń Twilio w czasie rzeczywistym sprawdź także:
- Plugin dostawcy czasu rzeczywistego jest załadowany i zarejestrowany.
realtime.providerjest nieustawione albo wskazuje zarejestrowanego dostawcę.- Klucz API dostawcy jest dostępny dla procesu Gateway.
openclaw logs --followpokazuje zaserwowany TwiML czasu rzeczywistego, uruchomiony most czasu rzeczywistego i początkowe powitanie dodane do kolejki.