#7883: feat: add Campfire channel plugin
gateway
size: XL
Cluster:
Channel Plugin Enhancements
### Hola :wave:
So, I'm Frank. and I would love to have native integration for campfire. This is the PR.
**Notes:**
I am currently using it with openclaw. And gave my clients access to it. They like it, because they have a highly capable AI and everything nicely secured on on Hetzner server with their own seperate Email Hosting and everything is nicely encapsulated to let openclaw run like a wild child.
So back to the code, from my side I can approve this integration also the code makes sense and follows the pattern from other Channels.
There is a little quirk. The bot cant read messages in the chat room, so created a workaround which logs in as a seperate Users and just looks thruh messages. It a campfire-cli that I built for that. Great for write every 3 hours a summaries of the Channels and post it to the board, so a nice log of who does what in each channel. Securit wise, if the "Observer Account" only read the message where is invited, not really used but a nice byproduct. Anyways, thats blabla, I just wanted to say, I tested it and work with it.
To be blunt I am not so certain if I dived in every little possible aspect, for that is the current openclaw codebase a bit too much. So I resolved it by focusing on just channel plugin and that was easier to grasp and fits in my head.
Happy about that PR
Thanks for the work!
**Best regards,**
Frank :beers:
---
*AI PR Text, follows the template and is approved by me*
#### Summary
Add Campfire channel plugin for 37signals' self-hosted chat.
Closes #7880
lobster-biscuit
#### Use Cases
- Teams using 37signals Campfire for internal chat want openclaw to respond
to @mention messages in rooms — same as Telegram, Discord, Slack, WhatsApp
- Bot listens via webhook, processes messages asynchronously (Campfire has a
7-second webhook timeout), and replies as text or attachments
#### Behavior Changes
New extension `extensions/campfire/` — no changes to existing code.
- Registers HTTP handler at configurable webhook path (default `/campfire`)
- Processes inbound @mention webhooks with group policy / user allowlist checks
- Sends text replies (plain text POST) and attachments (multipart form-data)
- Supports multi-account configuration with env vars or inline config
- Block streaming with coalesced updates (1500 chars / 1s idle)
Configuration:
```yaml
channels:
campfire:
baseUrl: https://your-campfire.example.com
botKey: "{id}-{token}"
webhookPath: /campfire
groupPolicy: open # disabled | allowlist | open
requireMention: true
```
Env vars: `CAMPFIRE_BOT_KEY`, `CAMPFIRE_BASE_URL`, `CAMPFIRE_WEBHOOK_PATH`
#### Existing Functionality Check
- [x] I searched the codebase for existing functionality.
Searches performed:
- Checked all channel plugins (Telegram, Discord, Slack, WhatsApp, BlueBubbles) for patterns to follow
- Searched for existing Campfire/37signals references — none found
- Verified plugin SDK types (ChannelPlugin, ChannelDock) and reused shared utilities (chunkMarkdownText, resolveEnvelopeFormatOptions, dispatchReplyWithBufferedBlockDispatcher)
#### Tests
- `pnpm check` passes (lint + format)
- No unit tests yet (extension-only, no existing test patterns for webhook channel plugins)
#### Manual Testing
##### Prerequisites
- A running Campfire instance with a bot configured (bot key from Campfire settings)
- openclaw running with campfire channel enabled
##### Steps
1. Configure `channels.campfire.baseUrl` and `channels.campfire.botKey`
2. Set up Campfire bot webhook URL pointing to `<openclaw-url>/campfire`
3. @mention the bot in a Campfire room
4. Verify openclaw receives the webhook, processes the message, and replies in the room
5. Send an image attachment — verify it arrives as a multipart upload
**Sign-Off**
- Models used: Claude Opus 4
- Submitter effort: manual E2E testing with live Campfire instance
- Agent notes: Plugin follows existing channel patterns (Telegram extension used as primary reference). Greptile review addressed: filename sanitization added, unused exports removed.
## AI-Assisted Contribution 🤖
- [x] Marked as AI-assisted
- [x] Degree of testing: lightly tested (live Campfire instance, manual E2E)
- [x] I understand what the code does
Most Similar PRs
#9199: feat: Add Cisco Webex Teams channel plugin
by chrharri · 2026-02-05
72.9%
#20348: Add support for Keybase as a channel
by xgess · 2026-02-18
72.5%
#9477: feat(qqbot): add QQ Bot channel extension
by sliverp · 2026-02-05
71.7%
#16954: feat(rocketchat): add Rocket.Chat channel plugin
by zerone0x · 2026-02-15
70.2%
#21015: # feat(xmpp): Complete XMPP Channel Implementation
by toughworm · 2026-02-19
69.9%
#14009: feat(wecom): add wecom(企业微信) channel extension
by xl370869-art · 2026-02-11
69.8%
#17157: feat(messenger): add Facebook Messenger channel integration
by gmjuhasz · 2026-02-15
69.6%
#22260: feat(extensions/deltachat): add Delta.Chat channel extension
by alanz · 2026-02-20
69.5%
#8502: WeCom: add WeCom (Enterprise WeChat) channel plugin
by sunnoy · 2026-02-04
69.0%
#16124: Docs: rewrite Coolify guide for native one-click service
by frankdierolf · 2026-02-14
67.9%