# Workflows Documentation (/docs) Welcome to the **Pingmee Workflows** documentation. Use the sidebar to browse nodes, concepts, and reference material. ## Quick links [#quick-links] * [Board overview](/docs/getting-started/board-overview) * [Top action bar](/docs/concepts/top-action-bar) · [Board toolbar](/docs/concepts/board-toolbar) · [Nodes drawer](/docs/concepts/nodes-drawer) · [Sticky notes](/docs/concepts/sticky-notes) * [Node catalog](/docs/reference/node-catalog) * [WhatsApp node](/docs/nodes/actions/whatsapp) # Board toolbar (/docs/concepts/board-toolbar) Board **chrome** surrounds the canvas: a **top-right** button to add nodes, a **bottom-left** action bar for notes and history, and **canvas controls** for zoom and interaction lock. For the **app header** above the canvas (platform, save, active toggle, AI generate, executions), see [Top action bar](/docs/concepts/top-action-bar). ## Top panel (add nodes) [#top-panel-add-nodes] A **+** button sits in the top-right **Panel** on the canvas. | Control | Action | | ------------- | ---------------------------------------------------------------------------- | | **+** (click) | Opens the [nodes drawer](/docs/concepts/nodes-drawer) in the left side panel | On hover, a **sticky note** icon appears below the + button; clicking it adds a [sticky note](/docs/concepts/sticky-notes) at a fixed default position on the board. The same note type can be added from the bottom bar at the **viewport center** (preferred). ## Bottom menu bar [#bottom-menu-bar] The bottom-left **Panel** (offset from the default control position) shows four actions: | Button | Label | What it does | | ---------------- | --------- | ---------------------------------------------------------------------------------- | | Sticky note icon | **Note** | Adds a sticky note at the **center of the current viewport** | | Align icon | **Clean** | Runs **auto-align** on all nodes, then **fit view** with padding (layout + camera) | | Undo | **Undo** | Reverts the last graph change; disabled when nothing to undo | | Redo | **Redo** | Re-applies undone changes; disabled when nothing to redo | **Clean** rearranges nodes for readability, then frames the whole workflow in view. Keyboard shortcuts (when not typing in a field): * **Undo:** ⌘/Ctrl+Z * **Redo:** ⌘/Ctrl+Shift+Z ## Canvas controls (zoom & lock) [#canvas-controls-zoom--lock] The standard **Controls** widget (bottom-right) provides: | Control | Behavior | | ------------------ | ----------------------------------------------------------------------- | | Zoom in / out | Adjust canvas zoom | | Fit view | Frame all nodes in view | | Interactive toggle | When off, locks dragging, connecting, and selecting nodes on the canvas | ## Node selection toolbar (on canvas) [#node-selection-toolbar-on-canvas] When a **workflow node** or **sticky note** is selected, a small toolbar may appear on the node (not part of the bottom menu bar): | Icon | Action | | --------- | ------------------------------------------------- | | **Power** | Toggle active state (dims the node when inactive) | | **Copy** | Duplicate the node (and paste immediately) | | **Trash** | Delete the node, its sub-nodes, and related edges | Sticky notes use a compact **toolbar-only** variant (top-right of the note). Regular nodes show category/id label plus the toolbar when selected. ## Related [#related] * [Board overview](/docs/getting-started/board-overview) * [Nodes drawer](/docs/concepts/nodes-drawer) * [Sticky notes](/docs/concepts/sticky-notes) # Node descriptions (/docs/concepts/node-descriptions) Most workflow nodes include a **Description** field at the bottom of the **side panel** form. Use it for short internal notes (business rules, handoff hints, TODOs) that help collaborators read the canvas. ## Where it appears on the canvas [#where-it-appears-on-the-canvas] | Node type | Canvas behavior | | --------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Most nodes** (actions, triggers, operations, etc.) | Description text appears at the **bottom** of the node card when the field is non-empty. | | **If / Else** | Description appears **under the node title** (top of the card). A placeholder (*How would you describe this logic?*) shows when the field is empty. | | **Switch** | Description is saved in the sidebar but **not shown** on the Switch node card (legacy layout). | | **WhatsApp / Messenger / Instagram** message nodes | Same as most nodes — bottom of the card, **only when** you entered text. | | **Sub-nodes** (answers, fallback, timeout, switch cases, If branches) | **No Description field** — configure labels and conditions instead. | | **Sticky notes** | Not applicable — the note body *is* the annotation (see [Sticky notes](/docs/concepts/sticky-notes)). | Descriptions are **editor-only documentation**. They do not change runtime routing or message content. ## How to edit [#how-to-edit] 1. Select a node on the canvas (not a sub-node or sticky note). 2. Scroll to **Description** in the side panel. 3. Type your note; it updates on the canvas as you type (where that node type supports display). For long-form team commentary that should not sit on a step card, prefer a [sticky note](/docs/concepts/sticky-notes) beside the relevant branch. ## Related [#related] * [Board overview](/docs/getting-started/board-overview) * [Sub-nodes](/docs/concepts/sub-nodes) * [If / Else](/docs/nodes/conditions/if-else) * [Sticky notes](/docs/concepts/sticky-notes) # Nodes drawer (/docs/concepts/nodes-drawer) The **nodes drawer** is the left **side panel** where you choose node types to add to the canvas—triggers, actions, conditions, and operations. ## Opening the drawer [#opening-the-drawer] | Entry point | What happens | | ----------------------------- | ----------------------------------------------------------- | | **Top panel +** | Opens the drawer | | **Welcome placeholder +** | Opens the drawer | | **+ on a node output handle** | Opens the drawer and remembers which handle to connect from | Clicking the **canvas background** closes the drawer. Selecting a sticky note on the canvas also closes it. While the drawer is open, the side panel shows **only** the node list — not the selected node’s form. ## Sections and categories [#sections-and-categories] Cards are grouped into four sections: 1. **Triggers** — Pingmee, Instagram, Facebook, Workflow Trigger, and similar starters 2. **Conditions** — If / Else, Switch, … 3. **Actions** — WhatsApp, Messenger, AI, Wait, HTTP Request, … 4. **Operations** — Workflow Pointer, … Each section header shows the category name and a count, for example `Actions (12)`. Some node types never appear in the drawer because they are created on the canvas (branch handles, sticky notes, tag or agent assignment steps, and similar). See the [node catalog](/docs/reference/node-catalog) for the full list. ### Social-channel workflows [#social-channel-workflows] When you build a workflow focused on **Instagram or Facebook comments**, the drawer lists social actions; **WhatsApp** is not offered in that workflow type. ## Drawer cards [#drawer-cards] Each card shows: * **Icon** for the node type * **Title** — display name * **Subtitle** — short description ### Add by click [#add-by-click] * If the drawer was opened from a **handle +**, clicking a card **connects** the new node from that handle. * Otherwise, the node is placed at the **viewport center** and the drawer closes. ### Add by drag-and-drop [#add-by-drag-and-drop] Drag a card onto the canvas. On drop, the node is created at the pointer position. ## Side panel vs node form [#side-panel-vs-node-form] | Panel state | Left panel shows | | -------------------------------------------- | --------------------------------- | | Drawer open | Node catalog (pick a type to add) | | Node selected (not sticky note, not welcome) | Configuration form for that node | | Closed | Panel hidden | [Sticky notes](/docs/concepts/sticky-notes) never open the configuration form in the sidebar. ## Related [#related] * [Board overview](/docs/getting-started/board-overview) * [Board toolbar](/docs/concepts/board-toolbar) — + button and welcome placeholder * [Node catalog](/docs/reference/node-catalog) — full list and drawer visibility * [Sub-nodes](/docs/concepts/sub-nodes) — branches not listed in the drawer # Sticky notes (/docs/concepts/sticky-notes) **Sticky notes** are yellow annotation nodes on the board. They help you document flows for your team; they are **not** execution steps and do not appear in the [nodes drawer](/docs/concepts/nodes-drawer). ## When to use [#when-to-use] * Explain why a branch exists or what a section does. * Leave TODOs or ownership hints for collaborators. * Capture context that does not belong in a node’s sidebar **Description** field (see [Node descriptions](/docs/concepts/node-descriptions)). ## Adding a note [#adding-a-note] | Method | Placement | | ----------------------------- | --------------------------------------------------------------------------------- | | **Bottom menu bar → Note** | Center of the current viewport (recommended) | | **Top panel** (hover under +) | Default position on the board (see [board toolbar](/docs/concepts/board-toolbar)) | Sticky notes are added from the toolbar only, not from the add-node drawer. ## Editing on the canvas [#editing-on-the-canvas] Sticky notes are edited **on the canvas only**. Selecting a note does **not** open the left configuration panel. | Interaction | Behavior | | --------------------- | ----------------------------------------------------------------------------------- | | **Text area** | Type your note; placeholder: “Write something…” | | **Resize** | Bottom-right control; minimum size 80×60 | | **RTL** | Text direction follows content (Hebrew/Arabic → RTL) | | **Click note body** | Closes the add-node drawer if it was open | | **Selection toolbar** | Power (active/inactive), Copy, Delete — same pattern as other nodes, compact layout | Inactive notes render at reduced opacity. ## Flow behavior [#flow-behavior] * **No handles** — notes are not connected to the execution graph. * **Saved with the workflow** — unlike the empty-workflow welcome placeholder, sticky notes are stored when you save. * **Validation** — notes can show error styling if the workflow fails validation rules. ## Examples [#examples] ### Section label [#section-label] 1. Add a note above a cluster of actions. 2. Type “Order confirmation — production only”. 3. Resize so the label spans the group. ### Handoff comment [#handoff-comment] 1. Place a note beside an **If / Else** branch. 2. Document which CRM field drives the condition for the next editor. ## Related [#related] * [Board toolbar](/docs/concepts/board-toolbar) — Note and top-panel shortcuts * [Board overview](/docs/getting-started/board-overview) * [Node catalog](/docs/reference/node-catalog) # Sub-nodes (/docs/concepts/sub-nodes) **Sub-nodes** are smaller nodes drawn beside a **parent** on the canvas. Each sub-node has its own outgoing handle so you can connect a different path per branch. ## When to use [#when-to-use] Sub-nodes appear automatically (or after you add them) when the parent needs **multiple exits**: * **WhatsApp / Messenger / Instagram** — button/quick-reply answers, plus optional **fallback** and **timeout** when waiting for a reply. * **If / Else** — fixed **true** and **false** evaluation branches. * **Switch** — one branch per case, plus an initial **fallback** when you add the first case. ## Configuration (parent vs child) [#configuration-parent-vs-child] | Layer | What you configure | Where | | ------------ | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | | **Parent** | Enable wait-for-response, buttons, switch cases, etc. | Parent node form in the sidebar | | **Sub-node** | Fallback message, timeout timer, case label, or (for switch cases) full If-style conditions | Select the sub-node on the canvas, then use the sidebar form | Sub-nodes do **not** have a **Description** field. Use inline labels on the canvas or the parent node’s [description](/docs/concepts/node-descriptions) for team notes. Not every sub-node has a rich form. **Answer** sub-nodes are often edited inline on the canvas (label/badge). **Switch case** sub-nodes reuse the same condition UI as **If / Else** when selected. ## Flow behavior [#flow-behavior] * Sub-nodes belong to their parent; you connect the next step from each sub-node’s handle. * When sub-nodes exist, the parent’s main output handle is hidden; execution continues from the branch handles. * Downstream variable pickers still see trigger and message context from the parent path. * Limits apply per parent (for example, up to **10** answer sub-nodes on WhatsApp, **25** switch cases). ### WhatsApp-style branches [#whatsapp-style-branches] When **Wait for user response** is on: 1. **Answer** sub-nodes — one per button/quick reply; labels sync to the template when applicable. 2. **Fallback** — runs when the user does not tap an expected button. 3. **Timeout** — runs when no reply arrives within the configured time. ### Switch-specific behavior [#switch-specific-behavior] Adding the **first** case on a Switch creates a **Fallback** sub-node and clears direct edges from the switch parent. Further **+** clicks add **Switch case** sub-nodes; each case can be configured with **If / Else** rules in the sidebar. ## Examples [#examples] ### Menu with three buttons [#menu-with-three-buttons] 1. Configure **WhatsApp** with three quick-reply buttons. 2. Three **answer** sub-nodes appear; connect each to a different next step. 3. Configure **Fallback** for “invalid” input and **Timeout** for silence. ### Route by variable with Switch [#route-by-variable-with-switch] 1. Add **Switch** after a node that exposes a variable. 2. Add cases with **+**; open each case sub-node and set conditions (same fields as If / Else). 3. Wire each case handle to the appropriate action. ## Related [#related] * [Variables](/docs/concepts/variables) * [Node descriptions](/docs/concepts/node-descriptions) * [WhatsApp](/docs/nodes/actions/whatsapp) * [If / Else](/docs/nodes/conditions/if-else) * [Switch](/docs/nodes/conditions/switch) # Top action bar (/docs/concepts/top-action-bar) The **top action bar** sits above the workflow canvas. It controls **which channel this bot runs on**, whether the bot is **published (active)**, and how you **save** or **inspect** the workflow. Top action bar: platform selector, Generate with AI, past executions, active toggle, and Save Controls are listed **left to right** as they appear in the editor. ## Controls (left to right) [#controls-left-to-right] | # | Control | What it does | | - | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | 1 | **Selected platform** | Chooses the **platform this bot operates on** (for example Pingmee service, WhatsApp, Messenger, or Instagram). Triggers and message nodes should match this platform. | | 2 | **Generate with AI** | Opens AI-assisted workflow creation. From a **single prompt** and/or an **uploaded file**, Pingmee can build a **fully operational bot** in under three minutes. Review the generated graph, then adjust nodes and save. | | 3 | **Past executions** | Opens a list of **previous bot runs**. Inspect the **complete JSON output** for each execution (useful for debugging, support, and understanding what the bot returned at runtime). | | 4 | **Active / Inactive** | Toggles whether this workflow is **live**. When **inactive**, the bot does not run for customers even if the graph is saved. When **active**, matching triggers can start the bot (see [Pingmee Trigger](/docs/nodes/triggers/pingmee-trigger)). | | 5 | **Save** | Persists the current canvas (nodes, edges, and node configuration) to Pingmee. Save after meaningful edits; unsaved changes may be lost if you leave the editor. | ## Typical workflow [#typical-workflow] 1. Set **Selected platform** for the channel you are automating. 2. Build or **Generate with AI**, then refine nodes on the canvas. 3. Use **Past executions** to verify behavior after test runs. 4. Turn **Active** on when you are ready for production traffic. 5. Click **Save** before leaving the editor. ## Related [#related] * [Board overview](/docs/getting-started/board-overview) * [Board toolbar](/docs/concepts/board-toolbar) — canvas + and bottom bar (separate from this top bar) * [Pingmee Trigger](/docs/nodes/triggers/pingmee-trigger) # Variables (/docs/concepts/variables) **Variables** let you use information from **earlier steps** in later ones. The editor looks at what is connected before the step you are editing and lists available fields (message, customer, trigger, HTTP response, branch labels, and more). ## When to use [#when-to-use] * Personalize message body text (WhatsApp, Messenger, Instagram). * Drive **If / Else** and **Switch** case conditions. * Bind Fireberry field values, HTTP request body placeholders, or task title/body slots. * Map **Update Customer** fields from data produced earlier in the flow. ## How it works in the editor [#how-it-works-in-the-editor] 1. Connect the node you are configuring to nodes that run **before** it in the flow. 2. Open the node form. Fields that support variables show a **tree picker** (or “Add variable” for `{{1}}`-style placeholders). 3. Pick a **fixed value** from an upstream node or, where supported, an **expression**. 4. At runtime, the workflow engine resolves the binding to the actual value for that execution. The picker lists fields from connected upstream nodes. Branch nodes (answers, If / Else paths, switch cases, timeout, and fallback) still expose their parent’s context so you can reuse trigger and message data downstream. ## Configuration (by field type) [#configuration-by-field-type] | Pattern | What it does | When to use | | ------------------------ | ----------------------------------------------------------- | ------------------------------------------------------------------------- | | **Tree picker** | Single binding to one upstream field or expression | Fireberry values, Update Customer, If conditions, template variable slots | | **`{{n}}` placeholders** | Numbered slots in free text; each slot gets its own binding | HTTP body, task title/body | | **Inline body editor** | WhatsApp/Messenger/Instagram body with variable chips | Message actions | ## Flow behavior [#flow-behavior] * On the node you are editing, variable pickers are for **using** upstream data, not for defining new outputs (message nodes and switch cases add outputs for later steps when you configure them). * Clearing a binding in the picker clears that field on the node. * If no upstream nodes are connected, the picker may be empty; connect triggers and actions first. ## Examples [#examples] ### Greet by name after a trigger [#greet-by-name-after-a-trigger] 1. Start with a **Pingmee Trigger** (or channel trigger) that exposes customer/message variables. 2. Add **WhatsApp** (or Messenger/Instagram) and connect from the trigger. 3. In **Body**, open the variable picker and insert the customer name (or nickname) from the trigger branch. ### HTTP POST with dynamic JSON [#http-post-with-dynamic-json] 1. Add **HTTP Request** after a node that produces data. 2. Set method to POST and write body JSON with `{{1}}`, `{{2}}`, etc. 3. Use **Add variable** and bind each `{{n}}` to the upstream fields you need. ## Related [#related] * [Nodes drawer](/docs/concepts/nodes-drawer) — where you pick nodes to configure * [Sub-nodes](/docs/concepts/sub-nodes) — branches that still expose parent variables * [WhatsApp](/docs/nodes/actions/whatsapp) — template and body variables * [If / Else](/docs/nodes/conditions/if-else) — conditions on variables * [HTTP Request](/docs/nodes/actions/http-request) — body placeholder bindings # Workflow pointer (concept) (/docs/concepts/workflow-pointer) The **Workflow Pointer** pattern splits automation across two workflows: 1. **Workflow Pointer** (operation) — in the current workflow, selects a **target workflow** and transfers execution there. 2. **Workflow Trigger** (trigger) — in the target workflow, is the entry point that runs when the pointer hands off. ## When to use [#when-to-use] * Reuse onboarding, escalation, or support playbooks without copying nodes. * Keep a main flow short while delegating a complex sub-routine to another published workflow. * Separate teams or folders (each workflow can live in its own folder in the picker). ## Configuration (conceptual) [#configuration-conceptual] | Piece | Role | | ----------------------------- | ----------------------------------------------------------------------------------- | | **Pointer → Select workflow** | Chooses `workflowId`, `workflowName`, and `workflowFolderId` on the pointer node | | **Trigger in target** | Must exist as the start of the target workflow; no extra trigger fields in the form | | **Description** (both nodes) | Optional note on the canvas; does not affect routing | ## Flow behavior [#flow-behavior] * The pointer node has a normal **out** connection in the source workflow (execution leaves after the handoff is scheduled). * The target workflow starts at **Workflow Trigger** with one outgoing edge to the rest of that graph. * Variable/context carryover is handled at runtime by the platform; in the editor, configure the target workflow’s trigger and first actions as you would for any new run. ## Examples [#examples] ### Shared “create ticket” subflow [#shared-create-ticket-subflow] 1. Build workflow **B** with **Workflow Trigger** → **Task** (or CRM action). 2. In workflow **A**, add **Workflow Pointer** and select workflow **B** after you collect issue details. 3. Return paths in **B** end that run; workflow **A** continues from whatever you connect after the pointer. ## Related [#related] * [Workflow Pointer](/docs/nodes/operations/workflow-pointer) — operation node reference * [Workflow Trigger](/docs/nodes/triggers/workflow-trigger) — matching trigger node * [Documentation home](/docs) # Board overview (/docs/getting-started/board-overview) The **workflow board** is the main editing surface: a **top action bar** for platform, save, and bot status, plus a dotted **canvas** with a **left sidebar**, **top-right** add control, **bottom-left** editing tools, and built-in **zoom / pan** controls. ## Layout [#layout] | Area | Position | Purpose | | ------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------ | | **Top action bar** | Above the canvas | Platform, AI generate, executions, active toggle, save — see [Top action bar](/docs/concepts/top-action-bar) | | **Canvas** | Center | Drag nodes, connect handles, pan and zoom | | **Side panel** | Left (320px when open) | **Add-node drawer** or **selected node form** | | **Top panel** | Top-right on canvas | Open the add-node drawer (+) | | **Bottom menu bar** | Bottom-left on canvas | Sticky note, layout clean, undo, redo | | **Flow controls** | Bottom-right | Zoom, fit view, lock interaction | The side panel and canvas work together: opening the drawer or selecting a node slides the panel in; clicking empty canvas closes the add-node drawer. See [Board toolbar](/docs/concepts/board-toolbar) and [Nodes drawer](/docs/concepts/nodes-drawer). ## Empty workflow (welcome placeholder) [#empty-workflow-welcome-placeholder] When a workflow has **no root nodes**, a **welcome placeholder** appears at the viewport center: a dashed square with a **+** button. Click it to open the add-node drawer (same as the top **+**). * The placeholder is only shown while the workflow is empty; it disappears once you add your first trigger or starting node. * It is not part of the saved workflow. ## Selecting and configuring nodes [#selecting-and-configuring-nodes] 1. Click a workflow node on the canvas to select it. 2. The **side panel** shows that node’s configuration form (except [sticky notes](/docs/concepts/sticky-notes), which edit on the canvas only). 3. Most nodes include an optional **[Description](/docs/concepts/node-descriptions)** field at the bottom of the form; sub-nodes do not. 4. Click the canvas background to deselect and close the add-node drawer. ## Adding nodes (summary) [#adding-nodes-summary] | Method | Behavior | | ------------------------------- | ------------------------------------------------------------------------- | | **Top +** or **welcome +** | Opens the [nodes drawer](/docs/concepts/nodes-drawer) | | **+ on a node handle** | Opens the drawer; picking a card **connects** the new node to that handle | | **Drag from drawer** | Drop a card onto the canvas at the drop position | | **Click drawer card** | Adds at viewport center, or connects if opened from a handle | | **Bottom bar → Note** | Adds a [sticky note](/docs/concepts/sticky-notes) at viewport center | ## Keyboard shortcuts (canvas) [#keyboard-shortcuts-canvas] When focus is **not** in an input, textarea, or content-editable field: | Shortcut | Action | | ------------------ | ------------------------------------------------------------- | | **⌘/Ctrl+Z** | Undo | | **⌘/Ctrl+Shift+Z** | Redo | | **⌘/Ctrl+C** | Copy selected nodes (skipped if text is selected in the page) | | **⌘/Ctrl+V** | Paste copied nodes | Undo and redo are also on the [bottom menu bar](/docs/concepts/board-toolbar). ## Related [#related] * [Documentation home](/docs) * [Top action bar](/docs/concepts/top-action-bar) * [Board toolbar](/docs/concepts/board-toolbar) * [Nodes drawer](/docs/concepts/nodes-drawer) * [Sticky notes](/docs/concepts/sticky-notes) * [Node descriptions](/docs/concepts/node-descriptions) * [Variables](/docs/concepts/variables) # Node catalog (/docs/reference/node-catalog) | Node | Category | Summary | | -------------------- | --------- | ------------------------------------------------------------------------ | | WhatsApp | Action | Send WhatsApp messages | | Messenger | Action | Send Facebook Messages | | Instagram | Action | Send Instagram Messages | | Assign Tags | Action | Set tags on conversation | | Assign Agents | Action | Assign agents to conversation | | Update Conversation | Action | Set conversation attributes | | Update Customer | Action | Update customer attributes | | AI | Action | AI-powered actions | | If / Else | Condition | Split on true/false | | Sticky Note | Note | Canvas annotation only — see [Sticky notes](/docs/concepts/sticky-notes) | | Pingmee Trigger | Trigger | Start bot when customer messages (watch multiple triggers) | | Answer | Action | Button or quick-reply branch from message nodes | | Condition Evaluation | Action | True or false branch from If / Else | | Fallback | Action | Path when the user does not pick an expected option | | Timeout | Action | Path when no reply arrives in time | | Workflow Pointer | Operation | Continue in sub-workflow | | Workflow Trigger | Trigger | Manual, API, or Workflow Pointer entry | | Instagram Trigger | Trigger | Comment on post | | Facebook Trigger | Trigger | Comment on post | | Fireberry | Action | Update CRM data | | Wait | Action | Pause for a duration | | Switch | Condition | Multi-case routing | | Switch Case | Condition | Single branch of a Switch | | HTTP Request | Action | External HTTP call | | Task | Action | Create a task | ## Nodes not in the add-node drawer [#nodes-not-in-the-add-node-drawer] Some nodes are still part of your workflow but are not listed in the add-node drawer. Many are created automatically when you configure a parent (for example **Answer**, **Fallback**, and **Timeout** on message nodes, or **Switch case** branches). Others are added from toolbar shortcuts (**Sticky note**) or conversation actions (**Assign tags**, **Assign agents**). See [Sub-nodes](/docs/concepts/sub-nodes) and [Sticky notes](/docs/concepts/sticky-notes). ## Board UI (not nodes) [#board-ui-not-nodes] Editor chrome is documented separately: [Board overview](/docs/getting-started/board-overview), [Board toolbar](/docs/concepts/board-toolbar), [Nodes drawer](/docs/concepts/nodes-drawer). # AI (/docs/nodes/actions/ai) The **AI** action runs a selected **AI option** against the current conversation context. The form is a single selector—no prompts or model fields in the workflow editor. ## When to use [#when-to-use] * Let AI draft or send a reply (**Answer With AI**) mid-flow. * Produce a conversation summary for agents or downstream steps (**Summarize Conversation**). * Combine with **Update Conversation** (which can also enable summarize on conversation attributes). ## Configuration [#configuration] | Field | What it does | When to use | | -------------------- | ----------------------------------------- | ---------------------------- | | **Select an option** | `answerWithAI` or `summarizeConversation` | Pick the automation behavior | | **Description** | Canvas note | Explain when this step runs | ### Options [#options] | Label | Value | Typical use | | -------------------------- | ----------------------- | ------------------------------------ | | **Answer With AI** | `answerWithAI` | Automated reply generation | | **Summarize Conversation** | `summarizeConversation` | Short summary for handoff or logging | ## Flow behavior [#flow-behavior] * **Input:** Usually after a trigger or once enough messages exist. * **Output:** Single default edge to the next node. * AI capacity and instructions are governed by workspace **AI settings** in Pingmee, not this form. ## Examples [#examples] ### Escalation summary [#escalation-summary] 1. After **If / Else** detects negative sentiment (or a keyword), add **AI** → **Summarize Conversation**. 2. Connect to **Task** so an agent sees context. ### Bot continues the thread [#bot-continues-the-thread] 1. **Pingmee Trigger** on new message. 2. **AI** → **Answer With AI**. 3. Optional **Wait** or human **Update Conversation** afterward. ## Related [#related] * [Update Conversation](/docs/nodes/actions/update-conversation) — summarize toggle on conversation * [Pingmee Trigger](/docs/nodes/triggers/pingmee-trigger) * [Variables](/docs/concepts/variables) # Messenger (/docs/nodes/actions/facebook-messenger) The **Messenger** action sends outbound Facebook Messenger content. It uses the shared **Message** form: message type, body with variables, and optional **wait for user response** (with answer/fallback/timeout sub-nodes like WhatsApp). ## When to use [#when-to-use] * Reply in standard conversation flows (**Direct Message**). * Social workflows: public **Reply to Post** or **Private Reply** after a Facebook comment trigger. * Pause until the user answers before continuing. ## Configuration [#configuration] | Field | What it does | When to use | | -------------------------- | --------------------------------------------------------- | -------------------------------------------------------------------- | | **Message Type** | Controls channel behavior (see below) | Match Meta rules for DM vs comment vs private reply | | **Body** | Main text; supports [variables](/docs/concepts/variables) | Always | | **Wait for user response** | Pauses until inbound reply; enables sub-nodes | Surveys, confirmations, menus (shown for DM and Private Reply types) | | **Description** | Canvas note | Documentation | ### Message Type [#message-type] | Option | When to use | | ----------------------- | ------------------------------------------------------------------------------ | | **Direct Message (DM)** | Normal Messenger thread | | **Reply to Post** | Public comment thread on a post | | **Private Reply** | Private message to commenter; enables **Wait for user response** when selected | In **social-channel** workflows (comment triggers), **Direct Message** is not listed; use **Reply to Post** or **Private Reply**. ### Wait for user response [#wait-for-user-response] When enabled: 1. Flow waits for an inbound message after this send. 2. Configure **answer**, **fallback**, and **timeout** [sub-nodes](/docs/concepts/sub-nodes) on the canvas. ## Flow behavior [#flow-behavior] * **Input:** After trigger or prior actions. * **Output:** Default parent edge, or per sub-node handles when waiting for response / buttons. * Up to **13** answer sub-nodes when using interactive branches. ## Examples [#examples] ### Simple DM [#simple-dm] 1. **Message Type** → **Direct Message (DM)**. 2. Write **Body**; leave **Wait for user response** off. 3. Connect to the next action. ### Comment trigger → private reply [#comment-trigger--private-reply] 1. Start from **Facebook Trigger**. 2. **Message Type** → **Private Reply**. 3. Write **Body**; enable **Wait for user response** if the next step needs the user’s answer. ## Related [#related] * [WhatsApp](/docs/nodes/actions/whatsapp) * [Instagram](/docs/nodes/actions/instagram) * [Variables](/docs/concepts/variables) * [Sub-nodes](/docs/concepts/sub-nodes) # Fireberry (/docs/nodes/actions/fireberry) The **Fireberry** action (CRM integration) reads and writes **Fireberry** tables: pick a table, an action, identify the record (except on create), then define **actions** (field updates) and **connections** (linked records). ## When to use [#when-to-use] * Sync workflow data into CRM objects (leads, deals, custom tables). * Create records when none exist, or update existing rows. * Link records through Fireberry connection fields with **Query by field**. ## Configuration [#configuration] | Field | What it does | When to use | | ----------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | | **Table** | Fireberry object type (`objectType`); loads fields on select | Choose the CRM entity | | **Action** | `Create`, `Update Record`, or `Create If None Exist` | Match upsert vs always-create semantics | | **Object ID** | CRM field that identifies the record + variable binding | Required for update / create-if-none; hidden for **Create** | | **Action N** (green) | Set a field on the table to a value, selection, or variable | Map workflow data into columns | | **Connection N** (blue) | Link to another object via a connection field | Relate records (account → contact, etc.) | | **Description** | Canvas note | Team documentation on the canvas | ### Action types [#action-types] | Value | Behavior | | ------------------------ | --------------------------------------------------------- | | **Create** | New record; no Object ID section | | **Update Record** | Update existing record identified by Object ID + variable | | **Create If None Exist** | Create only when lookup via Object ID finds nothing | ### Object ID [#object-id] 1. Choose a **field** from the table (searchable list: label · `fieldName`). 2. Bind **Object ID** value with the variable tree from [upstream nodes](/docs/concepts/variables). ### Action rows (field updates) [#action-rows-field-updates] Each **Add Action** row: 1. **Field** — searchable Fireberry column on the selected table. 2. **Value** — depends on field type: * Most fields: variable/expression tree picker. * **Selection box** fields: choose value source — **Selection box** (pick enum value), **Variable** (fixed binding), or **Expression**. Use **Add Action** for normal field writes. Rows are labeled **Action 1**, **Action 2**, … ### Connection rows [#connection-rows] Each **Add Connection** row links via a **connection** field: 1. Pick the connection **field** on the main table. 2. If valid, configure **Query by field** on the linked object type (loads related table fields). 3. Set the connection **value** like action rows (including selection-box sources). 4. Invalid connection fields show **Not a connection field** (red border). Connections use a distinct background in the form and count separately (**Connection 1**, …). Changing **Table** clears existing queries and reloads fields (refresh available on section headers). ## Flow behavior [#flow-behavior] * **Input:** After triggers/actions that supply variables for Object ID and field values. * **Output:** Single default edge. * Field metadata and picklists load asynchronously (loading indicators on table/field sections). ## Examples [#examples] ### Update deal stage from message keyword [#update-deal-stage-from-message-keyword] 1. **Table** → Deals. 2. **Action** → **Update Record**. 3. **Object ID** → deal id from trigger variable. 4. **Add Action** → stage field ← variable from **If / Else** branch. ### Create contact linked to account [#create-contact-linked-to-account] 1. **Action** → **Create**. 2. **Add Action** → map name, phone from customer variables. 3. **Add Connection** → account lookup field + **Query by field** + account id variable. ## Related [#related] * [Variables](/docs/concepts/variables) * [HTTP Request](/docs/nodes/actions/http-request) * [Update Customer](/docs/nodes/actions/update-customer) # HTTP Request (/docs/nodes/actions/http-request) The **HTTP Request** action sends an outbound HTTP call with configurable method, URL, headers, content type, and optional JSON body with variable placeholders. ## When to use [#when-to-use] * Integrate external systems (CRM, billing, custom APIs). * POST webhook payloads built from [variables](/docs/concepts/variables). * Fetch or mutate remote state between Pingmee steps. ## Configuration [#configuration] | Field | What it does | When to use | | ------------------------------ | ------------------------------------------------------------------------------------------- | -------------------------------------- | | **Method** | `GET`, `POST`, `PUT`, `PATCH`, `DELETE` | Match API contract | | **URL** | Request URL (text input) | Endpoint address | | **Content Type** | `application/json`, `application/x-www-form-urlencoded`, `text/plain`, `text/html`, or none | Set when body needs a MIME type | | **Headers** | Name/value rows; add or remove rows | Auth tokens, custom headers | | **Body** | Raw body text (POST/PUT/PATCH only) | JSON or text; use `{{n}}` placeholders | | **Add variable** | Appends next `{{n}}` placeholder to body | Dynamic JSON segments | | **Beautify** | Formats body as JSON when valid | Clean up JSON before save | | **Template variable bindings** | One tree picker per `{{n}}` in body | Map placeholders to upstream data | | **Description** | Canvas note | Document endpoint purpose | ### Body placeholders [#body-placeholders] * Placeholders look like `{{1}}`, `{{2}}`, … * Each index can bind to a **Variable** or **Expression** from connected nodes. * **Beautify** shows a toast error if the body is not valid JSON. ### Headers [#headers] Enter **Name** and **Value** for each header row. Remove all rows if you do not need custom headers. ## Flow behavior [#flow-behavior] * **Body section** appears only for **POST**, **PUT**, and **PATCH**. * Default new nodes: method `GET`, empty URL. * **Output:** Single edge to the next step. ## Examples [#examples] ### GET status [#get-status] 1. **Method** → GET. 2. **URL** → `https://api.example.com/status`. 3. Add **Authorization** header if needed. ### POST JSON with customer id [#post-json-with-customer-id] 1. **Method** → POST, **Content Type** → `application/json`. 2. Body: `{"customerId": "{{1}}", "event": "workflow"}`. 3. Bind `{{1}}` to customer id from the trigger. ## Related [#related] * [Variables](/docs/concepts/variables) * [Fireberry](/docs/nodes/actions/fireberry) * [If / Else](/docs/nodes/conditions/if-else) # Instagram (/docs/nodes/actions/instagram) The **Instagram** action sends outbound Instagram messages using the same **Message** form as Messenger: **Message Type**, **Body** with variables, and optional **wait for user response**. ## When to use [#when-to-use] * Instagram DM-style flows (**Direct Message** where available in your workflow mode). * **Reply to Post** or **Private Reply** after an **Instagram Trigger** comment event. * Collect a reply before the next step. ## Configuration [#configuration] | Field | What it does | When to use | | -------------------------- | ------------------------------------------------------------- | --------------------------------- | | **Message Type** | Direct message, reply on post, or private reply | Align with comment vs DM behavior | | **Body** | Message text; [variables](/docs/concepts/variables) supported | Core content | | **Wait for user response** | Wait + sub-nodes on supported types | Interactive flows | | **Description** | Canvas note | Team notes | ### Message Type [#message-type] | Option | Notes | | ----------------------- | ---------------------------------------------------------------------------------- | | **Direct Message (DM)** | Standard Instagram message path | | **Reply to Post** | Public reply on the comment thread (common in social-channel workflows) | | **Private Reply** | Private message to the commenter; enables **Wait for user response** automatically | Selecting **Private Reply** turns on **Wait for user response** for you. ## Flow behavior [#flow-behavior] * **Output:** One main edge or sub-node edges (answers, fallback, timeout). * **Sub-nodes:** Up to **13** editable/removable answer branches. * Body editing matches other message nodes (templates and variable chips where supported). ## Examples [#examples] ### Thank commenters publicly [#thank-commenters-publicly] 1. **Instagram Trigger** on a post. 2. **Instagram** → **Reply to Post** with a short **Body**. ### DM after comment [#dm-after-comment] 1. **Private Reply** with offer details. 2. Enable **Wait for user response**; wire **answer** sub-nodes to different paths. ## Related [#related] * [Instagram Trigger](/docs/nodes/triggers/instagram-trigger) * [Messenger](/docs/nodes/actions/facebook-messenger) * [Variables](/docs/concepts/variables) # Task (/docs/nodes/actions/task) The **Task** action creates a workspace **task** with title, body, optional assignees, and status. Title and body support `{{n}}` variable placeholders like HTTP requests. ## When to use [#when-to-use] * Agent follow-ups after a bot flow. * Internal work items tied to conversation context. * Handoff queues with assignee emails from your team list. ## Configuration [#configuration] | Field | What it does | When to use | | ------------------------ | ------------------------------------------------------------------------- | ------------------------------- | | **Title** | Task title text + optional `{{n}}` bindings | Short summary | | **Add Variable** (title) | Inserts next placeholder index in title | Dynamic titles | | **Body** | Longer description (autosize textarea) | Steps, context, links | | **Add Variable** (body) | Inserts placeholder in body | Pull fields from upstream nodes | | **Select Agents** | Multi-select of workspace agents (by email) | Assign ownership | | **Status** | `open`, `standby` (in progress), `completed`, or custom statuses from API | Set initial state | | **Description** | Canvas note | Team documentation | For each `{{n}}` placeholder in the title or body, use the tree picker labeled **Attach variable to parameter**. Agent and status lists load from the platform (spinner while loading; refresh on status section). If loading fails, the form shows **Error fetching tags**. ## Flow behavior [#flow-behavior] * **Input:** After data-producing nodes if you use variables. * **Output:** Single edge. * New Task nodes start with empty title and body until you fill them in. ## Examples [#examples] ### Agent task after failed self-serve [#agent-task-after-failed-self-serve] 1. **If / Else** on “resolved” variable. 2. False branch → **Task** with title `Follow up {{1}}`, body with conversation snippet, assign support agents, status **open**. ### Completed checklist item [#completed-checklist-item] 1. **Task** → status **completed** when flow reaches success end. ## Related [#related] * [Update Conversation](/docs/nodes/actions/update-conversation) * [Variables](/docs/concepts/variables) * [AI](/docs/nodes/actions/ai) # Update Conversation (/docs/nodes/actions/update-conversation) The **Update Conversation** action applies conversation-level settings in one step: routing, tags, bot/manual/AI mode, status, marketing opt-out, optional auto-translation, and optional AI summarize. ## When to use [#when-to-use] * Route to humans (**assign agents**) or label threads (**tags**). * Switch **answer mode** (bot / manual / AI). * Close, snooze, or set custom statuses. * Enable translation or conversation summary for agents. ## Configuration [#configuration] | Field | What it does | When to use | | ------------------------------ | -------------------------------------------------------------------- | -------------------------------- | | **Select Agents** | Multi-select workspace agents | Handoff or ownership | | **Select Tags** | Multi-select conversation tags (with colors) | Classification, queues | | **Answer Mode** | `bot`, `manual`, `ai`, or none | Control who replies next | | **Status** | Built-in (`open`, `closed`, `standby`) + custom statuses from API | Pipeline / inbox state | | **Opt-Out Marketing Messages** | Yes / No / none | Marketing compliance | | **Use Translation** | Toggle; when on, agent language, client language, **Auto Translate** | Cross-language support | | **Summarize Conversation** | Toggle under AI section | Store/run summarize like AI node | | **Description** | Canvas note | Documentation | ### Answer Mode values [#answer-mode-values] | Value | Meaning | | -------- | ------------------ | | `bot` | Automated handling | | `manual` | Human agents | | `ai` | AI-assisted | Select **None** to leave `answerMode` unset. ### Translation (when enabled) [#translation-when-enabled] | Sub-field | What it does | | ------------------- | ------------------------------------------------------ | | **Agent Language** | `languageCode` for agent-side text | | **Client Language** | `targetCountryCode` for customer text | | **Auto Translate** | Translate outgoing messages automatically when sending | Defaults on enable: English agent and client codes, `autoTranslate` false until checked. ### Status and tags [#status-and-tags] * Tags and statuses load from Pingmee (refresh on section headers). * Custom status ids from the API appear alongside enum statuses. ## Flow behavior [#flow-behavior] * **Output:** Single edge. * Only fields you set are written; **None** clears optional selects (answer mode, status, opt-out). ## Examples [#examples] ### Escalate to human [#escalate-to-human] 1. **Answer Mode** → `manual`. 2. **Select Agents** → tier-2 team. 3. **Status** → `open`. ### End flow in closed state [#end-flow-in-closed-state] 1. **Status** → `closed`. 2. **Opt-Out Marketing Messages** → **No** if they opted in during the flow. ## Related [#related] * [AI](/docs/nodes/actions/ai) * [Update Customer](/docs/nodes/actions/update-customer) * [Task](/docs/nodes/actions/task) # Update Customer (/docs/nodes/actions/update-customer) The **Update Customer** action writes customer profile fields using **optional** variable bindings. Each field has its own tree picker—no free-text literals in the form. ## When to use [#when-to-use] * Normalize phone or email collected in an earlier message step. * Set **System Name** (nickname) from CRM or HTTP response variables. * Enrich profile after **HTTP Request** or **Fireberry** returns data. ## Configuration [#configuration] | Field | What it does | When to use | | ------------------------------------ | ----------------------------------------------- | --------------------------------------- | | **System Name** (`customerNickname`) | Bind nickname from upstream variable/expression | Display name overrides | | **Email** | Bind email | Capture from user input variable | | **Phone Number** | Bind phone | Sync number from trigger or form answer | | **Description** | Canvas note | Team notes | All three fields are **optional**. Clearing a picker clears that binding. Each field accepts a fixed value from upstream nodes or an expression, depending on what the picker offers. ## Flow behavior [#flow-behavior] * **Input:** Nodes that expose customer or custom variables ([Variables](/docs/concepts/variables)). * **Output:** Single edge. * Unset fields are not updated at runtime. ## Examples [#examples] ### Save email from survey answer [#save-email-from-survey-answer] 1. **WhatsApp** with **Wait for user response** and answer sub-node. 2. **Update Customer** → **Email** ← variable from answer node output. ### Nickname from Fireberry [#nickname-from-fireberry] 1. **Fireberry** fetch/update. 2. **Update Customer** → **System Name** ← Fireberry name field variable. ## Related [#related] * [Variables](/docs/concepts/variables) * [Fireberry](/docs/nodes/actions/fireberry) * [Update Conversation](/docs/nodes/actions/update-conversation) # Wait (/docs/nodes/actions/wait) The **Wait** action delays execution for a set time using hours, minutes, and seconds. The combined duration is stored as `timerInfo.numberOfSeconds` (maximum **82,000** seconds in the form, about 22.8 hours). ## When to use [#when-to-use] * Cool-down before a follow-up message. * Scheduled spacing between campaign steps. * Give the customer time to act before a reminder or fallback. ## Configuration [#configuration] | Field | What it does | When to use | | ------------------------- | ---------------------------------------------- | ---------------------------------------------------------- | | **Wait** (time selectors) | Hours / minutes / seconds; updates `timerInfo` | Set delay length; invalid totals above max are not applied | | **Description** | Canvas note | Document why the pause exists | The time UI uses three dropdowns (zero-padded). Changing any unit recalculates total seconds and persists `hours`, `minutes`, `seconds`, and `numberOfSeconds`. ## Flow behavior [#flow-behavior] * **Input:** Any prior node. * **Output:** One edge when the wait completes (runtime scheduling uses platform automation/event infrastructure). * Does not create sub-nodes. ## Examples [#examples] ### Reminder after one hour [#reminder-after-one-hour] 1. Send **WhatsApp** question with **Wait for user response** off. 2. **Wait** → 01:00:00. 3. Send a second **WhatsApp** reminder. ### Short buffer before API call [#short-buffer-before-api-call] 1. **Wait** → 00:00:30. 2. **HTTP Request** to your backend. ## Related [#related] * [WhatsApp](/docs/nodes/actions/whatsapp) — timeout sub-node (different mechanism) * [Sub-nodes](/docs/concepts/sub-nodes) * [HTTP Request](/docs/nodes/actions/http-request) # WhatsApp (/docs/nodes/actions/whatsapp) The **WhatsApp** action sends an outbound message to the customer. It supports simple custom content, approved **templates**, interactive **buttons**, and optional **wait for user response** (which creates timeout sub-nodes on the canvas). ## When to use [#when-to-use] * Proactive outbound messages in a flow (not only replies). * Template-based notifications (marketing/utility templates). * Collecting a reply before continuing — enable **Wait for user response**. ## Configuration [#configuration] | Field | What it does | When to use | | ---------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | **Message Type** | `custom` (simple) or `template` (WhatsApp-approved template). | Use **template** when Meta requires a pre-approved template; use **custom** for free-form session messages where allowed. | | **Template** (template mode) | Pick and fill an approved template; header/body/footer may be read-only for catalog templates. | Order updates, OTP, structured notifications. | | **Header** | Optional media or text header. | Templates or rich messages with a title line. | | **Body** | Main message text; supports [variables](/docs/concepts/variables) from upstream nodes. | Always — core message content. | | **Wait for user response** | Pauses the flow until the user replies; adds timeout handling on the canvas. | Surveys, confirmations, menu choices before the next step. | | **Buttons** | Quick-reply or call-to-action buttons (when not read-only). | Short menus; limited options instead of free text. | | **Footer** | Small print under the message. | Disclaimers, unsubscribe hints. | | **Description** | Optional canvas note at the bottom of the node when filled in | Team documentation — see [Node descriptions](/docs/concepts/node-descriptions) | ### Message Type [#message-type] * **Simple** (`custom`) — edit header, body, footer, and buttons directly. * **Template** — select a template from your WhatsApp Business account; fields may lock when the template is catalog-managed. If the approved template uses an **image, video, or document** header, you can still **upload** that media in the Header section (upload only; the file is stored when you save the workflow). ### Template mode and phone number [#template-mode-and-phone-number] Template lists are loaded from your connected WhatsApp Business account. The workflow must be **linked to a WhatsApp phone number** (the bot’s associated business line in Pingmee). If no phone number is configured, changing the template **Source** or clicking **refresh** on the template list shows: *You must select a phone number first* — configure the bot’s phone number in the host app before editing templates. ### Variables [#variables] Body and header fields accept placeholders from **connected upstream nodes**. The form offers a variable picker built from the graph. See [Variables](/docs/concepts/variables). ### Wait for user response [#wait-for-user-response] When enabled: 1. The flow waits for an inbound message after this send. 2. A **timeout** sub-node may run if no reply arrives in time. 3. A **fallback** sub-node may run when the user does not select an expected button. Configure those sub-nodes on the canvas after enabling this option. See [Sub-nodes](/docs/concepts/sub-nodes). ## Flow behavior [#flow-behavior] * **Input:** Typically follows a trigger or earlier action; uses conversation context from the platform. * **Output:** One default edge to the next node; additional edges from sub-nodes (timeout/fallback) when configured. * **RTL:** Message preview on the canvas picks direction from text content (Hebrew/Arabic → RTL). ## Examples [#examples] ### Simple notification [#simple-notification] 1. Set **Message Type** to Simple. 2. Write the **Body** (optionally insert variables). 3. Leave **Wait for user response** off. 4. Connect to the next action. ### Ask a question [#ask-a-question] 1. Write the **Body** with the question. 2. Enable **Wait for user response**. 3. Add **Buttons** for expected answers (optional). 4. Configure the **timeout** and **fallback** sub-nodes on the canvas. ## Related [#related] * [Nodes drawer](/docs/concepts/nodes-drawer) — add WhatsApp from the **action** section * [Variables](/docs/concepts/variables) * [Sub-nodes](/docs/concepts/sub-nodes) * [Messenger](/docs/nodes/actions/facebook-messenger) — similar message form for Facebook # If / Else (/docs/nodes/conditions/if-else) The **If / Else** node evaluates one or more **conditions** against [variables](/docs/concepts/variables) from upstream nodes, then routes execution to **true** or **false** sub-nodes on the canvas. ## When to use [#when-to-use] * Branch on message content, customer attributes, or trigger metadata. * Combine multiple checks with **all must match** vs **at least one**. * Gate expensive actions (HTTP, Fireberry, AI) behind logic. ## Configuration [#configuration] | Field | What it does | When to use | | ----------------- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | | **Rule** | `All conditions must be met` (`ALL`) or `At least one condition` (`ANY`) | AND vs OR across conditions | | **Condition N** | One rule block (see below) | Each line in your logic | | **Add Condition** | Appends a new condition row | More complex rules | | **Description** | Canvas note under the node title (placeholder when empty) | Explain business rule — see [Node descriptions](/docs/concepts/node-descriptions) | ### Per-condition fields [#per-condition-fields] | Field | What it does | When to use | | --------------- | -------------------------------------------- | -------------------------------- | | **First value** | Variable or expression tree picker | Left-hand side of comparison | | **Comparison** | Operator (see table) | How to compare | | **Value** | Right-hand side (hidden for empty/not-empty) | Literal, list, or second binding | ### Comparison operators [#comparison-operators] | Operator | Symbol in UI | Value field | | --------------------- | ------------ | -------------------------- | | Greater than | `>` | Text/number input | | Greater than or equal | `>=` | Text/number input | | Less than | `<` | Text/number input | | Less than or equal | `<=` | Text/number input | | Equals | `=` | Text/number input | | Not Equal | (label) | Text/number input | | Contains | `~` | Creatable multi-value tags | | Is Empty | `❌` | No value field | | Is Not Empty | `✅` | No value field | Delete a condition with the red control on the row (hover on group). ## Flow behavior [#flow-behavior] * **Sub-nodes:** Fixed **true** and **false** branches; branch labels are not editable on the canvas. * **Output:** Connect each sub-node handle to different paths. * Default evaluation mode on new nodes: **ALL**. * For variables with a fixed list of allowed values, the picker may offer a second tree to choose from predefined options. ## Examples [#examples] ### VIP customer path [#vip-customer-path] 1. **Condition 1:** customer tag variable **Contains** `VIP`. 2. **Rule:** at least one condition (if you add alternates). 3. **True** → priority **Task**; **False** → standard bot message. ### Empty email check [#empty-email-check] 1. **Comparison** → **Is Empty** on email variable. 2. **True** → **WhatsApp** “please share email”; **False** → **Update Customer**. ## Related [#related] * [Variables](/docs/concepts/variables) * [Node descriptions](/docs/concepts/node-descriptions) * [Switch](/docs/nodes/conditions/switch) * [Sub-nodes](/docs/concepts/sub-nodes) # Switch (/docs/nodes/conditions/switch) The **Switch** node sends execution down **case** branches. Each case is a **Switch case** sub-node on the canvas with its own outgoing handle. Cases reuse the same condition editor as **If / Else** when selected in the sidebar. ## When to use [#when-to-use] * Multi-way routing (more than two paths) based on variables. * Menu-style options where each label maps to a branch. * Default path when no case matches (via **Fallback** sub-node). ## Configuration [#configuration] | Where | Field | What it does | | --------------------------- | --------------------- | ------------------------------------------------------------------------------ | | **Parent (canvas)** | **+** control | Adds cases (up to **25**); first click adds **Fallback** | | **Case sub-node (canvas)** | Label badge | Edit/removable case name (max 20 chars); registers a string variable on parent | | **Case sub-node (sidebar)** | Same as **If / Else** | Rule, conditions, comparisons, add/delete condition | | **Fallback sub-node** | Fallback form / label | Path when no case matches (first sub-node created) | Switch uses the legacy node layout: **Description** in the sidebar is saved but **not drawn** on the Switch card. Sub-nodes have no Description field. See [Node descriptions](/docs/concepts/node-descriptions). ### Adding cases [#adding-cases] 1. Click **+** on the Switch node. 2. **First click:** creates a **Fallback** sub-node and removes direct edges from the switch parent. 3. **Later clicks:** add **Switch case** sub-nodes with editable labels (default names like `Option #1`). 4. Each new case can expose a label for downstream [variable](/docs/concepts/variables) pickers. ### Case conditions [#case-conditions] Select a case sub-node to open the same condition editor as **If / Else** in the sidebar: * **Rule:** ALL vs ANY across conditions in that case. * **Condition** rows: variable, comparison, value (identical operators to [If / Else](/docs/nodes/conditions/if-else)). Reorder cases with up/down chevrons when multiple siblings exist. ## Flow behavior [#flow-behavior] * When case sub-nodes exist, connect the next step from each branch handle (not from the parent’s main handle). * **Limits:** Up to **25** case sub-nodes; you can edit labels on the canvas and remove cases when allowed. * Variable pickers on a case still list upstream fields from the main flow into the Switch. ## Examples [#examples] ### Route by language variable [#route-by-language-variable] 1. Add Switch after a node that sets `language`. 2. Add cases `en`, `he`, `ar` (edit labels on canvas). 3. Open each case; set **Equals** on language variable. 4. Configure **Fallback** for unknown languages. ### Product line menu [#product-line-menu] 1. Add cases for `sales`, `support`, `billing`. 2. Connect each case handle to a different **Messenger** or **Task** path. ## Related [#related] * [If / Else](/docs/nodes/conditions/if-else) * [Sub-nodes](/docs/concepts/sub-nodes) * [Variables](/docs/concepts/variables) # Workflow Pointer (/docs/nodes/operations/workflow-pointer) The **Workflow Pointer** operation transfers the run into another **target workflow**. That workflow must start with a **Workflow Trigger** node. Only the target workflow picker is configurable in the form. ## When to use [#when-to-use] * Reuse shared sequences (onboarding, escalation, CRM side-effects). * Keep parent graphs small while delegating to a published sub-workflow. * Organize automations by folder while linking across them. ## Configuration [#configuration] | Field | What it does | When to use | | -------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------- | | **Select Workflow To Run** | Lists workspace workflows by name; sets `workflowId`, `workflowName`, `workflowFolderId` | Pick the callee workflow | | **Refresh** | Reloads workflow list | New workflows not visible yet | | **Description** | Canvas note | Document handoff contract | If loading fails, the form shows **Error fetching workflows**. ## Flow behavior [#flow-behavior] * **Input:** Standard incoming edge from the parent flow. * **Output:** One outgoing edge in the **source** workflow (after handoff is initiated). * **Target:** Execution continues in the selected workflow at its **Workflow Trigger**. * Pairing is by workflow id—ensure the target workflow is published and contains **Workflow Trigger** as its entry. ## Examples [#examples] ### Centralized “create task” workflow [#centralized-create-task-workflow] 1. Build **Tasks – create** with **Workflow Trigger** → **Task** node. 2. In any customer flow, add **Workflow Pointer** → select **Tasks – create** after collecting details. ### Folder-based organization [#folder-based-organization] 1. Pick a workflow from another folder via the same dropdown (folder id stored on the node for reference). ## Related [#related] * [Workflow pointer (concept)](/docs/concepts/workflow-pointer) * [Workflow Trigger](/docs/nodes/triggers/workflow-trigger) * [Documentation home](/docs) # Facebook Trigger (/docs/nodes/triggers/facebook-trigger) The **Facebook Trigger** starts a **social** workflow when a user **comments on a Facebook Page post**. Configure the post scope and optional keyword filters. ## When to use [#when-to-use] * Comment automation on Page posts (replies, private replies, handoff). * Post-specific campaigns vs all comments on the Page. * Keyword filtering for contests or support intents. ## Configuration [#configuration] | Field | What it does | When to use | | ---------------------------------------- | ------------------------------------ | --------------------------- | | **When To Start** | `Comment on Facebook Post` | Fixed for this trigger | | **Select Post** | Page post picker or **None** | Target one post or any post | | **Must Include All Keywords (optional)** | All keywords required in the comment | Tight matching | | **Description** | Canvas note | Team notes on the canvas | ### Select Post [#select-post] * Fetches posts from the connected Facebook Page (`message`, `full_picture`, `created_time`). * Refresh loads the latest list from the API. * **None** leaves post unrestricted. ## Flow behavior [#flow-behavior] * **Output:** Single outgoing edge. * Pairs with **Messenger** actions using **Reply to Post** or **Private Reply** in social workflow mode. * Default event on node creation: `Comment on Facebook Post`. ## Examples [#examples] ### Public thank-you comment [#public-thank-you-comment] 1. Select the campaign post. 2. Connect to **Messenger** → **Reply to Post** with a short thank-you **Body**. ### Keyword → private offer [#keyword--private-offer] 1. Add keywords `coupon`, `deal`. 2. **Messenger** → **Private Reply** with offer text; connect follow-up actions after the user responds. ## Related [#related] * [Instagram Trigger](/docs/nodes/triggers/instagram-trigger) * [Messenger](/docs/nodes/actions/facebook-messenger) * [Sub-nodes](/docs/concepts/sub-nodes) # Instagram Trigger (/docs/nodes/triggers/instagram-trigger) The **Instagram Trigger** starts a **social** workflow when a user **comments on an Instagram post**. You can scope to one post (or any post) and optionally require keywords. ## When to use [#when-to-use] * Comment-to-DM or comment-reply automations on Instagram content. * Campaign-specific flows tied to a single post. * Keyword-gated responses (giveaway codes, product mentions). ## Configuration [#configuration] | Field | What it does | When to use | | ---------------------------------------- | -------------------------------------------------------------- | ----------------------------- | | **When To Start** | `Comment on Instagram Post` (only option in the form) | Always for this trigger type | | **Select Post** | Pick a post from your connected page, or **None** for any post | Run globally vs one creative | | **Must Include All Keywords (optional)** | All listed keywords must appear in the comment | Filter noise or match intents | | **Description** | Canvas note | Team documentation | ### Select Post [#select-post] * Loads posts from the connected Instagram account (thumbnail, caption, date). * Use **refresh** on the section header if the list is stale. * **None** listens to comments on any post, not only one selected post. ## Flow behavior [#flow-behavior] * **Output:** One edge to the next node (typically **Instagram** message with **Reply to Post** or **Private Reply** in social mode). * **Variables:** Includes social/trigger context similar to other triggers (message, customer, trigger metadata). * Default event type on create: `Comment on Instagram Post`. ## Examples [#examples] ### Reply under a launch post [#reply-under-a-launch-post] 1. **Select Post** → choose the launch creative. 2. Add keyword `launch`. 3. Connect to **Instagram** → **Reply to Post** thanking the commenter. ### Private follow-up [#private-follow-up] 1. Trigger on comment (with or without keywords). 2. **Instagram** → **Private Reply** with details; enable **Wait for user response** if you need a reply before the next step. ## Related [#related] * [Facebook Trigger](/docs/nodes/triggers/facebook-trigger) * [Instagram](/docs/nodes/actions/instagram) * [Variables](/docs/concepts/variables) # Pingmee Trigger (/docs/nodes/triggers/pingmee-trigger) The **Pingmee Trigger** starts a **bot workflow** when a customer begins or continues a conversation on a connected channel. Use it whenever the customer initiates contact and you want an automated bot to respond. ## When to use [#when-to-use] * A **customer starts or messages** a conversation and you want a bot to answer. * React to new inbound messages or new conversations on WhatsApp, Messenger, or Instagram. * Build cross-channel flows by choosing **Platform** per trigger instance. ### Multiple bots on the same channel [#multiple-bots-on-the-same-channel] If more than one published workflow has a **Pingmee Trigger** for the same channel and event, **all matching workflows run at the same time**. Plan for that when you split logic across several bots. To run **many bots** without collisions, use one of these patterns: 1. **Keywords** — On each **Pingmee Trigger**, set **Must Include All Keywords** so a bot starts only when the message contains those terms. 2. **Single trigger + routing** — Use **one** **Pingmee Trigger**, then a **Switch** node to send the conversation down the right sub-flow (sales, support, returns, and so on). ## Configuration [#configuration] | Field | What it does | When to use | | ---------------------------------------- | ----------------------------------------------- | --------------------------------------------------------- | | **Platform** | `whatsapp`, `facebookMessenger`, or `instagram` | Limit this workflow to one channel integration | | **When To Start** | Event type (see below) | Match the business moment you automate | | **Must Include All Keywords (optional)** | Creatable tag list; all keywords must match | Narrow triggers (product names, commands, campaign codes) | | **Description** | Canvas note only | Document intent for your team | ### When To Start options [#when-to-start-options] | Value | Typical use | | ---------------------------- | ------------------------------------------------------------------ | | **Messages Created** | Each new message in a conversation | | **New Conversation Started** | First touch or newly opened thread | | **Manual Trigger** | Runs started manually from Pingmee (testing or operator-initiated) | ## Flow behavior [#flow-behavior] * **Output:** One default edge to the next node. * **Variables:** New trigger nodes expose **message**, **customer**, and **trigger** fields for downstream steps (including platform and event type where relevant for conditions). * **Input:** Triggers do not accept incoming connections from other nodes. ## Examples [#examples] ### Keyword-based auto-reply [#keyword-based-auto-reply] 1. Set **Platform** to WhatsApp. 2. Set **When To Start** to **Messages Created**. 3. Add keywords `help`, `support`. 4. Connect to an **If / Else** or message action. ### New conversation welcome [#new-conversation-welcome] 1. Choose the relevant **Platform**. 2. Set **When To Start** to **New Conversation Started**. 3. Connect to **WhatsApp** or **Update Conversation** (assign agents/tags). ## Related [#related] * [Workflow Trigger](/docs/nodes/triggers/workflow-trigger) — manual, API, or parent-bot starts (not customer inbound) * [Switch](/docs/nodes/conditions/switch) — route one trigger to many sub-flows * [Variables](/docs/concepts/variables) * [Instagram Trigger](/docs/nodes/triggers/instagram-trigger) — comment-on-post flows * [Facebook Trigger](/docs/nodes/triggers/facebook-trigger) * [Documentation home](/docs) # Workflow Trigger (/docs/nodes/triggers/workflow-trigger) The **Workflow Trigger** marks where a **target workflow** (bot) begins when it is started **outside** a normal customer **Pingmee Trigger** event. The sidebar form has no trigger-specific fields—only the shared **Description** field available on all nodes. ## When to use [#when-to-use] Use **Workflow Trigger** instead of **Pingmee Trigger** when the bot should **not** start from an inbound customer message alone: 1. **Manual or API start** — You send the bot to customers yourself (from Pingmee) or start it via the **API**. 2. **Parent bot handoff** — A **parent** workflow starts this bot using **Workflow Pointer** (sub-bot or modular flow). Also use it for: * Every sub-workflow callable via **Workflow Pointer** (ticketing, CRM update, escalation playbook). * Keeping a parent flow readable by delegating a block of steps to a separate published workflow. ## Configuration [#configuration] | Field | What it does | When to use | | --------------- | ------------------------------ | ------------------------------------------------- | | **Description** | Optional text on the node card | Explain what this sub-workflow expects or returns | There is no platform, keyword, or post selector on this trigger. Configure behavior in the **target** workflow’s first actions after this node. ## Flow behavior [#flow-behavior] * **Input:** No incoming connections (trigger). * **Output:** One outgoing edge to the rest of the target workflow. * **Pairing:** The calling workflow’s **Workflow Pointer** must select this workflow’s id in **Select Workflow To Run**. ## Examples [#examples] ### Callable “assign and notify” module [#callable-assign-and-notify-module] 1. Create workflow **Support handoff** starting with **Workflow Trigger**. 2. Chain **Update Conversation** (agents/tags) → **WhatsApp** notification. 3. In the main workflow, add **Workflow Pointer** and select **Support handoff**. ### Document the contract [#document-the-contract] 1. Select **Workflow Trigger**. 2. In **Description**, note required upstream context (for example, “expects conversation id from pointer”). ## Related [#related] * [Pingmee Trigger](/docs/nodes/triggers/pingmee-trigger) — customer-initiated conversations on connected channels * [Workflow pointer (concept)](/docs/concepts/workflow-pointer) * [Workflow Pointer](/docs/nodes/operations/workflow-pointer) * [Documentation home](/docs) # תיעוד Workflows (/he/docs) ברוכים הבאים לתיעוד **Pingmee Workflows**. השתמשו בסרגל הצד כדי לעיין בשלבים, במושגים ובחומר עזר. ## קישורים מהירים [#קישורים-מהירים] * [סקירת הלוח](/docs/getting-started/board-overview) * [סרגל פעולות עליון](/docs/concepts/top-action-bar) · [סרגל הלוח](/docs/concepts/board-toolbar) · [תפריט צד](/docs/concepts/nodes-drawer) · [פתקיות](/docs/concepts/sticky-notes) * [קטלוג שלבים](/docs/reference/node-catalog) * [שלב WhatsApp](/docs/nodes/actions/whatsapp) # סרגל הלוח (/he/docs/concepts/board-toolbar) **ממשק הלוח** מקיף את עורך התהליך: כפתור **+** בפינה העליונה, **סרגל פעולות** בתחתית משמאל, ובקרות **זום ונעילה**. ל**סרגל הפעולות העליון** מעל הלוח (פלטפורמה, שמירה, מצב פעיל, AI, הרצות) — ראו [סרגל פעולות עליון](/docs/concepts/top-action-bar). ## פאנל עליון (הוספת שלבים) [#פאנל-עליון-הוספת-שלבים] כפתור **+** ב-**Panel** בפינה העליונה מימין על הלוח. | בקרה | מה זה עושה | | ------------- | ---------------------------------------------------------- | | **+** (לחיצה) | פותח את [תפריט הצד](/docs/concepts/nodes-drawer) בפאנל הצד | בריחוף, אייקון **פתקית** מופיע מתחת ל-+; לחיצה מוסיפה [פתקית](/docs/concepts/sticky-notes) במיקום ברירת מחדל. אותו סוג ניתן להוסיף מהסרגל התחתון ב**מרכז התצוגה** (מומלץ). ## סרגל תחתון [#סרגל-תחתון] **Panel** בפינה התחתונה משמאל עם ארבע פעולות: | כפתור | תווית | מה זה עושה | | ------------ | --------- | ------------------------------------------------- | | אייקון פתקית | **Note** | מוסיף פתקית ב**מרכז התצוגה הנוכחית** | | אייקון יישור | **Clean** | מסדר את כל השלבים, ואז **מתאים תצוגה** לכל התהליך | | Undo | **Undo** | מבטל שינוי אחרון | | Redo | **Redo** | מחזיר שינויים שבוטלו | **Clean** מסדר מחדש את השלבים לקריאות, ואז ממסגר את כל התהליך בתצוגה. קיצורי מקלדת (כשלא מקלידים בשדה): * **ביטול:** ⌘/Ctrl+Z * **ביצוע מחדש:** ⌘/Ctrl+Shift+Z ## בקרות זום ונעילה [#בקרות-זום-ונעילה] וידג'ט **Controls** (למטה מימין): | בקרה | מה זה עושה | | ------------------ | ------------------------------------------ | | זום פנימה / החוצה | משנה את גודל התצוגה | | Fit view | מציג את כל השלבים במסגרת | | Interactive toggle | כשכבוי — נעילת גרירה, חיבור ובחירה על הלוח | ## סרגל כלים על שלב (בלוח) [#סרגל-כלים-על-שלב-בלוח] כשנבחר **שלב תהליך** או **פתקית**, סרגל קטן על השלב: | אייקון | מה זה עושה | | --------- | ------------------------------------ | | **Power** | הפעלה/כיבוי (עמעום כשלא פעיל) | | **Copy** | שכפול השלב (והדבקה מיידית) | | **Trash** | מחיקת השלב, תת-שלבים וחיבורים קשורים | פתקיות משתמשות בגרסה **קומפקטית** (פינה עליונה של הפתקית). שלבים רגילים מציגים קטגוריה/מזהה וסרגל כשהם נבחרים. ## קשור [#קשור] * [סקירת הלוח](/docs/getting-started/board-overview) * [תפריט צד](/docs/concepts/nodes-drawer) * [פתקיות](/docs/concepts/sticky-notes) # תיאורי שלבים (/he/docs/concepts/node-descriptions) ברוב שלבי התהליך יש שדה **Description** בתחתית **טופס פאנל הצד**. השתמשו בו להערות קצרות (כלל עסקי, העברת אחריות, TODO) שעוזרות לקרוא את הלוח. ## איפה זה מופיע על הלוח [#איפה-זה-מופיע-על-הלוח] | סוג שלב | התנהגות על הלוח | | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | | **רוב השלבים** (פעולות, טריגרים, תפעול וכו') | הטקסט מופיע **בתחתית** כרטיס השלב כשהשדה לא ריק. | | **If / Else** | התיאור מופיע **מתחת לכותרת** השלב (ראש הכרטיס). placeholder (*How would you describe this logic?*) כשהשדה ריק. | | **Switch** | נשמר בפאנל הצד אך **לא מוצג** על כרטיס ה-Switch (פריסה קיימת). | | **WhatsApp / Messenger / Instagram** | כמו רוב השלבים — בתחתית הכרטיס, **רק** כשיש טקסט. | | **תת-שלבים** (answer, fallback, timeout, מקרי switch, ענפי If) | **אין שדה Description** — ערכו תוויות ותנאים. | | **פתקיות** | לא רלוונטי — גוף הפתקית הוא ההערה (ראו [פתקיות](/docs/concepts/sticky-notes)). | תיאורים הם **תיעוד בעורך בלבד**. הם לא משנים ניתוב או תוכן הודעה בזמן ריצה. ## איך לערוך [#איך-לערוך] 1. בחרו שלב על הלוח (לא תת-שלב ולא פתקית). 2. גללו ל-**Description** בפאנל הצד. 3. הקלידו; העדכון מופיע על הלוח (בסוגי שלב שתומכים בתצוגה). להערות ארוכות שלא שייכות על כרטיס שלב, השתמשו ב[פתקית](/docs/concepts/sticky-notes) ליד הענף הרלוונטי. ## קשור [#קשור] * [סקירת הלוח](/docs/getting-started/board-overview) * [תת-שלבים](/docs/concepts/sub-nodes) * [If / Else](/docs/nodes/conditions/if-else) * [פתקיות](/docs/concepts/sticky-notes) # תפריט צד (/he/docs/concepts/nodes-drawer) **תפריט הצד** הוא **פאנל הצד** שבו בוחרים סוגי שלבים להוספה ללוח — טריגרים, פעולות, תנאים ופעולות תפעול. ## פתיחת תפריט הצד [#פתיחת-תפריט-הצד] | נקודת כניסה | מה קורה | | ------------------- | --------------------------------------- | | **+ בפאנל העליון** | פותח את תפריט הצד | | **+ במקום ההתחלה** | פותח את תפריט הצד | | **+ על ידית יציאה** | פותח את תפריט הצד וזוכר מאיזו ידית לחבר | לחיצה על **רקע הלוח** סוגרת את תפריט הצד. בחירת פתקית גם סוגרת אותו. כשתפריט הצד פתוח, הפאנל מציג **רק** את רשימת השלבים — לא את טופס השלב הנבחר. ## מדורים וקטגוריות [#מדורים-וקטגוריות] כרטיסים מקובצים לארבעה מדורים: 1. **טריגרים** — Pingmee, Instagram, Facebook, Workflow Trigger וכו' 2. **תנאים** — If / Else, Switch, … 3. **פעולות** — WhatsApp, Messenger, AI, Wait, HTTP Request, … 4. **תפעול** — Workflow Pointer, … כל כותרת מציגה שם קטגוריה ומונה, למשל `פעולות (12)`. סוגי שלבים מסוימים לא מופיעים בתפריט הצד כי נוצרים על הלוח (ענפים, פתקיות, שיוך תגיות/סוכנים ודומה). ראו [קטלוג שלבים](/docs/reference/node-catalog). ### תהליכים ערוצים חברתיים [#תהליכים-ערוצים-חברתיים] בתהליכים שמתמקדים ב**תגובות Instagram או Facebook**, תפריט הצד מציג פעולות חברתיות; **WhatsApp** אינו מוצע בסוג תהליך זה. ## כרטיסי תפריט הצד [#כרטיסי-תפריט-הצד] כל כרטיס מציג: * **אייקון** של סוג השלב * **כותרת** — שם תצוגה * **כותרת משנה** — תיאור קצר ### הוספה בלחיצה [#הוספה-בלחיצה] * אם נפתח מ**ידית +**, לחיצה על כרטיס **מחברת** את השלב החדש מהידית. * אחרת — השלב במרכז התצוגה ותפריט הצד נסגר. ### הוספה בגרירה [#הוספה-בגרירה] גררו כרטיס ללוח; בשחרור נוצר השלב במיקום המצביע. ## פאנל צד לעומת טופס שלב [#פאנל-צד-לעומת-טופס-שלב] | מצב פאנל | מה מוצג | | ------------------------------- | ------------------------------ | | תפריט צד פתוח | קטלוג שלבים (בחירת סוג להוספה) | | שלב נבחר (לא פתקית, לא welcome) | טופס הגדרה לשלב | | סגור | הפאנל מוסתר | [פתקיות](/docs/concepts/sticky-notes) לעולם לא פותחות טופס הגדרה בפאנל הצד. ## קשור [#קשור] * [סקירת הלוח](/docs/getting-started/board-overview) * [סרגל הלוח](/docs/concepts/board-toolbar) * [קטלוג שלבים](/docs/reference/node-catalog) * [תת-שלבים](/docs/concepts/sub-nodes) # פתקיות (/he/docs/concepts/sticky-notes) **פתקיות** הן הערות צהובות על הלוח. הן עוזרות לתעד תהליכים לצוות; **אינן** שלבי ביצוע ולא מופיעות ב[תפריט הצד](/docs/concepts/nodes-drawer). ## מתי להשתמש [#מתי-להשתמש] * להסביר למה ענף קיים או מה עושה אזור בתהליך. * להשאיר TODO או אחראי לעורכים הבאים. * להקשר שלא שייך בשדה **Description** של שלב (ראו [תיאורי שלבים](/docs/concepts/node-descriptions)). ## הוספת פתקית [#הוספת-פתקית] | שיטה | מיקום | | ------------------------------- | ------------------------------------------------------------------------ | | **סרגל תחתון → Note** | מרכז התצוגה (מומלץ) | | **פאנל עליון** (ריחוף מתחת ל-+) | מיקום ברירת מחדל על הלוח (ראו [סרגל הלוח](/docs/concepts/board-toolbar)) | פתקיות מתווספות מסרגל הכלים בלבד, לא ממגירת ההוספה. ## עריכה על הלוח [#עריכה-על-הלוח] פתקיות נערכות **רק על הלוח**. בחירת פתקית **לא** פותחת את פאנל ההגדרה. | אינטראקציה | מה קורה | | ----------------------- | ----------------------------------------------------- | | **אזור טקסט** | הקלידו הערה; placeholder: "Write something…" | | **Resize** | בקרה בפינה התחתונה; מינימום 80×60 | | **RTL** | כיוון טקסט לפי תוכן (עברית/ערבית → RTL) | | **לחיצה על גוף הפתקית** | סוגרת מגירת הוספה אם הייתה פתוחה | | **סרגל בחירה** | Power, Copy, Delete — כמו שלבים אחרים, פריסה קומפקטית | פתקיות לא פעילות מוצגות בעמעום. ## התנהגות בתהליך [#התנהגות-בתהליך] * **ללא ידיות** — לא מחוברות לגרף הביצוע. * **נשמרות עם התהליך** — בניגוד למקום ההתחלה בריק, פתקיות נשמרות בשמירה. * **אימות** — עיצוב שגיאה אם התהליך נכשל בכללי אימות. ## דוגמאות [#דוגמאות] ### תווית אזור [#תווית-אזור] 1. הוסיפו פתקית מעל קבוצת פעולות. 2. הקלידו "אישור הזמנה — פרודקשן בלבד". 3. שנו גודל כך שהתווית מכסה את הקבוצה. ### הערת העברה [#הערת-העברה] 1. הציבו פתקית ליד ענף **If / Else**. 2. תעדו איזה שדה CRM מניע את התנאי לעורך הבא. ## קשור [#קשור] * [סרגל הלוח](/docs/concepts/board-toolbar) * [סקירת הלוח](/docs/getting-started/board-overview) * [קטלוג שלבים](/docs/reference/node-catalog) # תת-שלבים (/he/docs/concepts/sub-nodes) **תת-שלבים** הם שלבים קטנים ליד **שלב ראשי** על הלוח. לכל תת-שלב יש יציאה אחת לחיווט נתיב אחר. השלב הראשי קובע את ההתנהגות (סוג, מגבלות, האם אפשר לערוך תוויות). ## מתי להשתמש [#מתי-להשתמש] תת-שלבים מופיעים לבד (או אחרי הוספה) כשלשלב הראשי **יש כמה יציאות**: * **WhatsApp / Messenger / Instagram** — תשובות לכפתור או לתשובה מהירה, ואופציונלית **fallback** ו-**timeout** כשמחכים לתשובה. * **If / Else** — ענפי **true** ו-**false** קבועים. * **Switch** — ענף לכל מקרה, ו-**fallback** ראשוני כשמוסיפים את המקרה הראשון. ## הגדרה (ראשי לעומת תת-שלב) [#הגדרה-ראשי-לעומת-תת-שלב] | שכבה | מה מגדירים | איפה | | ------------ | -------------------------------------------------------------- | ----------------------------------- | | **שלב ראשי** | המתנה לתשובה, כפתורים, מקרי switch וכו' | טופס השלב הראשי בפאנל הצד | | **תת-שלב** | הודעת fallback, טיימר timeout, שם מקרה, או תנאי מלא (ב-switch) | בחרו תת-שלב על הלוח, ואז טופס בפאנל | לתת-שלבים **אין** שדה **Description**. השתמשו בתוויות על הלוח או ב[תיאור](/docs/concepts/node-descriptions) של השלב הראשי. לא לכל תת-שלב יש טופס מלא. **Answer** לפעמים נערך ישירות על הלוח (תגית). **מקרי switch** משתמשים באותו מסך תנאי כמו **If / Else** כשנבחרים. ## התנהגות בתהליך [#התנהגות-בתהליך] * תת-שלב שומר קישור לשלב הראשי שלו. * יציאה מהשלב הראשי עשויה להיות מוסתרת כשיש תת-שלבים; ההמשך יוצא מתת-השלבים. * בבוחר משתנים — תת-שלב נספר כמו השלב הראשי שלו לגילוי מידע מלמעלה. * מגבלות לשלב ראשי (למשל עד **10** תשובות ב-WhatsApp, **25** מקרי switch). ### ענפי WhatsApp [#ענפי-whatsapp] כש**המתנה לתשובת משתמש** פעילה: 1. **Answer** — לכל כפתור או תשובה מהירה; התוויות מסתנכרנות לתבנית כשצריך. 2. **Fallback** — כשהמשתמש לא לוחץ על כפתור צפוי. 3. **Timeout** — כשאין תשובה בזמן שהוגדר. ### התנהגות Switch [#התנהגות-switch] הוספת **המקרה הראשון** יוצרת תת-שלב **Fallback** ומסירה חיבורים ישירים מהשלב הראשי. לחיצות **+** נוספות מוסיפות **מקרי switch**; כל מקרה מוגדר בכללי **If / Else** בפאנל. ## דוגמאות [#דוגמאות] ### תפריט עם שלושה כפתורים [#תפריט-עם-שלושה-כפתורים] 1. הגדירו **WhatsApp** עם שלושה כפתורי תשובה מהירה. 2. שלושה תת-שלבי **answer**; חברו כל אחד לשלב שונה. 3. הגדירו **Fallback** לקלט לא תקין ו-**Timeout** לשתיקה. ### ניתוב לפי משתנה ב-Switch [#ניתוב-לפי-משתנה-ב-switch] 1. הוסיפו **Switch** אחרי שלב עם משתנה. 2. הוסיפו מקרים ב-**+**; פתחו כל תת-שלב והגדירו תנאים. 3. חברו כל יציאה לפעולה המתאימה. ## קשור [#קשור] * [משתנים](/docs/concepts/variables) * [תיאורי שלבים](/docs/concepts/node-descriptions) * [WhatsApp](/docs/nodes/actions/whatsapp) * [If / Else](/docs/nodes/conditions/if-else) * [Switch](/docs/nodes/conditions/switch) # סרגל פעולות עליון (/he/docs/concepts/top-action-bar) **סרגל הפעולות העליון** נמצא מעל לוח התהליך. הוא קובע **באיזה ערוץ הבוט פועל**, האם הבוט **פעיל (מפורסם)**, ואיך **שומרים** או **בודקים** את התהליך. סרגל פעולות עליון: פלטפורמה, Generate with AI, הרצות קודמות, מצב פעיל ושמור הבקרות מפורטות **משמאל לימין** כפי שהן מופיעות בעורך. ## בקרות (משמאל לימין) [#בקרות-משמאל-לימין] | # | בקרה | מה זה עושה | | - | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1 | **פלטפורמה נבחרת** | בוחרת **באיזה פלטפורמה הבוט פועל** (למשל Pingmee שירות, WhatsApp, Messenger או Instagram). טריגרים ושלבי הודעה צריכים להתאים לפלטפורמה. | | 2 | **Generate with AI** | פותח יצירת תהליך בעזרת AI. מ**פרומפט בודד** ו/או **קובץ מצורף**, Pingmee יכול לבנות **בוט תפעולי מלא** תוך פחות משלוש דקות. עברו על הגרף שנוצר, התאימו שלבים ושמרו. | | 3 | **הרצות קודמות** | פותח רשימת **הרצות קודמות של הבוט**. ניתן לצפות ב**פלט JSON המלא** של כל הרצה (שימושי לדיבוג, תמיכה והבנת מה הבוט החזיר בזמן ריצה). | | 4 | **פעיל / לא פעיל** | קובע האם התהליך **חי**. במצב **לא פעיל** הבוט לא רץ ללקוחות גם אם הגרף נשמר. במצב **פעיל**, טריגרים תואמים יכולים להפעיל את הבוט (ראו [Pingmee Trigger](/docs/nodes/triggers/pingmee-trigger)). | | 5 | **שמור** | שומר את הלוח הנוכחי (שלבים, חיבורים והגדרות) ב-Pingmee. שמרו אחרי שינויים משמעותיים; שינויים שלא נשמרו עלולים ללכת לאיבוד ביציאה מהעורך. | ## זרימת עבודה טיפוסית [#זרימת-עבודה-טיפוסית] 1. הגדירו **פלטפורמה נבחרת** לערוץ שאתם אוטומטים. 2. בנו או **Generate with AI**, ואז ערכו שלבים על הלוח. 3. השתמשו ב**הרצות קודמות** לאימות אחרי הרצות בדיקה. 4. הפעילו **פעיל** כשמוכנים לתעבורת production. 5. לחצו **שמור** לפני יציאה מהעורך. ## קשור [#קשור] * [סקירת הלוח](/docs/getting-started/board-overview) * [סרגל הלוח](/docs/concepts/board-toolbar) — כפתור + וסרגל תחתון על הלוח (נפרד מהסרגל העליון) * [Pingmee Trigger](/docs/nodes/triggers/pingmee-trigger) # משתנים (/he/docs/concepts/variables) **משתנים** מאפשרים להכניס מידע משלבים **קודמים** לשלבים שבאים אחר כך. העורך בודק מה מחובר לפני השלב שאתם מגדירים, ומציג רשימת שדות (הודעה, לקוח, טריגר, תשובת HTTP, תוויות תת-שלב ועוד). ## מתי להשתמש [#מתי-להשתמש] * התאמה אישית של טקסט הודעה (WhatsApp, Messenger, Instagram). * החלטות ב-**If / Else** וב-**Switch** לפי תנאים. * מילוי שדות ב-Fireberry, מקומות בגוף HTTP, או כותרת/גוף של Task. * מיפוי **Update Customer** מנתוני טריגר או שלב קודם. ## איך זה עובד בעורך [#איך-זה-עובד-בעורך] 1. חברו את השלב שאתם מגדירים לשלבים שרצים **לפניו** בתהליך. 2. פתחו את הטופס. בשדות שתומכים במשתנים תראו **בוחר עץ** (או "הוסף משתנה" למקומות מסוג `{{1}}`). 3. בחרו ערך משלב קודם, או — כשאפשר — **ביטוי**. 4. בזמן ריצה המערכת ממלאת את הערך האמיתי של אותה ריצה. רשימת המשתנים נבנית מהקשתות שנכנסות לשלב. שלבים מיוחדים (תשובות, ענפי תנאי, מקרי switch, timeout, fallback) עדיין מאפשרים להשתמש במידע מהשלב הראשי שלהם. ## הגדרות (לפי סוג שדה) [#הגדרות-לפי-סוג-שדה] | דפוס | מה זה עושה | מתי להשתמש | | ------------------ | ------------------------------------------ | -------------------------------------------------- | | **בוחר עץ** | קישור לשדה אחד או לביטוי | Fireberry, Update Customer, תנאי If, מקומות בתבנית | | **מצייני `{{n}}`** | מקומות ממוספרים בטקסט; לכל אחד קישור | גוף HTTP, כותרת/גוף Task | | **עורך גוף מוטבע** | גוף WhatsApp/Messenger/Instagram עם צ'יפים | פעולות הודעה | ## התנהגות בתהליך [#התנהגות-בתהליך] * בממשק השלב המגדיר — משתנים לקריאה בלבד. הם לא יוצרים מידע חדש, אלא אם השלב עצמו שומר משתנים (הודעות, מקרי switch וכו'). * ניקוי קישור בבוחר מסיר את השדה מהשלב. * בלי שלבים מחוברים הבוחר ריק. חברו קודם טריגרים ופעולות. ## דוגמאות [#דוגמאות] ### ברכה בשם אחרי טריגר [#ברכה-בשם-אחרי-טריגר] 1. התחילו ב-**Pingmee Trigger** (או טריגר ערוץ) עם משתני לקוח/הודעה. 2. הוסיפו **WhatsApp** (או Messenger/Instagram) מהטריגר. 3. ב**גוף**, פתחו את בוחר המשתנים והוסיפו שם (או כינוי) מהענף. ### POST עם JSON דינמי [#post-עם-json-דינמי] 1. הוסיפו **HTTP Request** אחרי שלב שמספק נתונים. 2. הגדירו POST וגוף JSON עם `{{1}}`, `{{2}}` וכו'. 3. השתמשו ב**הוסף משתנה** וקשרו כל `{{n}}` לשדות הנדרשים. ## קשור [#קשור] * [תפריט צד](/docs/concepts/nodes-drawer) * [תת-שלבים](/docs/concepts/sub-nodes) * [WhatsApp](/docs/nodes/actions/whatsapp) * [If / Else](/docs/nodes/conditions/if-else) * [HTTP Request](/docs/nodes/actions/http-request) # מצביע תהליך (/he/docs/concepts/workflow-pointer) דפוס **Workflow Pointer** מפצל אוטומציה בין שתי תהליכים: 1. **Workflow Pointer** (פעולת תפעול) — בתהליך הנוכחי בוחרים **תהליך יעד** והריצה עוברת אליו. 2. **Workflow Trigger** (טריגר) — בתהליך היעד, נקודת הכניסה כשהמצביע מפנה אליו. ## מתי להשתמש [#מתי-להשתמש] * שימוש חוזר ב-onboarding, הסלמה או מדריכי תמיכה בלי להעתיק שלבים. * תהליך ראשי קצר עם חלק מורכב בתהליך נפרד. * הפרדת צוותים או תיקיות (כל תהליך בתיקייה משלה בבוחר). ## הגדרה (רעיונית) [#הגדרה-רעיונית] | רכיב | מה זה עושה | | ------------------------ | --------------------------------------------------------------------- | | **מצביע → בחירת תהליך** | קובע איזה תהליך רץ (`workflowId`, `workflowName`, `workflowFolderId`) | | **טריגר ביעד** | חייב בתחילת תהליך היעד; אין שדות טריגר נוספים בטופס | | **Description** (בשניהם) | הערה על הלוח; לא משפיעה על ניתוב | ## התנהגות בתהליך [#התנהגות-בתהליך] * למצביע יש חיבור יוצא רגיל בתהליך המקור. * תהליך היעד מתחיל ב-**Workflow Trigger** עם חיבור אחד להמשך. * העברת משתנים והקשר בזמן ריצה מטופלת בפלטפורמה; בעורך הגדירו את הטריגר והפעולות הראשונות ביעד כמו בכל ריצה חדשה. ## דוגמאות [#דוגמאות] ### תת-תהליך "יצירת משימה" [#תת-תהליך-יצירת-משימה] 1. בנו תהליך **B** עם **Workflow Trigger** → **Task** (או CRM). 2. בתהליך **A**, הוסיפו **Workflow Pointer** ובחרו **B** אחרי איסוף פרטי בעיה. 3. נתיבי סיום ב-**B** מסיימים את הריצה שם; **A** ממשיכה ממה שמחובר אחרי המצביע. ## קשור [#קשור] * [Workflow Pointer](/docs/nodes/operations/workflow-pointer) * [Workflow Trigger](/docs/nodes/triggers/workflow-trigger) * [דף הבית](/docs) # סקירת הלוח (/he/docs/getting-started/board-overview) **לוח התהליך** הוא משטח העריכה הראשי: **סרגל פעולות עליון** לפלטפורמה, שמירה ומצב הבוט, ועוד **לוח** מנוקד עם **פאנל צד**, כפתור **+** בפינה העליונה, כלי עריכה **בתחתית**, ובקרות **זום / גרירה** מובנות. ## פריסה [#פריסה] | אזור | מיקום | מה זה עושה | | --------------------- | ------------------------------ | --------------------------------------------------------------------------------------------- | | **סרגל פעולות עליון** | מעל הלוח | פלטפורמה, AI, הרצות, מצב פעיל, שמירה — ראו [סרגל פעולות עליון](/docs/concepts/top-action-bar) | | **לוח** | מרכז | גרירת שלבים, חיבור ידיות, גרירה וזום | | **פאנל צד** | צד (320px כשפתוח; ב-RTL: ימין) | **מגירת הוספת שלבים** או **טופס השלב הנבחר** | | **פאנל עליון** | למעלה מימין על הלוח | פתיחת מגירת הוספת שלבים (+) | | **סרגל תחתון** | למטה משמאל על הלוח | פתקית, פריסה (Clean), ביטול, ביצוע מחדש | | **בקרות תהליך** | למטה מימין | זום, התאמת תצוגה, נעילת אינטראקציה | פאנל הצד והלוח עובדים יחד: פתיחת המגירה או בחירת שלב מחליקים את הפאנל; לחיצה על רקע הלוח סוגרת את מגירת ההוספה. ראו [סרגל הלוח](/docs/concepts/board-toolbar) ו[תפריט צד](/docs/concepts/nodes-drawer). ## תהליך ריק (מקום התחלה) [#תהליך-ריק-מקום-התחלה] כשלתהליך **אין שלב התחלה**, מופיע **מקום התחלה** במרכז התצוגה: ריבוע מקווקו עם כפתור **+**. לחיצה פותחת את תפריט הצד (כמו ה-**+** העליון). * המקום מוצג רק כל עוד התהליך ריק; הוא נעלם לאחר הוספת הטריגר או שלב ההתחלה הראשון. * הוא אינו חלק מהתהליך השמור. ## בחירה והגדרת שלבים [#בחירה-והגדרת-שלבים] 1. לחצו על שלב תהליך בלוח. 2. **פאנל הצד** מציג את טופס ההגדרה (למעט [פתקיות](/docs/concepts/sticky-notes), שנערכות רק על הלוח). 3. ברוב השלבים יש שדה **[Description](/docs/concepts/node-descriptions)** בתחתית הטופס; לתת-שלבים אין. 4. לחיצה על רקע הלוח מבטלת בחירה וסוגרת את מגירת ההוספה. ## הוספת שלבים (תמצית) [#הוספת-שלבים-תמצית] | שיטה | מה קורה | | -------------------------------------- | ------------------------------------------------------- | | **+ עליון** או **+ במקום ההתחלה** | פותח את [תפריט הצד](/docs/concepts/nodes-drawer) | | **+ על ידית** | פותח מגירה; בחירת כרטיס **מחברת** את השלב החדש לידית | | **גרירה מהמגירה** | שחרור כרטיס על הלוח במיקום הנקודה | | **לחיצה על כרטיס** | הוספה במרכז התצוגה, או חיבור אם נפתח מידית | | **סרגל תחתון → Note** | מוסיף [פתקית](/docs/concepts/sticky-notes) במרכז התצוגה | ## קיצורי מקלדת (לוח) [#קיצורי-מקלדת-לוח] כשהפוקוס **לא** בשדה קלט, textarea או תוכן עריך: | קיצור | מה זה עושה | | ------------------ | ------------------ | | **⌘/Ctrl+Z** | ביטול | | **⌘/Ctrl+Shift+Z** | ביצוע מחדש | | **⌘/Ctrl+C** | העתקת שלבים נבחרים | | **⌘/Ctrl+V** | הדבקת שלבים | ביטול וביצוע מחדש גם ב[סרגל התחתון](/docs/concepts/board-toolbar). ## קשור [#קשור] * [דף הבית](/docs) * [סרגל פעולות עליון](/docs/concepts/top-action-bar) * [סרגל הלוח](/docs/concepts/board-toolbar) * [תפריט צד](/docs/concepts/nodes-drawer) * [פתקיות](/docs/concepts/sticky-notes) * [תיאורי שלבים](/docs/concepts/node-descriptions) * [משתנים](/docs/concepts/variables) # קטלוג שלבים (/he/docs/reference/node-catalog) | שלב | קטגוריה | תמצית | | -------------------- | --------- | ------------------------------------------------------------- | | WhatsApp | Action | שליחת הודעות WhatsApp | | Messenger | Action | שליחת הודעות Facebook Messenger | | Instagram | Action | שליחת הודעות Instagram | | Assign Tags | Action | הגדרת תגיות על שיחה | | Assign Agents | Action | שיוך סוכנים לשיחה | | Update Conversation | Action | עדכון מאפייני שיחה | | Update Customer | Action | עדכון מאפייני לקוח | | AI | Action | פעולות מבוססות AI | | If / Else | Condition | פיצול true/false | | Sticky Note | Note | הערה על הלוח בלבד — ראו [פתקיות](/docs/concepts/sticky-notes) | | Pingmee Trigger | Trigger | הפעלת בוט כשהלקוח שולח (זהירות מכמה טריגרים) | | Answer | Action | ענף כפתור/תשובה מהירה משלבי הודעה | | Condition Evaluation | Action | ענף true או false מ-If / Else | | Fallback | Action | מסלול כשלא נבחרה אפשרות צפויה | | Timeout | Action | מסלול כשאין תשובה בזמן | | Workflow Pointer | Operation | המשך בתת-תהליך | | Workflow Trigger | Trigger | ידני, API או Workflow Pointer | | Instagram Trigger | Trigger | תגובה על פוסט | | Facebook Trigger | Trigger | תגובה על פוסט | | Fireberry | Action | עדכון נתוני CRM | | Wait | Action | המתנה למשך זמן | | Switch | Condition | ניתוב רב-מסלולי | | Switch Case | Condition | ענף בודד ב-Switch | | HTTP Request | Action | קריאת HTTP חיצונית | | Task | Action | יצירת משימה | ## שלבים שלא במגירת ההוספה [#שלבים-שלא-במגירת-ההוספה] חלק מהשלבים חלק מהתהליך אך לא מופיעים במגירת ההוספה. רבים נוצרים לבד בהגדרת שלב ראשי (**Answer**, **Fallback**, **Timeout** בהודעות, או **מקרי Switch**). אחרים מהסרגל (**פתקית**) או מפעולות שיחה (**Assign tags**, **Assign agents**). ראו [תת-שלבים](/docs/concepts/sub-nodes) ו[פתקיות](/docs/concepts/sticky-notes). ## ממשק הלוח (לא שלבים) [#ממשק-הלוח-לא-שלבים] כלי העריכה מתועדים בנפרד: [סקירת הלוח](/docs/getting-started/board-overview), [סרגל הלוח](/docs/concepts/board-toolbar), [תפריט צד](/docs/concepts/nodes-drawer). # AI (/he/docs/nodes/actions/ai) פעולת **AI** מריצה **אפשרות AI** נבחרת על הקשר השיחה הנוכחי. הטופס הוא בוחר יחיד — ללא שדות prompt או מודל בעורך. ## מתי להשתמש [#מתי-להשתמש] * תשובה אוטומטית (**Answer With AI**) באמצע תהליך. * סיכום שיחה לסוכנים או לשלבים הבאים (**Summarize Conversation**). * יחד עם **Update Conversation** (גם שם יש summarize). ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | -------------------- | ----------------------------------------- | ------------- | | **Select an option** | `answerWithAI` או `summarizeConversation` | בחירת התנהגות | | **Description** | הערה על הלוח | מתי השלב רץ | ### אפשרויות [#אפשרויות] | תווית | ערך | שימוש | | -------------------------- | ----------------------- | -------------------- | | **Answer With AI** | `answerWithAI` | יצירת תשובה אוטומטית | | **Summarize Conversation** | `summarizeConversation` | סיכום להעברה או לוג | ## התנהגות בתהליך [#התנהגות-בתהליך] * **כניסה:** בדרך כלל אחרי טריגר או מספיק הודעות. * **יציאה:** חיבור אחד להמשך. * קיבולת והנחיות AI — בהגדרות **AI** ב-Pingmee, לא בטופס זה. ## דוגמאות [#דוגמאות] ### סיכום להסלמה [#סיכום-להסלמה] 1. אחרי **If / Else** על סנטימנט/מילת מפתח → **Summarize Conversation**. 2. חיבור ל-**Task** להקשר לסוכן. ### בוט ממשיך שיחה [#בוט-ממשיך-שיחה] 1. **Pingmee Trigger** על הודעה חדשה. 2. **Answer With AI**. 3. **Wait** או **Update Conversation** אחר כך. ## קשור [#קשור] * [Update Conversation](/docs/nodes/actions/update-conversation) * [Pingmee Trigger](/docs/nodes/triggers/pingmee-trigger) * [משתנים](/docs/concepts/variables) # Messenger (/he/docs/nodes/actions/facebook-messenger) פעולת **Messenger** שולחת תוכן יוצא ב-Messenger. טופס **Message** משותף: סוג הודעה, גוף עם משתנים, ו**wait for user response** (עם תת-שלבי answer/fallback/timeout כמו WhatsApp). ## מתי להשתמש [#מתי-להשתמש] * מענה בתהליכים שיחה (**Direct Message**). * תהליכים social: **Reply to Post** או **Private Reply** אחרי טריגר תגובה ב-Facebook. * המתנה עד תשובה לפני המשך. ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | -------------------------- | --------------------------------------------- | ---------------------------------------------- | | **Message Type** | התנהגות ערוץ (להלן) | DM מול תגובה מול תשובה פרטית | | **Body** | טקסט ראשי; [משתנים](/docs/concepts/variables) | תמיד | | **Wait for user response** | המתנה + תת-שלבים | סקרים, אישורים, תפריטים (ב-DM ו-Private Reply) | | **Description** | הערה על הלוח | תיעוד | ### Message Type [#message-type] | תווית UI | ערך | מתי | | ----------------------- | --------------- | ------------------------------------- | | **Direct Message (DM)** | `default` | שיחת Messenger רגילה | | **Reply to Post** | `commentOnPost` | תגובה ציבורית (ברירת מחדל ב-social) | | **Private Reply** | `privateReply` | הודעה פרטית למגיב; מפעיל המתנה לתשובה | במצב **social**, **Direct Message** מוסתר. **Informative** לא מוצע בבוחר. ### Wait for user response [#wait-for-user-response] כשפעיל: 1. התהליך ממתין להודעה נכנסת. 2. הגדירו **answer**, **fallback**, **timeout** ב[תת-שלבים](/docs/concepts/sub-nodes). ## התנהגות בתהליך [#התנהגות-בתהליך] * **כניסה:** אחרי טריגר או פעולות קודמות. * **יציאה:** חיבור מהשלב הראשי או מתת-שלבים. * עד **13** תת-שלבי answer. ## דוגמאות [#דוגמאות] ### DM פשוט [#dm-פשוט] 1. **Message Type** → **Direct Message (DM)**. 2. **Body**; **Wait for user response** כבוי. 3. חיבור לשלב הבא. ### טריגר תגובה → תשובה פרטית [#טריגר-תגובה--תשובה-פרטית] 1. מ-**Facebook Trigger**. 2. **Private Reply** + **Body**; **Wait for user response** אם נדרשת תשובה. ## קשור [#קשור] * [WhatsApp](/docs/nodes/actions/whatsapp) * [Instagram](/docs/nodes/actions/instagram) * [משתנים](/docs/concepts/variables) * [תת-שלבים](/docs/concepts/sub-nodes) # Fireberry (/he/docs/nodes/actions/fireberry) פעולת **Fireberry** (אינטגרציית CRM) קוראת וכותבת טבלאות **Fireberry**: בחירת טבלה, פעולה, זיהוי רשומה (מלבד Create), **actions** (עדכוני שדות) ו-**connections** (רשומות מקושרות). ## מתי להשתמש [#מתי-להשתמש] * סנכרון נתוני תהליך לאובייקטי CRM. * יצירה כשאין רשומה, או עדכון קיימת. * קישור רשומות בשדות connection עם **Query by field**. ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | ----------------------- | ------------------------------------------------- | --------------------------------------------- | | **Table** | סוג אובייקט Fireberry (`objectType`); טוען שדות | ישות CRM | | **Action** | `Create`, `Update Record`, `Create If None Exist` | create / update / upsert | | **Object ID** | שדה מזהה + קישור משתנה | ל-Update / Create If None; מוסתר ב-**Create** | | **Action N** (ירוק) | ערך שדה מערך/משתנה | מיפוי עמודות | | **Connection N** (כחול) | קישור דרך שדה connection | קשרים בין אובייקטים | | **Description** | הערה על הלוח | תיעוד | ### סוגי Action [#סוגי-action] | ערך | מה קורה | | ------------------------ | ------------------------------- | | **Create** | רשומה חדשה; ללא Object ID | | **Update Record** | עדכון לפי Object ID + משתנה | | **Create If None Exist** | יצירה רק אם חיפוש Object ID ריק | ### Object ID [#object-id] 1. בחרו **field** מהטבלה. 2. קשרו ערך **Object ID** מעץ [משתנים](/docs/concepts/variables). ### שורות Action [#שורות-action] כל **Add Action**: 1. **Field** — עמודת Fireberry. 2. **Value** — לפי סוג: בוחר עץ; **Selection box** — enum / Variable / Expression. **Add Action** לכתיבות שדה רגילות. ### שורות Connection [#שורות-connection] **Add Connection** דרך שדה **connection**: 1. שדה connection על הטבלה הראשית. 2. **Query by field** על האובייקט המקושר. 3. **Value** כמו בשורות action. 4. שדה לא תקין — **Not a connection field**. שינוי **Table** מנקה שאילתות וטוען שדות מחדש. ## התנהגות בתהליך [#התנהגות-בתהליך] * **כניסה:** אחרי שלבים עם משתנים ל-Object ID ושדות. * **יציאה:** חיבור רגיל להמשך. * מטא-דאטה ורשימות נטענים אסינכרונית. ## דוגמאות [#דוגמאות] ### עדכון שלב עסקה ממילת מפתח [#עדכון-שלב-עסקה-ממילת-מפתח] 1. **Table** → Deals. 2. **Update Record** + Object ID מטריגר. 3. **Add Action** → שלב ← משתנה מענף **If / Else**. ### יצירת איש קשר מקושר לחשבון [#יצירת-איש-קשר-מקושר-לחשבון] 1. **Create** + מיפוי שם/טלפון. 2. **Add Connection** + Query + מזהה חשבון. ## קשור [#קשור] * [משתנים](/docs/concepts/variables) * [HTTP Request](/docs/nodes/actions/http-request) * [Update Customer](/docs/nodes/actions/update-customer) # HTTP Request (/he/docs/nodes/actions/http-request) פעולת **HTTP Request** שולחת קריאת HTTP עם method, URL, headers, Content-Type וגוף JSON אופציונלי עם מקומות ממולאים. ## מתי להשתמש [#מתי-להשתמש] * חיבור למערכות חיצוניות (CRM, חיוב, API מותאם). * POST webhook עם [משתנים](/docs/concepts/variables). * שליפה או עדכון מרחוק בין שלבי Pingmee. ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | ------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------- | | **Method** | `GET`, `POST`, `PUT`, `PATCH`, `DELETE` | לפי חוזה API | | **URL** | כתובת | נקודת קצה | | **Content Type** | `application/json`, `application/x-www-form-urlencoded`, `text/plain`, `text/html`, או ללא | כשגוף דורש MIME | | **Headers** | שורות שם/ערך | אסימונים, headers מותאמים | | **Body** | טקסט גולמי (POST/PUT/PATCH) | JSON; מקומות `{{n}}` | | **Add variable** | מוסיף `{{n}}` הבא לגוף | קטעי JSON דינמיים | | **Beautify** | עיצוב JSON תקין | לפני שמירה | | **Template variable bindings** | בוחר עץ לכל `{{n}}` | מיפוי לנתונים מלמעלה | | **Description** | הערה על הלוח | תיעוד endpoint | ### מקומות בגוף [#מקומות-בגוף] * צורה `{{1}}`, `{{2}}`, … * כל אינדקס → **Variable** או **Expression** (`bodyVariables`). * **Beautify** מציג toast אם JSON לא תקין. ### Headers [#headers] נשמרים מקודדים; הטופס מפצל **Name** ו-**Value**. רשימה ריקה מסירה `headers`. ## התנהגות בתהליך [#התנהגות-בתהליך] * **Body** רק ב-**POST**, **PUT**, **PATCH**. * ברירת מחדל: `GET`, URL ריק. * **יציאה:** חיבור אחד להמשך. ## דוגמאות [#דוגמאות] ### GET סטטוס [#get-סטטוס] 1. **Method** → GET. 2. **URL** → `https://api.example.com/status`. 3. header **Authorization** לפי צורך. ### POST JSON עם customer id [#post-json-עם-customer-id] 1. POST + `application/json`. 2. גוף: `{"customerId": "{{1}}", "event": "workflow"}`. 3. קשרו `{{1}}` ל-id מהטריגר. ## קשור [#קשור] * [משתנים](/docs/concepts/variables) * [Fireberry](/docs/nodes/actions/fireberry) * [If / Else](/docs/nodes/conditions/if-else) # Instagram (/he/docs/nodes/actions/instagram) פעולת **Instagram** שולחת הודעות יוצאות בטופס **Message** כמו Messenger: **Message Type**, **Body** עם משתנים, ו**wait for user response**. ## מתי להשתמש [#מתי-להשתמש] * תהליכים DM ב-Instagram (**Direct Message** במצב המלא). * **Reply to Post** או **Private Reply** אחרי **Instagram Trigger**. * איסוף תשובה לפני השלב הבא. ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | -------------------------- | -------------------------------------------- | --------------------- | | **Message Type** | `default`, `commentOnPost`, `privateReply` | תגובה מול DM | | **Body** | טקסט; [משתנים](/docs/concepts/variables) | תוכן ליבה | | **Wait for user response** | המתנה + תת-שלבים (`default`, `privateReply`) | תהליכים אינטראקטיביים | | **Description** | הערה על הלוח | הערות צוות | ### Message Type [#message-type] | תווית UI | ערך | הערות | | ----------------------- | --------------- | ------------------------------------ | | **Direct Message (DM)** | `default` | נתיב הודעה רגיל במצב מלא | | **Reply to Post** | `commentOnPost` | ברירת מחדל ב-**social** | | **Private Reply** | `privateReply` | מפעיל `waitForUserResponse` אוטומטית | ## התנהגות בתהליך [#התנהגות-בתהליך] * **יציאה:** חיבור ראשי או מתת-שלבים. * **תת-שלבים:** עד **13** ענפי answer. * עריכת גוף דרך `WhatsAppBodySection` על `templateInformation`. ## דוגמאות [#דוגמאות] ### תודה ציבורית למגיבים [#תודה-ציבורית-למגיבים] 1. **Instagram Trigger** על פוסט. 2. **Reply to Post** עם **Body** קצר. ### DM אחרי תגובה [#dm-אחרי-תגובה] 1. **Private Reply** עם פרטי הצעה. 2. **Wait for user response**; חיווט **answer** לנתיבים שונים. ## קשור [#קשור] * [Instagram Trigger](/docs/nodes/triggers/instagram-trigger) * [Messenger](/docs/nodes/actions/facebook-messenger) * [משתנים](/docs/concepts/variables) # Task (/he/docs/nodes/actions/task) פעולת **Task** יוצרת **משימה** עם כותרת, גוף, ממונים אופציונליים וסטטוס. כותרת וגוף תומכים במקומות `{{n}}` כמו HTTP. ## מתי להשתמש [#מתי-להשתמש] * מעקב סוכן אחרי תהליך בוט. * משימות פנימיות הקשורות להקשר שיחה. * תורים עם אימיילי ממונים מהצוות. ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | ------------------------ | ----------------------------------------------------- | -------------------- | | **Title** | כותרת + `{{n}}` אופציונלי | סיכום קצר | | **Add Variable** (כותרת) | מקום הבא בכותרת | כותרות דינמיות | | **Body** | תיאור (textarea) | שלבים, הקשר, קישורים | | **Add Variable** (גוף) | מקום בגוף | שדות משלבים קודמים | | **Select Agents** | בחירה מרובה לפי אימייל | בעלות | | **Status** | `open`, `standby`, `completed`, סטטוסים מותאמים מ-API | מצב התחלתי | | **Description** | הערה על הלוח | תיעוד | קישורים ב-`titleVariables` ו-`bodyVariables`; כל `{{n}}` — בוחר **Attach variable to parameter**. רשימות סוכנים וסטטוסים נטענות מהפלטפורמה. שגיאה: **Error fetching tags**. ## התנהגות בתהליך [#התנהגות-בתהליך] * **כניסה:** אחרי שלבים עם משתנים. * **יציאה:** חיבור אחד. * ברירת מחדל: מיזוג `data.task` עם ערכי ברירת מחדל ריקים. ## דוגמאות [#דוגמאות] ### משימה אחרי כישלון self-serve [#משימה-אחרי-כישלון-self-serve] 1. **If / Else** על משתנה "resolved". 2. ענף False → **Task** עם כותרת `Follow up {{1}}`, גוף עם קטע שיחה, סטטוס **open**. ### סיום מוצלח [#סיום-מוצלח] 1. **Task** → סטטוס **completed** בסוף תהליך. ## קשור [#קשור] * [Update Conversation](/docs/nodes/actions/update-conversation) * [משתנים](/docs/concepts/variables) * [AI](/docs/nodes/actions/ai) # Update Conversation (/he/docs/nodes/actions/update-conversation) פעולת **Update Conversation** מעדכנת הגדרות ברמת שיחה: ניתוב, תגיות, מצב בוט/ידני/AI, סטטוס, opt-out שיווקי, תרגום אוטומטי וסיכום AI. ## מתי להשתמש [#מתי-להשתמש] * העברה לבני אדם (**assign agents**) או תיוג (**tags**). * **Answer Mode** (בוט / ידני / AI). * סגירה, המתנה או סטטוסים מותאמים. * תרגום או סיכום לסוכנים. ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | ------------------------------ | ------------------------------------------- | ------------- | | **Select Agents** | סוכני workspace | העברה / בעלות | | **Select Tags** | תגיות שיחה (עם צבעים) | סיווג, תורים | | **Answer Mode** | `bot`, `manual`, `ai`, או none | מי עונה הבא | | **Status** | `open`, `closed`, `standby` + מותאמים מ-API | מצב תיבה | | **Opt-Out Marketing Messages** | Yes / No / none | ציות שיווק | | **Use Translation** | שפות סוכן/לקוח, **Auto Translate** | רב-לשוני | | **Summarize Conversation** | כמו שלב AI | סיכום לסוכן | | **Description** | הערה על הלוח | תיעוד | ### ערכי Answer Mode [#ערכי-answer-mode] | ערך | משמעות | | -------- | -------- | | `bot` | אוטומציה | | `manual` | סוכנים | | `ai` | סיוע AI | **None** — `answerMode` לא מוגדר. ### תרגום (כשפעיל) [#תרגום-כשפעיל] | תת-שדה | מה זה עושה | | ------------------- | ------------------------- | | **Agent Language** | `languageCode` לסוכן | | **Client Language** | `targetCountryCode` ללקוח | | **Auto Translate** | תרגום הודעות יוצאות | ברירת מחדל בהפעלה: אנגלית, `autoTranslate` false עד סימון. ### סטטוס ותגיות [#סטטוס-ותגיות] נטענים מ-Pingmee; refresh בכותרות מדורים. ## התנהגות בתהליך [#התנהגות-בתהליך] * **יציאה:** חיבור אחד. * רק שדות שהוגדרו נכתבים; **None** מנקה בחירות אופציונליות. ## דוגמאות [#דוגמאות] ### מעבר לנציג אנושי [#מעבר-לנציג-אנושי] 1. **Answer Mode** → `manual`. 2. **Select Agents** → צוות tier-2. 3. **Status** → `open`. ### סיום בסגירה [#סיום-בסגירה] 1. **Status** → `closed`. 2. **Opt-Out** → **No** אם נרשמו opt-in בתהליך. ## קשור [#קשור] * [AI](/docs/nodes/actions/ai) * [Update Customer](/docs/nodes/actions/update-customer) * [Task](/docs/nodes/actions/task) # Update Customer (/he/docs/nodes/actions/update-customer) פעולת **Update Customer** כותבת שדות פרופיל באמצעות קישורי **משתנה** אופציונליים — ללא טקסט חופשי בטופס. ## מתי להשתמש [#מתי-להשתמש] * נרמול טלפון/אימייל אחרי שלב הודעה. * **System Name** (כינוי) מ-CRM או HTTP. * העשרת פרופיל אחרי **Fireberry** או **HTTP Request**. ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | ------------------------------------ | ------------ | --------------- | | **System Name** (`customerNickname`) | קישור כינוי | שם תצוגה | | **Email** | קישור אימייל | מתשובת משתמש | | **Phone Number** | קישור טלפון | מטריגר או תשובה | | **Description** | הערה על הלוח | הערות | שלושת השדות אופציונליים. ניקוי בוחר מסיר את המאפיין. ערכים: `Variable | Expression`. ## התנהגות בתהליך [#התנהגות-בתהליך] * **כניסה:** שלבים עם משתני לקוח ([משתנים](/docs/concepts/variables)). * **יציאה:** חיבור אחד. * שדות לא מקושרים לא מתעדכנים בזמן ריצה. ## דוגמאות [#דוגמאות] ### שמירת אימייל מסקר [#שמירת-אימייל-מסקר] 1. **WhatsApp** + **Wait for user response** + תת-שלב answer. 2. **Update Customer** → **Email** ← משתנה מתשובה. ### כינוי מ-Fireberry [#כינוי-מ-fireberry] 1. **Fireberry** fetch/update. 2. **System Name** ← משתנה שם מ-Fireberry. ## קשור [#קשור] * [משתנים](/docs/concepts/variables) * [Fireberry](/docs/nodes/actions/fireberry) * [Update Conversation](/docs/nodes/actions/update-conversation) # Wait (/he/docs/nodes/actions/wait) פעולת **Wait** עוצרת את הביצוע לפי שעות, דקות ושניות. משך כולל נשמר ב-`timerInfo.numberOfSeconds` (מקסימום **82,000** שניות בטופס, כ-22.8 שעות). ## מתי להשתמש [#מתי-להשתמש] * צינון לפני הודעת מעקב. * ריווח בין שלבי קמפיין. * זמן לפעולת לקוח לפני תזכורת או fallback. ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | -------------------- | -------------------------------------- | --------------------------------- | | **Wait** (בוחרי זמן) | שעות / דקות / שניות; מעדכן `timerInfo` | אורך ההמתנה; מעל המקסימום לא נשמר | | **Description** | הערה על הלוח | למה ההמתנה | שלושה dropdowns (אפסים מובילים). שינוי יחידה מחשב מחדש שניות ושומר `hours`, `minutes`, `seconds`, `numberOfSeconds`. ## התנהגות בתהליך [#התנהגות-בתהליך] * **כניסה:** כל שלב קודם. * **יציאה:** חיבור אחד בסיום ההמתנה (תזמון בפלטפורמה). * ללא תת-שלבים. ## דוגמאות [#דוגמאות] ### תזכורת אחרי שעה [#תזכורת-אחרי-שעה] 1. **WhatsApp** עם שאלה, **Wait for user response** כבוי. 2. **Wait** → 01:00:00. 3. **WhatsApp** תזכורת שנייה. ### מרווח לפני API [#מרווח-לפני-api] 1. **Wait** → 00:00:30. 2. **HTTP Request** לשרת שלכם. ## קשור [#קשור] * [WhatsApp](/docs/nodes/actions/whatsapp) — timeout בתת-שלב (מנגנון אחר) * [תת-שלבים](/docs/concepts/sub-nodes) * [HTTP Request](/docs/nodes/actions/http-request) # WhatsApp (/he/docs/nodes/actions/whatsapp) פעולת **WhatsApp** שולחת הודעה יוצאת ללקוח. נתמכים תוכן מותאם, **תבניות** מאושרות, **כפתורים**, ו**המתנה לתשובת משתמש** (יוצרת תת-שלב timeout על הלוח). ## מתי להשתמש [#מתי-להשתמש] * הודעות יזומות בתהליך (לא רק תשובות). * התראות מבוססות תבנית Meta. * איסוף תשובה לפני המשך — הפעילו **Wait for user response**. ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | -------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------ | | **Message Type** | `custom` (פשוט) או `template` (תבנית מאושרת). | תבנית כשנדרש אישור Meta; פשוט כשמותר. | | **Template** (מצב תבנית) | בחירה ומילוי תבנית; כותרת/גוף/כותרת תחתונה עשויים להיות לקריאה בלבד. | עדכוני הזמנה, OTP. | | **Header** | כותרת מדיה או טקסט. | הודעות עשירות. | | **Body** | טקסט ראשי; [משתנים](/docs/concepts/variables). | תמיד — תוכן ליבה. | | **Wait for user response** | מחכה לתשובה; timeout על הלוח. | סקרים, אישורים, תפריטים. | | **Buttons** | תשובה מהירה או CTA. | תפריט קצר. | | **Footer** | טקסט קטן בתחתית. | הבהרות משפטיות. | | **Description** | הערה על הלוח בתחתית השלב כשיש טקסט | תיעוד — ראו [תיאורי שלבים](/docs/concepts/node-descriptions) | ### Message Type [#message-type] * **Simple** (`custom`) — עריכת כותרת, גוף, כותרת תחתונה וכפתורים. * **Template** — תבנית מחשבון WhatsApp Business; שדות ננעלים בתבניות קטלוג. אם לתבנית כותרת **תמונה, וידאו או מסמך**, אפשר עדיין **להעלות** מדיה בכותרת (העלאה בלבד; הקובץ נשמר בשמירת התהליך). ### מצב תבנית ומספר טלפון [#מצב-תבנית-ומספר-טלפון] רשימות תבניות נטענות מחשבון WhatsApp Business המקושר. התהליך חייב להיות **מקושר למספר WhatsApp** (קו העסק של הבוט ב-Pingmee). בלי מספר — שינוי **Source** או **רענון** ברשימת התבניות מציג: *You must select a phone number first* — הגדירו מספר טלפון באפליקציה המארחת לפני עריכת תבניות. ### משתנים [#משתנים] גוף וכותרת מקבלים מקומות ממולאים משלבים **מחוברים**. בוחר עץ מהתהליך. ראו [משתנים](/docs/concepts/variables). ### Wait for user response [#wait-for-user-response] כשפעיל: 1. התהליך ממתין להודעה נכנסת אחרי השליחה. 2. תת-שלב **timeout** אם אין תשובה בזמן. 3. תת-שלב **fallback** אם לא נבחר כפתור צפוי. הגדירו תת-שלבים על הלוח. ראו [תת-שלבים](/docs/concepts/sub-nodes). ## התנהגות בתהליך [#התנהגות-בתהליך] * **כניסה:** אחרי טריגר או פעולה; הקשר שיחה מהפלטפורמה. * **יציאה:** חיבור רגיל; חיבורים מתת-שלבים (timeout/fallback). * **RTL:** תצוגה מקדימה על הלוח לפי תוכן (עברית/ערבית → RTL). ## דוגמאות [#דוגמאות] ### התראה פשוטה [#התראה-פשוטה] 1. **Message Type** → Simple. 2. כתבו **Body** (משתנים אופציונליים). 3. **Wait for user response** כבוי. 4. חיבור לפעולה הבאה. ### שאלה למשתמש [#שאלה-למשתמש] 1. **Body** עם השאלה. 2. הפעילו **Wait for user response**. 3. **Buttons** לתשובות צפויות (אופציונלי). 4. הגדירו **timeout** ו-**fallback** על הלוח. ## קשור [#קשור] * [תפריט צד](/docs/concepts/nodes-drawer) * [משתנים](/docs/concepts/variables) * [תת-שלבים](/docs/concepts/sub-nodes) * [Messenger](/docs/nodes/actions/facebook-messenger) # If / Else (/he/docs/nodes/conditions/if-else) שלב **If / Else** בודק **תנאים** מול [משתנים](/docs/concepts/variables) משלבים קודמים, ומנתב לתת-שלבי **true** או **false** על הלוח. ## מתי להשתמש [#מתי-להשתמש] * ענף לפי תוכן הודעה, מאפייני לקוח או מטא-דאטה של טריגר. * שילוב בדיקות — **כולם** או **לפחות אחד**. * הגנה על פעולות יקרות (HTTP, Fireberry, AI). ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | ----------------- | ------------------------------------------------------------------------ | --------------------------------------------------------------- | | **Rule** | `All conditions must be met` (`ALL`) או `At least one condition` (`ANY`) | AND מול OR | | **Condition N** | בלוק תנאי אחד | כל שורה בלוגיקה | | **Add Condition** | שורת תנאי נוספת | כללים מורכבים | | **Description** | הערה מתחת לכותרת השלב (placeholder כשהשדה ריק) | כלל עסקי — ראו [תיאורי שלבים](/docs/concepts/node-descriptions) | ### שדות לכל תנאי [#שדות-לכל-תנאי] | שדה | מה זה עושה | מתי להשתמש | | --------------- | --------------------------------- | ----------------------- | | **First value** | משתנה או ביטוי | צד שמאל | | **Comparison** | אופרטור (טבלה) | איך להשוות | | **Value** | צד ימין (מוסתר ל-empty/not-empty) | ערך, רשימה או קישור שני | ### אופרטורי השוואה [#אופרטורי-השוואה] | אופרטור | ב-UI | שדה Value | | --------------------- | ------- | ----------------- | | Greater than | `>` | טקסט/מספר | | Greater than or equal | `>=` | טקסט/מספר | | Less than | `<` | טקסט/מספר | | Less than or equal | `<=` | טקסט/מספר | | Equals | `=` | טקסט/מספר | | Not Equal | (תווית) | טקסט/מספר | | Contains | `~` | תגיות multi-value | | Is Empty | `❌` | ללא שדה | | Is Not Empty | `✅` | ללא שדה | מחיקת תנאי — בקרה אדומה בשורה (בריחוף על הקבוצה). ## התנהגות בתהליך [#התנהגות-בתהליך] * **תת-שלבים:** **true** ו-**false** קבועים; תוויות לא ניתנות לעריכה. * **יציאה:** חיבור כל תת-שלב לנתיב שונה. * ברירת מחדל: **ALL**. * אם ל-`possibilities` על משתנים — בוחר שני לערכי enum. ## דוגמאות [#דוגמאות] ### נתיב לקוח VIP [#נתיב-לקוח-vip] 1. **Condition 1:** תגית לקוח **Contains** `VIP`. 2. **True** → **Task** עדיפות; **False** → הודעת בוט רגילה. ### בדיקת אימייל ריק [#בדיקת-אימייל-ריק] 1. **Is Empty** על משתנה אימייל. 2. **True** → **WhatsApp** "שתפו אימייל"; **False** → **Update Customer**. ## קשור [#קשור] * [משתנים](/docs/concepts/variables) * [תיאורי שלבים](/docs/concepts/node-descriptions) * [Switch](/docs/nodes/conditions/switch) * [תת-שלבים](/docs/concepts/sub-nodes) # Switch (/he/docs/nodes/conditions/switch) שלב **Switch** שולח את הביצוע לענפי **מקרים**. כל מקרה הוא תת-שלב **Switch case** עם יציאה משלו. מקרים משתמשים בעורך התנאים של **If / Else** כשנבחרים בפאנל. ## מתי להשתמש [#מתי-להשתמש] * ניתוב ליותר משני נתיבים לפי משתנים. * תפריטים — כל תווית לענף. * נתיב ברירת מחדל (**Fallback**) כשאף מקרה לא מתאים. ## הגדרות [#הגדרות] | איפה | שדה | מה זה עושה | | ------------------ | ------------------- | --------------------------------------------------------- | | **שלב ראשי (לוח)** | **+** | מוסיף מקרים (עד **25**); לחיצה ראשונה מוסיפה **Fallback** | | **תת-שלב מקרה** | תגית תווית | שם מקרה (עד 20 תווים); רושם משתנה מחרוזת על השלב הראשי | | **תת-שלב (פאנל)** | כמו **If / Else** | Rule, תנאים, השוואות | | **Fallback** | טופס/תווית fallback | כשאף מקרה לא מתאים | Switch שומר על פריסת שלב ישנה: **Description** בפאנל נשמר אך **לא מוצג** על כרטיס ה-Switch. לתת-שלבים אין Description. ראו [תיאורי שלבים](/docs/concepts/node-descriptions). ### הוספת מקרים [#הוספת-מקרים] 1. לחצו **+** על Switch. 2. **לחיצה ראשונה:** יוצרת **Fallback** (`noSelectionFallback`) ומסירה חיבורים ישירים מהשלב הראשי. 3. **לחיצות נוספות:** מקרי **Switch case** (`switchCaseEvaluation`) עם תוויות (`Option #n` כברירת מחדל). 4. כל מקרה מוסיף רשומה ב-`variables` של השלב הראשי ל[משתנים](/docs/concepts/variables) בהמשך. ### תנאי מקרה [#תנאי-מקרה] בחרו תת-שלב מקרה לפתיחת **IfForm**: * **Rule:** ALL מול ANY. * שורות תנאי: משתנה, השוואה, ערך (כמו [If / Else](/docs/nodes/conditions/if-else)). סידור מקרים — חצים למעלה/למטה בין אחים. ## התנהגות בתהליך [#התנהגות-בתהליך] * **יציאה מהשלב הראשי:** אין חיבור ישיר כשיש תת-שלבים; הניתוב רק מתת-השלבים. * **מגבלה:** עד **25** מקרים; ניתנים לעריכה והסרה. * בבוחר משתנים — מקרים נפתרים דרך מזהה ה-Switch הראשי. ## דוגמאות [#דוגמאות] ### ניתוב לפי שפת `language` [#ניתוב-לפי-שפת-language] 1. Switch אחרי שלב שמגדיר `language`. 2. מקרים `en`, `he`, `ar` (עריכת תוויות בלוח). 3. **Fallback** לשפות לא מוכרות. ### תפריט קו מוצר [#תפריט-קו-מוצר] 1. מקרים `sales`, `support`, `billing`. 2. חיבור כל יציאה ל-**Messenger** או **Task** שונה. ## קשור [#קשור] * [If / Else](/docs/nodes/conditions/if-else) * [תת-שלבים](/docs/concepts/sub-nodes) * [משתנים](/docs/concepts/variables) # Workflow Pointer (/he/docs/nodes/operations/workflow-pointer) פעולת **Workflow Pointer** מעבירה את הריצה ל**תהליך יעד**. היעד חייב להתחיל ב-**Workflow Trigger**. בטופס מוגדר רק בוחר תהליך היעד. ## מתי להשתמש [#מתי-להשתמש] * שימוש חוזר ברצפים (onboarding, הסלמה, CRM). * תהליך ראשי קצר עם חלק מורכב בתהליך נפרד. * ארגון לפי תיקיות עם קישור ביניהן. ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | -------------------------- | -------------------------------------------------------------------- | ------------------------ | | **Select Workflow To Run** | רשימת תהליכים; קובע `workflowId`, `workflowName`, `workflowFolderId` | בחירת תהליך היעד | | **Refresh** | טעינה מחדש של הרשימה | תהליכים חדשים לא מופיעים | | **Description** | הערה על הלוח | חוזה העברה | בכשל טעינה: **Error fetching workflows**. ## התנהגות בתהליך [#התנהגות-בתהליך] * **כניסה:** חיבור רגיל מהתהליך הראשי. * **יציאה:** חיבור אחד ב**מקור** (אחרי ייזום ההעברה). * **יעד:** המשך ב-**Workflow Trigger** של התהליך הנבחר. * זיווג לפי `workflowId` — היעד מפורסם ומכיל **Workflow Trigger** בכניסה. ## דוגמאות [#דוגמאות] ### תהליך מרכזי "יצירת משימה" [#תהליך-מרכזי-יצירת-משימה] 1. בנו **Tasks – create** עם **Workflow Trigger** → **Task**. 2. בכל תהליך לקוח, **Workflow Pointer** → **Tasks – create** אחרי איסוף פרטים. ### ארגון לפי תיקייה [#ארגון-לפי-תיקייה] 1. בחרו תהליך מתיקייה אחרת באותו בוחר (`workflowFolderId` נשמר). ## קשור [#קשור] * [מצביע תהליך (מושג)](/docs/concepts/workflow-pointer) * [Workflow Trigger](/docs/nodes/triggers/workflow-trigger) * [דף הבית](/docs) # Facebook Trigger (/he/docs/nodes/triggers/facebook-trigger) **Facebook Trigger** מתחיל תהליך **חברתי** כשמשתמש **מגיב על פוסט בדף Facebook**. הגדירו היקף פוסט ומסנני מילות מפתח אופציונליים. ## מתי להשתמש [#מתי-להשתמש] * אוטומציה על תגובות לפוסטים (תגובות, תשובות פרטיות, העברה). * קמפיין לפוסט מסוים מול כל התגובות בדף. * סינון מילות מפתח להגרלות או תמיכה. ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | ---------------------------------------- | -------------------------- | ------------------- | | **When To Start** | `Comment on Facebook Post` | קבוע לטריגר זה | | **Select Post** | בוחר פוסט או **None** | פוסט אחד או כל פוסט | | **Must Include All Keywords (optional)** | כל המילים נדרשות בתגובה | התאמה הדוקה | | **Description** | הערה על הלוח | הערות פנימיות | ### Select Post [#select-post] * טוען פוסטים מהדף (`message`, `full_picture`, `created_time`). * Refresh מעדכן מה-API. * **None** — ללא הגבלת פוסט. ## התנהגות בתהליך [#התנהגות-בתהליך] * **יציאה:** חיבור אחד. * מתאים ל-**Messenger** עם **Reply to Post** או **Private Reply** במצב social. * ברירת מחדל ביצירה: `Comment on Facebook Post`. ## דוגמאות [#דוגמאות] ### תודה ציבורית [#תודה-ציבורית] 1. בחרו פוסט קמפיין. 2. **Messenger** → **Reply to Post** עם **Body** קצר. ### מילת מפתח → הצעה פרטית [#מילת-מפתח--הצעה-פרטית] 1. מילות מפתח `coupon`, `deal`. 2. **Messenger** → **Private Reply**; המשך אחרי תשובת המשתמש. ## קשור [#קשור] * [Instagram Trigger](/docs/nodes/triggers/instagram-trigger) * [Messenger](/docs/nodes/actions/facebook-messenger) * [תת-שלבים](/docs/concepts/sub-nodes) # Instagram Trigger (/he/docs/nodes/triggers/instagram-trigger) **Instagram Trigger** מתחיל תהליך **חברתי** כשמשתמש **מגיב על פוסט ב-Instagram**. ניתן להגביל לפוסט אחד (או כל פוסט) ולסנן במילות מפתח. ## מתי להשתמש [#מתי-להשתמש] * אוטומציות תגובה ל-DM או תגובה ציבורית על תוכן Instagram. * קמפיין לפוסט בודד. * סינון מילות מפתח (הגרלות, אזכורי מוצר). ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | ---------------------------------------- | ------------------------------------------------ | -------------------- | | **When To Start** | `Comment on Instagram Post` (אפשרות יחידה בטופס) | תמיד לסוג טריגר זה | | **Select Post** | בחירת פוסט מהדף או **None** לכל פוסט | גלובלי מול יצירה אחת | | **Must Include All Keywords (optional)** | כל המילים ברשימה חייבות להופיע בתגובה | סינון רעש | | **Description** | הערה על הלוח | תיעוד | ### Select Post [#select-post] * טוען פוסטים מהחשבון המחובר (תמונה ממוזערת, כיתוב, תאריך). * **refresh** בכותרת המדור אם הרשימה ישנה. * **None** לא מגביל ל-`post` id בודד בנתוני השלב. ## התנהגות בתהליך [#התנהגות-בתהליך] * **יציאה:** חיבור אחד (בדרך כלל **Instagram** עם **Reply to Post** או **Private Reply** במצב social). * **משתנים:** הקשר social/טריגר דומה לטריגרים אחרים. * ברירת מחדל ביצירה: `Comment on Instagram Post`. ## דוגמאות [#דוגמאות] ### תודה תחת פוסט השקה [#תודה-תחת-פוסט-השקה] 1. **Select Post** → יצירת השקה. 2. מילת מפתח `launch`. 3. **Instagram** → **Reply to Post** עם תודה. ### מעקב פרטי [#מעקב-פרטי] 1. טריגר על תגובה (עם/בלי מילות מפתח). 2. **Instagram** → **Private Reply**; **Wait for user response** אם נדרשת תשובה לפני השלב הבא. ## קשור [#קשור] * [Facebook Trigger](/docs/nodes/triggers/facebook-trigger) * [Instagram](/docs/nodes/actions/instagram) * [משתנים](/docs/concepts/variables) # Pingmee Trigger (/he/docs/nodes/triggers/pingmee-trigger) **Pingmee Trigger** מפעיל **תהליך בוט** כשהלקוח מתחיל או ממשיך שיחה בערוץ מחובר. השתמשו בו כשהלקוח יוזם את הפנייה ואתם רוצים שבוט יענה. ## מתי להשתמש [#מתי-להשתמש] * **הלקוח פותח או שולח הודעה** בשיחה ואתם רוצים שבוט יענה. * תגובה להודעות נכנסות או שיחות חדשות ב-WhatsApp, Messenger או Instagram. * תהליכים רב-ערוציים — **Platform** לכל מופע טריגר. ### כמה בוטים על אותו ערוץ [#כמה-בוטים-על-אותו-ערוץ] אם ליותר מתהליך מפורסם אחד יש **Pingmee Trigger** לאותו ערוץ ואירוע, **כל התהליכים התואמים רצים בו-זמנית**. יש לתכנן זאת כשמפצלים לוגיקה בין כמה בוטים. כדי להריץ **הרבה בוטים** בלי התנגשות: 1. **מילות מפתח** — בכל **Pingmee Trigger** הגדירו **Must Include All Keywords** כדי שהבוט יתחיל רק כשההודעה מכילה את המונחים. 2. **טריגר אחד + ניתוב** — **Pingmee Trigger** אחד, ואז **Switch** שמנתב את השיחה לתת-זרימה הנכונה (מכירות, תמיכה, החזרות וכו'). ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | ---------------------------------------- | ----------------------------------------------- | ---------------------------------------- | | **Platform** | `whatsapp`, `facebookMessenger`, או `instagram` | הגבלת תהליך לערוץ אחד | | **When To Start** | סוג אירוע (להלן) | רגע עסקי לאוטומציה | | **Must Include All Keywords (optional)** | רשימת תגיות; כל המילים חייבות להתאים | צמצום טריגרים (מוצרים, פקודות, קמפיינים) | | **Description** | הערה על הלוח בלבד | תיעוד לצוות | ### אפשרויות When To Start [#אפשרויות-when-to-start] | ערך | שימוש טיפוסי | | ---------------------------- | -------------------------------------- | | **Messages Created** | כל הודעה חדשה בשיחה | | **New Conversation Started** | מגע ראשון או שיחה חדשה | | **Manual Trigger** | הרצה ידנית מ-Pingmee (בדיקות או מפעיל) | ## התנהגות בתהליך [#התנהגות-בתהליך] * **יציאה:** חיבור אחד לשלב הבא. * **משתנים:** טריגר חדש מקבל משתני **message**, **customer**, **trigger** (כולל אפשרויות פלטפורמה וסוג אירוע לתנאים). * **כניסה:** טריגרים לא מקבלים חיבורים נכנסים (`hideInConnection`). ## דוגמאות [#דוגמאות] ### מענה אוטומטי לפי מילת מפתח [#מענה-אוטומטי-לפי-מילת-מפתח] 1. **Platform** → WhatsApp. 2. **When To Start** → **Messages Created**. 3. מילות מפתח `help`, `support`. 4. חיבור ל-**If / Else** או פעולת הודעה. ### ברכה לשיחה חדשה [#ברכה-לשיחה-חדשה] 1. בחרו **Platform** רלוונטי. 2. **When To Start** → **New Conversation Started**. 3. חיבור ל-**WhatsApp** או **Update Conversation**. ## קשור [#קשור] * [Workflow Trigger](/docs/nodes/triggers/workflow-trigger) — הפעלה ידנית, API או מבוט אב (לא הודעת לקוח) * [Switch](/docs/nodes/conditions/switch) — ניתוב טריגר אחד לכמה תת-זרימות * [משתנים](/docs/concepts/variables) * [Instagram Trigger](/docs/nodes/triggers/instagram-trigger) * [Facebook Trigger](/docs/nodes/triggers/facebook-trigger) * [דף הבית](/docs) # Workflow Trigger (/he/docs/nodes/triggers/workflow-trigger) **Workflow Trigger** מסמן איפה **תהליך יעד** (בוט) מתחיל כשהוא מופעל **מחוץ** לאירוע **Pingmee Trigger** רגיל של הודעת לקוח. בטופס אין שדות טריגר — רק **Description** המשותף לכל השלבים. ## מתי להשתמש [#מתי-להשתמש] השתמשו ב-**Workflow Trigger** במקום **Pingmee Trigger** כשהבוט **לא** אמור להתחיל רק מהודעה נכנסת של לקוח: 1. **הפעלה ידנית או API** — שולחים את הבוט ללקוחות מ-Pingmee או מפעילים דרך **API**. 2. **העברה מבוט אב** — **תהליך אב** מפעיל בוט זה עם **Workflow Pointer** (תת-בוט או זרימה מודולרית). גם עבור: * כל תת-תהליך הנקרא דרך **Workflow Pointer** (כרטיסים, CRM, הסלמה). * תהליך ראשי קצר עם בלוק מפורט בתהליך מפורסם נפרד. ## הגדרות [#הגדרות] | שדה | מה זה עושה | מתי להשתמש | | --------------- | ------------------------ | ------------------------------ | | **Description** | טקסט אופציונלי על הכרטיס | מה מצפה תת-התהליך או מה מחזירה | אין בוחר פלטפורמה, מילות מפתח או פוסט. ההתנהגות — בפעולות הראשונות אחרי השלב ביעד. ## התנהגות בתהליך [#התנהגות-בתהליך] * **כניסה:** ללא חיבורים נכנסים (טריגר). * **יציאה:** חיבור אחד להמשך היעד. * **זיווג:** **Workflow Pointer** בתהליך הקורא חייב לבחור את `workflowId` של תהליך זה ב-**Select Workflow To Run**. ## דוגמאות [#דוגמאות] ### מודול "שיוך והודעה" [#מודול-שיוך-והודעה] 1. צרו **Support handoff** עם **Workflow Trigger** בתחילה. 2. שרשרו **Update Conversation** → **WhatsApp**. 3. בתהליך הראשי, **Workflow Pointer** → **Support handoff**. ### תיעוד חוזה [#תיעוד-חוזה] 1. בחרו **Workflow Trigger**. 2. ב-**Description** ציינו הקשר נדרש (למשל "מצפה ל-conversation id מהמצביע"). ## קשור [#קשור] * [Pingmee Trigger](/docs/nodes/triggers/pingmee-trigger) — שיחות שיוזם הלקוח בערוצים מחוברים * [מצביע תהליך](/docs/concepts/workflow-pointer) * [Workflow Pointer](/docs/nodes/operations/workflow-pointer) * [דף הבית](/docs)