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.initiateto?messagemode?
  • voicecall.continuecallIdmessage
  • voicecall.speakcallIdmessage
  • voicecall.endcallId
  • voicecall.statuscallId