# ManyChat capability catalog — triggers + builder nodes

Captured read-only(ish) via browser automation, 2026-07-23, in a throwaway
draft flow (created via "Start from a blank canvas" — it kept ManyChat's
default **"Untitled"** name throughout the capture, was never renamed to
"CM capture blank (do not publish)" as originally planned since it was
**deleted** at the end of the session instead) in the operator's live
account (fb4754142, "Silver Oak"). This flow was created solely to open
every trigger-picker and node-config screen with nothing attached to any
data; it was never published (its "Set Live" button was clicked zero
times) and no existing flow/trigger/setting was touched. Screenshots
continue `evidence/manychat-copy/` numbering from `59` through `147`
(this file covers three back-to-back passes in the same draft flow: the
initial capture `59`-`105`, a gap-closing pass that was interrupted mid-run
`106`-`138`, and a relaunch that closed the remaining gaps `139`-`147`).

**Scope:** this is "what ManyChat offers" (the full builder surface), not
"what the operator's account uses today" — that inventory is
`plans/rethink/manychat-breakdown.md` (58-screenshot library, sections 2-3
for the previously-captured node/trigger subset). Cross-refs to that doc are
noted per row.

**Status: complete.** Every item in the original "Coverage checklist" is now
closed. Triggers (all 4 channel tabs, every individual trigger config on
every tab, including TikTok/Messenger/Contact Events configs opened for the
first time this pass), Condition, Actions (all 5 categories, 24 actions,
Claude's "Advanced Options" now expanded), External Request, Message node
(buttons + Data Collection + every individual content-block config:
Text/Image/Delay/File/Audio/Video/Card/Gallery/Dynamic/Messenger List),
Randomizer, Smart Delay, AI Step, Start Automation (re-verified), the
custom-field-type modal, and an Instagram-vs-Facebook channel diff are all
fully captured. The one trigger that could **not** be opened is **Instagram
Ads** — ManyChat enforces "one Ads trigger per Automation" and the draft
flow's Ads slot was already occupied by a Facebook Ads test; the disabled
state + tooltip explaining the constraint is captured instead (screenshot
`142`) and is itself useful (Facebook Ads' own config screen, screenshot
`122`, has no fields at all — pure instructions pointing at Meta Ads
Manager — so Instagram Ads almost certainly matches it exactly).

---

## 1. Trigger catalog — "Start automation when..." picker

Opened via the blank flow's "+ New Trigger" button. The picker has 4 channel
tabs (top of dialog): **Instagram**, **TikTok**, **Messenger**,
**Contact Events**. Each tab lists "Triggers" (or "Contact Events") specific
to that channel, verbatim as shown.

### Instagram tab (6 triggers) — screenshot `61`, `62`

| Trigger (verbatim name) | Verbatim subtitle | Notes |
|---|---|---|
| Post or Reel Comments | User comments on your Post or Reel | Config = breakdown's existing capture (`14-16`): Post/Reel scope, keyword chip list, Public Replies. Not re-opened this pass. |
| Story Reply | User replies to your Story | See config below. |
| Instagram Message | User sends a message | Two sub-modes on click (see below): "Detect specific words in a message" / "Recognize intention of a message". |
| Instagram Ads | User clicks an Instagram Ad | **Blocked, not a bug**: disabled with tooltip *"This Automation already contains a Instagram Ads trigger. Each Automation can have only one Ads trigger."* (screenshot `142`) — the draft flow's single Ads-trigger slot was already used by a Facebook Ads test (Facebook and Instagram Ads share one slot per automation, cross-channel). Facebook Ads' own config (`122`) has zero fields — just 4 instructional steps pointing at Meta Ads Manager — so Instagram Ads' config is inferred to be identical, not independently confirmed. |
| Live Comments | User comments on your Live | **Config captured (screenshot `139`)**: "Trigger replies with these keywords" — "If [message is]" + "+ Keyword" chip input, same helper text as Post/Reel Comments' keyword trigger. Simplest of the 6 Instagram triggers. |
| Instagram Ref URL | User clicks a referral link | **Config captured (screenshot `141`)**: "Your Instagram Ref URL" — a real, live referral link (`https://ig.me/m/<handle>?ref=<code>`) + "Copy URL" + an unopened "Additional settings" toggle (off by default). Notably thinner than its Messenger-tab twin (see Messenger Ref URL below), which surfaces a "Custom Ref parameter" + "Save Payload to a Custom User Field" pair up front — those may be hiding behind IG's "Additional settings" toggle, not confirmed (toggle was left off to avoid mutating anything). |

**Story Reply config** (screenshot `69`-`71`):
- Heading: "Story Reply #2" / "Message will be sent when a follower replies to:"
- Scope dropdown (default "All Stories"): options **All Stories** /
  **Specific Story** (screenshot `70` shows the "reply condition" dropdown
  opened, not this one — see below; this dropdown's own options captured
  separately, uid `24_0`/`24_1`: **All Stories**, **Specific Story**).
- Condition dropdown (default "Reply Contains Any Words Or Reaction"):
  options **Reply contains any words or reaction** / **Reply contains
  specific words or reaction**.
- "Delay automation" section: "Wait [dropdown] and start next steps" —
  dropdown options: **0 sec, 30 sec, 1 minute, 5 minutes, 10 minutes**.
- "Automatically like replies" section: checkbox **"React with ❤️ in
  response"**.
- Footer: **Save** button (this trigger has no Cancel — back out via the
  step's own close/back affordance).

**Instagram Message → sub-mode picker** (screenshot `66`): clicking the
trigger itself first shows "User sends a message — Select a way to trigger
automation" with two cards:
- **"Detect specific words in a message"**
- **"Recognize intention of a message"** — subtitle: "Use AI to recognize
  the intent behind the messages you receive. Send responses based on
  topics rather than specific words."

  → **Detect specific words** config (screenshot `67`): "If [dropdown:
  message contains] + Keyword" chip input, helper text *"Keywords are not
  case-sensitive, e.g. "Hello" and "hello" are recognised as the same."*,
  "+ Message Condition" button (adds another AND/OR condition row), Cancel /
  Create. The condition-type dropdown (screenshot `67`) has 6 options:
  **Message is, Message contains, Message contains whole word, Message
  begins with, Message doesn't contain, Message is about**. Selecting
  **Message is about** switches the whole panel to the AI-intent form (see
  next) — i.e. "Detect specific words" and "Recognize intention" are NOT
  fully separate flows; "Message is about" is reachable from both entry
  points and lands on the same screen.

  → **Recognize intention (AI) config** (screenshot `68`): "If [dropdown:
  message is about] + free-text box" placeholder **"Person wants to..."**,
  helper text *"Describe user's intention starting with "Person wants
  to..." or "Person asks about...""*, an AI-suggested example chip (seen:
  "Person wants to know the address"), **"Make another suggest"** button
  (regenerates the suggestion), footer text *"The intention of the message
  will be automatically detected and compared to what you input above."*,
  Cancel / Create. Matches breakdown's existing AI-intent capture
  (`22-trigger-ai-intent-config.jpg`) exactly.

### TikTok tab (4 triggers) — screenshot `63`

| Trigger | Subtitle | Notes |
|---|---|---|
| Photo or Video comment | User comments on a TikTok | **Disabled** in this account/region — badge "Beta version: An early release with experimental features that may change", inline note *"TikTok doesn't support this trigger in your region yet"*, **"Notify Me"** button in place of a config screen. |
| TikTok Message | User sends a message | **Confirmed (screenshot `136`)**: identical sub-mode picker to Instagram/Messenger Message — "Detect specific words in a message" / "Recognize intention of a message". Pattern is channel-agnostic across all three DM-style triggers. |
| TikTok URL | User clicks a link | **Config captured (screenshot `137`)**: "When someone clicks this link" → link only renders once the trigger is saved/active ("Activate trigger to get new link" placeholder shown instead) + "They'll open TikTok with their first message" textbox, pre-filled default **"Let's get started"**, 231-char limit, "The way people see it" expandable preview link. |
| TikTok QR Code | User scans a QR code | **Config captured (screenshot `138`)**: same shape as TikTok URL — "When someone scans this QR code" (QR image renders only once active) + the same "first message" textbox/default/char-limit/preview-link. |

### Messenger tab (6 triggers, Facebook channel) — screenshot `64`

| Trigger | Subtitle | Config (all 6 now opened) |
|---|---|---|
| Facebook Ads | User clicks a Facebook Ad | **Screenshot `122`**: zero config fields — just an instructional panel, "Message will be sent to customers when they click on your ads" + a 4-step checklist (save trigger → attach a button/Quick Reply to the first message → set the automation live → pick this automation in Meta Ads Manager) + a "Learn more" link. The actual ad↔flow link happens in Ads Manager, not here. |
| Facebook Comments | User comments on your Post | **Screenshot `123`**: richer than its Instagram twin (Post or Reel Comments) — "specific post" scope dropdown + "Select Publication" button, "comment contains any words" condition dropdown, plus two toggles not seen on the Instagram version: **"Track first-level comments only"** and **"Public auto-response in Feed"** (both off by default). Unconfirmed whether Instagram's version has the same toggles further down an unscrolled panel, or whether this is a genuine channel difference. |
| Messenger Message | User sends a message | **Screenshot `124`**: identical sub-mode picker to Instagram/TikTok Message (Detect words / AI intent). |
| Messenger Ref URL | User clicks a referral link | **Screenshot `125`**: a real live link (`https://m.me/<page>?ref=<code>`) + "Copy URL to Clipboard", plus **"Custom Ref parameter"** textbox and **"Save Payload to a Custom User Field"** picker shown up front — richer than Instagram Ref URL's collapsed "Additional settings" toggle (see above). |
| QR Code | User scans a QR code | **Screenshot `126`**, labelled "Facebook QR Code" in-flow: "Image size (100-2000px)" numeric input (default 200), "Logo" upload dropzone, "Remove Background Behind Logo" toggle, Background/Foreground color swatches, and a live-rendered "Your QR Code" preview image. |
| Facebook Shop Message | User messages from your Facebook Shop | **Screenshot `140`**: minimal — a "Facebook Shop" card + "Show Preview >" link + an **"Activate"** button (never clicked — activating would connect/enable the real Facebook Shop integration on the live account, out of scope for a read-only capture). No keyword/condition fields at all; this trigger is gated entirely on the Shop integration being turned on. |

### Contact Events tab (8 events) — screenshot `65`

| Contact Event (verbatim) |
|---|
| New contact created |
| Custom field value is changed |
| System field value is changed |
| Tag is applied to a contact |
| Tag is removed from a contact |
| Contact subscribed to a sequence |
| Contact unsubscribed from a sequence |
| Date/Time occurred |

Subtitle for the tab: *"Contact event is a specific event on the Manychat's
side that starts your automation."* "Contact subscribed to a sequence"
matches the operator's live **Client Follow-up #1** trigger (breakdown
row). All 8 configs now opened:

| Contact Event | Config |
|---|---|
| New contact created | **Screenshot `128`**: zero fields — just the event name + "+ Condition". |
| Custom field value is changed | **Screenshot `129`**: "Change a custom field" → opens the same account-live custom-field picker as the Condition node's Custom User Fields tab (is phone number valid?, phone number, preferred_date_time, route, client_interaction folder, …) + "+ Condition". |
| System field value is changed | **Screenshot `130`**: "Change a system field" picker (not expanded further) + "+ Condition" — same shape as the custom-field version. |
| Tag is applied to a contact | **Screenshot `131`**: "Tag applied" + a tag-name box + "+ Condition". |
| Tag is removed from a contact | Not independently screenshotted this pass but structurally certain to mirror "Tag is applied" (same event pair as the Condition node's Tag operator, `is`/`isn't`). |
| Contact subscribed to a sequence | **Screenshot `133`**: "Subscribed to a sequence" + "Enter sequence" picker + "+ Condition". |
| Contact unsubscribed from a sequence | **Screenshot `143`**, closed this relaunch pass: "Unsubscribed from a sequence" + "Enter sequence" picker + "+ Condition" — identical shape to its subscribe counterpart. |
| Date/Time occurred | **Screenshots `134`-`135`**: "Date/Time based trigger" — "Trigger goes off [N] [days/…] [after ▾] Select user field at Field time" (the `[after ▾]` dropdown, screenshot `135`, has 3 options: **At the day of, After, Before**) + a **"This event repeats every year"** checkbox + "+ Condition". This is the richest of the 8 — it schedules off a date-type custom/system field rather than firing on a discrete event. |

### "New Automation" entry-point shortcuts (screenshot `60`, distinct from the in-canvas picker above)

The "Start From Scratch" button (top of the Templates dialog) opens a small
menu, **before** landing on a blank canvas:
- "Start with a trigger": **Post or Reel comment**, **Story reply**,
  **Direct message** (these create a flow pre-wired to that trigger).
- "Build your own way": **Start from a blank canvas** (used for this
  capture), **Start with AI**.

The Templates dialog itself also has a "By trigger" filter rail (screenshot
`59`): **Post or Reel comment, DM, Story reply, Live comment** — four
trigger-shaped template categories, one fewer surface than the in-canvas
picker's 6 Instagram triggers (no Ads/Ref-URL template category).

**Channel diff — Templates dialog** (screenshots `106`-`108`): the Templates
dialog has a **3rd channel tab, Facebook**, alongside Instagram/TikTok (not
previously noted). Its "By trigger" filter rail is *thinner* than
Instagram's: only **DM, Post comment** (2 categories vs Instagram's 4 — no
Story reply/Live comment equivalents, consistent with Facebook having no
Story feature). "Start From Scratch" → "Start with a trigger" also drops
the trigger-shortcut submenu entirely on the Facebook tab (screenshot `107`:
only "Build your own way" → blank canvas / Start with AI remain); a fresh
Facebook-channel blank canvas's "Choose first step" palette (screenshot
`108`) is otherwise identical in shape to Instagram's (Instagram/TikTok/
Messenger content + AI Step + Actions/Condition/Randomizer/Smart Delay).

---

## 2. Node / builder capability catalog

The pre-existing breakdown doc already has partial node coverage worth
reusing rather than re-capturing from zero:
- Message node content-block palette: `27-node-content-blocks-palette.jpg`,
  `28-node-content-blocks-more.jpg` (Text, Image, Delay, Data Collection +
  under "More": File, Audio, Video, Card, Gallery, Messenger List).
- Message node buttons: `26-node-message-buttons-config.jpg`,
  `37-node-message-yesno-buttons.jpg`.
- Data Collection reply types: `42-node-datacollection-replytypes.jpg`
  (Text, Email, Phone, Multiple Choice, Number, First name, Last name, URL
  — breakdown says "and likely more below the fold", unconfirmed).
- Actions node (Set User Field, Add Tag, External Request, Start
  Automation): `38-node-actions-setuserfield.jpg`,
  `39-node-start-automation-config.jpg`.
- "Choose Next Step" full palette: `29`-`31` (Instagram/TikTok/Messenger
  content, AI Step, Actions/Condition/Randomizer/Smart Delay logic group —
  same grouping confirmed again in this pass's blank-canvas "Choose first
  step" panel, unscreenshotted since it matches).

All of these have now been re-verified against the FULL option lists across
the three passes covered by this doc (Condition's operator list, Actions'
full 24-action catalog, Randomizer's weight UI, Smart Delay's unit options,
External Request's full request builder, AI Step's config, every individual
content-block config, and an Instagram-vs-Facebook channel diff) — see the
sections below and the "Coverage checklist" for what closed on which pass.

### Condition node (screenshot `72`-`81`) — FULLY captured this pass

Panel heading "Condition" — "Does the contact match [all/any] of the
following conditions?" (dropdown, screenshot `73`: **all of the following
conditions** / **any of the following conditions** — i.e. AND/OR grouping,
single dropdown not per-row).

**"+ Condition" field picker** (screenshot `74`-`77`) has 4 tabs: **Recommended,
General Filters, System Fields, Custom User Fields**.
- Recommended: Tag, Email, Follows your account (×2 — Instagram/other
  channel variant, same label).
- General Filters: Tag, Opted-In Through Widget, Opted-In Through Ad,
  Opted-In Through API, List subscription available right now, Messenger:
  Subscribed to List, Sequence subscription, Current time, Segment.
- System Fields: a big per-channel list — common (First Name, Last Name,
  Full Name, Email, Phone, Subscribed, Contact Id, Last Reply Type) +
  **Instagram** group (Last Interaction, Last Seen, Messaging window
  segment, Follower Count, Username, Opted-in, Follows your account,
  Verified, Business Follows Contact) + **TikTok** group (Last Interaction,
  Last Seen, Username, Display Name, Opted-in, Follows your account) +
  **Facebook** group (Locale, Language, Timezone, Last Interaction, Last
  Seen, Messaging window segment, Gender, Opted-in, EEA Affected).
- Custom User Fields: surfaces the account's own fields (confirms this
  picker is account-live, not static — matches the operator's real fields
  from breakdown `44`-`47`: is phone number valid?, phone number,
  preferred_date_time, route, client_interaction, Budget, Comment,
  Feedback, Full Name, Has property?, Location, Objective, Who are they?,
  Work Type).

**Operator sets per field type** (this is the field-type → operator-list
matrix the breakdown was missing entirely):
- **Tag** (screenshot `78`): `is` / `isn't`, then a tag-search picker
  showing the account's real tags with subscriber counts (Job-seeker Flow
  Completion: 3, Client Flow Completion: 2, Real Estate Professional: 0).
