openclaw - 💡(How to fix) Fix googlechat: REACTION_ADDED / REACTION_REMOVED webhook events are silently dropped [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#73681Fetched 2026-04-29 06:16:29
View on GitHub
Comments
1
Participants
2
Timeline
3
Reactions
0
Timeline (top)
cross-referenced ×2commented ×1
RAW_BUFFERClick to expand / collapse

Problem

The Google Chat webhook handler in extensions/googlechat/src/monitor.ts:58-59 and extensions/googlechat/src/monitor-webhook.ts:81-93 only proceeds when eventType === "MESSAGE". Any REACTION_ADDED or REACTION_REMOVED events Google Chat could deliver (when the Chat app subscribes to those event types) are dropped before any plugin sees them. As a result, the agent has no way to register that a user has reacted to one of its messages — there is no googlechat.onReaction hook, no internal normalized reaction event, and no plumbing to the agent runtime equivalent to what other channels expose.

Comparison with other channels

Most other channel extensions ship inbound-reaction infrastructure:

  • Discord — PR #60805 merged; reaction events forwarded to plugin handlers (#52658).
  • Slack — open tracking issue #56653 for Socket Mode delivery.
  • Telegram, Feishu, Matrix, BlueBubbles — reaction code present in their respective extensions.
  • Generic feature flag #17840 — "opt-in reaction-triggered agent turns".

Google Chat is the conspicuous omission.

Reproduction

  1. Configure a Google Chat app subscribed to MESSAGE events (default).
  2. Have a user add an emoji reaction (+1, 🔥, etc.) to one of the bot's messages in a space the bot is in.
  3. (Even if the Chat app were subscribed to reaction events) — observe no downstream activity in /tmp/openclaw/openclaw-*.log. The reaction does not reach any plugin.

Suggested fix

  • In monitor-webhook.ts, branch on eventType and route REACTION_ADDED / REACTION_REMOVED to a normalized internal reaction event (mirror Discord's plugin-handler shape).
  • Expose a googlechat.onReaction(reactionEvent) plugin hook so agent / channel-handler authors can opt into reactions.
  • Document in docs/channels/googlechat.md (note that this is independent of the outbound-reaction scope work tracked in #9764, which covers the bot creating reactions — the inverse direction).

Out of scope (tracked elsewhere)

The bot creating reactions on Chat messages is gated by the auth scope hardcoded to chat.bot, which is the topic of #9764 (Add user OAuth support for reactions and media uploads). This issue is strictly about the inbound event-handler gap, which is independent — even with full user OAuth and the right scopes wired, the inbound event would still be dropped under the current eventType !== "MESSAGE" short-circuit.

Environment

  • openclaw 2026.4.26 (be8c246)
  • node 22.22.2
  • Linux 6.12.75-rpi (Raspberry Pi 5, arm64)
  • Google Chat app via webhook, service-account auth (chat.bot scope)

extent analysis

TL;DR

Modify the Google Chat webhook handler to support REACTION_ADDED and REACTION_REMOVED events by routing them to a normalized internal reaction event.

Guidance

  • Update monitor-webhook.ts to branch on eventType and handle REACTION_ADDED and REACTION_REMOVED events.
  • Introduce a googlechat.onReaction(reactionEvent) plugin hook to allow agent authors to opt into reactions.
  • Verify the fix by checking for downstream activity in /tmp/openclaw/openclaw-*.log after a user adds an emoji reaction to one of the bot's messages.
  • Document the changes in docs/channels/googlechat.md to ensure users are aware of the new functionality.

Example

// monitor-webhook.ts
if (eventType === 'REACTION_ADDED' || eventType === 'REACTION_REMOVED') {
  // Route to a normalized internal reaction event
  const reactionEvent = { type: eventType, ... };
  // Call the plugin hook
  googlechat.onReaction(reactionEvent);
}

Notes

The suggested fix only addresses the inbound event-handler gap and does not cover the outbound reaction scope work tracked in #9764.

Recommendation

Apply the workaround by modifying the Google Chat webhook handler to support REACTION_ADDED and REACTION_REMOVED events, as this will allow agent authors to opt into reactions and provide a more complete user experience.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING