Skip to content

Releases: othreecodes/openclaw-intercom

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 13:48

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 a Conversation info block that OpenClaw only
    emits for group chats. This plugin dispatches every conversation as a direct
    DM, so the memory service fell back to its shared owner peer 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

Choose a tag to compare

@github-actions github-actions released this 09 Sep 17:50

Added

  • Voice note support. WhatsApp and Instagram voice notes arrive as audio
    attachments with an empty body. The plugin only handled image/*, 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 through transcribeAudioFile, 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

Choose a tag to compare

@github-actions github-actions released this 09 Sep 17:10

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 to describeImageFileWithModel, which accepts maxTokens, set to
    2000 so the budget covers thinking and the description. Same image now
    returns 1474 characters and finishes with STOP instead of MAX_TOKENS.
    Adds resolveImageDescribeModel() to name the provider/model explicitly, as
    the with-model call requires. (#42)

v1.0.10

Choose a tag to compare

@github-actions github-actions released this 07 Sep 19:29

Changed

  • Session labels now name the channel the chat came in on. Every session was
    labelled Name (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 to Intercom when the channel is unknown. (#41)

v1.0.9

Choose a tag to compare

@github-actions github-actions released this 07 Sep 15:31

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

Choose a tag to compare

@github-actions github-actions released this 06 Sep 12:18

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

Choose a tag to compare

@github-actions github-actions released this 06 Sep 08:16

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 — and allowedChannels is documented as the way to
    pilot on one channel and widen later. No code changes.

v1.0.5

Choose a tag to compare

@github-actions github-actions released this 06 Sep 08:07

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
    allowedChannels and escalationTargets options that were missing from the
    config table. No code changes.

v1.0.4

Choose a tag to compare

@github-actions github-actions released this 03 Sep 20:16

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

Choose a tag to compare

@othreecodes othreecodes released this 03 Sep 19:35

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 matches package.json and extracting the
    changelog section for the release.