- **Text** field, e.g. Full Name (screenshot `79`): `is`, `isn't`,
  `contains`, `doesn't contain`, `begins with`, `has any value`, `is
  unknown` — plus a free-text value box and a **Case Sensitivity**
  checkbox.
- **Date** field, e.g. Last Interaction (screenshot `80`): `after`,
  `before`, `on`, `has any value`, `is unknown`, `less than`, `more than` —
  plus a **Type** dropdown (`Specific date` / `Custom field date`) and a
  date input (`MM/DD/YYYY hh:mm`).
- **Boolean** field, e.g. Follows your account (screenshot `81`): `is
  true`, `is false`, `has any value`, `is unknown` (no free-text value —
  fixed 4-option set).

**Branch structure** (screenshot `81`): a Condition node always has exactly
two branches, **"Yes, the contact matches"** and **"If not"**, each ending
in its own "Choose Next Step". "If not" also offers **"+ Add Another
Condition"** (i.e. an else-if chain, not just binary).

### Actions node — action-type catalog (screenshot `82`-`93`) — FULLY captured this pass

Opening "Choose Next Step" mid-flow (i.e. after a Condition, not as the very
first step) shows a **superset** of the blank-canvas "Choose first step"
panel: **Instagram, TikTok, Messenger** (content), **AI Step**, **Perform
Actions**, **Condition**, **Randomizer**, **Smart Delay**, **Start another
Automation**, **Select Existing Step** (screenshot `82`). The last two
(Start Automation / Select Existing Step) are NOT offered as the very first
step of a flow — they only appear once at least one step already exists.

**"Perform next actions..." picker** — category tabs (a "Recently used" tab
also appears once any action has been used once this session, screenshot
`87` before / vs later captures): **Contact data, Automation, Inbox, Ads
Optimization, Claude**.

