Releases: othreecodes/openclaw-intercom
Releases · othreecodes/openclaw-intercom
Release list
v1.1.0
Fixed
- Escalation returns the conversation to the inbox it came from. Handing
off used to assign to whichever queue the model named, which delivered
people to a teammate who had never seen the thread. The conversation now
goes back where it was picked up: the remembered team first, then a fresh
read of the conversation's current team, then a real human admin. Admins
without an inbox seat are filtered out, because assigning to one strands the
conversation somewhere nobody is looking.
(#45)
Added
- Each customer becomes their own peer in memory. The Honcho memory plugin
identifies the speaker from aConversation infoblock that OpenClaw only
emits for group chats. This plugin dispatches every conversation as a direct
DM, so the memory service fell back to its sharedownerpeer and every
customer's facts piled into one profile. The block is now emitted with the
Intercom contact id, so a returning customer is recognised and no two
customers are confused for each other.
(#45) - The persona preamble is kept out of stored memory. The memory plugin
stores the user message verbatim, and the body handed to the agent opens
with the whole persona block — so the service was deriving facts about the
customer from the agent's own instructions. The preamble is now wrapped in
the tag the plugin strips before storing. The agent reads it unchanged.
(#45) - Customer name, email and phone are published to peer metadata, so a
memory console shows a person rather than an opaque id. Writing peer
metadata replaces the whole document, so the writer reads and merges; the
memory plugin creates the peer itself at the end of a turn and replaces what
was written, so one delayed rewrite follows. Names arrive HTML-escaped from
Intercom (Akin's Alaba Ayo) and are decoded before they are stored.
Every call is fire-and-forget and time-limited: memory can never delay or
block a reply.
(#45)
v1.0.12
Added
- Voice note support. WhatsApp and Instagram voice notes arrive as audio
attachments with an empty body. The plugin only handledimage/*, so audio
fell through to "[The customer attached a file]" and the agent told customers
"voice notes aren't supported here in the chat, so please type it out" —
on a channel where voice notes are how many people prefer to communicate.
Audio attachments are now transcribed throughtranscribeAudioFile, with a
prompt tuned for Nigerian English and code-switching into Pidgin, Yoruba,
Igbo or Hausa, keeping names, banks and amounts verbatim. The transcript is
handed to the agent flagged as automatic, so it confirms anything critical
rather than trusting a mishearing. Files over 25MB are announced but not
transcribed, and a failed transcription tells the agent to ask what was said
instead of denying voice notes work. (#43)
v1.0.11
Fixed
- Screenshot descriptions were being truncated to a few words.
describeImageFile
passes no token budget, so the runtime default applied. Gemini 3.8 Flash is a
reasoning model and spent that whole budget thinking before writing anything:
measured 284 thinking tokens with 12 left for the description, and once 807
thinking tokens for a single screenshot. The agent received a half-finished
bullet and told customers their screenshot "got cut off", then asked them to
type out what was on screen. One customer sent seven screenshots and had to
narrate every one.
Switched todescribeImageFileWithModel, which acceptsmaxTokens, set to
2000 so the budget covers thinking and the description. Same image now
returns 1474 characters and finishes withSTOPinstead ofMAX_TOKENS.
AddsresolveImageDescribeModel()to name the provider/model explicitly, as
the with-model call requires. (#42)
v1.0.10
Changed
- Session labels now name the channel the chat came in on. Every session was
labelledName (Intercom), so with several channels enabled (WhatsApp and
Instagram both live) they were indistinguishable in the dashboard. The
conversation's Intercom channel is now carried on the inbound message and
rendered with proper capitalisation:Name (WhatsApp),Name (Instagram),
Name (iOS). Falls back toIntercomwhen the channel is unknown. (#41)
v1.0.9
Fixed
- Stop replying into conversations a human teammate is handling. On a shared
team queue (e.g. Socials, once WhatsApp went live), a reopened conversation
drops back to admin=0, so the unassigned poll let Sisi barge into a thread a
human was actively working (observed live: ~20 collisions in 30 min). Now, if
any human teammate has replied in a conversation, Sisi takes no further turn in
it at all -- not just skipping messages before their last reply. She only
handles conversations with no human turn (genuinely fresh, or bot-only). (#40)
v1.0.8
Fixed
- Repair a stale test assertion that referenced the pre-1.0.7 description
wording, which failed CI on the release/publish workflow. The 1.0.7 behavior
change (vision describes, never identifies) ships here; 1.0.7 never published
because of this test. No behavior change from the intended 1.0.7.
v1.0.6
Changed
- Metadata and README no longer read as Instagram-specific. The channel answers
any surface connected to Intercom — WhatsApp, Instagram, Facebook, in-app
Messenger, SMS, email — andallowedChannelsis documented as the way to
pilot on one channel and widen later. No code changes.
v1.0.5
Changed
- Repositioned the package as what it is: a channel, not an API helper. New
display name ("Intercom Support Channel"), description, keywords, and a
rewritten README that leads with the autonomous customer-facing agent and the
production-hardened behaviors (image understanding, escalation lifecycle,
teammate-respect, burst coalescing, backlog absorption), and documents the
allowedChannelsandescalationTargetsoptions that were missing from the
config table. No code changes.
v1.0.4
Fixed
- The bot no longer answers messages a human teammate already handled. A
conversation that spent time with human support and later re-entered the
bot's scope looked entirely unread to it, and it re-litigated an
already-resolved problem past the customer saying goodbye. Customer messages
at or before the last human teammate reply are now absorbed as handled;
workflow bots (like the "replies in under 3m" auto-responder) deliberately do
not count as teammates. (#31)
v1.0.3
Fixed
- A directive leaked to a customer on follow-up turns. OpenClaw delivers
replies after a conversation's first turn through a second send hook that
bypassed directive parsing, HTML rendering, tags, notes and escalation
entirely. Both paths now share one pipeline, with a defensive strip of any
[[...]]-shaped text as a last resort. (#21) - Escalating now actually stops the bot. Team-escalated conversations kept
matching Intercom's admin-only "unassigned" search and were re-answered on
every poll. A persistent escalated-set makes a conversation inert to poll,
webhook and claim once handed to a human, and replies already queued in the
agent runtime are dropped at delivery. (#22, #24) - A message backlog no longer causes a reply storm. All pending customer
messages in one cycle coalesce into a single agent turn with full context,
instead of one reply per stale message. (#24) - The bot can see customer images. Messenger-style uploads and Instagram's
inline<img>bodies are extracted, downloaded from the CDN and described
through the runtime's image understanding; image-only messages (empty body)
are no longer dropped. Webhook payloads are treated as notifications and the
canonical conversation is fetched, since the payload flattens image tags
away. (#25, #26, #27, #28)
Changed
- Escalation returns a conversation to its original inbox. A persistent
write-once record captures where each conversation lived before the bot
touched it, and escalation always hands back there. Named-queue routing
(escalationTargets) remains as the fallback when no origin is known.
(#23)
Added
- CI: tests and typecheck run on every PR; pushing a
v*tag publishes to
ClawHub after verifying the tag matchespackage.jsonand extracting the
changelog section for the release.