

































@@ -1,4 +1,8 @@
1-import { shouldAckReactionForWhatsApp } from "openclaw/plugin-sdk/channel-feedback";
1+import {
2+createAckReactionHandle,
3+shouldAckReactionForWhatsApp,
4+type AckReactionHandle,
5+} from "openclaw/plugin-sdk/channel-feedback";
26import type { loadConfig } from "openclaw/plugin-sdk/config-runtime";
37import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
48import { getSenderIdentity } from "../../identity.js";
@@ -18,9 +22,9 @@ export async function maybeSendAckReaction(params: {
1822accountId?: string;
1923info: (obj: unknown, msg: string) => void;
2024warn: (obj: unknown, msg: string) => void;
21-}) {
25+}): Promise<AckReactionHandle | null> {
2226if (!params.msg.id) {
23-return;
27+return null;
2428}
25292630// Keep ackReaction as the emoji/scope control, while letting reactionLevel
@@ -30,7 +34,7 @@ export async function maybeSendAckReaction(params: {
3034accountId: params.accountId,
3135});
3236if (reactionLevel.level === "off") {
33-return;
37+return null;
3438}
35393640const ackConfig = params.cfg.channels?.whatsapp?.ackReaction;
@@ -61,29 +65,35 @@ export async function maybeSendAckReaction(params: {
6165});
62666367if (!shouldSendReaction()) {
64-return;
68+return null;
6569}
66706771params.info(
6872{ chatId: params.msg.chatId, messageId: params.msg.id, emoji },
6973"sending ack reaction",
7074);
7175const sender = getSenderIdentity(params.msg);
72-sendReactionWhatsApp(params.msg.chatId, params.msg.id, emoji, {
76+const reactionOptions = {
7377verbose: params.verbose,
7478fromMe: false,
75-participant: sender.jid ?? undefined,
76-accountId: params.accountId,
79+...(sender.jid ? { participant: sender.jid } : {}),
80+...(params.accountId ? { accountId: params.accountId } : {}),
7781cfg: params.cfg,
78-}).catch((err) => {
79-params.warn(
80-{
81-error: formatError(err),
82-chatId: params.msg.chatId,
83-messageId: params.msg.id,
84-},
85-"failed to send ack reaction",
86-);
87-logVerbose(`WhatsApp ack reaction failed for chat ${params.msg.chatId}: ${formatError(err)}`);
82+};
83+return createAckReactionHandle({
84+ackReactionValue: emoji,
85+send: () => sendReactionWhatsApp(params.msg.chatId, params.msg.id!, emoji, reactionOptions),
86+remove: () => sendReactionWhatsApp(params.msg.chatId, params.msg.id!, "", reactionOptions),
87+onSendError: (err) => {
88+params.warn(
89+{
90+error: formatError(err),
91+chatId: params.msg.chatId,
92+messageId: params.msg.id,
93+},
94+"failed to send ack reaction",
95+);
96+logVerbose(`WhatsApp ack reaction failed for chat ${params.msg.chatId}: ${formatError(err)}`);
97+},
8898});
8999}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。