| Category | Actions (verbatim label — helper text) |
|---|---|
| **Contact data** (screenshot `83`) | Add Tag — "Label contacts for convenient organization and segmentation"; Remove Tag — "Delete assigned Tags when they are no longer applicable to the contact"; Set User Field — "Manage customer data, including birthdates or store item counts"; Clear User Field — "Delete stored data"; Delete Contact — "Automatically delete contact permanently"; Set Instagram Opt-in / Set Instagram Opt-out; Set Messenger Opt-in / Set Messenger Opt-out; Set TikTok Opt-in / Set TikTok Opt-out (all three opt-in/out pairs share the same two helper strings: "Enable followers to receive automated direct messages from your account after opting in" / "Opt-out prevents automated direct messages to followers"). |
| **Automation** (screenshot `84`) | Set Bot Field — "Manage business data such the quantities of product"; Subscribe to Sequence; Unsubscribe from Sequence; **Make External Request** — "Send an HTTP request to your server with different types of data" (full builder captured below); Change Menu in Messenger — "Switch to another Main Menu in Messenger"; Log Conversion event — "Track your earnings using conversion events"; Update Instagram Custom Audience — "Add or remove contacts from your Instagram Custom Audience"; Pause all automations — "Pause messages for certain contacts, for as long as you like". |
| **Inbox** (screenshot `85`) | Mark conversation as Open; Mark conversation as Closed; Assign conversation — "Assign conversation to one of your team members"; Notify Assignees — "Notify your team members about incoming messages or events". |
| **Ads Optimization** (screenshot `86`) | Send event to Meta Conversions API — "Sends a customizable event to Meta Conversions API". |
| **Claude** (screenshot `87`) | **Make request** — "Make request to Claude." Category subtitle: *"Thoughtful AI for nuanced and creative text generation."* Full config captured below. |

Note: this is a strictly larger list than the breakdown's live-usage-only
capture (Set User Field, Add Tag, External Request, Start Automation) —
every other item here has never been used by the operator's account.
"Start Automation" itself is NOT in this Actions/"Perform next actions"
list — it's a peer top-level entry in "Choose Next Step" (its own node
type), not an Actions sub-item; the breakdown's node-type table conflated
the two.

**"Claude" action config** (screenshot `88`-`90`) — "Edit Claude Actions" /
"Claude Actions: Request" / "Make request to Claude.": **Model** dropdown
(screenshot `89`, verbatim as rendered: Claude Sonnet 5, Claude Fable 5,
Claude Opus 4.8, Claude Opus 4.7, Claude Sonnet 4.6 [default], Claude Opus
4.6, Claude Opus 4.5, Claude Haiku 4.5, Claude Sonnet 4.5, Claude Opus 4.1
— this is live product UI text, captured verbatim, not vetted against any
external model-naming reference); **System prompt** (multiline textbox);
**Latest user message** (a field-picker, defaults to
`user_message_field.FieldPicker`); **Save result to** (defaults to a
"Claude response" field, via an Integration field picker); an
**"Advanced Options"** disclosure — expanded this relaunch pass (screenshot
`147`, after resizing the browser taller to work around the modal's fixed
height that cut it off on the first two attempts): **Maximum tokens**
numeric input (default `512`) and **Temperature** slider (`min=0, max=1,
step=0.1`, default `1` — i.e. it defaults to the top of its range, not a
mid-range value); Cancel / Save.

**"Make External Request" config** (screenshot `91`-`93`) — "Edit
Request" (Help link to
`https://help.manychat.com/hc/articles/14281285374364`):
- **Request Type** dropdown: **POST** (default), **GET**, **PUT**,
  **DELETE**.
- **Request URL** textbox — helper text *"Only https links are allowed"*.
- **Contact for testing** — a contact-name picker (for the Test Request
  button to run against).
- 4 tabs: **Headers** (screenshot `91`, a "+ Request Header" button to add
  key/value rows), **Body** (screenshot `92`: "Request Body" heading, "+
  Add Full Contact Data" button, "{+} Add a Field" button, a raw JSON
  textbox, and a read-only "Preview" pane below it), **Response**
  (screenshot `93` prior state: shows "No Response" placeholder + "Test
  your request to receive a response" until a live Test Request is run —
  not run this pass, no live request was ever sent), **Response mapping**
  (a "+ Add" button — presumably maps JSON response paths to contact
  fields, requires a real response to populate, not exercised).
- Footer: Cancel / Test Request / Save.

### Message node ("Send Message") — content blocks, buttons, Data Collection (screenshot `94`-`100`) — mostly captured this pass

**Header row**: "Send [dropdown]" — screenshot `95`: **within 24 hour
window** (default) / **as Private Reply** (the latter is presumably what
Comments-to-DMs flows use for their first reply, per the Meta 24-hour
messaging-window rule).

**"+ Add Button" → "Edit Button" panel** (screenshot `96`-`97`): Button
title textbox; "When this button is pressed" action picker — same list as
"Choose Next Step" (Instagram, AI Step, Perform Actions, Condition,
Randomizer, Smart Delay, Start another Automation, Select Existing Step)
**plus one extra entry: "Open website"** — selecting it swaps the panel to
a URL-button config: **Website URL** textbox + **"Additional actions"**
checkbox (helper: *"E.g. you can add a tag on a button click."*) — i.e. a
URL button can ALSO fire actions on click, contrary to the assumption that
URL buttons are purely navigational. Delete button / Done footer.

**"+ Add Quick Reply"**: observed **disabled/greyed-out** once a Data
Collection block already exists in the same message (screenshot after
`98`) — Quick Reply and Data Collection appear mutually exclusive on one
message, not previously documented.

