mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 11:30:43 +00:00
feat(voice-call): route inbound calls per number
This commit is contained in:
@@ -110,6 +110,17 @@ Voice-call credentials accept SecretRefs. `plugins.entries.voice-call.config.twi
|
||||
fromNumber: "+15550001234", // or TWILIO_FROM_NUMBER for Twilio
|
||||
toNumber: "+15550005678",
|
||||
sessionScope: "per-phone", // per-phone | per-call
|
||||
numbers: {
|
||||
"+15550009999": {
|
||||
inboundGreeting: "Silver Fox Cards, how can I help?",
|
||||
responseSystemPrompt: "You are a concise baseball card specialist.",
|
||||
tts: {
|
||||
providers: {
|
||||
openai: { voice: "alloy" },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
twilio: {
|
||||
accountSid: "ACxxxxxxxx",
|
||||
@@ -500,6 +511,57 @@ identity.
|
||||
Auto-responses use the agent system. Tune with `responseModel`,
|
||||
`responseSystemPrompt`, and `responseTimeoutMs`.
|
||||
|
||||
### Per-number Routing
|
||||
|
||||
Use `numbers` when one Voice Call plugin receives calls for multiple phone
|
||||
numbers and each number should behave like a different line. For example, one
|
||||
number can use a casual personal assistant while another uses a business
|
||||
persona, a different response agent, and a different TTS voice.
|
||||
|
||||
Routes are selected from the provider-supplied dialed `To` number. Keys must be
|
||||
E.164 numbers. When a call arrives, Voice Call resolves the matching route once,
|
||||
stores the matched route on the call record, and reuses that effective config
|
||||
for the greeting, classic auto-response path, realtime consult path, and TTS
|
||||
playback. If no route matches, the global Voice Call config is used.
|
||||
Outbound calls do not use `numbers`; pass the outbound target, message, and
|
||||
session explicitly when initiating the call.
|
||||
|
||||
Route overrides currently support:
|
||||
|
||||
- `inboundGreeting`
|
||||
- `tts`
|
||||
- `agentId`
|
||||
- `responseModel`
|
||||
- `responseSystemPrompt`
|
||||
- `responseTimeoutMs`
|
||||
|
||||
The `tts` route value deep-merges over the global Voice Call `tts` config, so
|
||||
you can usually override only the provider voice:
|
||||
|
||||
```json5
|
||||
{
|
||||
inboundGreeting: "Hello from the main line.",
|
||||
responseSystemPrompt: "You are the default voice assistant.",
|
||||
tts: {
|
||||
provider: "openai",
|
||||
providers: {
|
||||
openai: { voice: "coral" },
|
||||
},
|
||||
},
|
||||
numbers: {
|
||||
"+15550001111": {
|
||||
inboundGreeting: "Silver Fox Cards, how can I help?",
|
||||
responseSystemPrompt: "You are a concise baseball card specialist.",
|
||||
tts: {
|
||||
providers: {
|
||||
openai: { voice: "alloy" },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
### Spoken output contract
|
||||
|
||||
For auto-responses, Voice Call appends a strict spoken-output contract to
|
||||
|
||||
Reference in New Issue
Block a user