Route OpenClaw chat by HA user

This commit is contained in:
2026-05-06 08:08:18 +02:00
parent 90d525e842
commit 8221098ebc
12 changed files with 285 additions and 68 deletions
+11 -14
View File
@@ -19,18 +19,18 @@ from homeassistant.helpers import intent
from .api import OpenClawApiClient, OpenClawApiError
from .const import (
ATTR_AGENT_ID,
ATTR_HA_USER_ID,
ATTR_MESSAGE,
ATTR_MODEL,
ATTR_SESSION_ID,
ATTR_SESSION_KEY,
ATTR_TIMESTAMP,
CONF_ASSIST_SESSION_ID,
CONF_AGENT_ID,
CONF_CONTEXT_MAX_CHARS,
CONF_CONTEXT_STRATEGY,
CONF_INCLUDE_EXPOSED_CONTEXT,
CONF_VOICE_AGENT_ID,
DEFAULT_ASSIST_SESSION_ID,
DEFAULT_AGENT_ID,
DEFAULT_CONTEXT_MAX_CHARS,
DEFAULT_CONTEXT_STRATEGY,
DEFAULT_INCLUDE_EXPOSED_CONTEXT,
@@ -41,6 +41,7 @@ from .const import (
from .coordinator import OpenClawCoordinator
from .exposure import apply_context_policy, build_exposed_entities_context
from .helpers import extract_text_recursive
from .routing import normalize_ha_user_id, resolve_agent_id, resolve_model_override
_LOGGER = logging.getLogger(__name__)
@@ -121,19 +122,12 @@ class OpenClawConversationAgent(conversation.AbstractConversationAgent):
message = user_input.text
assistant_id = "conversation"
context = getattr(user_input, "context", None)
ha_user_id = normalize_ha_user_id(getattr(context, "user_id", None))
options = self.entry.options
voice_agent_id = self._normalize_optional_text(
options.get(CONF_VOICE_AGENT_ID)
)
configured_agent_id = self._normalize_optional_text(
options.get(
CONF_AGENT_ID,
self.entry.data.get(CONF_AGENT_ID, DEFAULT_AGENT_ID),
)
)
resolved_agent_id = voice_agent_id or configured_agent_id
resolved_agent_id = resolve_agent_id(ha_user_id)
conversation_id = self._resolve_conversation_id(user_input, resolved_agent_id)
active_model = self._normalize_optional_text(options.get("active_model"))
active_model = resolve_model_override(options.get("active_model"))
include_context = options.get(
CONF_INCLUDE_EXPOSED_CONTEXT,
DEFAULT_INCLUDE_EXPOSED_CONTEXT,
@@ -203,6 +197,9 @@ class OpenClawConversationAgent(conversation.AbstractConversationAgent):
{
ATTR_MESSAGE: full_response,
ATTR_SESSION_ID: conversation_id,
ATTR_SESSION_KEY: conversation_id,
ATTR_HA_USER_ID: ha_user_id,
ATTR_AGENT_ID: resolved_agent_id,
ATTR_MODEL: coordinator.data.get(DATA_MODEL) if coordinator.data else None,
ATTR_TIMESTAMP: datetime.now(timezone.utc).isoformat(),
},