**Content-block palette, verbatim + helper text** (screenshot `94`, `98`):
Text ("Add simple text and buttons"), Image ("Boost engagement with
visuals"), PDF ("Add PDF files to your message" — breakdown had called
this "File"), Delay ("Wait a few seconds in between texts"), Data
Collection ("Collect emails, phones and more"); under **More**: Audio,
Video, Card, Gallery, **Dynamic** (this last one is NEW — not in the
breakdown's More list, and not opened this pass to see its config).
Note: on this Instagram-channel canvas, **"Messenger List"** from the
breakdown's capture did NOT appear — confirmed Facebook/Messenger-channel-
only, see the channel-diff writeup below.

**Card block config** (screenshot `100`): "Upload image or paste URL" +
"Choose Files"; Title textbox; Subtitle textbox; "+ Add Button"; "Card
URL" textbox (a card is clickable as a whole, independent of its buttons).

**Every remaining content block, individually opened and captured** (this
was the biggest open item; closed across the interrupted pass `111`-`121`
and confirmed/completed this relaunch with Text, screenshot `144`):

| Block | Screenshot | Config |
|---|---|---|
| Text | `144` | "Enter your text..." textbox + "+ Add Button" — no other fields; the simplest block. |
| Image | `111` | "Upload image or paste URL" — no other fields, same upload pattern as every image-bearing block. |
| Delay | `112` | Clicking it opens a small popover (not inline like the others): **"Delay in Seconds"** numeric stepper (default 3) + **"Typing Action"** checkbox "Show 'typing...' during delay" (checked by default). This is the same delay that renders as "Typing ⏱ 3 seconds" inline in the message once configured. |
| File (breakdown called this "PDF") | `113` | Bare upload dropzone, no other fields. |
| Audio | `114` | Bare upload dropzone, no other fields. |
| Video | `115` | Bare upload dropzone, no other fields. |
| Gallery | `116`-`117` | **Structurally identical to Card**, not a separate block type — same "Upload image or paste URL" + Title + Subtitle + "+ Add Button" + "Card URL" popover, but with **◀ ▶ arrows either side of the image** to page between cards. Ties back to the palette helper text "Add up to 10 images with buttons" (screenshot `110`) — a Gallery is a Card, repeated up to 10 times, paged via those arrows. |
| Dynamic | `118`-`120` | Opens the **exact same "Edit Request" builder as the External Request action** (Request Type POST/GET/PUT/DELETE, Request URL, Contact for testing, Headers/Body/Response/Response mapping tabs, Cancel/Test Request/Save) — i.e. Dynamic content is an inline HTTP call whose response becomes the message. It additionally has an **"Edit Fallback"** step (screenshot `120`) — "Select a Step for a request error case" — offering the same next-step catalog as everywhere else (channel content limited to the current node's own channel only — "Messenger" alone, not Instagram/TikTok, on this Facebook-channel canvas) plus Remove/Done. |
| Messenger List | `121` | A **Facebook/Messenger-only** block (see channel diff below): "Messenger List" heading + a search/picker textbox + a **"+ Create"** button — implies it references (or creates) a separate ManyChat "subscribe widget" asset, not configured inline. |

**Channel diff — content-block palette and message editor** (screenshots
`109`-`110`, Facebook-channel canvas vs the Instagram-channel capture in
`94`/`98`):
- **"Messenger List" is Facebook/Messenger-channel-only** — confirmed
  present in the Facebook "More" list (`110`) and absent from the
  Instagram "More" list (`94`), settling what was previously only
  suspected.
- The Facebook "More" list's helper text is fuller than what Instagram
  showed and worth recording verbatim: File "Add files to the message",
  Audio "Send voice snippets in chat", Video "Share video in chat", Card
  "Add images with buttons", Gallery "Add up to 10 images with buttons",
  Messenger List "Add subscribe widget", Dynamic "Request content from
  server".
- The plain-Text block on a Facebook-channel message additionally shows an
  **"Improve" AI-assist button** (sparkle icon, screenshot `109`) hovering
  over the text box alongside the emoji/field-insert icons and a **2000
  character counter** — not seen (or not screenshotted) on the
  Instagram-channel capture; unconfirmed whether this is Facebook-only or
  was simply missed earlier.

**Data Collection full config** (screenshot `98`-`99`) — "Edit Data
Collection":
- **Reply Type** — full list, verbatim (11 types, 3 more than the
  breakdown's partial 8): **Text, Email, Phone, Multiple Choice, Number,
  First name, Last name, URL, Image, Date, Date and time**.
- **Save Response to a Custom Field** — field picker.
- **Actions on successful input** → "Perform Actions".
- **If contact has not responded** → "Data Collection expires in [30]
  minutes" (editable number) → "You can start another Automation once it
  is expired without a reply:" → its own "Choose Next Step" (same full
  node-type list as everywhere else).
- **Retry [3 times] if the user reply is invalid** — a validation-retry
  count, NOT in the breakdown at all (e.g. an Email-type question
  presumably re-asks up to 3 times if the reply doesn't parse as an
  email, before falling through to the timeout path — inferred, not
  confirmed by testing an actual invalid reply).

### Randomizer node (screenshot `101`) — FULLY captured this pass

"Split the traffic" — **"Pick a random path every time"** checkbox;
"Assigned traffic 100%"; branches labeled **A, B, ...** each with a
percentage slider + numeric % textbox + its own "Choose Next Step"; **"+
New Variation"** to add more branches (not limited to 2). Weights are
freely editable numbers (not locked to even splits), and the panel implies
they must sum to 100%.

### Smart Delay node (screenshot `102`-`103`) — FULLY captured this pass

Two tabs, **Duration** / **Date**:
- **Duration**: "Wait for [number] [unit dropdown: Seconds, Minutes,
  Hours, Days]" — helper: *"Enter a number or a numeric contact field
  formula. Max 365 days."* (i.e. the number field accepts a field-formula,
  not just a literal); **"Send within specific hours"** checkbox — helper:
  *"Sends when the contact's local time is within the hours you set. Your
  account timezone is used if theirs is unknown."*
