Munin
Munin developer portal
Get a key →

Support desk launch (Conv + CRM + KB)

A new customer wants Munin to be their support desk. They need: an email channel and chat widget for tickets, a CRM with their existing customers loaded, and a KB their support team (or AI agents) can search to answer common questions.

This playbook orchestrates three module-level setups. Each step links to the per-module skill — don't reproduce the detail here.

TL;DR

  1. Conv channels (skill://conv/setup-email-and-widget-channels) — email + widget, both tested.
  2. CRM contacts (skill://crm/import-and-score-leads or skill://crm/onboard-new-customer) — import existing customers so inbound conversations auto-link.
  3. KB seed (skill://kb/create-first-space + skill://kb/import-articles-in-bulk) — first space + initial article set.
  4. Verify the loop end-to-end: send a test inbound message → confirm it lands → confirm contact auto-link → confirm an agent can find a relevant KB article.

Prerequisites

This playbook assumes:

  • The org exists and has at least one admin API key.
  • The customer has provided SMTP/IMAP creds OR is OK using Munin's mailer.
  • The customer has provided their existing customer list (CSV/JSON) — or they're starting fresh.
  • The customer has a content source for KB seeding (Google Doc, Zendesk export, internal wiki).

If any prerequisite is missing, stop and ask for the missing input rather than guessing.

Step 1 — channels

Follow skill://conv/setup-email-and-widget-channels end-to-end. At completion you should have:

  • An email channel with SMTP+IMAP verified.
  • A widget channel with widgetKey handed to the customer's dev team.
  • Default topics seeded (Billing / Support / Bug, or custom).

conv_list_channels should return both as active: true.

Step 2 — CRM seed

Two flavors depending on what the customer hands you:

Bulk list (most common for migrations)

Follow skill://crm/import-and-score-leads. Skip the deal-creation step (or move it later) — for support desk seeding, the goal is contact existence, not pipeline placement.

Companies: if the customer's list has company info, create them via crm_create_company and link via crm_update_contact. Auto-linking inbound emails to companies is a future improvement; today the link is by companyId on the contact.

One at a time

If they want to onboard customers as they reach out, follow skill://crm/onboard-new-customer per inbound conversation instead.

Step 3 — KB seed

First space

Follow skill://kb/create-first-space. For a support desk:

  • Pick a space slug like help or support-kb.
  • Decide whether articles will be public: true (delivered via the self-service search audience to end-users) or public: false (admin-side only, for human agents).

Article import

Follow skill://kb/import-articles-in-bulk for the customer's existing knowledge. Read skill://kb/import-from-google-docs first if you haven't — chunking strategy matters for search performance.

If the customer doesn't have any existing knowledge to import: ask for 5–10 of the most-asked questions and write articles inline via kb_create_document. Even a small starter set lets agents (human and AI) cite something.

Step 4 — end-to-end smoke test

Send a test inbound message to verify the full loop:

Email

From a known external mailbox, send to the configured fromAddress (e.g. support@customer.com). Within ~1 polling interval (InboundPollWorker runs frequently when inbound: poll is configured):

{ "name": "conv_list_conversations", "arguments": { "limit": 5 } }

The new conversation should appear. Check that contactId resolved if the sender's email matches a CRM contact.

Widget

From a browser on an allowlisted origin, post a message via the widget API. Confirm with conv_get_conversation that the message lands.

KB search from inside a conversation

For an admin agent reading the conversation, kb_search should surface a relevant article:

{ "name": "kb_search", "arguments": { "query": "<phrase from the test message>", "limit": 5 } }

If nothing relevant comes back, either the import didn't include this topic or chunking was too coarse — both are fixable but worth noticing now.

What NOT to do

  • Don't seed an empty KB. Even a half-dozen of the most-asked questions transforms the support agent's experience. Empty KB = agents fall back to free-text generation, which is slower and less consistent.
  • Don't import the customer's full historical contact list as one bulk action without a tag. If the import turns out to have bad data, you can't easily filter it back out. Tag every imported contact with the import batch (tags: ["initial-import-2026-05"]).
  • Don't skip the smoke test. Channels look configured but actually fail under real traffic — IMAP polling timing, widget origin enforcement, AI summary worker pickup. Sending one real message exercises the full pipeline.
  • Don't enable widget channels with an empty originAllowlist. Anyone with the key can post; that's fine for staging but never in production.

Related

  • skill://conv/setup-email-and-widget-channels — the channels half.
  • skill://crm/import-and-score-leads — bulk contact import.
  • skill://crm/onboard-new-customer — single-contact path.
  • skill://kb/create-first-space — first KB space.
  • skill://kb/import-articles-in-bulk — bulk article import.
  • skill://kb/import-from-google-docs — chunking + embeddings.
  • skill://playbooks/customer-acquisition — outbound (sales) flavor of conv + crm.