Skip to main content
Each accordion is one pattern. Snippets are generic: names, phones, domains, template bodies, Fireberry fields, agent ids, and real workflow ids are replaced. Structure matches production graphs — node types, handle ids, connections.out, Variable { id, name, parentId, valueType }, sub-node parenting, and pointer placeholders such as "wf_child_support".
Reply bot: the customer messages first (pingmeeTrigger with eventType: "Messages Created" and a keyword gate). No Meta template — first WhatsApp node is messageType: "custom" with a BODY. Do not call GET /templates unless the user named a catalog template. For a bot that opens the thread, see Conversation opener.Canvas
Execution
The bot starts the thread (workflowTrigger + POST /trigger). This is a starter, so Meta requires an approved template. Fetch GET /templates for the workflow’s associatedToBusinessId, copy one APPROVED object into templateInformation, set messageType: "template" and templateType: "whatsapp" (runtime keys off templateType). Bind {{n}} with bodyVariables / headerVariables. Reply bots (inbound pingmeeTrigger) use messageType: "custom" instead — Pingmee trigger + keywords.Document fields (set on create): associatedToBusinessId = phone-number id from GET /phone-numbers, platformType: "whatsapp".Canvas
Execution
A text HEADER with {{1}} uses headerVariables the same way. IMAGE / VIDEO / DOCUMENT headers are not available via API unless attachmentS3Id is already on the component. For triggerData bindings on the same shape, see Workflow Trigger + triggerData.
bodyVariables copy the trigger catalog. Answers are siblings on the canvas (parentId) and subNodes at runtime. Outgoing handle is "in".Canvas (trimmed)
Execution (that parent only)
Manual payload on a workflowTrigger (same output shape on pingmeeTrigger / social triggers). POST { "triggerData": { "websiteLink": "https://example.com" } } then bind return $trig_1.triggerData.websiteLink; in a WhatsApp slot. The $… id is the trigger node id. See triggerData.Canvas
Execution
Then POST /trigger:
The same Expression works in an HTTP bodyVariables slot. Save both graphs, activate, then trigger.
Parent holds conditions. Children titled true / false. Real booking bots use "Is Empty" on a trigger field (for example customer name) before an HTTP or Fireberry write.
Canvas edges from those children use sourceHandle: "in".
Product-line bots switch on a catalog field, then pointer into a region workflow. Conditions sit on each case child.
Reminder and booking flows POST JSON with {{1}} bound to a trigger variable (often a campaign parameter expression).
Root canvas edge: sourceHandle: "out".
Inbound bots create-or-update a CRM row keyed by phone. Table and field names below are generic stand-ins.
Other action values seen: "Create", "Update Record".
Region menus create a follow-up task, then pointer. Title uses {{1}}.
Used on long booking trees between a message and an updateConversation.
Follow-up and booking bots tag the thread, flip answer mode, and bind customer fields to the trigger catalog (not raw PII).
Reminder flows call ai after HTTP / Fireberry. Summarize publishes a summary output for later templates.
aiOption may also be "answerWithAI" (no summary catalog).
Lead router: Pingmee trigger → menu answers → three pointers. Each child is a separate document that starts with workflowTrigger and is active.Parent execution (trimmed)
Child execution
Parent canvas edges: trigger out → menu; answer in → pointer. After the child finishes, parent resumes at upd_conv.
Landing-style child: workflowTrigger → WhatsApp with expression parameters from triggerData → answers → Fireberry → pointer to a shared closer. Also shows settings.sharedTimeout. This is the shape to copy when you need both bindings and a sub-workflow. For the payload-only pattern, see Workflow Trigger + triggerData.Document (trimmed)
Matching canvas edges
wf_child_support must already be active and start with workflowTrigger. Save both graphs, then activate, then trigger — see overview.
Last modified on September 4, 2026