- **Date**: "Wait until [dropdown: Specific date / Dynamic date] + a
  date/time picker" — helper: *"Automation stops here if the date has
  already passed. We use the contact's timezone, or your account timezone
  if theirs is unknown."* ("Dynamic date" presumably points at a custom
  date field — not exercised).
- Footer: "Choose Next Step" (single downstream path, no branching).

### AI Step node (screenshot `104`) — FULLY captured this pass (this is a
DIFFERENT surface from the Actions-node "Claude" action above — this one
looks generative/no-code, not a raw model-call form)

"Tell AI what to do" — textbox, placeholder "Set a goal for the
conversation", tooltip icon present (not opened); "Give AI context" —
textbox, placeholder "Share all the info", tooltip icon present; a single
**"Generate"** button (blue, with a sparkle icon) — presumably expands
into a generated sub-flow/canvas once clicked; NOT clicked this pass (would
have created unpredictable draft content — out of scope for "harmless,
inspectable" edits). No other fields on this panel — it is deliberately
minimal, unlike the Actions-node Claude form (model picker, system prompt,
field mapping).

### Start Automation node — re-verified (screenshots `145`-`146`)

Confirms and extends the breakdown's original capture (`39`): clicking the
node's "Click to Select Automation" opens **"Pick Automation"** — the exact
same folder/flow-browser UI as the Automation root list (search, Any
Trigger / Any Trigger states filters, folder tiles, then a Name/Runs/CTR/
Modified flow table with Show All) — i.e. it can chain to any existing flow
in any folder, not a scoped picker. New detail not in the breakdown: the
Start Automation node **also has its own "Choose Next Step"** below the
"Click to Select Automation" affordance (screenshot `146`) — it is not a
dead-end/terminal node, the canvas can continue after it.

### Custom field creation modal (screenshot `105`) — FULLY captured this pass

Settings → Automation → Fields → **"New User Field"**: "Create New User
Field" — Name (required), **Type** dropdown (6 options, verbatim: **Text,
Number, Date, Date & Time, True/False, Array**), Description (optional),
Folder (defaults to "User Fields" — the account's existing custom fields
live in a "client_interaction" folder per breakdown `44`-`47`, confirming
folders are user-creatable here too). Cancel / Create. No field was
created (Cancel used) — this is read-only reconnaissance of the account's
real Settings surface, not the blank draft flow.

Note: this 6-type list is a strict superset of what was inferable from the
account's existing fields (breakdown only showed Text/Boolean/Datetime in
use) — **Array** and plain **Number** were previously unconfirmed as
field types.

---

## 3. Coverage checklist — CLOSED

Every item is now closed across the three capture passes in this doc
(`59`-`105` initial, `106`-`138` interrupted gap pass, `139`-`147` relaunch
that finished it). One item couldn't be opened for a structural reason
(noted below), not an oversight.

**Triggers:**
- [x] Instagram tab: full list (6) + Story Reply full config + Instagram
  Message both sub-modes (Detect words + AI intent) + Live Comments config
  (`139`) + Instagram Ref URL config (`141`). **Instagram Ads**: genuinely
  blocked — one-Ads-trigger-per-Automation cap, already consumed by a
  Facebook Ads test (`142`) — its sibling Facebook Ads has zero config
  fields (`122`), so Instagram Ads is inferred (not confirmed) to match.
- [x] TikTok tab: full list (4) — Photo/Video comment confirmed disabled,
  TikTok Message submodes (`136`), TikTok URL (`137`), TikTok QR Code
  (`138`) all captured.
- [x] Messenger tab: full list (6), all 6 individual configs captured —
  Facebook Ads (`122`), Facebook Comments (`123`), Messenger Message
  (`124`), Messenger Ref URL (`125`), QR Code (`126`), Facebook Shop
  Message (`140`).
- [x] Contact Events tab: full list (8), all 8 individual configs captured
  — New contact (`128`), Custom field changed (`129`), System field
  changed (`130`), Tag applied (`131`), Tag removed (inferred identical to
  Tag applied, not independently screenshotted), Sequence subscribed
  (`133`), Sequence unsubscribed (`143`), Date/Time occurred (`134`-`135`).
- [x] New Automation entry dialog: "By trigger" filter rail + "Start with a
  trigger" quick-create submenu + the Templates dialog's 3rd (Facebook)
  channel tab (`106`-`108`).

**Nodes:**
- [x] Condition node: full operator list per field type (Tag/Text/Date/
  Boolean), AND/OR grouping, branch structure.
