← NinjoCONTENT HISTORY
WHAT CHANGED
Update to Ninjo
Snapshot Oct 24, 2026 · 13:04 UTC · version 3.0.0
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save Ninjo and check future changes in Following.
Up to 3 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Connect or repair the channels and integrations a Ninjo agent answers through, including Instagram, Facebook, WhatsApp, ManyChat, GoHighLevel, HubSpot, Kommo and Calendly. Use when the operator asks \"cómo conecto mi Instagram\", \"cómo conecto el WhatsApp del negocio\", \"conectá GoHighLevel\", \"el agente está activo pero no le llegan los DMs\", \"ManyChat recibe pero el agente no contesta\", \"el primer mensaje sale y el segundo falla\", or asks which agent owns which inbox.",
"included_files": [],
"name": "connect-channels",
"skill_md_contents": "---\nname: connect-channels\ndescription: Connect or repair the channels and integrations a Ninjo agent answers through, including Instagram, Facebook, WhatsApp, ManyChat, GoHighLevel, HubSpot, Kommo and Calendly. Use when the operator asks \"cómo conecto mi Instagram\", \"cómo conecto el WhatsApp del negocio\", \"conectá GoHighLevel\", \"el agente está activo pero no le llegan los DMs\", \"ManyChat recibe pero el agente no contesta\", \"el primer mensaje sale y el segundo falla\", or asks which agent owns which inbox.\n---\n\n# Connect channels and integrations\n\nEverything here runs through connect links and status reads. **Never ask the operator for a\npassword, an API key or a token**; none of these flows needs a credential typed to you. The one\nkey that exists (ManyChat) is typed by the operator into Ninjo, never through the model. Reply\nin the operator's language.\n\n## 0. Read what the agent answers today\n\n`list_agent_channels(agent_id)` is the one unified view. Each channel has a `source`:\n\n- `direct`: a Meta account (Instagram, WhatsApp, Messenger) connected straight in Ninjo. The\n agent owns that inbox.\n- `crm`: a relay. A CRM (GoHighLevel, Kommo, HubSpot, Airtable) or a ManyChat connection\n forwards messages in and the agent answers only those. A `crm` row with `channel_type:\n UNKNOWN` is ManyChat.\n\n**A relay channel with no assigned agent never replies.** \"ManyChat (or GHL) receives the\nmessages but the agent stays silent\" is almost always `agent_id` null on that connection:\n`list_crm_connections`, then `set_agent_crm_channel`.\n\n`list_connected_accounts` shows the Meta accounts; `diagnose_agent` flags an active agent with\nno linked account, which means DMs never reach it.\n\n## 1. The link flow (Meta, CRM, booking)\n\n1. `create_connect_link(provider)` returns a single-use URL that lasts a few minutes.\n Providers: Meta accounts, `gohighlevel_crm`, `hubspot_crm`, `kommo_crm`,\n `gohighlevel_booking`, `calendly`.\n2. Hand the URL to the operator. Do not open it yourself. If it expires, mint another.\n3. The operator authorizes at the provider.\n4. `get_connection_status`. **Read `setup_complete`, not `connected`**, and act on\n `pending_step`: `authorize_with_connect_link` (send another link), `reconnect` (link with\n `reconnect: true`), `select_calendars` (`list_booking_calendars` then\n `set_booking_calendars`), `enable_integration_in_studio`, `paste_api_key_in_studio`\n (ManyChat only), or `null` when genuinely done.\n\nGoHighLevel appears twice and they are different things: the CRM sync (contacts and\nopportunities) and the booking integration (tracking scheduled calls). Ask which one before\nsending a link. Booking is fail-closed: until calendars are selected, no booking is tracked.\n\n## 2. Link the agent to the inbox\n\nA connected account is not enough. The agent must be linked to it (`set_connected_account`)\nand active (`set_agent_status`). Trigger mode decides which DMs reach it: all DMs, or only\nthose matching a keyword or comment trigger (`list_triggers`). \"Active but silent on every\nconversation\" is the `knowledge/runbooks/agent-not-answering` runbook, hypotheses 1 to 4.\n\n## 3. Instagram with two apps on the same inbox\n\nMeta lets several apps subscribe to one Instagram inbox but only **one app owns each DM\nthread**. If ManyChat (or another tool) already answers DMs on that account, Ninjo's replies\nare rejected: `get_conversation_decisions` shows `send_failed` with `THREAD_OWNER_MISMATCH`,\nand the message shows `status: FAILED` in the transcript. Typical shape: the private reply to a\ncomment goes out, then every follow-on message fails. Fixes, in order of preference:\n\n1. Make Ninjo the only app answering DMs on that account (remove the other app's DM\n subscription in Meta, or turn off its DM automations).\n2. Or relay through the CRM/ManyChat instead of connecting Instagram directly: create the\n channel, confirm the connection has an `agent_id` via `list_crm_connections`, then unlink\n the direct Instagram account.\n\nOther `send_failed` codes: `MESSAGE_WINDOW_EXPIRED` is Meta's 24h window (a follow-up, not a\nconnection problem); `INVALID_TOKEN` means reconnect the account with `create_connect_link`.\nFull doc: `get_playbook_doc` on `knowledge/messaging-channels`.\n\n## 4. WhatsApp\n\nA WhatsApp Business account connects like any Meta account. Past 24h of silence only an\napproved template can reach a lead: `list_whatsapp_templates`,\n`preview_whatsapp_template_recipients` (read `pendingUnsentCount`; a send delivers to every\nunsent row of that template, not only the ids you pass), then `send_whatsapp_template`.\n`ok: true` means queued, not delivered; confirm in the conversation.\n\n## 5. Reference\n\n`get_playbook_doc` on `knowledge/connecting-integrations` (the full provider table, the\nManyChat webhook contract, CRM field mappings) and `knowledge/messaging-channels`. If a\nprovider is not in the table, the tools cannot connect it; say so plainly and, if it is a real\ngap, file it with `report_feedback`.\n"
}SHA-256 of public snapshot: 3815b0d3f91346347d6b69260871d66d38a6b2bf66a196e586104873c16d99d6