fix(feishu): harden target routing, dedupe, and reply fallback
This commit is contained in:
@@ -13,7 +13,7 @@ import {
|
||||
} from "openclaw/plugin-sdk";
|
||||
import { resolveFeishuAccount } from "./accounts.js";
|
||||
import { createFeishuClient } from "./client.js";
|
||||
import { tryRecordMessagePersistent } from "./dedup.js";
|
||||
import { tryRecordMessage, tryRecordMessagePersistent } from "./dedup.js";
|
||||
import { maybeCreateDynamicAgent } from "./dynamic-agent.js";
|
||||
import { normalizeFeishuExternalKey } from "./external-keys.js";
|
||||
import { downloadMessageResourceFeishu } from "./media.js";
|
||||
@@ -692,8 +692,15 @@ export async function handleFeishuMessage(params: {
|
||||
const log = runtime?.log ?? console.log;
|
||||
const error = runtime?.error ?? console.error;
|
||||
|
||||
// Dedup check: skip if this message was already processed (memory + disk).
|
||||
// Dedup: synchronous memory guard prevents concurrent duplicate dispatch
|
||||
// before the async persistent check completes.
|
||||
const messageId = event.message.message_id;
|
||||
const memoryDedupeKey = `${account.accountId}:${messageId}`;
|
||||
if (!tryRecordMessage(memoryDedupeKey)) {
|
||||
log(`feishu: skipping duplicate message ${messageId} (memory dedup)`);
|
||||
return;
|
||||
}
|
||||
// Persistent dedup survives restarts and reconnects.
|
||||
if (!(await tryRecordMessagePersistent(messageId, account.accountId, log))) {
|
||||
log(`feishu: skipping duplicate message ${messageId}`);
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user