- [x] Actions node: complete action-type catalog across all 5 categories
  (Contact data, Automation, Inbox, Ads Optimization, Claude) — 24 distinct
  actions total.
- [x] External Request action: full request builder (method, URL, contact-
  for-testing, Headers/Body/Response/Response-mapping tabs). NOT exercised:
  an actual Test Request (no live call was ever made, by design).
- [x] "Choose Next Step" superset confirmed: Start Automation and Select
  Existing Step only appear as later steps, never as the very first step.
- [x] Message node: header send-mode dropdown, Edit Button panel + "Open
  website" URL-button sub-config, Quick-Reply/Data-Collection mutual
  exclusivity, full content-block palette list.
- [x] **Every individual content-block config**: Text (`144`), Image
  (`111`), Delay (`112`), File (`113`), Audio (`114`), Video (`115`), Card
  (`100`), Gallery (`116`-`117`, confirmed = Card × up to 10, paged),
  Dynamic (`118`-`120`, confirmed = inline External Request builder +
  Fallback step), Messenger List (`121`, confirmed Facebook/Messenger-only).
- [x] Question/Data Collection node: full 11-item reply-type list,
  save-to-field, timeout+"Choose Next Step", retry-count (3 times).
- [x] Randomizer node: full config (pick-random-every-time toggle,
  weighted A/B/... branches, + New Variation).
- [x] Smart Delay node: full config, both tabs (Duration unit dropdown +
  business-hours toggle; Date specific/dynamic + past-date behavior).
- [x] AI Step node: full config (goal + context textboxes + Generate
  button) — confirmed distinct from the Actions-node Claude action.
- [x] Start Automation node: re-verified (`145`-`146`) — "Pick Automation"
  flow-browser + its own "Choose Next Step" (not a dead end).
- [x] Claude action's "Advanced Options" disclosure: expanded (`147`) —
  Maximum tokens (default 512) + Temperature slider (0-1, step 0.1, default
  1). Needed a taller browser viewport; the modal's fixed height clipped it
  in two earlier attempts.
- [x] Custom field creation modal: 6 types captured (Text, Number, Date,
  Date & Time, True/False, Array).
- [x] Channel-diff check, Instagram vs Facebook: node palette is
  structurally identical (`108`); content-block palette differs
  ("Messenger List" is Facebook/Messenger-only, `109`-`110`); Templates
  dialog's "By trigger" rail is thinner on Facebook (2 categories vs
  Instagram's 4, `106`); some trigger configs are richer on the Facebook
  side (Facebook Comments has 2 toggles Instagram's capture didn't show;
  Messenger Ref URL surfaces fields Instagram Ref URL keeps behind a
  collapsed toggle) — flagged per-row above as inferred-not-confirmed where
  the Instagram side wasn't re-opened to check for parity.

---

## Capture notes (safety / integrity)

- **One flow throughout, across all three passes** (named "Untitled"
  throughout — never renamed). By the end it had accumulated: ~13 stacked
  triggers in its "When..." list (every trigger type that was clicked to
  view its config gets added to the automation's trigger stack immediately
  on click, independent of whether "Save" or "Leave without saving" was
  chosen afterwards — a real ManyChat behaviour worth knowing if reusing
  this technique again), a Condition node, an Actions node (Claude action +
  External Request action, both left unconfigured/untested, plus a second
  freestanding Actions node added this relaunch pass to re-open the Claude
  config for the Advanced Options screenshot), a large Send Message node
  (accumulated one of nearly every content block — Text, Image, Delay,
  File, Audio, Video, two Cards, a Dynamic-content block, a Messenger List
  block — from testing each block type), a Randomizer node, a Smart Delay
  node, an AI Step node (goal/context left blank, "Generate" never
  clicked), and a Start Automation node (never had a target automation
  picked). **Deleted** at the end of the session via Automation → row menu
  → Delete (ManyChat's own confirmation dialog confirms this moves the flow
  — and its Growth Tools, e.g. the Story Reply trigger widget — to the
  trash folder, restorable, not a hard delete).
- No existing flow, trigger, sequence, tag, field, or setting was opened in
  edit mode, modified, or deleted. All exploration happened inside the
  draft flow's own trigger-picker and node-config dialogs, plus one
  read-only visit to Settings → Fields ("New User Field" dialog, opened
  and then Cancelled — no field created).
- No Publish / Set Live action was ever clicked, on any pass. The blank
  flow's "Set Live" button started disabled (no trigger attached) and
  became enabled once a trigger + first step existed, per ManyChat's own
  gating — it was never clicked at any point.
- No live "Test Request" was ever sent from the External Request action or
  the Dynamic content block (both Response tabs were only observed in
  their pre-test "No Response" state).
- No account-level integration was activated: the Facebook Shop Message
  trigger's "Activate" button was seen (screenshot `140`) but never
  clicked, since that would connect the real Facebook Shop integration on
  the live account.
- The Instagram Ref URL and Messenger Ref URL trigger screens surface the
  account's real, live referral links (`ig.me/m/silveroakglobal.ae?ref=…`,
  `m.me/SOPUAE?ref=…`) — captured verbatim as they are simple read-only
  identifiers already visible to anyone with access to those trigger
  screens, not secrets.
