You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Voice Call sessionScope: "per-phone" can lose repeat-caller continuity across Gateway restarts because the voice-call plugin resolves callers to raw voice:* session keys while Gateway startup migration canonicalizes those keys into agent:<agentId>:voice:*.
This is a Voice Call regression/conflict after the per-phone/per-call sessionScope work in #45280
It is tangentially related to #63005, but this issue is narrower: the official @openclaw/voice-call plugin should use the post-migration/canonical session key format, or otherwise coordinate with the migration layer, so per-phone mode keeps its documented memory behavior.
What happened?
Voice Call
sessionScope: "per-phone"can lose repeat-caller continuity across Gateway restarts because the voice-call plugin resolves callers to rawvoice:*session keys while Gateway startup migration canonicalizes those keys intoagent:<agentId>:voice:*.This is a Voice Call regression/conflict after the per-phone/per-call
sessionScopework in#45280
It is tangentially related to #63005, but this issue is narrower: the official
@openclaw/voice-callplugin should use the post-migration/canonical session key format, or otherwise coordinate with the migration layer, so per-phone mode keeps its documented memory behavior.Environment
agentId: "main"sessionScope: "per-phone"Observed behavior
The installed Voice Call session resolver produced raw session keys:
Gateway startup then repeatedly logged canonicalization of those raw keys:
After startup migration, the session store contains canonical keys like:
but Voice Call inbound resolution still asks for:
Expected behavior
sessionScope: "per-phone"should keep a stable session for the same caller across Gateway restarts.Voice Call should resolve per-phone and per-call sessions using the same canonical session key format that survives Gateway migration, for example:
Local workaround
Patching the installed voice-call resolver to emit agent-scoped keys stopped the mismatch locally:
function resolveVoiceCallSessionKey(params) { const explicit = params.explicitSessionKey?.trim(); if (explicit) return explicit; - if (params.config.sessionScope === "per-call") return `voice:call:${params.callId}`; + const agentId = params.config.agentId?.trim() || "main"; + const voicePrefix = `agent:${agentId}:voice`; + if (params.config.sessionScope === "per-call") return `${voicePrefix}:call:${params.callId}`; const normalizedPhone = params.phone?.replace(/\D/g, ""); - return normalizedPhone ? `voice:${normalizedPhone}` : `voice:${params.callId}`; + return normalizedPhone ? `${voicePrefix}:${normalizedPhone}` : `${voicePrefix}:${params.callId}`; }Impact
voice:*andagent:<agentId>:voice:*records.