Voice Call(プラグイン)
プラグイン経由の OpenClaw 用ボイスコール。アウトバウンド通知とインバウンドポリシーを使用したマルチターン会話をサポートします。
現在のプロバイダー:
- twilio(Programmable Voice + Media Streams)
- telnyx(Call Control v2)
- plivo(Voice API + XML transfer + GetInput speech)
- mock(dev/ネットワークなし)
クイックメンタルモデル:
- プラグインをインストール
- Gateway を再起動
- plugins.entries.voice-call.config で設定
- openclaw voicecall ... または voice_call ツールを使用
実行場所(ローカル vs リモート)
Voice Call プラグインは Gateway プロセス内 で実行されます。
リモート Gateway を使用する場合は、Gateway を実行しているマシン にプラグインをインストール/設定してから、Gateway を再起動してロードします。
インストール
オプション A: npm からインストール(推奨)
openclaw plugins install @openclaw/voice-call
その後、Gateway を再起動します。
オプション B: ローカルフォルダからインストール(dev、コピーなし)
openclaw plugins install ./extensions/voice-call
cd ./extensions/voice-call && pnpm install
その後、Gateway を再起動します。
設定
plugins.entries.voice-call.config の下に設定を配置:
{
plugins: {
entries: {
"voice-call": {
enabled: true,
config: {
provider: "twilio", // または "telnyx" | "plivo" | "mock"
fromNumber: "+15550001234",
toNumber: "+15550005678",
twilio: {
accountSid: "ACxxxxxxxx",
authToken: "..."
},
plivo: {
authId: "MAxxxxxxxxxxxxxxxxxxxx",
authToken: "..."
},
// Webhook サーバー
serve: {
port: 3334,
path: "/voice/webhook"
},
// パブリック公開(1 つ選択)
// publicUrl: "https://example.ngrok.app/voice/webhook",
// tunnel: { provider: "ngrok" },
// tailscale: { mode: "funnel", path: "/voice/webhook" }
outbound: {
defaultMode: "notify" // notify | conversation
},
streaming: {
enabled: true,
streamPath: "/voice/stream"
}
}
}
}
}
}
注記:
- Twilio/Telnyx には パブリックに到達可能な webhook URL が必要です。
- Plivo には パブリックに到達可能な webhook URL が必要です。
- mock はローカル dev プロバイダーです(ネットワークコールなし)。
- skipSignatureVerification はローカルテスト専用です。
- ngrok 無料層を使用する場合は、publicUrl を正確な ngrok URL に設定します。署名検証は常に強制されます。
- tunnel.allowNgrokFreeTierLoopbackBypass: true は、tunnel.provider="ngrok" で serve.bind がループバック(ngrok ローカルエージェント)の場合 のみ、無効な署名を持つ Twilio webhook を許可します。ローカル dev のみに使用してください。
- Ngrok 無料層 URL は変更されるか、中間動作を追加する可能性があります。publicUrl がずれると、Twilio 署名は失敗します。本番環境では、安定したドメインまたは Tailscale funnel を優先してください。
コール用 TTS
Voice Call は、コールでのストリーミング音声に、コア messages.tts 設定(OpenAI または ElevenLabs)を使用します。プラグイン設定の下で 同じ形状 でオーバーライドできます — messages.tts と深くマージされます。
{
tts: {
provider: "elevenlabs",
elevenlabs: {
voiceId: "pMsXgVXv3BLzUgSXRplE",
modelId: "eleven_multilingual_v2"
}
}
}
注記:
- Edge TTS はボイスコールでは無視されます(テレフォニーオーディオには PCM が必要です。Edge 出力は信頼性がありません)。
- Twilio メディアストリーミングが有効な場合、コア TTS が使用されます。それ以外の場合、コールはプロバイダーネイティブボイスにフォールバックします。
その他の例
コア TTS のみを使用(オーバーライドなし):
{
messages: {
tts: {
provider: "openai",
openai: { voice: "alloy" }
}
}
}
コール用に ElevenLabs にのみオーバーライド(他の場所でコアデフォルトを保持):
{
plugins: {
entries: {
"voice-call": {
config: {
tts: {
provider: "elevenlabs",
elevenlabs: {
apiKey: "elevenlabs_key",
voiceId: "pMsXgVXv3BLzUgSXRplE",
modelId: "eleven_multilingual_v2"
}
}
}
}
}
}
}
コール用に OpenAI モデルのみをオーバーライド(深いマージの例):
{
plugins: {
entries: {
"voice-call": {
config: {
tts: {
openai: {
model: "gpt-4o-mini-tts",
voice: "marin"
}
}
}
}
}
}
}
インバウンドコール
インバウンドポリシーのデフォルトは disabled です。インバウンドコールを有効にするには、次のように設定します:
{
inboundPolicy: "allowlist",
allowFrom: ["+15550001234"],
inboundGreeting: "Hello! How can I help?"
}
自動応答はエージェントシステムを使用します。以下で調整:
- responseModel
- responseSystemPrompt
- responseTimeoutMs
CLI
openclaw voicecall call --to "+15555550123" --message "Hello from OpenClaw"
openclaw voicecall continue --call-id <id> --message "Any questions?"
openclaw voicecall speak --call-id <id> --message "One moment"
openclaw voicecall end --call-id <id>
openclaw voicecall status --call-id <id>
openclaw voicecall tail
openclaw voicecall expose --mode funnel
エージェントツール
ツール名: voice_call
アクション:
- initiate_call(message、to?、mode?)
- continue_call(callId、message)
- speak_to_user(callId、message)
- end_call(callId)
- get_status(callId)
このリポジトリには、skills/voice-call/SKILL.md に一致するスキルドキュメントが同梱されています。
Gateway RPC
- voicecall.initiate(to?、message、mode?)
- voicecall.continue(callId、message)
- voicecall.speak(callId、message)
- voicecall.end(callId)
- voicecall.status(callId)