mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
fix(telegram): address PR review comments
- Export pickFirstExistingAgentId and use it to validate topic agentId - Properly update mainSessionKey when overriding route agent - Fix docs example showing incorrect session key for topic 3 Fixes issue where non-existent agentId would create orphaned sessions. Fixes issue where DM topic replies would route to wrong agent.
This commit is contained in:
committed by
Ayaan Zaidi
parent
58bc9a241b
commit
8eeb049683
@@ -466,7 +466,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
||||
}
|
||||
```
|
||||
|
||||
Each topic then has its own session key: `agent:main:telegram:group:-1001234567890:topic:3`
|
||||
Each topic then has its own session key: `agent:zu:telegram:group:-1001234567890:topic:3`
|
||||
|
||||
Template context includes:
|
||||
|
||||
|
||||
@@ -143,7 +143,7 @@ function resolveAgentLookupCache(cfg: OpenClawConfig): AgentLookupCache {
|
||||
return next;
|
||||
}
|
||||
|
||||
function pickFirstExistingAgentId(cfg: OpenClawConfig, agentId: string): string {
|
||||
export function pickFirstExistingAgentId(cfg: OpenClawConfig, agentId: string): string {
|
||||
const lookup = resolveAgentLookupCache(cfg);
|
||||
const trimmed = (agentId ?? "").trim();
|
||||
if (!trimmed) {
|
||||
|
||||
@@ -40,10 +40,15 @@ import { logVerbose, shouldLogVerbose } from "../globals.js";
|
||||
import { recordChannelActivity } from "../infra/channel-activity.js";
|
||||
import {
|
||||
buildAgentSessionKey,
|
||||
pickFirstExistingAgentId,
|
||||
resolveAgentRoute,
|
||||
type ResolvedAgentRoute,
|
||||
} from "../routing/resolve-route.js";
|
||||
import { DEFAULT_ACCOUNT_ID, resolveThreadSessionKeys } from "../routing/session-key.js";
|
||||
import {
|
||||
DEFAULT_ACCOUNT_ID,
|
||||
buildAgentMainSessionKey,
|
||||
resolveThreadSessionKeys,
|
||||
} from "../routing/session-key.js";
|
||||
import { resolvePinnedMainDmOwnerFromAllowlist } from "../security/dm-policy-shared.js";
|
||||
import { withTelegramApiErrorLogging } from "./api-logging.js";
|
||||
import {
|
||||
@@ -215,8 +220,10 @@ export const buildTelegramMessageContext = async ({
|
||||
parentPeer,
|
||||
});
|
||||
// Per-topic agentId override: re-derive session key under the topic's agent.
|
||||
const topicAgentId = topicConfig?.agentId?.trim();
|
||||
if (topicAgentId) {
|
||||
const rawTopicAgentId = topicConfig?.agentId?.trim();
|
||||
if (rawTopicAgentId) {
|
||||
// Validate agentId against configured agents; falls back to default if not found.
|
||||
const topicAgentId = pickFirstExistingAgentId(freshCfg, rawTopicAgentId);
|
||||
const overrideSessionKey = buildAgentSessionKey({
|
||||
agentId: topicAgentId,
|
||||
channel: "telegram",
|
||||
@@ -225,10 +232,14 @@ export const buildTelegramMessageContext = async ({
|
||||
dmScope: freshCfg.session?.dmScope,
|
||||
identityLinks: freshCfg.session?.identityLinks,
|
||||
}).toLowerCase();
|
||||
const overrideMainSessionKey = buildAgentMainSessionKey({
|
||||
agentId: topicAgentId,
|
||||
}).toLowerCase();
|
||||
route = {
|
||||
...route,
|
||||
agentId: topicAgentId,
|
||||
sessionKey: overrideSessionKey,
|
||||
mainSessionKey: overrideMainSessionKey,
|
||||
};
|
||||
logVerbose(
|
||||
`telegram: per-topic agent override: topic=${resolvedThreadId ?? dmThreadId} agent=${topicAgentId} sessionKey=${overrideSessionKey}`,
|
||||
|
||||
Reference in New Issue
Block a user