import {
listWhatsAppAccountIds,
resolveWhatsAppAccount,
createActionGate,
type ChannelMessageActionName,
type OpenClawConfig,
resolveWhatsAppReactionLevel,
} from "./channel-actions.runtime.js" ;
function areWhatsAppAgentReactionsEnabled(params: { cfg: OpenClawConfig; accountId?: string }) {
if (!params.cfg.channels?.whatsapp) {
return false ;
}
const gate = createActionGate(params.cfg.channels.whatsapp.actions);
if (!gate("reactions" )) {
return false ;
}
return resolveWhatsAppReactionLevel({
cfg: params.cfg,
accountId: params.accountId,
}).agentReactionsEnabled;
}
function hasAnyWhatsAppAccountWithAgentReactionsEnabled(cfg: OpenClawConfig) {
if (!cfg.channels?.whatsapp) {
return false ;
}
return listWhatsAppAccountIds(cfg).some((accountId) => {
const account = resolveWhatsAppAccount({ cfg, accountId });
if (!account.enabled) {
return false ;
}
return areWhatsAppAgentReactionsEnabled({
cfg,
accountId,
});
});
}
export function resolveWhatsAppAgentReactionGuidance(params: {
cfg: OpenClawConfig;
accountId?: string;
}) {
if (!params.cfg.channels?.whatsapp) {
return undefined;
}
const gate = createActionGate(params.cfg.channels.whatsapp.actions);
if (!gate("reactions" )) {
return undefined;
}
const resolved = resolveWhatsAppReactionLevel({
cfg: params.cfg,
accountId: params.accountId,
});
if (!resolved.agentReactionsEnabled) {
return undefined;
}
return resolved.agentReactionGuidance;
}
export function describeWhatsAppMessageActions(params: {
cfg: OpenClawConfig;
accountId?: string | null ;
}): { actions: ChannelMessageActionName[] } | null {
if (!params.cfg.channels?.whatsapp) {
return null ;
}
const gate = createActionGate(params.cfg.channels.whatsapp.actions);
const actions = new Set<ChannelMessageActionName>();
const canReact =
params.accountId != null
? areWhatsAppAgentReactionsEnabled({
cfg: params.cfg,
accountId: params.accountId ?? undefined,
})
: hasAnyWhatsAppAccountWithAgentReactionsEnabled(params.cfg);
if (canReact) {
actions.add("react" );
}
if (gate("polls" )) {
actions.add("poll" );
}
return { actions: Array.from(actions) };
}
Messung V0.5 in Prozent C=100 H=92 G=95
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-05-26)
¤
*© Formatika GbR, Deutschland