# FlowMattic > WordPress workflow automation The full text of every published help article for FlowMattic. --- # A booking has no Zoom or Google Meet link Source: https://support.flowmattic.com/kb/article/194/a-booking-has-no-zoom-or-google-meet-link ## Symptom A calendar's location is Zoom or Google Meet, but the booking confirmation and calendar invite contain no join link. ## Cause A real Zoom or Meet link is created from a **connected host account**. If no account for that provider is connected under **FlowMattic → Connects**, the booking still completes — the invitee is booked — but there is no account to create the meeting in, so no link is added. ## Fix **1. Connect the host account.** Go to **FlowMattic → Connects** and connect the host's account: for Zoom, install the Zoom integration under **FlowMattic → Integrations** first, then connect it; for Google Meet, connect a **Google Calendar** account (Meet links are created through a Google Calendar event). ![FlowMattic → Connects with a Google Calendar account connected](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-bookings-connects-google.png) **2. Assign that account to the calendar.** Open the calendar under **FlowMattic → Bookings**, confirm the **Location** is set to Zoom or Google Meet, and use the account picker (**Zoom account** or **Google account**) to select the connected host account. Save. Until an account is picked, the confirmation links to the booking page instead of a meeting link. ![The calendar's Location section set to Zoom with the Zoom account picker](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-bookings-location-zoom.png) **3. Make a fresh test booking.** Existing bookings made before the account was connected will not gain a link retroactively. Make a new test booking and confirm the join link now appears in the confirmation email. ## Note Connect the correct account — the meeting is created in whichever account you connect, and that account's owner is treated as the host. If several people take bookings, each host connects their own account and assigns it to their calendar. --- # Add conditional logic to a form Source: https://support.flowmattic.com/kb/article/168/add-conditional-logic-to-a-form Conditional logic shows or hides fields based on what the visitor has already answered, so the form only asks what is relevant. This guide covers adding logic rules. ## Step 1 — Open the Logic tab 1. Open your form in **FlowMattic → Forms**. 2. Go to the **Logic** tab. Its **Conditional rules** group is where you add show/hide rules. ![The Logic tab open, showing the Conditional rules group](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-form-builder-form-logic-tab.png) ## Step 2 — Add a rule A rule takes the shape **If** [value] **Then** . For example, to reveal an email field only when a visitor chooses to be contacted by email: 1. Click **Add rule**. 2. Set the condition — *If `followup` is "Yes, via email"*. 3. Set the action — *Then Show `email`*. Available actions are **Show**, **Hide**, **Require**, and **Jump to**. Fields are referenced by their **Field key**, so make sure the controlling field's key is set before writing the rule. You can also add a rule from a single field's **Conditional Logic** group in the **Field** tab. ## Step 3 — Add more rules as needed You can add several rules to build multi-step branching — for example show a "company size" dropdown only for business leads, or hide a shipping address for digital-only orders. Each rule targets one field. ![A logic rule configured as If Your role is Founder Then Show Team size](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-form-builder-form-logic-rule.png) ## Step 4 — Test the form Click **Preview** and step through the answers that should trigger each rule, confirming the target fields appear and disappear as expected. Save when the logic behaves correctly. ## Note on display mode Conditional logic works in both display modes. In conversational (one-question-per-page) mode, a hidden field is simply skipped in the sequence; in single-page mode it appears or disappears in place. --- # Add Multiple Triggers to a Workflow Source: https://support.flowmattic.com/kb/article/241/add-multiple-triggers-to-workflow A workflow usually starts from one trigger. With multi-trigger workflows, the same workflow can start from **several** triggers — a webhook from one store, a schedule, a form submission — and every one of them runs the same action steps. No more duplicating a workflow just to start it a second way. This guide walks you through adding a second trigger, capturing its response, and mapping it so your existing steps keep working no matter which trigger fires. ## Step 1 — Click Add New Trigger Open your workflow in the builder. Below the primary trigger you'll see a dashed **Add New Trigger** box. ![The Add New Trigger box below the primary trigger](https://assets.infidesk.support/products/flowmattic/kb-images/multi-trigger-workflows/mt-01-add-trigger-box-3.png) Click it to add another trigger to this workflow. ## Step 2 — Choose the trigger app The app picker opens. Choose any trigger app — Webhooks, Schedule, a form plugin, or any other integration that can start a workflow. You can also search for it by name. ![Choosing an app for the new trigger](https://assets.infidesk.support/products/flowmattic/kb-images/multi-trigger-workflows/mt-02-trigger-picker-2.png) ## Step 3 — Pick the trigger event The new trigger appears on the canvas as **trigger 1.2** (your original trigger becomes **1.1** — both connect into the same first action step). Its settings open automatically: select the **Trigger Event**, exactly like setting up a normal trigger. ![Both triggers connected to the same first step, with trigger 1.2 settings open](https://assets.infidesk.support/products/flowmattic/kb-images/multi-trigger-workflows/mt-04-two-triggers-4.png) You'll notice a **Multi-trigger workflow** notice in the settings. It explains the one rule that makes multi-trigger workflows work: ![The multi-trigger notice on the Setup tab](https://assets.infidesk.support/products/flowmattic/kb-images/multi-trigger-workflows/mt-03-trigger-setup.png) Your action steps keep using the **first** trigger's data tags (like `{webhook1.customer_email}`). So each additional trigger's response needs to be mapped to the first trigger's keys — you'll do that once, in the next step. > **Tip:** Each additional webhook trigger gets its **own unique webhook URL**. You'll find it on the trigger's Configure tab — send data there, not to the primary trigger's URL. ## Step 4 — Capture a response and map it Open the new trigger's **Capture** tab and capture a sample response, just like you would for any trigger. Once a response is captured, the **Multi-trigger workflow** section on the same tab lists every key from your *first* trigger. For each one, tell FlowMattic which key of *this* trigger's response should fill it — the tokens use the `{trigger.key}` format. If both triggers use the same key names, click **Auto-map matching keys** and you're done in one click. ![Mapping the new trigger's response to the first trigger's keys](https://assets.infidesk.support/products/flowmattic/kb-images/multi-trigger-workflows/mt-05-capture-map.png) Each row's **+** button opens a searchable picker with this trigger's captured keys — search, click a key, and its `{trigger.key}` token is inserted for you. You can also mix tokens with static text in the same field. ![The + button opens a searchable picker with this trigger's response keys](https://assets.infidesk.support/products/flowmattic/kb-images/multi-trigger-workflows/mt-06-map-picker.png) Save the workflow. ## How it runs - Whichever trigger fires starts the workflow — all triggers stay active at the same time. - When an additional trigger starts a run, FlowMattic converts its payload through your mapping, so every action step receives the data under the first trigger's keys and works unchanged. - Task History shows which trigger started each run, so you can always tell your entries apart. ## Good to know - All triggers share the same action steps, filters, and settings — edit them once. - You can add more than two triggers; they're numbered 1.1, 1.2, 1.3, and so on. - Deleting an additional trigger only removes that trigger — the rest of the workflow is untouched. - Conditional execution set on an additional trigger applies to runs started by that trigger. --- # Add OpenAI API Key to FlowMattic Using Connects Source: https://support.flowmattic.com/kb/article/67/add-openai-api-key-to-flowmattic-using-connects ### Step-by-Step Guide to Adding OpenAI API Key to FlowMattic #### 1. Install the OpenAI Integration - Navigate to the **FlowMattic -> Integrations** page. - Use the search box to locate the **OpenAI integration**. - Hover over the OpenAI integration box and click the **Install** button to install the integration. #### 2. Set Up a Connect - Go to **FlowMattic -> Connects** and click the **Connect Integration** button. - Search for **OpenAI** in the list and select it by clicking on the OpenAI box. - Enter your OpenAI **API Key** in the provided field and click **Save Connect**. - Note down the **Connect ID** displayed in the connects table for the newly added OpenAI connection. This ID will be useful for referencing the connection in future workflows. ![OpenAI Connect Settings](/storage/kb-images/7a7b9d3d0d-inline.png) ### Additional Tips - Ensure your OpenAI API Key is valid and has the necessary permissions for your intended use cases. - The Connect ID can be used in OpenAI action steps or AI Assistants within FlowMattic to streamline automation processes. By following these steps, you can seamlessly integrate OpenAI with FlowMattic and unlock powerful AI-driven functionalities. --- # Add spam protection and submission limits to a form Source: https://support.flowmattic.com/kb/article/169/add-spam-protection-and-submission-limits-to-a-form FlowMattic forms include several controls to reduce spam and limit who can submit. This guide covers enabling reCAPTCHA and the submission-limit options. ## Enable reCAPTCHA reCAPTCHA v3 scores submissions automatically, so most visitors never see a challenge. 1. First, add your reCAPTCHA keys once for the whole site. In FlowMattic's global settings, paste the **site key** and **secret key** for a reCAPTCHA v3 site (create keys at `google.com/recaptcha/admin/create`). 2. Open your form and go to **Settings → Access & spam**. 3. Turn on **Enable reCAPTCHA**. ![FlowMattic's global settings showing the reCAPTCHA site key and secret key fields](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-form-builder-settings-recaptcha.png) The **Enable reCAPTCHA** toggle only takes effect once the global keys are set — without them, enabling it on a form has no effect. Add the keys to make the protection active. ## Limit who can submit The **Access & spam** group also has: - **Close form after date** — set **Closes on** and the form stops accepting submissions after that date and time. - **Limit submissions** — set **Max submissions** (default 100) and the form closes once that total is reached. In the **Submission** group you can further restrict who submits: - **Require authentication** — only logged-in WordPress users can submit. - **Allow multiple submissions** — turn this off to accept only a single submission. ![The form's Access & spam settings with Enable reCAPTCHA, Close form after date, and Limit submissions](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-form-builder-form-access-spam.png) ## Test the settings Preview the form and try to submit under the conditions you set — for example while logged out if you required authentication, or a second time if you turned off multiple submissions — to confirm the limit behaves as expected before publishing. --- # Add tokens and sample data to an image template Source: https://support.flowmattic.com/kb/article/170/add-tokens-and-sample-data-to-an-image-template Tokens are what make an image template dynamic. A token is a placeholder such as `{{post_title}}` that a workflow fills with live data at render time. This guide covers defining tokens, binding them to elements, and setting their sample values. ## Step 1 — Open the Data tab 1. Open your template in **FlowMattic → Image Templates**. 2. In the right-hand panel, switch to the **Data** tab. This lists every token the template uses. ![The image editor's right panel on the Data tab, showing the token list](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-image-template-04-data-tab-tokens.png) ## Step 2 — Define your tokens 1. Click **New Token**. 2. In the **New Token** form, type the token key in the field (placeholder `Token key, e.g. post_title`) — such as `post_title`, `author_name`, or `coupon_code` — then click **Add token**. The new token appears in the list. Set its sample value in Step 4. Keep token keys simple and flat, such as `{{full_name}}`. ## Step 3 — Bind a token to an element 1. Drag a token from the **Data** tab onto a text element on the canvas to bind it. You can also insert one into a text element with its **Insert placeholder** button. 2. For an **Image**, **Avatar**, or **Logo**, set the element's **Source** field to a token like `{{hero_image}}`. 3. For a **QR Code** element, set its **URL / Value** field to a token like `{{ticket_url}}`. The canvas preview resolves tokens to their sample values, so you can confirm the layout looks right with realistic content. ![A text element bound to {{post_title}} with the resolved sample value rendered on the canvas](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-image-template-img-token-binding.png) ## Step 4 — Edit sample values quickly Click **Edit Sample Values** to open a table of every token and its current sample value. Change any value to preview the template with different data. Edits here update the canvas immediately, because the preview, the Data tab, and this modal all read from the same set of sample values. ![The Edit Sample Values modal — a two-column table of tokens and their sample values](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-image-template-05-edit-sample-values.png) ## Step 5 — Save Click **Save**. The tokens and their sample values are stored with the template. When you add the **Image Builder → Generate Image from Template** action to a workflow, it reads the template's saved sample data and gives you one field per token to map your live data into. ## How sample values are used The sample value drives what the canvas shows while designing and what the **Download Image** and **Preview** test renders use by default. Your saved sample values also define the parameter fields the workflow action generates for the template. Keep them realistic so the design always previews correctly. --- # A form or its embed is not showing on the page Source: https://support.flowmattic.com/kb/article/186/a-form-or-its-embed-is-not-showing-on-the-page ## Symptom A form does not appear where you expect — its public page is missing, or a shortcode, block, or embed snippet shows nothing. ## Cause and fix ### The form is archived A form only renders while its **Status** is active. A form archived from **Settings → Danger zone → Archive form** will not display anywhere. **Fix:** on the **Forms** list, check the form's **Status**. If it shows Archived, restore it so the status is active, then confirm you can reach its public page at `/flowmattic-form/{slug}/`. ![The Forms list with the Status column showing active and archived forms](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-form-builder-forms-list-status.png) ### The shortcode id is wrong The `[flowmattic_form id="..."]` shortcode must reference the correct form id. **Fix:** copy the shortcode straight from the form's row (**Copy Shortcode** in the ⋮ menu) or the **Settings → Embed** group rather than typing the id by hand, then paste it into the post or page. ### The wrong embed snippet was used The **Embed** tab of the **Share** modal offers **Inline embed**, **Popup**, **Slide-in**, and **Bubble**. A popup or bubble embed does not show the form inline; it shows a launcher that opens the form. **Fix:** if you want the form visible in the page body, copy the **Inline embed** snippet (or use the shortcode/block), and make sure its `data-fm-form`/`data-fm-embed` attributes are intact and `flowmattic-embed.js` loads on the page. Use popup, slide-in, or bubble only when you intend a launcher. ### A stale public URL was shared Setting a custom **Public URL slug** changes the form's public URL. **Fix:** share the current **Public URL** shown in the **Settings → Embed** group (or the **Link** tab of the **Share** modal). ## How to confirm Open the form's public URL directly in a private browser window. If it loads there but not where you embedded it, the issue is the shortcode, block, or embed snippet on that page — re-copy it from the **Embed** tab of the **Share** modal. --- # AI Agents Integration in FlowMattic Source: https://support.flowmattic.com/kb/article/127/ai-agents-integration-in-flowmattic FlowMattic's AI Agent is a powerful automation component that integrates multiple AI providers with your workflows. It allows AI models to make decisions, execute actions through tool calling, maintain conversation memory, and return structured responses — all within your automated workflows. --- ## How AI Agents Work The AI Agent operates in an iterative loop: 1. You provide a **system prompt** (instructions) and a **user message** (the task or question). 2. The AI processes the input along with any available **tools** (FlowMattic actions the AI can execute). 3. If the AI decides to use a tool, it calls it with the required parameters. 4. The tool executes and the result is sent back to the AI. 5. The AI can call more tools or provide a **final response**. 6. This loop repeats for up to **10 iterations** until the AI produces a final answer. ![Ai agents workflow builder screen.png](/storage/kb-images/24e4e80475-inline.png) --- ## Supported AI Providers FlowMattic supports **10 AI providers** out of the box: | Provider | Models | Tool Calling | Notes | |----------|--------|--------------|-------| | **OpenAI** | GPT-4o, GPT-4 Turbo, o3-pro, GPT-3.5 Turbo | Native | Supports Responses API for reasoning models | | **Anthropic** | Claude Opus 4, Claude Sonnet 4, Claude Haiku | Native | Full tool calling support | | **Google Gemini** | Gemini 2.5 Pro, Gemini 2.5 Flash, Gemini 2.0 Flash | Native | Uses Google AI Studio API keys | | **Groq** | Llama 4 Maverick, Llama 4 Scout, Qwen, DeepSeek | Native | Ultra-fast inference | | **Mistral AI** | Mistral Large, Medium, Small | Native | European AI provider | | **xAI (Grok)** | Grok 3, Grok 3 Fast, Grok 3 Mini | Native | By xAI | | **DeepSeek** | DeepSeek-V3, DeepSeek-R1 | Native | Reasoning model support | | **OpenRouter** | 100+ models from multiple providers | Native | Unified API gateway | | **Straico** | Multi-provider aggregator | Native | Access OpenAI, Anthropic, Google models | | **Perplexity** | Sonar, Sonar Pro, Sonar Reasoning Pro | Prompt-based | Web-grounded responses with citations | --- ## Setting Up a Connection Each AI provider requires an API key configured in FlowMattic's connection system. ### Getting API Keys | Provider | Where to Get API Key | |----------|---------------------| | OpenAI | [platform.openai.com/api-keys](https://platform.openai.com/api-keys) | | Anthropic | [console.anthropic.com](https://console.anthropic.com/) | | Google Gemini | [aistudio.google.com/app/apikey](https://aistudio.google.com/app/apikey) | | Groq | [console.groq.com](https://console.groq.com/) | | Mistral AI | [console.mistral.ai](https://console.mistral.ai/) | | xAI (Grok) | [x.ai](https://x.ai/) | | DeepSeek | [platform.deepseek.com](https://platform.deepseek.com/) | | OpenRouter | [openrouter.ai](https://openrouter.ai/) | | Straico | [straico.com](https://straico.com/) | | Perplexity | [perplexity.ai](https://www.perplexity.ai/) | ### Creating a Connection 1. Go to **FlowMattic > Connects** in your WordPress dashboard. 2. Click **Add New Connection**. 3. Search for the AI provider name (e.g., "OpenAI"). 4. Enter your **API Key** (or Bearer Token, depending on the provider). 5. Click **Save** to store the connection. > **Tip:** You can create multiple connections for the same provider — useful if you have separate API keys for different projects or billing accounts. --- ## Configuring an AI Agent The AI Agent component has three main configuration sections: **Chat Model**, **Memory**, and **Tools**. ### Chat Model Configuration This is the core section where you define the AI model and its behavior. ![ai-chat-odel-provider.png](/storage/kb-images/90a3385050-inline.png) #### Required Settings | Setting | Description | |---------|-------------| | **AI Provider** | Select from the 10 available providers. | | **Connection** | Choose the API key connection for the selected provider. | | **AI Model** | Select the specific model to use (models are fetched from the provider's API). | | **System Prompt** | Instructions that define the agent's behavior, role, and constraints. | | **User Input** | The actual message or task for the AI. Supports dynamic variables from triggers and previous steps. | #### Model Parameters (Optional) Fine-tune the AI's response behavior with these parameters: | Parameter | Default | Range | Description | |-----------|---------|-------|-------------| | **Max Tokens** | 4096 | 1–unlimited | Maximum length of the AI's response. | | **Temperature** | 0.7 | 0–2 | Controls randomness. Lower values (0.1) = focused and consistent. Higher values (1.5) = creative and varied. | | **Top P** | 1 | 0–1 | Nucleus sampling. Controls the diversity of vocabulary selection. | | **Top K** | 0 (disabled) | 0–100 | Limits token selection to the top K candidates. Only supported by some providers. | | **Frequency Penalty** | 0 | -2 to 2 | Penalizes tokens that appear frequently, reducing repetition. | | **Presence Penalty** | 0 | -2 to 2 | Encourages the model to explore new topics. | > **Tip:** For most use cases, the default parameters work well. Adjust **Temperature** first — use `0.1–0.3` for factual tasks and `0.7–1.0` for creative tasks. #### Output Format Choose how the AI should format its response: - **Text** (default) — The AI returns a plain text response. - **JSON** — The AI returns structured JSON matching a schema you define. When using JSON output format, provide a **JSON Schema** that describes the expected structure: ```json { "type": "object", "properties": { "title": { "type": "string" }, "summary": { "type": "string" }, "sentiment": { "enum": ["positive", "negative", "neutral"] }, "tags": { "type": "array", "items": { "type": "string" } } }, "required": ["title", "summary", "sentiment"] } ``` #### OpenAI Responses API For OpenAI reasoning models like `o3-pro`, `codex-mini`, or `gpt-5.1-codex-mini`, FlowMattic supports the Responses API: | Setting | Options | Description | |---------|---------|-------------| | **Use Responses API** | No (Auto-detect) | FlowMattic automatically detects if the model requires the Responses API. | | | Yes | Force using the Responses API endpoint. | > **Note:** In most cases, leave this set to "No (Auto-detect)". FlowMattic will automatically switch to the Responses API when needed. --- ### Memory Configuration Memory allows the AI Agent to remember previous conversations and maintain context across multiple workflow executions. ![ai-agents-memory.png](/storage/kb-images/7f9de1a9d7-inline.png) #### Memory Types | Type | Storage | Persistence | Best For | |------|---------|-------------|----------| | **No Memory** | None | Stateless | One-off queries where no context is needed. | | **Window Buffer Memory** | WordPress transients | 24 hours | Short-term conversations, testing, and demos. | | **FlowMattic Tables** | Custom database table | Permanent | Production use, multi-user support, audit trails. | | **WordPress Options** | wp_options table | Permanent | Simple single-site setups. | #### Memory Settings **Window Buffer Memory:** | Setting | Default | Description | |---------|---------|-------------| | Window Size | 10 | Number of message pairs (user + assistant) to keep in memory. | **FlowMattic Tables:** | Setting | Default | Description | |---------|---------|-------------| | Database | Local | Select local WordPress database or an external database connection. | | Table Name | — | Name of the table to store conversation history. | | Session ID Column | session_id | Column name used for session tracking. | | Max History Length | 20 | Maximum number of messages to retrieve per execution. | **WordPress Options:** | Setting | Default | Description | |---------|---------|-------------| | Option Prefix | fm_agent_memory_ | Prefix for option names in wp_options table. | | Max History Length | 20 | Maximum number of messages to keep. | #### Session Identifier The **Session ID** determines which conversation thread the AI continues. It works the same across all memory types: - **Leave empty** — Auto-generates a unique session ID per execution. - **Pass a specific ID** — Continue an existing conversation. Use dynamic variables like `{Webhook1.session_id}` or `{Trigger1.user_id}` to group conversations by user or thread. > **Example:** A chatbot workflow using a webhook trigger can pass `{Webhook1.session_id}` to maintain separate conversations for each user. --- ### Tools Configuration Tools allow the AI to execute FlowMattic actions during its reasoning process. This is what makes the AI Agent truly powerful — it can take actions, not just generate text. #### Tool Source: FlowMattic Actions Use any action from any installed FlowMattic app as a tool: 1. Click **Add Tool**. 2. Select the **Application** (e.g., HTTP, Email, Slack, WooCommerce). 3. Select the **Action** (e.g., "Send Email", "Make HTTP Request", "Create Post"). 4. Write a clear **Tool Description** — this tells the AI when and how to use the tool. 5. Configure the action's parameters (some can be left for the AI to fill dynamically). ![Workflow Builder ‹ FlowMattic — WordPress 2026-03-01 at 12.52.16 AM.png](/storage/kb-images/9559a47456-inline.png) > **Important:** Tool descriptions are critical. A well-written description helps the AI understand when to use each tool. For example: *"Use this tool to send an email notification to the customer. Requires: recipient email address, subject line, and message body."* #### Tool Source: Custom Tools (JSON Schema) Define custom tools with JSON schemas for integrations not available as FlowMattic apps: | Setting | Description | |---------|-------------| | **Tool Name** | Unique identifier (use snake_case, e.g., `check_inventory`). | | **Tool Description** | Explains to the AI when to use this tool. | | **Parameters Schema** | JSON schema defining the tool's input parameters. | | **Webhook URL** | Optional external endpoint to call when the tool is invoked. | #### Apps Excluded from Tool Use The following apps cannot be used as tools (to prevent recursion and control flow issues): - Control flow: Branch, Router, Filter, Iterator - Workflow control: Delay, Sub-Workflow - Triggers: Schedule, Webhook, Webhook Response, MCP Trigger - Special: Human-in-the-Loop, AI Agent --- ## How Tool Calling Works When the AI Agent has tools available, it follows this process: ``` Iteration 1: AI receives → System prompt + User message + Available tools AI decides → Call a tool OR respond directly If tool called → Execute tool, send result back to AI Iteration 2-10: AI receives → Previous context + Tool results AI decides → Call another tool OR provide final response Loop continues until done or max iterations (10) reached ``` ### Example: Multi-Step Automation **Scenario:** "Research a topic and send a summary email" 1. **Iteration 1:** AI calls the "HTTP Request" tool to fetch data from an API. 2. **Iteration 2:** AI receives the API response, processes it, and calls the "Send Email" tool with a formatted summary. 3. **Iteration 3:** AI receives confirmation that the email was sent and provides a final response: "I've researched the topic and sent a summary to john@example.com." ### Perplexity — Prompt-Based Tool Calling Perplexity's sonar models do not support native function calling. Instead, FlowMattic uses **prompt-based tool calling**: - Tool definitions are embedded in the system prompt. - When the AI wants to call a tool, it outputs: `TOOL_CALL: {"name": "tool_name", "arguments": {...}}`. - FlowMattic parses this output, executes the tool, and sends the result back to the AI. This happens transparently — you configure tools the same way as with other providers. --- ## Using AI Agent in a Workflow ### Step 1: Add the AI Agent Step In your workflow editor, add a new step and select **AI Agent** as the application. ![ai-agents.png](/storage/kb-images/f49ce15bd0-inline.png) ### Step 2: Configure the Agent Set up the Chat Model, Memory, and Tools sections as described above. ### Step 3: Use Dynamic Values Reference data from triggers and previous steps using FlowMattic's variable syntax: **System Prompt:** ``` You are a customer support agent for {{company_name}}. The customer's name is {Trigger1.customer_name} and their email is {Trigger1.customer_email}. Help them resolve their issue professionally. ``` **User Input:** ``` {Trigger1.support_question} ``` ### Step 4: Access Results in Subsequent Steps After the AI Agent step executes, you can use its output in later steps: | Variable | Description | |----------|-------------| | `{AIAgent1.message}` | The AI's final text response. | | `{AIAgent1.status}` | `success` or `error`. | | `{AIAgent1.provider}` | The AI provider used (e.g., "openai"). | | `{AIAgent1.model_id}` | The specific model used (e.g., "gpt-4o"). | | `{AIAgent1.session_id}` | The memory session ID. | | `{AIAgent1.memory.message_count}` | Number of messages in conversation history. | | `{AIAgent1.memory.memory_type}` | The memory type configured. | --- ## Real-World Examples ### Customer Support Chatbot - **Provider:** OpenAI (gpt-4o) - **Memory:** FlowMattic Tables (persistent, multi-user) - **Tools:** Send Email, Create Support Ticket, Look Up Order - **System Prompt:** "You are a helpful customer support agent. Always be polite and try to resolve issues. If you can't resolve it, create a support ticket." - **Flow:** Webhook Trigger → AI Agent → Response sent back via webhook ### Content Generation with Structured Output - **Provider:** Anthropic (Claude Sonnet) - **Memory:** None (one-shot generation) - **Tools:** Save to Database, Send Slack Notification - **Output Format:** JSON with schema for title, body, tags, and SEO metadata - **Flow:** Manual Trigger → AI Agent generates content as JSON → Save to WordPress → Notify team on Slack ### Data Processing Pipeline - **Provider:** Groq (Llama 4 Maverick) — for speed - **Memory:** Window Buffer (short-term) - **Tools:** HTTP Request, FlowMattic Tables Insert - **System Prompt:** "You are a data analyst. Fetch data from the provided API, analyze it, and store the results." - **Flow:** Schedule Trigger → AI Agent fetches and processes data → Results stored in database --- ## Troubleshooting ### Common Issues **"Failed to get API key from connection"** - Verify the connection is active in **FlowMattic > Connects**. - Check that the API key is valid and has sufficient credits/quota. **AI not calling tools** - Ensure tool descriptions are clear and specific. - Check that the system prompt instructs the AI to use tools when appropriate. - Some models are better at tool calling than others — GPT-4o and Claude Sonnet are recommended. **JSON output is invalid or wrapped in markdown** - FlowMattic automatically strips markdown fences (` ```json ... ``` `) from responses. - If you still get invalid JSON, try a more capable model or simplify your JSON schema. **Tool execution fails** - The AI receives the error and can attempt a different approach. - Check that the tool's action is configured correctly (correct connection, required fields). - Review the workflow execution log for details. **Memory not working** - Verify the Session ID is consistent across executions. If auto-generated, each execution creates a new session. - For FlowMattic Tables memory, ensure the table exists with the required columns. **Model not found or "not a chat model" error** - For OpenAI reasoning models (o3-pro, codex-mini), enable the **Responses API** toggle. - Click the refresh button to re-fetch the latest models from the provider. ### Debug Options Enable these options for troubleshooting: - **Include Execution Log** — Logs each iteration step, showing what the AI decided and which tools were called. - **Include Request Body** — Records the full API requests sent to the provider. These are saved in the workflow execution history and can be reviewed from the **FlowMattic > Task History** page. --- ## Summary | Feature | Details | |---------|---------| | **Supported Providers** | 10 (OpenAI, Anthropic, Google, Groq, Mistral, xAI, DeepSeek, OpenRouter, Straico, Perplexity) | | **Tool Calling** | Native (9 providers) + Prompt-based (Perplexity) | | **Memory Options** | Window Buffer, FlowMattic Tables, WordPress Options | | **Output Formats** | Text, JSON (with schema validation) | | **Max Iterations** | 10 per execution | | **Responses API** | Supported for OpenAI reasoning models | | **Dynamic Variables** | Full support for trigger and step data | --- # AI Assistant Actions: Workflows, Leads & Meetings Source: https://support.flowmattic.com/kb/article/229/flowmattic-ai-assistant-actions A FlowMattic AI Assistant doesn't just answer questions — it can *act*. The **Actions** tab turns your chatbot into a lead magnet and a workflow trigger: run automations when it replies, capture visitor details, and let people book a meeting without leaving the chat. Open your assistant and switch to the **Actions** tab. ![The Actions tab](https://assets.infidesk.support/products/flowmattic/kb-images/ai-assistants/actions-tab.png) --- ## Trigger a workflow on each reply At the top of the tab you can connect the chatbot to your automations: - **Event** — when the automation should fire. **Chatbot Response Generated** runs every time the assistant replies. Other events — **Lead Captured**, **Meeting Scheduled**, **Link Clicked** — are available as triggers in the **FlowMattic Chatbot** app inside the workflow builder. - **Action** — what to do, e.g. **Trigger Workflow**. - **Workflow** — which workflow to run. This lets you log every conversation, notify your team on Slack, push leads into your CRM, or anything else a workflow can do — automatically, on each response. --- ## Suggestions Give visitors a head start with **Suggestions** — default prompt buttons shown under the chat (e.g. *"What services do you offer?"*, *"I want to book a meeting with your team"*). They lower the friction of starting a conversation and steer people toward what your bot does best. --- ## Collect Leads Enable **Collect Leads** to add a form that gathers visitor information — name, email, and any fields you need — right inside the chat. Captured leads fire the **Lead Captured** event, so you can route them into a workflow (CRM, email, spreadsheet, …) the moment they come in. --- ## Link Button Add a **Link Button** to display a call-to-action that opens a URL — a pricing page, a signup link, a docs article — so the assistant can guide visitors to the next step. --- ## Schedule Meeting Turn on **Schedule Meeting** to display an inline calendar so visitors can book time with your team without leaving the conversation. A completed booking fires the **Meeting Scheduled** event for follow-up automations. --- ## Putting it together A single assistant can, in one conversation: answer from your knowledge base, suggest next questions, capture a lead, book a meeting, and trigger a workflow to notify your team — all configured from this one tab. --- **Related guides:** [Getting Started](https://support.flowmattic.com/portal/flowmattic/kb/article/227/flowmattic-ai-assistants-getting-started) · [Content Sources](https://support.flowmattic.com/portal/flowmattic/kb/article/228/flowmattic-ai-assistant-content-sources) · [Style & Embed](https://support.flowmattic.com/portal/flowmattic/kb/article/230/flowmattic-ai-assistant-embed) --- # An image token shows the wrong value or does not update Source: https://support.flowmattic.com/kb/article/192/an-image-token-shows-the-wrong-value-or-does-not-update ## Symptom A rendered image shows the wrong text or picture for a token — the old sample value, a blank space, or the raw `{{token}}` text — or an edit to a sample value does not appear in the preview. ## Cause and fix ### The token always shows its sample value The editor preview always uses the template's saved **sample values** — real workflow runs use the data the workflow supplies. If a token shows the wrong thing on a real run, the action is not sending a value for it, or its key does not match. **Fix:** open the **Image Builder → Generate Image from Template** action. In **Parameters** mode, confirm the field for that token is mapped to captured data, not left blank. Map it with the variable picker if needed. ### The raw `{{token}}` appears in the image The `{{token}}` key in the layer must exactly match — case-sensitive — the token/parameter key the workflow supplies. A mistyped, differently cased, or unmatched key is not replaced, so the raw token text shows in the output. **Fix:** make the key in the element match the saved token and the workflow mapping exactly, keeping it a simple flat key like `{{full_name}}`, and rebind it to the element. ### An edit to a sample value does not show in the preview The canvas preview, the Data tab, and the Edit Sample Values modal all read from the same set of sample values, so editing a value should update the preview immediately. If it does not, the element may be showing a stale selection. **Fix:** click elsewhere on the canvas and back, or reopen the template, so the preview re-reads the current sample values. ### A workflow broke after editing the template Workflows map to tokens by their key. Renaming or removing a token breaks any workflow step that maps to the old key. **Fix:** after renaming or removing a token, open each workflow that uses this template and update its parameter mapping to the new token. ![The Image Builder action in Parameters mode with a token field highlighted](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-image-template-wf-image-token-field.png) ## Prevention Decide token keys before you build workflows, keep them flat (`{{full_name}}`, `{{coupon_code}}`), match them exactly (case-sensitive) in every workflow mapping, and give each a realistic sample value. Stable keys and good samples keep the design, the preview, and the workflow output in agreement. --- # A PDF field shows the wrong or a stale value Source: https://support.flowmattic.com/kb/article/195/a-pdf-field-shows-the-wrong-or-a-stale-value ## Symptom A generated PDF shows a value that is out of date, always the same regardless of the workflow data, or the wrong data type (a number where you expected text, or a raw `{{token}}` that was never replaced). ## Cause and fix ### The field always shows the same value — it is reading the sample data Any token your workflow step does not supply falls back to the value stored in the template's **sample data**. If a field never changes between runs, the action is almost certainly not sending that value, so the render uses the sample. **Fix:** open the **PDF Builder → Generate PDF from Template** action. In **Parameters** mode, confirm the field for that key is mapped to captured data from an earlier step, not left blank. If it is blank, map it with the variable picker. ### The raw `{{token}}` appears in the PDF A token that renders literally was not matched to any key in the data you sent. This usually means the token name on the template and the key you mapped do not match, or the path is wrong. **Fix:** compare the token on the template (for example `{{client.name}}`) with the structure of the data you are sending. The path must match exactly, including nesting. Update either the template token or the mapping so they agree. ### The value has the wrong data type In **Parameters** mode, values are coerced automatically: `1200` becomes an integer, `true` and `false` become booleans, and a value starting with `{` or `[` is parsed as JSON. If you needed the literal string `"1200"` (for example a zero-padded reference), the coercion changed it. **Fix:** switch **Dynamic Data Mode** to **JSON** and send the value as a quoted string in the payload, so it is preserved exactly. ### A whole section is missing If an entire block is empty, the parent key was not supplied and the sample data had nothing for it either. **Fix:** make sure the top-level key exists in both your template's sample data (so the action generates a field for it) and your action mapping (so a value is actually sent). ![The PDF Builder action in Parameters mode, where each parent-level key maps to your workflow data](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-pdf-template-builder-wf-pdf-parameters.png) ## Prevention Set complete, realistic sample data on the template before building the workflow step. The action's Parameters fields are generated from the sample data's top-level keys, so accurate sample data gives you the correct fields to map and sensible fallbacks for anything you intentionally leave out. --- # API by FlowMattic Source: https://support.flowmattic.com/kb/article/16/api-by-flowmattic The **API** (Application Programming Interface) is a set of protocols, routines, and tools that enable software applications to interact with one another. APIs allow data sharing and the execution of functions between different systems, making them essential for integrating third-party tools, services, or data into existing applications. APIs are widely used across various platforms like web applications, mobile apps, and more. In FlowMattic, the **API module** allows users to interact with external APIs, enabling data exchange between different systems and automating a wide range of tasks. With this module, users can perform HTTP/HTTPS actions such as GET, POST, PUT, DELETE, and PATCH to retrieve, update, or delete data across different platforms. The **FlowMattic API module** is particularly useful for automating processes like data synchronization, report generation, and data entry between systems. ### Key Features of the API Module - Perform HTTP/HTTPS requests (GET, POST, PUT, DELETE, PATCH). - Retrieve and send data between different systems. - Supports custom headers and parameters for API requests. - Multiple authentication options including Basic, Bearer Token, and the newly added **Connects** for pre-authenticated access. * * * ### Step-by-Step Instructions for Using the FlowMattic API Module To use the API module in a FlowMattic workflow, follow these steps: #### 1\. Create a New Workflow - Log into your WordPress dashboard and and navigate to the **FlowMattic Dashboard**. - Click the **"New Workflow"** button to start creating a new workflow. #### 2\. Select the API Integration - In the workflow builder, click on the **"Choose Application"** button. - From the available options, select **“API Integration”**. #### 3\. Choose the Action Event Once you've selected API Integration, choose the type of action event (HTTP request) that you want to perform: - **GET**: Retrieves data from the API endpoint. - **POST**: Creates new data in the API endpoint. - **PUT**: Updates existing data in the API endpoint. - **DELETE**: Deletes data from the API endpoint. - **PATCH**: Partially updates existing data in the API endpoint. #### 4\. Enter the API Endpoint URL - Provide the **API endpoint URL** where the action will be performed. The endpoint URL typically consists of the protocol (HTTP/HTTPS), domain name, and the specific path to the API resource. - The API documentation for the service you're integrating with will specify the correct endpoint URL. #### 5\. Authentication Option To ensure secure communication, most APIs require authentication. FlowMattic supports multiple authentication methods: - **Basic Authentication**: A standard method where the username and password are encoded and passed in the request. - **Bearer Token Authentication**: Uses an API token or key provided by the API provider. - **Connects**: This option allows users to leverage pre-authenticated API access data through **[FlowMattic Connects](https://support.flowmattic.com/kb/article/4/how-to-use-connects/ "How to use Connects?")**. If you've already set up API connections in **FlowMattic Connects**, you can select this option to use the stored credentials for authentication, making the setup process faster and more secure. - **How to Use Connects**: If you've previously configured an API connection in the FlowMattic **Connects** section, simply select the appropriate connection, and the stored credentials will be used automatically for the API request, removing the need to input the authentication details again. - **When to Use Connects**: This option is particularly useful for APIs that are used frequently across multiple workflows, allowing you to centralize your API authentication management. #### 6\. Set Custom Headers (Optional) Some APIs require specific headers, such as `Content-Type` or custom authentication tokens. In FlowMattic, you can define these custom headers as needed: - Enable the **Custom Headers** option. - Add the required headers by specifying the **Key** (header name) and **Value** (header content). #### 7\. Add Parameters (Optional) If your API request requires parameters (such as query parameters or a request body), you can configure them in the **Parameters** section: - Enable the **Parameters** option. - Define the necessary **Key** (parameter name) and **Value** (parameter content) pairs. #### 8\. View the API Response After configuring the API step, you can view the **API response** in the step output: - FlowMattic captures the full API response, including all data returned by the endpoint. - By default, only the **parent-level keys** are shown in the step output. However, all the data is captured in the background, and you can expand it as needed in subsequent steps. #### 9\. Conditional Execution FlowMattic allows you to configure **conditional execution** for the API module. This means you can specify conditions under which the API request will be executed. Conditional execution can make your workflows more efficient by preventing unnecessary API requests: - Enable the **Conditional Execution** option and set the conditions based on the response from previous steps. #### 10\. Save and Test the API Request - Once you’ve configured all the necessary fields, click **“Save & Test Action”**. - The system will send a live request to the API, and the response will be displayed in the output. This allows you to verify that your API request is functioning as expected. #### 11\. Finalize the Workflow - After successfully testing the API step, click **“Save and Continue”** to finalize the workflow. - The API step is now ready to be executed as part of your workflow. * * * ### Conclusion The **API module in FlowMattic** offers a powerful and flexible way to integrate external applications into your automated workflows. Whether you’re retrieving data, sending updates, or deleting information, the API module enables seamless communication between systems via HTTP/HTTPS protocols. With the new **Connects** feature, managing authentication for your APIs is easier than ever, allowing you to reuse pre-authenticated credentials across multiple workflows. Combined with custom headers, parameters, and conditional execution, FlowMattic provides full control over API requests and ensures they are configured to suit your needs. By following this step-by-step guide, you can quickly and easily set up API integrations and improve the efficiency of your automated workflows, helping to streamline your business processes. --- # Authentication keeps expiring or Delay not working Source: https://support.flowmattic.com/kb/article/46/authentication-keeps-expiring-or-delay-not-working Sometimes, the authentication token on your website might expire, causing the authentication to fail on your website. This can happen due to various reasons, such as cron jobs not running on time, the website blocking the wp_remote_post() function, etc. Same goes with the `Delay` module, as it is also depend on the WordPress Cron jobs. If you're facing the authentication token expiration issue or delay not working issue multiple times, here's how you can troubleshoot and fix the issue - ### 1 ) Cron jobs on your website are not executing on time Cron jobs are scheduled tasks that run at specific intervals. They are used to renew the authentication token on your website. If the cron jobs on your website are not executing on time, the authentication token will expire, and you will need to re-authenticate your website with Flowmattic. To fix this issue, you can use a plugin like WP Crontrol to check if the cron jobs on your website are running correctly. If you find that the cron jobs are not running on time, you can try disabling and re-enabling the cron jobs to see if that fixes the issue. Another and more reliable way to fix this issue is to set up a server-side cron job to run the wp-cron.php file on your website at regular intervals. This will ensure that the cron jobs on your website are running on time and that the authentication token does not expire. Before setting up a server-side cron job, make sure the WordPress cron is disabled on your website. You can disable the WordPress cron by adding the following line of code to your wp-config.php file - ### Setting Cron using Cloudflare ```php define( 'DISABLE_WP_CRON', true ); ``` If you're using Cloudflare to manage your website, here's how you can set the cron job on Cloudflare - 1. Log in to your [Cloudflare account](https://dash.cloudflare.com/). 2. Choose your domain from the Cloudflare Dashboard 3. On the sidebar menu, click the **Workers Routes** ![workers routes.png](/storage/kb-images/b34515e097-inline.png) 4. On the Workers Routes page, click the button "**Manage Workers**" ![click-manage-workers.png](/storage/kb-images/fca1ec96d1-inline.png) 5. Now, click the "**Create Application**" button on the Workers & Pages ![create-application.png](/storage/kb-images/b3fd6dfeb0-inline.png) 6. On the Get Started page, click "Get Started" button next to the "Start with Hello World!" block ![get-started.png](/storage/kb-images/0c902926e5-inline.png) 7. Click **Deploy** and Cloudflare will create a worker for you ![click-deploy.png](/storage/kb-images/545cb30610-inline.png) 8. On the next screen, click “**Edit Code**” ![edit-code.png](/storage/kb-images/b468e3a70b-inline.png) 9. Remove the existing code from worker.js file 10. Copy and paste the following code into the Worker editor and click Deploy button ```javascript addEventListener('scheduled', event => { event.waitUntil(handleScheduled(event.scheduledTime)) }) async function handleScheduled(scheduledDate) { const response = await fetch('https://yourwebsite.com/wp-cron.php?doing_wp_cron') const text = await response.text() console.log(text) } ``` ![edit-and-replace-code.png](/storage/kb-images/5351519cff-inline.png) 11. Replace 'https://yourwebsite.com/wp-cron.php' with the URL of your website's wp-cron.php file. 12. Click on **Deploy** button on the same screen, and it will create a cron job for your site. 13. Now, go back to your worker and switch to the "**Settings**" tab. ![worker-settings.png](/storage/kb-images/e882becc38-inline.png) 15. Click on "**Trigger Events**" on the settings page side menu 16. Click on "**+Add**" link in the " **Trigger Events**" ![create-trigger-event.png](/storage/kb-images/c8794cf2bd-inline.png) 17. Select "**Cron Triggers**" from the available options. ![cron-triggers.png](/storage/kb-images/530418da13-inline.png) 18. Set the **Schedule** for the cron job to run every minute or every 5 minutes maximum. 19. Click on the "Add" button at the bottom of the page to save the changes. ![set-5-min-trigger.png](/storage/kb-images/97bc34c495-inline.png) 20. Now, your server-side cron job is set up, and the cron jobs on your website will run on time. If you're not using Cloudflare, you can set up a server-side cron job using cPanel or any other hosting control panel that your hosting provider offers. You can also contact your hosting provider for help in setting up a server-side cron job on your website. ### 2 ) Website is blocking the wp_remote_post() function Some websites have security measures in place that block the wp_remote_post() function, which is used to renew the authentication token on your website. If your website is blocking the wp_remote_post() function, the authentication token will expire, and you will need to re-authenticate your website with Flowmattic. If you're using a security plugin on your website, you can try disabling the plugin temporarily to see if that fixes the issue. If disabling the security plugin fixes the issue, you can contact the plugin developer to see if they can provide a solution to whitelist the wp_remote_post() function on your website. --- # Automate Bookings with FlowMattic Workflows Source: https://support.flowmattic.com/kb/article/156/automate-bookings-with-flowmattic-workflows The **FlowMattic Bookings** application connects your booking calendars to the Workflow Builder. It lets a workflow run automatically whenever something happens to a booking, and it lets a workflow act back on bookings — adding notes, changing status, and more. It also ships ready-made default workflows so confirmation and reminder messaging is driven by automation you can edit, rather than hard-coded email logic. You'll find it in the Workflow Builder when you choose an application; it's listed as **FlowMattic Bookings** (app slug `bookings`). It's a core integration, so no separate install is needed. ## Triggers: run a workflow when a booking event happens A **trigger** starts a workflow. Pick **FlowMattic Bookings** as your trigger app, then choose one of these events: - **New Booking** — fires when a new booking is made on a calendar. - **Single-Use Calendar Booking Received** — fires when a booking is made specifically on a single-use (one-time) link. (A single-use booking also fires "New Booking".) - **Booking Updated** — fires when a booking's details are updated. - **Booking Rescheduled** — fires when a booking is moved to a new time. - **Booking Cancelled** — fires when a booking is cancelled. - **Booking Completed** — fires when a booking is marked completed. - **Booking Marked No-Show** — fires when a booking is marked no-show. - **Booking Deleted** — fires when a booking is deleted. - **New Calendar** / **Calendar Updated** / **Calendar Deleted** — fire on calendar lifecycle changes (not individual bookings). ![The Workflow Builder trigger step with "FlowMattic Bookings" selected, the New Booking event chosen](https://assets.infidesk.support/kb/inline/2026/07/jpJ2Jn7JqW8upuyPBUgTvFhWrSLgpQ6RfvucCVDx.png) ### Scoping a trigger to one calendar Booking triggers carry a **Calendar** picker. Set it to a specific calendar to fire only for that one, or leave it set to **any** to fire for every calendar. Clicking the data icon next to the Calendar field injects your calendar list into the picker; a refresh icon reloads the list from the server if you've just added a calendar. ![Calendar picker set to a specific calendar](https://assets.infidesk.support/kb/inline/2026/07/vLUMsnreSgirA6A0Z2YXHzH3WjGWPkq8ChBqW1PW.png) ### What data each booking event carries Every booking trigger delivers a flat payload — each key becomes a `{{tag}}` you can map into later steps. The booking events all carry the same set of fields, so one workflow can branch on **status** instead of being duplicated per event: - `booking_id`, `calendar_id`, `calendar_name` - `booking_date`, `booking_time`, `booking_end`, `duration_minutes`, `timezone` - `location` - `customer_name`, `customer_email`, `customer_phone` - `company`, `notes` - `guests` (comma-separated), `guest_count` - `status` - `manage_url` (the public page link) - `send_confirmation`, `send_remind_24h`, `send_remind_1h`, `allow_reschedule`, `allow_cancel` — yes/no flags reflecting that calendar's notification toggles - `triggered_at` A **rescheduled** event additionally carries the previous slot as `old_date` and `old_time`, plus `notify` and `message` (whether to notify the attendee and any custom message the host added). Calendar triggers carry a different, calendar-shaped payload (`calendar_id`, `calendar_name`, `calendar_slug`, `calendar_status`, `calendar_type`, `calendar_url`, `duration_minutes`, `location`, `timezone`, `color`, `created`, `updated`). ![booking-trigger-response](https://assets.infidesk.support/kb/inline/2026/07/p14tvkTt5Nwe2iNGEZ3D1UEfYDSlkqwRRaLEaFek.png) ## Actions: act on bookings from a workflow An **action** is a step a workflow runs. With **FlowMattic Bookings** chosen as an action app, you can manage calendars and bookings programmatically. The available actions include creating, updating, regenerating, deleting and fetching calendars; adding, updating, rescheduling, cancelling, completing, marking no-show, deleting, fetching and finding bookings; sending an email to a booking; and the two highlighted below. Actions that target a booking can find it by **booking ID** or by **customer email**, or fall back to the booking from the trigger that started the workflow. Actions that target a calendar use the **Calendar** picker (the same one as triggers). Every action returns a flat result envelope with a `status` and `message` plus the affected booking's or calendar's fields (e.g. `booking_id`, `booking_status`, `customer_email`, `calendar_id`), so you can map them into downstream steps. ![bookings-workflow-action-selection](https://assets.infidesk.support/kb/inline/2026/07/fV44a2HEUHPTQewERVZtxmL5UBzt2ikhV5B7Xtqy.png) ### Add Note to Booking The **Add Note to Booking** action appends a line to a booking's activity log. It takes a single **note** field (required). The note is recorded in the booking's activity history (prefixed with "Note:") and is visible when you open the booking in the dashboard. Use it to leave context on a booking automatically — for example, the source of the lead, a CRM record ID, or the result of an earlier step. ### Update Booking Status The **Update Booking Status** action sets a booking's status. It takes a **status** field, which must be one of `confirmed`, `pending`, `cancelled`, `completed`, or `no_show`. The change is written to the booking and logged in its activity history. Importantly, setting the status to **cancelled**, **completed** or **no_show** also fires that status's matching lifecycle trigger — so an "Update Booking Status → cancelled" step will itself fire the **Booking Cancelled** trigger (and its emails/workflows), exactly as if you'd cancelled it by hand. Keep this in mind to avoid building loops. ![ A workflow action step with "FlowMattic Bookings" selected, the Update Booking Status action chosen, and the status field set to "completed"](https://assets.infidesk.support/kb/inline/2026/07/ybuWcM1q1lAd6VB3vqeSBNSqaxXFeqPAcVNGXUsj.png). ## The bundled default workflows So that confirmation and reminder messaging isn't hard-coded, the Bookings app bundles ready-made default workflow templates. The calendar notification toggles map onto these instead of fixed email logic, and you can open and edit them freely: - **Booking confirmation email** — triggers on **New Booking** and emails the invitee a confirmation with the event details (date, time, time zone, and the manage link). Replaces hard-coded confirmation logic. - **24-hour booking reminder** — triggers on **New Booking**, then uses a Filter step gated on the `{{send_remind_24h}}` flag and a Delay step timed to 24 hours before the meeting, before emailing the reminder. So the reminder only goes out when that calendar has reminders turned on. - **Booking cancellation notice** — triggers on **Booking Cancelled** and emails the invitee to let them know, with a rebooking link. Replaces hard-coded cancellation logic. These templates use the same `{{customer_email}}`, `{{customer_name}}`, `{{calendar_name}}`, `{{booking_date}}`, `{{booking_time}}`, `{{timezone}}` and `{{manage_url}}` tags from the trigger payload, so you can rewrite the subject and body to match your voice without touching code. ![The 24-hour booking reminder default workflow open in the builder, showing the New Booking trigger, the Filter step checking send_remind_24h, the Delay step, and the email action](https://assets.infidesk.support/kb/inline/2026/07/Gvzr793TaY0QBYIDRVuTQOcU0mvBmiUC80xjiuE6.png). ## Putting it together Typical patterns: - **Push every booking into a CRM** — trigger on New Booking (scoped to a calendar or "any"), add a "create contact" step in your CRM app, and map `customer_name`, `customer_email`, `customer_phone`, `booking_date`, `booking_time`, `notes` and `manage_url`. - **Log bookings to a Table** — trigger on New Booking and add a Tables "create row" step for reporting. - **Notify your team** — trigger on New Booking and post the details to Slack or send an SMS. - **React to cancellations and no-shows** — trigger on Booking Cancelled or Booking Marked No-Show to free up follow-up tasks, re-engage the lead, or update a deal stage. - **Annotate or progress a booking automatically** — use Add Note to Booking and Update Booking Status inside a larger workflow (or an AI agent's tool chain) to record outcomes and move bookings through their lifecycle. Because every booking event is a trigger and most booking operations are actions, any FlowMattic workflow can both react to bookings and create or change them — making Bookings a fully scriptable part of your automation, not a closed-off scheduler. --- # Bind dynamic data in PDF templates with tokens and sample data Source: https://support.flowmattic.com/kb/article/171/bind-dynamic-data-in-pdf-templates-with-tokens-and-sample-data A PDF template becomes dynamic when you mark the parts that change per run as **tokens**, and define **sample data** that describes the shape of the data your workflow will send. This guide explains how to do both, and why the sample data matters for the workflow step you build later. ## How tokens work A token is a placeholder written as `{{path.to.value}}`. When the workflow renders the PDF, each token is replaced with the matching value from the data you send. Tokens can point to nested values using dots (`{{client.name}}`) and to items in a list (`{{line_items}}` for a Table element). Any text on the canvas can mix static text and tokens, so `Invoice #{{invoice.number}}` renders as `Invoice #1042`. ## Step 1 — Open your template's Data panel 1. Go to **FlowMattic → PDF Templates** and open the template you want to edit. 2. In the editor's right panel, open the **Data** tab. It shows the template's **sample data** as a schema; its **Edit** button opens an **Edit JSON data** editor where you edit the JSON directly. ![The PDF Template Builder with the Data panel open, showing the template's sample data](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-pdf-template-builder-pdf-data-panel.png) ## Step 2 — Write sample data that matches your workflow The sample data is a JSON object whose keys match the values you will send from your workflow. Edit it so the structure mirrors your real data. For an invoice, that might be: ```json { "invoice": { "number": "1042", "date": "2026-05-01" }, "client": { "name": "Acme Ltd", "email": "billing@acme.com" }, "line_items": [ { "description": "Design work", "amount": 1200 }, { "description": "Hosting", "amount": 150 } ], "totals": { "subtotal": 1350, "tax_rate": 0.2 } } ``` Fill each value with a realistic example. This example is what you see while designing, and it is also the fallback used at render time for any value your workflow does not supply. ## Step 3 — Bind tokens to elements 1. Click a text element on the canvas. 2. Type a token where the value should appear, for example `{{invoice.number}}` in a heading, or `{{client.name}}` in an address block. 3. For a **Table** element, point it at an array such as `line_items` and map its columns to the item keys (`description`, `amount`). 4. For a **Totals** element, use a formula such as `sum(line_items.amount)` or `mul(totals.subtotal, totals.tax_rate)`. You can also insert tokens from the **Data** tab: drag a field onto an element, or click it to copy its `{{path}}`. In **Preview** the tokens resolve to the sample values, so you can confirm the layout looks right with real-looking content. ![The Billed to element selected — {{client.name}} in its line field, resolved to the sample value on the page in Preview](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-pdf-template-builder-pdf-clientname-binding.png) ## Step 4 — Save the template Click **Save**. The token names and the sample data are stored with the template. ## Why sample data matters for the workflow step When you later add the **PDF Builder → Generate PDF from Template** action to a workflow and pick this template, FlowMattic reads the **parent-level keys** of your sample data and generates one labelled field per key under **Parameters**. In the example above you would get fields for `invoice`, `client`, `line_items`, and `totals`. This means two things: - If you set the sample data first, the workflow step gives you a clean, labelled form to map your captured data into. - If the sample data is missing or incomplete, the step has nothing to build those fields from, and you must switch the action to **JSON** mode and hand-write the whole payload. At render time, any key your workflow does not provide falls back to the value in the sample data. This is useful for fixed values you never change, but it is also worth knowing when a field looks "stuck" — if a binding always shows the same value, it may be reading the sample rather than your workflow data. --- # Booking reminders and follow-ups are not sending on time Source: https://support.flowmattic.com/kb/article/172/booking-reminders-and-follow-ups-are-not-sending-on-time ## Symptom The booking confirmation arrives immediately, but the 24-hour reminder, 1-hour reminder, or post-meeting follow-up arrives late or not at all. ## Cause The confirmation is sent the moment a booking is made, but reminders and follow-ups are **scheduled** for a future time and dispatched by WordPress cron (WP-Cron). By default WP-Cron only runs when someone visits the site, so on a low-traffic site the scheduled time can pass with no visit to trigger the send — and the email goes out late, or not until the next visit. This is the single most common cause of delayed reminders, and it affects any time-based FlowMattic feature, not just Bookings. ## Fix **1. Set up a real system cron** Have your server (or host) ping `wp-cron.php` on a fixed schedule — for example every minute or every five minutes — instead of relying on visitor traffic. Most hosts offer a cron manager for this; the command pings `https://your-site/wp-cron.php`. We have prepared a detailed step by step guide to help you setup a server side cron using Cloudflare ( FREE account works ) - [Setup Server side cron using Cloudflare](/portal/flowmattic/kb/article/10/delay-or-scheduled-workflows-not-working) **2. Confirm the reminders are enabled.** In the calendar's **Notifications & policies** section, confirm **Email reminders** is on, with the **24 hours before** and **1 hour before** timings you expect. A reminder that is off is never scheduled. The post-meeting **Follow-up** is separate — it is a global email that is off by default, so enable **Follow-up** in the **Email notifications** dialog on the Bookings page if you rely on it. ## How to confirm the fix Make a test booking for a slot far enough ahead that the reminder is scheduled, then confirm the reminder arrives at the expected time once the system cron is running. Reliable cron is what turns scheduled reminders into on-time reminders. --- # Bookings Source: https://support.flowmattic.com/kb/article/174/bookings Bookings is FlowMattic's built-in scheduling module. You create a booking calendar (an "event type"), publish its page on your own domain, and invitees pick a time within the availability you set. Every booking is stored in WordPress, can fire a workflow, and comes with confirmation, reminder, reschedule, cancellation, and follow-up emails out of the box. It is for anyone who would otherwise use Calendly or SavvyCal but wants the data and the automation on their own site. ## How it works You build a calendar under **FlowMattic → Bookings**, set its availability and options, and share its public URL (`/booking/{slug}/`) or shortcode. Invitees book a slot; each booking is stored and fires a lifecycle event that a workflow can act on. ## What a calendar controls Each calendar defines: - **Duration and location** — 15/30/45/60 minutes or custom, and a location of Zoom, Google Meet, Phone call, or In person. For Zoom or Meet, you pick the connected account that hosts the meeting. - **Availability** — recurring weekly windows (per day) or specific dates/date ranges, with a meeting timezone. - **Limits** — buffers before and after, minimum notice, how far ahead bookings can be made, and a maximum per day. - **Invitee questions** — name and email are always collected; you can also require a phone number (for phone-call bookings), add a preparation note, and let invitees bring guests up to a cap of 2, 5, or 10. - **Notifications & policies** — an always-on confirmation, email reminders 24 hours and 1 hour before the meeting, and whether invitees may reschedule or cancel. - **Branding** — a logo, the host's name, photo, and title, an accent color, an optional post-booking redirect, and the "Powered by FlowMattic" footer toggle. ## Meeting links If the location is Zoom or Google Meet and the host has connected that account under **FlowMattic → Connects**, each booking generates a real join link that is added to the confirmation email and calendar invite. ## Single-use links A calendar can be set to issue a single-use link (`/booking/d/{token}/`) that locks after one booking — useful for a specific prospect or a paid session. A calendar's single-use type is fixed once created. ## Automation Booking lifecycle events — created, rescheduled, cancelled, completed, no-show, deleted — all fire with the same flat payload, so one workflow can branch on `status` rather than being duplicated per event. A workflow can also create a booking on a calendar with the **Add Booking** action. ![The Bookings dashboard showing a booking calendar and its shareable scheduling link](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-bookings-bookings-dashboard.png) --- # Bookings Module: Create Scheduling Calendars and Manage Bookings in FlowMattic Source: https://support.flowmattic.com/kb/article/154/bookings-module-create-scheduling-calendars-and-manage-bookings-in-flowmattic Bookings is FlowMattic's built-in scheduling module. You create a booking calendar (also called an "event type"), set the hours you're available, and share a page where people pick an open time. Every booking is saved in your own WordPress site, sends confirmation and reminder emails automatically, and can trigger a workflow. It works like Calendly, but the data and the automation live on your site. You'll find it under **FlowMattic → Bookings**. A registered license key is required; if your license isn't registered yet, the page shows a notice asking you to register it first. ## What a calendar is A **calendar** is one bookable meeting type — for example "30-minute Discovery Call" or "Free Consultation". Each calendar has its own: - Public booking page that visitors use to pick a time - Availability rules (which days and hours are open) - Meeting duration and location - Email notifications and branding - List of bookings people have made on it You can create as many calendars as you need, each with different settings. The Bookings index page lists all of them with their total and upcoming booking counts. ![The FlowMattic → Bookings index page showing the list of calendars with their colors, public URLs, and total/upcoming booking counts](https://assets.infidesk.support/kb/inline/2026/07/9SGF2osER7Bh92EHheXm8wKvrE4zL7XXufepO5Vb.png). ## Creating a calendar Click **New Calendar** on the Bookings index. The calendar **Editor** opens with a live preview of the public page on the right that updates as you change settings. ### Calendar type: Regular vs Single-use link At the top of the editor you choose the calendar **type**: - **Regular** — a reusable scheduling page. Anyone with the link can keep booking times on it. This is the default. - **Single-use link** — a one-time link that locks after a single booking. It uses an unguessable token (like `cvqt-hpz-352`) instead of a friendly slug, and lives at a `/d/{token}/` URL. As soon as someone books, the link flips to "Booked" and stops accepting bookings. This is useful for a specific prospect, a paid session, or anything you only want one person to claim. The type is **fixed once the calendar is created** — you can't convert a regular calendar to single-use or back. Choose before you save. ### Name and slug Give the calendar a **Name** (shown as the page heading). For regular calendars a URL **slug** is derived automatically from the name; you can edit it. The slug becomes part of the public link, e.g. `/flowmattic-booking/discovery-call/`. ### Duration **Duration** is how long the meeting lasts, in minutes. You can pick a preset (15, 30, 45, 60) or enter a custom value. The duration also sets how time slots are spaced on the booking page — a 30-minute duration produces slots every 30 minutes within your available hours. ![bookings-event-details](https://assets.infidesk.support/kb/inline/2026/07/Tmk53t8VSmQqdIWpxmrqXBGlUu0Rj7ib35TCxQrl.png) ### Location **Location** is where the meeting happens. The four options are: - **Zoom** — generates a real Zoom meeting link for each booking. - **Google Meet** — generates a real Google Meet link for each booking (created through a Google Calendar event, so it works with any Google account). - **Phone call** — the invitee provides a phone number when booking, and you call them. - **In person** — the invitee provides the meeting address when booking. For **Zoom** or **Google Meet**, a second picker lets you choose which connected account hosts the meeting. The account must first be connected under **FlowMattic → Connects** (for Zoom you also need the Zoom integration installed). If no account is connected, the booking still goes through — it just won't have an auto-generated join link, and emails point the invitee to the booking page instead. ![The Location section of the calendar editor showing the Zoom / Google Meet / Phone call / In person options with the connected-account picker visible for Zoom.](https://assets.infidesk.support/kb/inline/2026/07/2QH2Te5bigJ2EyUu6VmsX8lvYkoQWE98K1f1kVBG.jpg) ## Availability The **Availability** section controls which dates and times are open for booking. There are two modes: ### Recurring weekly **Recurring weekly** is a rolling schedule that's always open within your booking window. Under **Weekly hours**, each day of the week (Sunday through Saturday) can be set to **Unavailable** or given one or more time windows. For each day you can: - **Add hours** — open a start–end window (e.g. 09:00–17:00). - **Add another window** — add a second block on the same day (e.g. 09:00–12:00 and 14:00–17:00), to model a lunch break. - **Copy hours to other days** — copy one day's windows onto other selected days, so you don't re-enter the same hours five times. By default a new calendar is open Monday to Friday, 09:00–17:00. ![The Weekly hours editor with several days set to 09:00–17:00, one day showing two windows, and the "Copy hours to other days" popup open](https://assets.infidesk.support/kb/inline/2026/07/FxSubdR6GgTQfym5vzbl39rlJPGIEWZSD4Pyt8ki.png) ### Specific dates **Specific dates** opens a single day or a fixed date range instead of a repeating weekly pattern — useful for a one-off event or a limited booking period. You pick the date(s) and a single start and end time that applies across them. ### Timezone **Timezone** is the time zone your availability is defined in. Set this to *your* time zone. On the public page, visitors can switch to their own time zone and the open slots are re-displayed in it automatically — so set yours and let theirs adapt. ## Buffers, notice, window and limits These settings (in the same area as Timezone) fine-tune which slots are actually offered: - **Buffer before** — minutes of padding added before each meeting, so a new booking can't start right up against an existing one. Slots that would overlap the buffer are hidden. - **Buffer after** — minutes of padding added after each meeting (for example, 15 minutes to write notes before the next call). - **Min. notice** — the minimum lead time, in hours, before a meeting can start. With 4 hours of notice, no slot less than 4 hours away is offered. Default is 4. - **Booking window** — how far into the future people can book, in days. Slots beyond this many days from today are not shown. Default is 60. - **Max per day** — the maximum number of bookings allowed on any single day. Once a day hits this limit, the whole day closes. Leave it blank (shown as "No limit") for unlimited. All of these are applied when the page computes open slots: it starts from your weekly/specific hours, removes times that conflict with existing bookings (padded by the buffers), removes times inside the minimum-notice window, removes anything past the booking window, and closes days that have hit the per-day cap. ![The settings row showing Timezone, Buffer before, Buffer after, Min. notice, Booking window, and Max per day fields filled in](https://assets.infidesk.support/kb/inline/2026/07/N9uSHOkKzQKvx2ysPP3Ayec854hAuUWROy8L76La.png) ## Invitee questions Under **Invitee questions** you decide what the booking form collects. The invitee's **Email address** is always required (it's locked on) so confirmation and calendar invites can be sent. The optional ones are: - **Phone number** — adds a phone field. (For a Phone call location this is required, since you need a number to call.) - **Notes** — adds a free-text "anything we should know" field. - **Guests** — lets the invitee add other guest email addresses. When on, a **maximum guests** chip lets you cap how many they can add. ![bookings-invitee-questions](https://assets.infidesk.support/kb/inline/2026/07/xvMxMFebn6w5MRgpJULeihR3HWBj22dlU9dxH8XO.png) ## Notifications & policies The **Notifications & policies** section controls automatic emails and what invitees can do after booking: - **Confirmation email** — sent to the invitee the moment they book (always on). - **Email reminders** — automatic reminder(s) before the meeting. - **Allow reschedule** — invitees can move their booking to a new time using a link in their email. - **Allow cancel** — invitees can cancel up to the minimum-notice period. Under **Booking emails**, you can override the email template used for any of this calendar's emails. By default each one inherits your account-wide template (set under FlowMattic → Settings → Bookings), and you can pick a different saved Email Template just for this calendar. ![bookings-notification-policies](https://assets.infidesk.support/kb/inline/2026/07/OmqqtLSENev0yJuioxcbPWpcVz0bBrxuBwLIU21I.png) ## Branding The **Branding** section makes the public page feel like yours. It includes a **Logo**, an **Accent color**, optional per-calendar **Host name** and **Host title**, a **Redirect after booking** option, and the **Show FlowMattic branding** toggle. These are covered in detail in the separate "Bookings public booking page" guide. ![bookings-branding](https://assets.infidesk.support/kb/inline/2026/07/DT4xZXySyKUKCcctmqSGUO8dWitVVPRclVLmOr4W.png) ## Saving and sharing Click **Save**. The editor gives you the calendar's public URL and the `[flowmattic_booking calendar="{slug}"]` shortcode to embed it. The full public-page experience is covered in the "Bookings public booking page" guide. ## The bookings dashboard Open a calendar and choose its **Bookings** view (the detail screen) to see and manage everything booked on it. At the top, summary stats show counts by status (such as **Confirmed**, **Completed** and **Cancelled**). A status filter lets you narrow the list, and a **Preview page** button opens the live public page. A booking moves through these statuses: **Confirmed** (or **Pending**), **Completed**, **Cancelled**, and **No-show**. Cancelled and no-show bookings free their time slot back up so others can book it. ### Calendar, List and Board views Three view buttons switch how bookings are displayed; your choice is remembered: - **Calendar** — a month grid with each booking shown on its day. - **List** — a sortable row-by-row list. Each row has a menu with quick actions. - **Board** — a Kanban-style board with columns by status (Completed, Cancelled, No-show, and so on). ![The booking detail screen showing the Calendar / List / Board view toggle, the status stat counters across the top, and the month calendar populated with bookings](https://assets.infidesk.support/kb/inline/2026/07/Mz4EBCrv5h5PVatFaiSlbXuuqtkh2RXQQrBoPGev.png). ### Managing a single booking Open any booking (or use the row menu in List view) to act on it. The available actions are: - **Reschedule** — move the booking to a different open date and time. The new slot is re-checked against your availability rules before it's accepted, so you can't double-book. You can choose whether to notify the attendee and add a custom message. - **Cancel booking** — cancel it; the slot reopens and a cancellation email can be sent. - **Mark completed** — record that the meeting happened. - **Mark no-show** — record that the invitee didn't show up. Each booking also keeps an **activity log** that records when it was booked, rescheduled, cancelled, completed, or noted — including notes and status changes made by workflows. ![A single booking's detail drawer showing the invitee details, the Reschedule / Complete / Mark as no-show / Cancel booking actions, and the activity log](https://assets.infidesk.support/kb/inline/2026/07/RQmWewJu2ZW5admT42EP2yaGBJwUjll6jCdjhv8E.png). ## How it helps you With one calendar set up you have a self-serve scheduling page on your own domain. The availability engine guarantees people can only book times you're actually free, respecting your buffers, notice, window and daily cap. Confirmation, reminder, reschedule and cancellation emails go out automatically, and every booking can kick off a FlowMattic workflow — so you can push attendees into a CRM, post to Slack, log to a Table, or anything else FlowMattic can automate. --- # Booking times look wrong or in the wrong timezone Source: https://support.flowmattic.com/kb/article/173/booking-times-look-wrong-or-in-the-wrong-timezone ## Symptom The times offered on the booking page, or the time shown on a confirmed booking, look wrong — an invitee reports a slot at an unexpected hour, or the times do not match your working hours. ## Cause A booking calendar has one **timezone**, and the public page lets each invitee switch to *their own* timezone. The displayed slots then convert automatically. Most "wrong time" reports come from a mismatch between how the calendar's timezone is set and how the times are being read. ## Fix **1. Set the calendar timezone to your own timezone.** In the calendar's **Availability** settings, set the **Timezone** to the timezone you defined your working hours in. Your hours (for example 09:00–17:00) are interpreted in that timezone, and the public page converts them for each invitee. ![The calendar's Availability settings with the Timezone field highlighted](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-bookings-availability-timezone.png) **2. Let invitees use the timezone switch.** On the public booking page there is a **Time zone** selector. An invitee in another region should set it to their own timezone; the slots then display in their local time while still mapping to your actual availability. A slot that "looks wrong" is often just being read in a different timezone than the invitee's. ![The public booking page's timezone selector, letting the invitee change the displayed timezone](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-bookings-booking-timezone.png) **3. Check the WordPress site timezone.** If every time is off by a consistent offset, confirm the WordPress site timezone (Settings → General) is correct, since scheduled emails and stored times reference it. ## How to confirm Open the public page and switch the timezone selector between your timezone and a test one. The same slot should shift by the correct offset in each — that confirms the conversion is working and the calendar timezone is set correctly. --- # Branch Module by FlowMattic Source: https://support.flowmattic.com/kb/article/102/branch-module-by-flowmattic The **Branch module** is a powerful workflow component in FlowMattic that allows you to create conditional paths within your workflows. It provides a simplified alternative to the Router module for scenarios where you need to execute different actions based on a single condition with Yes/No outcomes. ## Why Branch When We Have Router? While both modules handle conditional workflow execution, they serve different purposes and use cases: ### Router Module - **Multiple Routes**: Requires you to add conditions to each Route separately - **Complex Workflows**: Ideal for workflows with multiple conditional paths (3+ routes) - **Individual Route Conditions**: Each route must have its own condition evaluation - **Use Case**: Perfect for complex decision trees with multiple outcomes **Example Router Use Case:** ``` - Route A: If user role = "admin" → Execute admin tasks - Route B: If user role = "editor" → Execute editor tasks - Route C: If user role = "subscriber" → Execute subscriber tasks - Route D: Default → Execute guest tasks ``` ### Branch Module - **Binary Decision**: Evaluates single or multiple conditions with Yes/No outcomes - **Simplified Setup**: Define conditions only once for the entire branch - **Cleaner Workflows**: More readable and easier to understand - **Nested Support**: Can be nested for complex conditions - **Use Case**: Perfect for binary decisions and conditional logic **Example Branch Use Case:** ``` - Condition: Has user submitted X field in the form? - Yes Path → Continue to add the form to CRM - No Path → Email user to fill the required fields ``` ## How Branch Module Works ### 1. Condition Evaluation The Branch step evaluates a specified condition using the same Filter system as other FlowMattic modules. Based on the outcome: - **Conditions Meet** → Executes the **Yes path** - **Conditions Don't Meet** → Executes the **No path** ### 2. Path Execution Logic - **Yes Path**: When conditions are met, the workflow executes all steps in the Yes path - **No Path**: When conditions are not met, the workflow skips all Yes path steps and executes the No path - **Separate Paths**: Yes and No paths are completely independent - each path executes its own set of actions ### 3. Visual Structure ![Workflow Builder ‹ Branch module.png](/storage/kb-images/382ce135e6-inline.png) **Important**: Each branch path (Yes/No) is a separate execution flow. After executing either the Yes path or the No path, the workflow ends at that branch unless you have additional steps or branches after the current branch structure. ## Setting Up a Branch ### 1. Add Branch Step 1. Add new action step and choose the **Branch** module from the app library into your workflow 2. The system automatically creates: - Branch node (main condition) - Yes branch route - No branch route ### 2. Configure Branch Condition 1. Click on the Branch step to open settings 2. Set up your conditions for evaluation: - **Field**: Select the data field to evaluate - **Condition**: Choose comparison operator (equals, contains, greater than, etc.) - **Value**: Set the value to compare against - **Logic**: Choose AND/OR for multiple conditions ### 3. Add Steps to Paths 1. **Yes Path**: Add steps that should execute when conditions are met 2. **No Path**: Add steps that should execute when conditions are not met 3. Each step will automatically be connected to the appropriate path ## Examples and Use Cases ### Example 1: Lead Qualification for Sales Team ```markdown **Scenario**: Automatically qualify leads based on company size and route them appropriately **Branch Condition**: - Field: `{form.company_size}` - Condition: `greater than` - Value: `50` **Yes Path (Enterprise Lead)**: 1. Add to CRM with "Hot Lead" tag 2. Assign to Senior Sales Rep 3. Send personalized enterprise welcome email 4. Schedule automatic follow-up call 5. Add to enterprise nurture campaign **No Path (Small Business Lead)**: 1. Add to CRM with "SMB Lead" tag 2. Send automated product demo video 3. Add to self-service onboarding sequence 4. Send pricing information ``` ### Example 2: Order Value Processing ```markdown **Scenario**: Handle orders differently based on order value **Branch Condition**: - Field: `{webhook.order_total}` - Condition: `greater than` - Value: `100` **Yes Path (High Value Orders)**: 1. Apply VIP Processing 2. Assign Priority Support 3. Send Premium Thank You Email 4. Add to VIP Customer List **No Path (Standard Orders)**: 1. Standard Processing 2. Send Standard Confirmation 3. Add to Regular Customer List ``` ### Example 3: Customer Support Ticket Routing ```markdown **Scenario**: Route support tickets based on customer type and urgency **Primary Branch**: Is Premium Customer? ├── **Yes Path (Premium Customer)**: │ ├── Assign to dedicated account manager │ ├── Send priority support acknowledgment │ └── **Nested Branch**: Is Critical Issue? │ ├── **Yes Path**: │ │ ├── Create urgent ticket │ │ ├── Send SMS alert to support manager │ │ └── Start 1-hour response timer │ └── **No Path (Non-Critical)**: │ ├── Create standard priority ticket │ └── Send email with 4-hour response commitment └── **No Path (Regular Customer)**: ├── Assign to general support queue ├── Send auto-reply with FAQ links └── Create ticket with 24-hour response time Note: The nested branch only applies to premium customers, allowing for more refined handling of their issues. ``` ### Example 4: Error Handling ```markdown **Scenario**: Handle API response errors gracefully **Branch Condition**: - Field: `{api.status_code}` - Condition: `equals` - Value: `200` **Yes Path (Success)**: 1. Process API Data 2. Update Database 3. Send Success Notification **No Path (Error)**: 1. Log Error Details 2. Send Alert to Admin 3. Show User-Friendly Error Message 4. Retry Logic (if applicable) ``` ## Best Practices ### 1. When to Use Branch vs Router - **Use Branch when**: - You have a simple Yes/No decision - You want cleaner, more readable workflows - You need to evaluate a single condition - You're building binary logic flows - **Use Router when**: - You have 3+ different outcomes - Each path needs different conditions - You need complex multi-route logic - You're building complex decision trees ### 2. Condition Design - **Keep conditions simple**: Focus on single, clear conditions - **Use descriptive names**: Label your branches clearly - **Test thoroughly**: Verify both Yes and No paths work correctly - **Handle edge cases**: Consider what happens with null/empty values ### 3. Nesting Guidelines - **Limit nesting depth**: Keep to 2-3 levels maximum for readability - **Document complex logic**: Use clear naming for nested branches - **Consider alternatives**: Sometimes a Router might be cleaner than deeply nested branches ### 4. Error Prevention - **Always define both paths**: Ensure both Yes and No paths have appropriate actions - **Validate data**: Check that the data you're evaluating exists - **Default values**: Consider what happens when conditions can't be evaluated ## Advanced Features ### 1. Dynamic Conditions Use dynamic data in your branch conditions: ```markdown **Condition**: Compare user's current plan with target plan - Field: `{user.current_plan}` - Condition: `equals` - Value: `{webhook.target_plan}` ``` ### 2. Multiple Condition Logic Combine multiple conditions with AND/OR logic: ```markdown **Complex Condition**: User is premium AND order value > 50 - Condition 1: `{user.plan}` equals `premium` - Logic: `AND` - Condition 2: `{order.total}` greater than `50` ``` ### 3. Branch Data Access Access branch execution results in subsequent steps: ```markdown **Available Data**: - `{branch2.path_to_execute}` → Returns "yes" or "no" - `{branch2.condition_met}` → Returns true or false ``` ![Workflow Builder ‹ Branch example.png](/storage/kb-images/53af131ee8-inline.png) ## Troubleshooting ### Common Issues 1. **Wrong path executing**: Check that branch conditions are properly configured 2. **Conditions not evaluating**: Verify that the data fields exist and contain expected values 3. **Steps not executing**: Ensure steps are properly connected to the correct branch path 4. **Nested branches failing**: Check the logic flow and ensure parent branch conditions are met ### Debug Tips 1. **Test conditions**: Use the test feature to verify your conditions work as expected 2. **Check data**: Review the workflow execution logs to see actual data values 3. **Simplify first**: Start with simple conditions and add complexity gradually 4. **Use logging**: Add logging steps to track which path is being executed ## Migration from Router If you're migrating simple binary decisions from Router to Branch: 1. **Identify binary Router patterns**: Look for Routers with only 2 routes 2. **Extract the condition**: Take the condition from the first route 3. **Create Branch**: Replace Router with Branch using that condition 4. **Move steps**: Move Route 1 steps to Yes path, Route 2 steps to No path 5. **Test thoroughly**: Verify the new branch works the same as the original Router ## Conclusion The Branch module simplifies conditional workflow creation by providing a clean, intuitive way to handle Yes/No decisions. Use it to: - **Simplify workflows**: Replace complex Router setups for binary decisions - **Improve readability**: Make your workflows easier to understand and maintain - **Reduce complexity**: Minimize the number of conditional configurations needed - **Enhance maintenance**: Make it easier to update and modify conditional logic By choosing the right conditional module (Branch vs Router) for your specific use case, you can create more efficient, maintainable, and understandable workflows in FlowMattic. --- # Build FlowMattic Workflows from Claude Desktop, Cursor or Any MCP Client Source: https://support.flowmattic.com/kb/article/240/build-workflows-with-claude-desktop-cursor-mcp Your MCP client can do more than read data out of FlowMattic. With **Workflow Tools** switched on, Claude Desktop, Cursor, or any other MCP client can browse the apps installed on your site, look up what each one can actually do, then build a workflow, revise it, and test it — while you describe what you want in plain language. This guide covers turning it on, connecting a client, and what to expect once it is working. --- ## Before you start You need: - FlowMattic **7.2 or newer**, with the **MCP Server** module enabled - An MCP client — Claude Desktop, Cursor, Claude Code, or anything else that speaks MCP - An administrator login on the WordPress site --- ## Step 1: Turn on Workflow Tools These tools are **off by default**. A connected client can create, change and run automations on your site, so nothing is offered until you decide to allow it. Go to **FlowMattic → MCP Server** and click **Settings** on your server card. Under **Workflow Tools**, tick *Let connected AI clients build workflows*. ![The Workflow Tools setting in Server Settings](https://assets.infidesk.support/products/flowmattic/kb-images/mcp-workflow-tools/02-workflow-tools-toggle.png) Click **Save Settings**. The change takes effect on your client's next request — you do not need to reconnect. ![Server Settings with Workflow Tools enabled](https://assets.infidesk.support/products/flowmattic/kb-images/mcp-workflow-tools/03-workflow-tools-enabled.png) > **Leave this off if you only want your AI client reading data.** Your existing tools — the ones you have added for integrations, workflows or queries — keep working exactly as before either way. --- ## Step 2: Connect your client On the same screen, copy the **MCP Server URL**. ![The MCP Server URL and Connect button](https://assets.infidesk.support/products/flowmattic/kb-images/mcp-workflow-tools/04-connection-panel.png) **Claude Desktop and ChatGPT** handle authentication for you. Add the server URL as a connector and approve the login prompt when it appears. **Cursor, Claude Code and other clients** use the secret token instead. In **Server Settings → Authentication**, reveal the **Secret Token** and send it as the `X-FLOWMATTIC-MCP-TOKEN` header. A typical `mcp.json` entry looks like this: ```json { "mcpServers": { "flowmattic": { "url": "https://your-site.com/wp-json/flowmattic/v1/mcp-server/YOUR-SERVER-ID", "headers": { "X-FLOWMATTIC-MCP-TOKEN": "your-secret-token" } } } } ``` Replace the URL and token with the values from your own Server Settings. Some clients need `/sse` appended to the URL — the note under the URL field on the MCP Server screen tells you when. --- ## Step 3: Ask for a workflow Once connected, describe what you want. For example: > Build me a workflow in FlowMattic: when a webhook comes in with an order, wait two hours, then post the order ID to Slack. Your client will work through several tools to do this. It is worth knowing what they are, because you will see them being called: | Tool | What it does | |---|---| | `wf_list_trigger_apps` | Lists every app that can start a workflow | | `wf_list_action_apps` | Lists every app that can run as a step | | `wf_get_app_events` | Returns one app's real triggers and actions | | `wf_describe_special_nodes` | Explains Router and Filter structure | | `wf_validate_workflow` | Checks a draft without saving it | | `wf_create_workflow` | Saves a new workflow | | `wf_list_workflows` | Finds existing workflows by name | | `wf_get_workflow` | Reads one back so it can be edited | | `wf_update_workflow` | Revises a workflow in place | | `wf_test_run_workflow` | Runs it once and reports what each step did | The client picks apps and events from your site's real catalogue rather than guessing, which is why it usually calls two or three of these before writing anything. When it finishes you get a workflow ID and a link straight into the builder. --- ## Step 4: Review it before switching it on **Every workflow created this way is saved switched off.** Nothing runs until you open it and turn it on yourself. Open the edit link and check: - **The step fields.** The client sets what it can from your description, but connection-specific fields — which Slack channel, which mailing list, which account — are yours to pick. - **The trigger.** If it is a webhook, copy the URL from the trigger step and point your source at it. - **Router conditions**, if your workflow branches. Confirm each route's condition matches what you meant. Then switch it on. --- ## Revising a workflow You do not need to start over to change something. Ask for the change and name the workflow: > In the "New order alert" workflow, change the delay from two hours to thirty minutes. The client finds it, reads the current version, edits it, and writes it back to the **same** workflow. It keeps its ID, its webhook URL and its authentication key, so anything already posting to that URL keeps working. A revision that fails validation changes nothing at all. --- ## Testing a workflow You can ask for a test run: > Test that workflow with order ID 1234 and a gold tier customer. You get back what every step sent and what it received, which is usually enough to spot a wrong field or a condition that never matches. > **A test run really executes.** Emails are sent, APIs are called, records are written. It is not a simulation. A workflow that is switched off still runs for the test, which is the point — you can check it before it goes live — but use real care on workflows that touch customers. --- ## Frequently asked questions **Do I need an OpenAI or Anthropic key in FlowMattic for this?** No. That is what "Generate with AI" in the workflow builder uses. Here the thinking happens in the client you have already connected, so FlowMattic needs no AI provider and no Connect. **Can the AI switch a workflow on?** No. Workflows are always saved switched off, and nothing in these tools turns one on. That stays a decision you make in the builder. **Can it change my existing workflows?** Only if it can find them, and only while Workflow Tools is on. It can list and read workflows on the site and revise them by ID. If that is more than you want, leave the setting off and use your own tools instead. **Which workflows can it edit?** Ones built with the v2 builder. Older v1 workflows can be listed, but not read or revised through these tools. **It built a Router but the branch never runs.** Check the branch's condition. The field in a route condition must be written as a token in braces — `{webhook1.email}`, not `webhook1.email`. Written without braces it is compared as plain text and never matches. **Do these tools work with my existing MCP tools?** Yes. They are added alongside whatever you have already configured; nothing else changes. --- ## Turning it back off Go to **FlowMattic → MCP Server → Settings** and untick *Let connected AI clients build workflows*. The tools disappear from your client on its next request. Workflows already created stay exactly as they are. --- # Bulk-generate images with the Iterator Source: https://support.flowmattic.com/kb/article/175/bulk-generate-images-with-the-iterator To produce many images from one template — a batch of coupons, a personalised card per signup, a ticket per attendee — place the **Generate Image from Template** action inside an **Iterator** step. Each pass through the loop renders a separate PNG with its own file and attachment. ## Step 1 — Get a list to loop over Your workflow needs an array to iterate. This might come from a query step (a FlowMattic Table lookup, a database query, an API response) or from a trigger that provides multiple items. Each item should contain the values a single image needs — for example a name and a unique URL. ## Step 2 — Add an Iterator step 1. Add an **Iterator** step to the workflow. 2. Set its **Iteration Array** field to the array from the previous step. The Iterator runs the steps inside it once per item, exposing the current item's fields to those steps. ![An Iterator step with its Iteration Array field set to an array from an earlier step](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-image-template-wf-iterator-array.png) ## Step 3 — Add Generate Image inside the loop 1. Inside the Iterator, add **Image Builder → Generate Image from Template**. 2. Select your template in the **Image Template** dropdown. 3. Map each token to the **current item's** fields, not the whole list — for example map `attendee_name` to the item's name and `ticket_url` to the item's link. 4. Set an **Output Filename** that includes a unique field, such as `ticket-{item.id}.png`, so files do not overwrite each other. ![The Generate Image action inside the Iterator, with its token fields mapped to the loop's current-item variables](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-image-template-wf-iterator-image-action.png) ## Step 4 — Use each rendered image Each iteration returns its own rendered image — its URL, file path, and attachment ID. Add steps inside the loop to act on the current image — email it to the current attendee, upload it, or store its URL against the record. ## Performance note Each render runs through Cloudflare Browser Rendering and takes a few seconds. For large lists this adds up, so factor the total time into any workflow that renders images in bulk, and be mindful of your Cloudflare render quota. --- # Changing the Email Address on Your FlowMattic Account Source: https://support.flowmattic.com/kb/article/153/changing-the-email-address-on-your-flowmattic-account Your email address is the identity your FlowMattic license is tied to — it's where your license key, renewal notices, and account communications are sent. Because of that, FlowMattic does not let you change the email on your account directly from the dashboard. This guide explains why, what our policy allows, and how to request a change. ## Why email changes aren't self-service Every FlowMattic license is bound to a single account email. If that email could be changed freely, the same license could end up associated with multiple identities — which leads to license conflicts, duplicate or orphaned activations, and renewal or support records that no longer match the right person. To keep every license cleanly tied to one verified owner, email changes are handled by our support team rather than through self-service. This protects you — your license stays valid and recoverable — and keeps our records accurate. ## Our email change policy We do allow email changes, within limits that keep accounts secure and prevent abuse: - **Lifetime license holders** can change their account email **once** for the lifetime of the license. - **Annual license holders** can change their account email **once per year**. These limits apply per account. If you have a genuine reason that falls outside the policy — for example, a company domain change or a typo in your original purchase email — reach out and explain the situation, and we'll do our best to help. ## How to request an email change Since the change can't be made from your dashboard, our support team handles it for you: 1. Contact FlowMattic support — open a ticket from the [support portal](https://support.flowmattic.com), or reply to any existing ticket. 2. Tell us the **current email** on your account and the **new email** you'd like to use. 3. Verify ownership of the account (see below). 4. Once we confirm your details and that the change is within policy, we'll update your account and confirm by email to the new address. ## What to include in your request To verify that you own the account and to process the change quickly, please include: - Your **current account email** - The **new email address** you want to switch to - Your **order ID or purchase receipt**, or your **license key** Sending the request from your current account email, where possible, helps us verify ownership faster. ## Frequently asked **Can I change my email myself from the dashboard?** No. Email changes are handled by our support team to keep every license tied to one verified owner and to avoid license conflicts. **How many times can I change my email?** Lifetime license holders can change it once for the life of the license. Annual license holders can change it once per year. **Will changing my email affect my license or active sites?** No. Your license, activations, and renewal date stay exactly as they are — only the email associated with the account changes. **I entered the wrong email when I purchased. Does that count against my limit?** Contact us and explain — we handle genuine correction requests reasonably and won't penalize an honest typo. --- # Choose fonts for a PDF template Source: https://support.flowmattic.com/kb/article/203/choose-fonts-for-a-pdf-template The PDF Template Builder does not upload custom font files. Instead it ships with a curated set of Google Fonts whose files are bundled with the plugin, and you choose which ones the document uses. Because the files are bundled, the same font renders identically whether the PDF is produced by Cloudflare Browser Rendering or the mPDF fallback engine. ## Available fonts The catalog is grouped into Sans serif, Serif, and Monospace. It includes Inter, Roboto, Open Sans, Lato, Poppins, Montserrat, Work Sans, Nunito, Raleway, and Oswald (sans serif); Playfair Display, Merriweather, Lora, PT Serif, and IBM Plex Serif (serif); and IBM Plex Mono, JetBrains Mono, Fira Code, and Source Code Pro (monospace). Every one is bundled, so it is safe to use in either rendering engine. ## Set the document's fonts Fonts are set for the whole document, not per element. Each element uses one of three roles — body text, headings, or monospace — and you assign a font to each role: 1. Open your template in **FlowMattic → PDF Templates**. 2. Open **Page settings** in the right-hand **Inspector** (shown when no element is selected). 3. In the **Fonts** section, set the three dropdowns: - **Body** — used for body text, tables, addresses, and most of the page. - **Heading** — used for headings, subheadings, and graph titles. - **Mono** — used for code-style labels and barcode captions. ![The Page settings Fonts section with the Body, Heading, and Mono dropdowns](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-pdf-template-builder-pdf-page-fonts.png) ## Adjust size, weight, and colour The font *family* comes from the three roles above. To change size, weight, colour, line height, or letter-spacing, use the **Default Typography** section in Page settings for document-wide defaults, or select an element and adjust its typography in the Inspector. ## Why pick from the bundled list Only the bundled fonts have font files to embed. If a template referenced a font that is not bundled, the mPDF engine would have no file for it and would substitute the nearest available face, so the output would no longer match your design. Staying within the bundled catalog guarantees the PDF looks the same in the editor, through Cloudflare, and through mPDF. ![The invoice previewed with the chosen Heading (Playfair Display) and Body (Inter) fonts applied](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-pdf-template-builder-pdf-fonts-rendered.png) --- # Collect leads and schedule meetings from your chatbot Source: https://support.flowmattic.com/kb/article/219/collect-leads-and-schedule-meetings-from-your-chatbot Your AI Assistant can do more than answer questions: it can collect contact details and let visitors pick a meeting slot without leaving the chat. Both are configured when you edit an assistant at **FlowMattic → AI Assistants**, on the **Actions** tab. **Read this first, before you turn lead collection on:** FlowMattic does **not** store captured leads. There is no leads table and no leads screen in the admin. A captured lead is sent straight to a workflow or a webhook and is not saved anywhere else — so **if you have not connected one, the lead is gone.** Set up the routing described at the end of this article *before* you start collecting. ![The Actions tab of an AI Assistant, showing the Event dropdown and the Collect Leads, Link Button and Schedule Meeting sections](https://assets.infidesk.support/products/flowmattic/kb-images/v70/219-chatbot-leads.png) ## Collecting leads Turn on **Enable lead collection** and choose how it behaves. ### Style - **Embedded Form** — a small static form appears in the chat with your fields. - **Chat messages** — the assistant asks for the details naturally in conversation. ### When to ask - **At the beginning** — before the conversation starts. - **After a few messages** — once the visitor is engaged. - **When keywords are used** — you supply the keywords. - **When chatbot cannot answer** — a good fallback: hand off to a human instead of dead-ending. **Cadence** controls whether the assistant asks for everything **All at once** or **One at a time**. ### Your form **Form Title** and **Form Description** default to "Let's get started" and "Please share your details to begin". Change them to suit the offer. Under **Fields**, add the details you want with a label, a type and whether it is required. Types available: **Text, Email, Phone, Number, Date, Link and Textarea**. A new assistant starts with **Name** and **Email**, both required. Required fields are enforced, and email fields are checked for a valid address. Phone fields render a telephone input but are not format-checked, so international numbers arrive as typed. **An important limitation of "Chat messages" style:** conversational capture always collects **first name, last name and email only**. Your custom Fields list applies to the **Embedded Form** style only. If you need a company name or a phone number, use the embedded form. Once a visitor has given their details, the assistant remembers and will not ask again in that conversation. ## Scheduling meetings Turn on **Enable meeting scheduling**. There are two quite different modes, and which one you get depends on a single field. ### Mode 1: your existing booking tool (recommended) Paste a **Calendar Embed URL** — a Calendly, Cal.com or Google Calendar booking link. The assistant then shows a "Schedule a Meeting" button that opens your real booking page inside the chat. This is the better option for most people, because your existing tool already handles availability, timezones, reminders and confirmation emails. **Note:** because the booking is completed inside your provider's page, FlowMattic never sees it. **No meeting event reaches your workflows in this mode** — your booking tool sends the confirmations, as it normally would. ### Mode 2: the built-in slot picker Leave **Calendar Embed URL** empty and the assistant shows its own small calendar plus a list of **Available Time Slots** (9:00 AM to 5:00 PM in 30-minute steps by default, which you can edit). The visitor picks a date and time and gives their name and email. Be clear-eyed about what this is: **a slot picker, not a booking system.** It does not check whether you are actually free, does not handle timezones, does not prevent two people choosing the same slot, and does not send a confirmation email. Everything beyond capturing the request is up to the workflow you connect. If you want real scheduling with availability rules and confirmations, use the [FlowMattic Bookings module](/kb/bookings) and paste your booking page link as the Calendar Embed URL. **The chatbot's meeting feature does not read your Bookings calendars automatically** — the two are separate. ### When to show it **When to show calendar** is either **Always show in chat** or **When certain keywords are used** (default keywords: meeting, schedule, call, book, appointment). ## Routing leads and meetings into a workflow This is the part that makes the data useful — and the part that is easy to miss. **Use the "FlowMattic Chatbot" trigger app in the Workflow Builder.** Create a workflow, choose **FlowMattic Chatbot** as the trigger, and pick the event: - **Lead Captured** - **Meeting Scheduled** - **AI Response Received** - **Chat Started** - **Link Button Clicked** Then do whatever you need with it — add the person to your CRM, send yourself an email, write a row to a table, notify Slack. **A point of confusion worth getting straight.** The Actions tab has two different things on it. The **Collect Leads** and **Schedule Meeting** sections are where you turn those features on — that is where you have been working. Further down, there is a separate **workflow/webhook trigger** section with an Event dropdown, and that dropdown offers only **Chatbot Response Generated** and **Chat Started**. Lead Captured and Meeting Scheduled are **not** in it. So configure the features on the Actions tab, but route their data using the FlowMattic Chatbot trigger app in the Workflow Builder, not that dropdown. ### What the workflow receives Every event includes the conversation context: the visitor's latest message, the assistant's latest reply, the thread and chatbot IDs, and — if the visitor is logged in — their user ID and email. **Lead Captured** adds the submitted fields, keyed by your field labels. **Meeting Scheduled** adds the meeting details, plus ready-to-map fields so you do not have to parse anything: `meeting_date`, `meeting_time`, `meeting_datetime`, `meeting_date_ymd`, `booker_name` and `booker_email`. ## Troubleshooting **Leads are being captured but nothing happens.** Check that the connected workflow is switched **on** — a workflow that is off is skipped silently. **A webhook is not receiving anything.** Webhook calls are sent without waiting for a response and are not retried, so a failing endpoint fails quietly with nothing shown in the chat. Test the URL independently before relying on it. **The assistant never offers the form or calendar.** Both are offered by the AI when it judges them relevant, so results vary with the model and the conversation. Make the trigger explicit — use keyword triggers, or "At the beginning" for leads — rather than relying on the assistant to decide. **It asks for details but not the meeting.** Lead collection deliberately comes first; the assistant will not offer the calendar while it still needs contact details. **The assistant misreads a word as a booking request.** Keyword triggers match words like "book", which can appear in unrelated sentences. Choose distinctive keywords such as "schedule a call" rather than single common words. ## Related - [How to Set Up Your AI Assistant Chatbot in FlowMattic](/kb/ai-assistant-setup-guide) - [Customize your chatbot's appearance](/kb/customize-your-chatbots-appearance) - [Managing Content Sources for Your AI Assistant Chatbot](/kb/ai-assistant-content-sources) --- # Complete Guide: Integrating Calendly with FlowMattic Connects Source: https://support.flowmattic.com/kb/article/97/complete-guide-integrating-calendly-with-flowmattic-connects This guide will walk you through the process of creating a Calendly OAuth application and connecting it with FlowMattic Connects, enabling you to automate your Calendly workflows within WordPress. The integration allows FlowMattic to interact with your Calendly account programmatically, opening up possibilities for automated scheduling, event management, and data synchronization. ## Prerequisites Before beginning this integration, ensure you have: - A Calendly account with appropriate permissions to create OAuth applications - Access to your WordPress dashboard with FlowMattic installed and activated - Administrative privileges in both systems ## Part 1: Creating Your Calendly OAuth Application The first phase involves setting up an OAuth application in Calendly's developer console. OAuth (Open Authorization) is a secure protocol that allows FlowMattic to access your Calendly data without storing your password directly. ### Step 1: Access the Calendly Developer Console Navigate to the Calendly developer console at [https://developer.calendly.com/console/apps](https://developer.calendly.com/console/apps). You'll need to log in with your Calendly credentials if you haven't already. This console is where Calendly allows third-party applications to register for API access. ### Step 2: Create a New OAuth Application Once in the developer console, look for the option to create a new app. You'll be presented with a form that requires several important pieces of information. ![Calendly OAuth App Creation Form - Step 1](/storage/kb-images/4518abfa94-inline.png) **Configuring Your Application Details:** For the **Name of app** field, choose something descriptive that will help you identify this connection later. "FlowMattic Integration" works well, but you might want to be more specific if you plan to create multiple integrations. When selecting the **Kind of app**, choose "Web" since FlowMattic operates as a web-based service. The "Native" option is intended for desktop or mobile applications, which doesn't apply to our WordPress-based integration. For the **Environment type**, select "Production" if you're setting up a live integration. The "Sandbox" option is useful for testing but won't work with real Calendly data, so production is typically the right choice for FlowMattic integrations. The **Redirect URI** is crucial - this is where Calendly will send users after they authorize your application. Enter exactly: `https://api.flowmattic.com/calendly` This URI is specifically configured by FlowMattic to handle the OAuth callback process. Any typo here will cause the authentication to fail, so double-check this entry carefully. ### Step 3: Save and Retrieve Your Credentials After clicking "Save & Continue", Calendly will generate your application and provide you with essential credentials. ![Calendly OAuth Credentials - Step 2](/storage/kb-images/6aad43dad2-inline.png) You'll see three important pieces of information: 1. **Client ID**: This is your application's public identifier. Think of it as your app's username that identifies it to Calendly. 2. **Client Secret**: This is your application's private key - treat it like a password. Never share this publicly or commit it to version control. FlowMattic will store this securely encrypted in your WordPress database. 3. **Webhook Signing Key**: While not needed for basic OAuth integration, this key is used to verify that webhook notifications genuinely come from Calendly if you plan to use real-time event notifications later. Copy both the Client ID and Client Secret immediately, as the Client Secret won't be shown again after you leave this page. If you lose it, you'll need to generate a new one, which will invalidate the old secret. ## Part 2: Configuring FlowMattic Connects Now that your Calendly application is ready, we'll configure FlowMattic to use these credentials to establish a connection. ### Step 4: Access FlowMattic Connects In your WordPress admin dashboard, navigate to FlowMattic → Connects. This section manages all your external service integrations. ![FlowMattic Connects Dashboard](/storage/kb-images/b319109a03-inline.png) The Connects feature in FlowMattic serves as a centralized authentication manager. It stores your API credentials securely and handles the OAuth flow, so you don't need to manage tokens manually or worry about token refresh cycles. ### Step 5: Add Calendly Integration Click the "Connect Integration" button (highlighted with the arrow in the screenshot). This opens the integration selection modal. ![Integration Selection Modal](/storage/kb-images/65a3d960c8-inline.png) In the search field or by scrolling through the available integrations, locate and click on "Calendly". FlowMattic supports numerous integrations, so you might find it faster to use the search function at the top of the modal. ### Step 6: Configure the Calendly Connection You'll now see the Calendly connection configuration form. ![Calendly Connection Configuration](/storage/kb-images/25f0eec411-inline.png) Let's understand each field: **Connect Name**: This helps you identify the connection, especially useful if you manage multiple Calendly accounts. Keep the default "Calendly" or customize it to something like "Main Calendly Account" or "Team Scheduling Account". **Callback URL**: This field is pre-filled with `https://api.flowmattic.com/calendly` and should match exactly what you entered in the Calendly developer console. This field is typically locked to prevent accidental changes. **Client ID**: Paste the Client ID you copied from the Calendly developer console. This tells Calendly which application is requesting access. **Client Secret**: Paste the Client Secret here. FlowMattic will encrypt this before storing it in your database for security. After entering both credentials, click "Save Connect & Authenticate". This button performs two actions: it saves your credentials locally and initiates the OAuth authorization flow with Calendly. ### Step 7: Authorize FlowMattic to Access Your Calendly Account After saving, you'll be redirected to Calendly's authorization page. ![Calendly Authorization Page](/storage/kb-images/badd9054ff-inline.png) This page is hosted by Calendly, not FlowMattic, which is an important security feature of OAuth. Here, Calendly asks you to confirm that you want to allow "FlowMattic Integration" (or whatever you named your app) to access your account and manage your Calendly events. Review the permissions being requested - these typically include reading and writing calendar events, accessing user information, and managing scheduling links. Click "Connect to Calendly" to grant these permissions. After authorization, Calendly will redirect you back to FlowMattic with an authorization code. FlowMattic automatically exchanges this code for access tokens behind the scenes, completing the connection setup. ## Part 3: Using Your Calendly Connection in Workflows With the connection established, you can now use Calendly actions and triggers in your FlowMattic workflows. ### Step 8: Create or Edit a Workflow Navigate to FlowMattic → Workflows and either create a new workflow or edit an existing one where you want to add Calendly functionality. ### Step 9: Add a Calendly Action When adding an action step to your workflow, select Calendly as the application. You'll see various action options like "Create One-Off Meeting", "Cancel Event", "Get Event", and more. ![Calendly Action Configuration](/storage/kb-images/c637924b23-inline.png) Notice the "Choose Connect Account" dropdown. This is where your previously configured connection appears. Select your Calendly connection from the dropdown (it will show as "Calendly" with an ID number, like "ID: 208" in the example). The connection you select here determines which Calendly account the action will interact with. This separation between connection management and workflow configuration means you can easily switch between different Calendly accounts without re-entering credentials, and multiple workflows can share the same connection. ## Troubleshooting Common Issues If you encounter problems during setup, here are the most common issues and their solutions: **Authentication Fails**: Double-check that the Redirect URI in your Calendly app settings exactly matches `https://api.flowmattic.com/calendly`. Even a small difference like http vs https or a trailing slash will cause failure. **Connection Appears But Doesn't Work**: This often indicates the Client Secret was copied incorrectly. Try deleting the connection in FlowMattic Connects and recreating it, carefully copying the credentials again. **Permissions Error**: Ensure your Calendly account has the necessary permissions. Some Calendly features require specific subscription levels. ## Security Best Practices Protecting your integration is crucial for maintaining the security of both your WordPress site and Calendly account: 1. **Regularly rotate your Client Secret**: Consider updating your Client Secret periodically through the Calendly developer console, then updating the connection in FlowMattic. 2. **Monitor usage**: Check your Calendly developer console periodically to review API usage and ensure there's no unexpected activity. 3. **Limit access**: Only give WordPress administrator access to users who need to manage these integrations. 4. **Use HTTPS**: Ensure your WordPress site uses HTTPS to encrypt all communication between your server and external services. ## Next Steps With your Calendly integration complete, you can now: - Create automated workflows that schedule meetings based on form submissions - Sync Calendly events with other systems like CRMs or email marketing platforms - Send custom notifications when meetings are booked or cancelled - Generate reports on meeting patterns and scheduling efficiency The connection you've established serves as the foundation for all these automations, handling the complex authentication process so you can focus on building powerful workflows that save time and reduce manual work in your scheduling processes. --- # Complete Guide: WooCommerce Abandoned Cart Recovery with FlowMattic Source: https://support.flowmattic.com/kb/article/106/complete-guide-woocommerce-abandoned-cart-recovery-with-flowmattic ## **The Ultimate Guide to Recovering Lost Sales and Increasing Your Revenue** Transform abandoned carts into completed sales with FlowMattic's powerful automation. This guide covers everything you need to know to set up, test, and optimize your abandoned cart recovery system. --- ### What You'll Need Before Starting ✅ **FlowMattic Plugin** - Installed and activated ✅ **WooCommerce Plugin** - Installed and activated ✅ **At least one product** in your store ✅ **Email service** configured (Gmail, SMTP, or any email provider) ✅ **10 minutes** to follow this guide > **Important:** No coding or technical knowledge required. Everything is done through easy-to-use menus! --- ### Part 1: Understanding Abandoned Cart Recovery #### What is Cart Abandonment? When a customer adds items to their cart but leaves your store without completing the purchase, that's cart abandonment. Studies show that 70% of online shoppers abandon their carts! #### How FlowMattic Helps FlowMattic automatically: - **Detects** when customers abandon their carts - **Tracks** their cart contents and contact information - **Triggers** your recovery workflows - **Sends** personalized recovery emails with discount coupons - **Monitors** cart status (abandoned, recovered, or completed) #### Available Features 1. **Cart Abandonment Detection** - Automatically detects abandoned carts 2. **Recovery Email Sending** - Send beautiful recovery emails 3. **Discount Coupon Creation** - Generate attractive offers 4. **Cart Status Checking** - Monitor cart recovery progress 5. **Customer Data Capture** - Collect valuable customer insights --- ### Part 2: Setting Up Your First Abandoned Cart Recovery Workflow #### Step 1: Create Your Recovery Workflow 1. **Go to FlowMattic** - In your WordPress admin, click **FlowMattic** → **Workflows** - Click **"Add New Workflow"** 2. **Name Your Workflow** - Enter: `"Abandoned Cart Recovery - 30 Minutes"` - This helps you identify the workflow later 3. **Set Up the Trigger** - **Choose Application:** Select **"WooCommerce"** - **Choose Trigger:** Select **"New Cart Abandonment"** - **Save** your trigger #### Step 2: Add Recovery Actions ##### Option A: Send Recovery Email (Recommended for Beginners) 1. **Add Email Action** - Click **"Add Step"** - **Choose Application:** Select **"Email"** - **Choose Action:** Select **"Send Email"** 2. **Configure Your Recovery Email** - **To:** Use `{customer_email}` (this gets the customer's email automatically) - **Subject:** `"Don't forget your items! Complete your order now"` - **Email Content:** Use this template: ``` Hi {first_name}, You left some amazing items in your cart! Don't let them get away. 🛒 Your Cart Details: • Total Value: ${cart_total} • Items: {cart_items} Complete your order now and get these items before they're gone! 👉 [Complete My Order]({recovery_url}) Need help? Reply to this email and we'll assist you right away. Best regards, Your Store Team ``` 3. **Save** your email action ##### Option B: Send Email with Discount Coupon (Advanced) 1. **First, Create a Coupon** - Add another step - **Choose Application:** Select **"WooCommerce"** - **Choose Action:** Select **"Create Coupon"** - **Configure Coupon:** - **Coupon Code:** `SAVE10-{workflow_id}` - **Discount Type:** Select **"Percentage"** - **Coupon Amount:** `10` - **Expiry Days:** `7` - **Save** the coupon action 2. **Then, Send Email with Coupon** - Add another step for **Email** - **Email Content:** Include the coupon: ``` Hi {first_name}, We noticed you left some items in your cart. Here's a special 10% discount to complete your order! 🎉 Your Exclusive Coupon: {coupon_code} 🛒 Your Cart: ${cart_total} Items: {cart_items} 👉 [Complete Order with 10% Off]({recovery_url}) This offer expires in 7 days, so don't wait! Happy Shopping! ``` #### Step 3: Activate Your Workflow 1. **Save Your Workflow** - Click the save button 2. **Turn On Your Workflow** - Toggle the switch to **"Active"** 3. **Done!** Your abandoned cart recovery is now live --- ### Part 3: Testing Your Setup (5-Minute Test) **Important:** For testing, temporarily change your abandonment threshold to 5 minutes so you don't have to wait 30 minutes. #### Quick Test Setup 1. **Adjust Threshold for Testing** - Go to **FlowMattic** → **Settings** → **WooCommerce** - Change **"Cart Abandonment Threshold"** to **5 minutes** - **Save** settings 2. **Test Your Workflow** - Open your store in a new browser tab - **Add a product to cart** - Go to **checkout page** and **enter your email address** - **Leave the page** without completing the purchase - **Wait 5 minutes** - **Check your email** for the recovery message 3. **Capture Response Data** - In FlowMattic, go to your workflow - Click **"Capture Response"** - **Complete the test** (add to cart, enter email, abandon) - The system will capture real data for you to use 4. **Reset Threshold** - **Don't forget** to change the threshold back to **30 minutes** after testing for optimal results. You can customize this threshold based on your business needs - some stores use 15 minutes for faster recovery, while others prefer 60 minutes for customers who take longer to decide. Experiment to find what works best for your audience! #### What Should Happen During Testing ✅ **Email received** within 5 minutes ✅ **Customer email** populated correctly ✅ **Cart total** showing the right amount ✅ **Recovery URL** works and restores the cart ✅ **Coupon code** works (if you added the coupon action) #### Available Cart Variables When creating your email templates, you can use these dynamic variables: - **`{first_name}`** - Customer's first name - **`{last_name}`** - Customer's last name - **`{customer_name}`** - Customer's full name - **`{customer_email}`** - Customer's email address - **`{cart_items}`** - Complete list of cart items with details - **`{cart_total}`** - Total cart value (including currency) - **`{cart_url}`** - Direct link to cart page - **`{recovery_url}`** - Special recovery link that restores the cart - **`{coupon_code}`** - Coupon code (when using Create Coupon action) These variables works best in all - FlowMattic Email Templates and in your custom email content while sending an email with custom content with Send Abandoned Cart Email action. --- ### Part 4: Advanced Workflows and Strategies #### Sequential Recovery Emails Create a single workflow with timed delays for progressive recovery: **Single Workflow with Sequential Steps:** 1. **Trigger: Cart Abandonment (30 minutes)** - Automatically starts when cart is abandoned 2. **Step 1: First Reminder Email** - **Subject:** "Did you forget something?" - **Content:** Gentle reminder with cart contents - **Tone:** Helpful, non-pushy 3. **Step 2: Delay Action (24 hours)** - **Choose Application:** Select **"Delay"** - **Delay Duration:** Set to **24 hours** 4. **Step 3: Second Reminder Email** - **Subject:** "Last chance for your items!" - **Content:** Add urgency + 5% discount coupon - **Tone:** More urgent, includes incentive 5. **Step 4: Delay Action (48 hours)** - **Choose Application:** Select **"Delay"** - **Delay Duration:** Set to **48 hours** (total 72 hours from start) 6. **Step 5: Final Attempt Email** - **Subject:** "We'll miss you! Here's 15% off" - **Content:** Strong discount + limited time offer - **Tone:** Final opportunity with best offer **Timeline Example:** - **Cart abandoned:** 2:00 PM Monday - **First email sent:** 2:30 PM Monday (30 min after abandonment) - **Second email sent:** 2:30 PM Tuesday (24 hours later) - **Final email sent:** 2:30 PM Thursday (48 hours after second email) **Pro Tips for Sequential Recovery:** - **Add Conditions:** Use "Check Cart Status" before each email to avoid sending to completed carts - **Escalating Incentives:** Start with no discount, then 5%, then 15% - **Progressive Urgency:** Increase urgency in tone and messaging with each email - **Stop on Success:** The workflow automatically stops if the customer completes their purchase This approach is much more efficient than managing multiple separate workflows and ensures a cohesive customer experience with progressively compelling offers. #### Cart Value-Based Recovery **High-Value Carts ($100+)** - Immediate personal attention - Phone call follow-up - WhatsApp follow-ups - Higher discount percentages **Low-Value Carts (Under $50)** - Standard email sequence - Free shipping offers - Product recommendations --- ### Part 5: Using Cart Status Checking Monitor your recovery success with the **Check Cart Status** action. #### How to Add Cart Status Monitoring 1. **Add Status Check Action** - In any workflow with Cart Abandonment trigger, add a new step - **Choose Application:** **"WooCommerce"** - **Choose Action:** **"Check Cart Status"** - **Cart ID:** Use `{cart_id}` from your trigger 2. **What You'll Get** - **Current Status:** abandoned, recovered, or active - **Cart Contents:** All product details - **Customer Information:** Email, name, contact details - **Timing Data:** When abandoned, last activity - **Recovery Information:** If and when recovered 3. **Use Cases for Status Checking** - **Avoid Duplicate Emails:** Don't send if already recovered - **Analytics Tracking:** Monitor recovery rates - **Conditional Logic:** Different actions based on status - **Customer Service:** Quick cart lookup for support --- ### Part 6: Email Best Practices #### Subject Line Tips ✅ **Good:** "Your cart is waiting for you!" ✅ **Good:** "Complete your order + get 10% off" ✅ **Good:** "Don't miss out on these items" ❌ **Avoid:** "URGENT!!! BUY NOW!!!" ❌ **Avoid:** "You abandoned your cart" #### Email Content Guidelines **Start with Personalization** - Use `{first_name}` or `{customer_email}` - Reference specific products they viewed with `{cart_items}` **Create Urgency (But Don't Overdo It)** - "Limited time offer" - "Only 3 left in stock" - "Sale ends tomorrow" **Make it Easy** - Clear call-to-action buttons - Direct links to cart: `{recovery_url}` - Simple, clean design **Add Value** - Customer reviews - Free shipping offers - Related product suggestions #### Mobile-Friendly Tips - Short subject lines (under 50 characters) - Large, clickable buttons - Concise, scannable content - Test on different devices --- ### Part 7: Creating Effective Discount Strategies #### Discount Types That Work **Percentage Discounts** - 10% for first-time customers - 15% for returning customers - 20% for high-value carts **Fixed Amount Discounts** - $5 off orders over $50 - $10 off orders over $100 - $25 off orders over $200 **Free Shipping** - Very effective for low-margin products - Great for international customers - Combine with minimum order amounts **Buy One Get One (BOGO)** - Perfect for inventory clearance - Increases average order value - Creates excitement #### Coupon Best Practices **Expiration Dates** - 7 days: Creates urgency - 14 days: Gives flexibility - 30 days: For high-consideration purchases **Usage Limits** - One per customer: Prevents abuse - Limited quantity: Creates scarcity - Minimum order amounts: Protects margins **Coupon Codes** - Keep them simple: SAVE10, WELCOME15 - Make them memorable: COMEBACK20 - Use auto-generation: `SAVE10-{workflow_id}` --- ### ❓ Frequently Asked Questions (FAQ) #### General Setup Questions **Q: Do I need any coding knowledge to set up abandoned cart recovery?** A: No! FlowMattic's visual workflow builder makes it easy for anyone to set up cart recovery without any coding. **Q: How long does it take to set up?** A: About 10-15 minutes for a basic recovery workflow. Advanced setups with multiple emails might take 30-45 minutes. **Q: Will this work with my theme?** A: Yes! The abandoned cart functionality works with any WordPress theme that supports WooCommerce. **Q: Does this slow down my website?** A: No. FlowMattic runs in the background and doesn't affect your site's front-end performance. #### Cart Detection Questions **Q: When exactly is a cart considered "abandoned"?** A: A cart is abandoned when a customer adds items and provides their email address but doesn't complete the purchase within 30 minutes (default setting). **Q: What if a customer doesn't enter their email?** A: Recovery emails can only be sent to customers who provide their email address. Encourage email collection at checkout for best results. **Q: Do abandoned carts work for guest customers?** A: Yes! As long as the customer enters their email address during checkout, the system can track and recover their cart. **Q: What happens if a customer completes their order after abandoning?** A: The system automatically updates the cart status to "completed" and you can use this status so the workflows won't send recovery emails for that cart. #### Email and Recovery Questions **Q: How many recovery emails should I send?** A: Start with 2-3 emails: one at 30 minutes, one at 24 hours, and one final attempt at 72 hours. Monitor performance and adjust. **Q: What's the best time to send recovery emails?** A: This varies by audience, but generally 10 AM - 2 PM and 6 PM - 8 PM work well. Test different times for your specific customers and according to your timezone. **Q: Can I customize the email templates?** A: Yes! You have full control over email content, design, and timing in FlowMattic's workflow builder and Email Template builder. **Q: Does the recovery URL expire?** A: Recovery URLs remain valid until the cart is completed or manually cleared. We recommend setting reasonable expectations (like 7-14 days). #### Discount and Coupon Questions **Q: What discount percentage works best?** A: Start with 10-15% for most products. Test different percentages and monitor your profit margins to find the sweet spot. **Q: Should I offer discounts immediately or only in later emails?** A: Try both approaches! Some businesses start with a simple reminder and add discounts in follow-up emails to create escalating incentive. **Q: Can customers use multiple coupons?** A: You can control this in WooCommerce coupon settings. Generally, allowing one coupon per order prevents abuse while still being generous. **Q: What if I don't want to offer discounts?** A: You can focus on other incentives like free shipping, limited-time availability, customer reviews, or personalized product recommendations. #### Technical Questions **Q: Does this work with other plugins?** A: FlowMattic is designed to work with most WordPress plugins. Contact support if you encounter conflicts with specific plugins. **Q: What happens to old abandoned cart data?** A: The system automatically cleans up old cart data after 30 days to keep your database optimized. You can customize this time in settings as per your requirements. **Q: Is my customer data secure?** A: Yes. All data is stored securely in your WordPress database and follows WordPress security standards. Ensure your site has proper security measures in place. **Q: Can I use this with WooCommerce subscriptions?** A: Yes! The abandoned cart feature works with subscription products, variable products, and all WooCommerce product types. #### Troubleshooting Questions **Q: My workflow isn't triggering. What should I check?** A: Verify that: - Your workflow is active - WooCommerce is properly installed - Customers are entering email addresses - You're waiting the full threshold time (30 minutes default) **Q: Emails aren't being sent. What's wrong?** A: Check: - Your email settings in WordPress - Spam folders - Email delivery logs in your SMTP plugin or service - WordPress email functionality (try a test email) **Q: The recovery URL doesn't restore the cart. Why?** A: This can happen if: - The customer's session expired - WooCommerce sessions are not properly configured - Browser cookies are disabled - The cart contents changed (out of stock, etc.) **Q: Can I test without waiting 30 minutes?** A: Yes! For testing purposes, you can temporarily change the abandonment threshold to 5 minutes in FlowMattic settings. Remember to change it back afterward. #### Integration Questions **Q: Can I connect this to my email marketing platform?** A: Yes! FlowMattic integrates with popular email platforms like Mailchimp, MailerLite, and others for comprehensive marketing automation. **Q: Does this work with SMS notifications?** A: Yes! You can add SMS actions using FlowMattic's Twilio or WhatsApp integrations for multi-channel recovery campaigns. **Q: Can I sync abandoned cart data to my CRM?** A: Yes! FlowMattic supports many CRM integrations including FluentCRM, HubSpot, and others for complete customer journey tracking. **Q: What about social media retargeting?** A: You can use FlowMattic's webhook actions to send abandoned cart data to Facebook, Google Ads, or other platforms for retargeting campaigns. --- ### 🛠️ Troubleshooting Common Issues #### Issue: No Abandoned Cart Emails Being Sent **Possible Causes:** - Workflow not activated - Customer didn't provide email address - Not enough time passed (check threshold setting) - Email delivery issues **Solutions:** 1. Verify workflow is **"Active"** in FlowMattic 2. Test with a logged-in user account 3. Check **FlowMattic** → **Task History** for errors 4. Test email delivery with a simple "Send Email" in FlowMattic Abandoned Cart under WooCommerce menu 5. Check spam folders and email filters #### Issue: Recovery URL Not Working **Possible Causes:** - Customer session expired - Browser cookies disabled - Cart contents changed (products removed/out of stock) **Solutions:** 1. Test immediately after abandonment 2. Ensure customers accept cookies 3. Check product availability 4. Test with simple products first 5. Verify WooCommerce session settings #### Issue: Wrong Cart Data in Emails **Possible Causes:** - Multiple browser sessions - Cached data issues - Product variations causing problems **Solutions:** 1. Clear browser cache and cookies 2. Test in incognito/private mode 3. Use simple products for testing 4. Check cart contents in WooCommerce admin 5. Verify workflow trigger data #### Issue: Duplicate Emails Being Sent **Possible Causes:** - Multiple workflows for same trigger - Workflow running multiple times - Cron job issues **Solutions:** 1. Check for duplicate workflows 2. Add conditions to prevent re-triggering 3. Use cart status checking to avoid duplicates 4. Monitor workflow execution logs 5. Set proper email frequency limits #### Issue: Low Recovery Rates **Possible Causes:** - Poor email content - Wrong timing - Weak incentives - Technical delivery issues **Solutions:** 1. A/B test different subject lines 2. Adjust email timing (try different hours) 3. Increase discount percentages 4. Improve email design and copy 5. Check email deliverability scores ### 📞 Getting Help and Support #### FlowMattic Resources - **Documentation:** Complete guides and tutorials - **Support Forum:** Community help and discussions - **Video Tutorials:** Step-by-step visual guides - **Template Library:** Pre-built workflow templates #### Best Practices for Getting Help 1. **Check the FAQ first** - Many questions are answered above 2. **Be specific** - Include workflow screenshots and error messages 3. **Test thoroughly** - Try the troubleshooting steps before asking for help 4. **Share details** - WordPress version, plugin versions, and specific issues --- **🎯 Congratulations!** You now have everything you need to implement a successful abandoned cart recovery system. Start with the basics, test thoroughly, and gradually add advanced features as you grow more comfortable with the system. **Remember:** The key to success is consistent testing, monitoring, and optimization. What works for one store might not work for another, so always test and adjust based on your specific audience and products. **Happy selling! 🚀** --- # Comprehensive Guide to Setting Up Google Console Project for Calendar API Integration Source: https://support.flowmattic.com/kb/article/85/comprehensive-guide-to-setting-up-google-console-project-for-calendar-api-integration ### Overview This guide provides a step-by-step process for setting up a Google Cloud project and configuring it to integrate the Google Calendar API. It includes instructions for enabling the API, configuring OAuth credentials, and completing the authentication process. ### Steps to Set Up Google Console Project #### 1. Create a Google Cloud Project - Log in to the [Google Cloud Console](https://console.cloud.google.com/). - Click on the Select a project dropdown at the top of the page, then click on New Project. - Provide the following details: -- **Project Name:** Enter a meaningful name (e.g., “Google Calendar API Integration”). -- **Location:** Leave it as “No organization” if you do not have an organization. - Click Create. Google will redirect you to the project dashboard #### 2. Enable Google Calendar API - Navigate to **[APIs & Services > Library](https://console.cloud.google.com/apis/library)**. - In the API Library: -- Search for **Google Calendar API**, click on it, and then click **Enable**. #### 3. Configure the OAuth Consent Screen - Go to **[APIs & Services > OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent)**. - Choose **External** as the user type and click Create. - Fill out the following details: -- **App Name:** Enter a meaningful name (e.g., “FlowMattic Google Integration”). -- **User Support Email:** Enter your email address. -- **App Logo:** Optional, but you can upload a logo if desired. -- **Authorized Domains:** Add the following domain: flowmattic.com -- **Developer Contact Information:** Enter your email address. - Click Save and Continue. #### 4. Add Scopes - On the “[Scopes](https://console.cloud.google.com/auth/scopes)” screen: - Click Add or Remove Scopes. -- Select the following scopes from the list or manually add them: - `https://www.googleapis.com/auth/calendar` - Click Update and then Save and Continue ![Image 2025-08-13 at 2.23.23 AM.jpeg](/storage/kb-images/e0159b5669-inline.png) #### 5. Add Test Users - On the "[Audience](https://console.cloud.google.com/auth/audience)" tab, under “**Test Users**” section: -- Click **Add Users**. -- Enter the email addresses of the Google accounts you will use to test the integration (e.g., your own or any users who will authenticate the connection). -- You can add multiple email addresses, separated by commas or one per line. - Click **Save and Continue**. ![Add Test Users.png](/storage/kb-images/eca60ff313-inline.png) #### 6. Create OAuth 2.0 Credentials - Go to **[APIs & Services > Credentials](https://console.cloud.google.com/apis/credentials)**. - Click **+ Create Credentials** and select **OAuth Client ID**. - On the **Create OAuth Client ID** screen: - Select **Web Application** as the application type. - Provide a name for the credential. - Add the callback URL to the **Authorized Redirect URIs** : - `https://api.flowmattic.com/google/calendar` - Save the credentials and securely store the **Client ID** and **Client Secret**. ![Image 2025-08-13 at 2.18.22 AM.jpeg](/storage/kb-images/86ca11a85f-inline.png) #### 7. Configure Connect in FlowMattic - Navigate to the **FlowMattic -> Connects** settings in your WordPress dashboard. - Click **Connect Integration** button - Search for **Google Calendar** and click the box - Provide the following details: - **Connect Name**: Enter a meaningful name. - **Client ID**: Paste the Client ID from Google Cloud. - **Client Secret**: Paste the Client Secret from Google Cloud. - Click **Save Connect & Authenticate** #### 8. Authenticate and Generate Tokens - After saving the connection, you will be redirected to Google’s login page. - Log in using one of the test user accounts. - Grant permissions for the specified scopes. - Upon successful authentication, the application will store the **Access Token** and **Refresh Token** for future API requests. ### Tips - Ensure that you have enabled the API for **Google Calendar** - FlowMattic needs your site's cron jobs to be functional in order to renew the Access Token. Make sure the cron jobs are working fine and you have set up the server side crons. - Read more about cron jobs here - [Authentication keeps expiring or Delay not working](https://support.flowmattic.com/kb/article/46/authentication-keeps-expiring-or-delay-not-working) - Regularly review and update test users as needed. ### Additional Resources - [Google Cloud Console Documentation](https://cloud.google.com/docs/) - [Google Calendar Documentation](https://developers.google.com/calendar/api) --- # Comprehensive Guide to Setting Up Google Console Project for Contacts API Integration Source: https://support.flowmattic.com/kb/article/96/comprehensive-guide-to-setting-up-google-console-project-for-contacts-api-integration ### Overview This guide provides a step-by-step process for setting up a Google Cloud project and configuring it to integrate the Google Contacts API. It includes instructions for enabling the API, configuring OAuth credentials, and completing the authentication process. ### Steps to Set Up Google Console Project #### 1. Create a Google Cloud Project - Log in to the [Google Cloud Console](https://console.cloud.google.com/). - Click on the Select a project dropdown at the top of the page, then click on New Project. - Provide the following details: -- **Project Name:** Enter a meaningful name (e.g., “Google Contacts API Integration”). -- **Location:** Leave it as “No organization” if you do not have an organization. - Click Create. Google will redirect you to the project dashboard #### 2. Enable Google Contacts API - Navigate to **[APIs & Services > Library](https://console.cloud.google.com/apis/library)**. - In the API Library: -- Search for **Google Contacts API**, click on it, and then click **Enable**. -- Search for **Google People API**, click on it, and then click **Enable**. #### 3. Configure the OAuth Consent Screen - Go to **[APIs & Services > OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent)**. - Choose **External** as the user type and click Create. - Fill out the following details: -- **App Name:** Enter a meaningful name (e.g., “FlowMattic Google Integration”). -- **User Support Email:** Enter your email address. -- **App Logo:** Optional, but you can upload a logo if desired. -- **Authorized Domains:** Add the following domain: flowmattic.com -- **Developer Contact Information:** Enter your email address. - Click Save and Continue. #### 4. Add Scopes - On the “[Scopes](https://console.cloud.google.com/auth/scopes)” screen: - Click Add or Remove Scopes. -- Select the following scopes from the list or manually add them: - `https://www.googleapis.com/auth/contacts` - `https://www.googleapis.com/auth/contacts.other.readonly` - Click Update and then Save and Continue ![Image 2025-08-13 at 9.44.35 PM.jpeg](/storage/kb-images/daa4a1182f-inline.png) #### 5. Add Test Users - On the **[Audience](https://console.cloud.google.com/auth/audience)** tab, under “**Test Users**” section: -- Click **Add Users**. -- Enter the email addresses of the Google accounts you will use to test the integration (e.g., your own or any users who will authenticate the connection). -- You can add multiple email addresses, separated by commas or one per line. - Click **Save and Continue**. ![Add Test Users.png](/storage/kb-images/eca60ff313-inline.png) #### 6. Create OAuth 2.0 Credentials - Go to **[APIs & Services > Credentials](https://console.cloud.google.com/apis/credentials)**. - Click **+ Create Credentials** and select **OAuth Client ID**. - On the **Create OAuth Client ID** screen: - Select **Web Application** as the application type. - Provide a name for the credential. - Add the callback URL to the **Authorized Redirect URIs** : - `https://api.flowmattic.com/google/contacts` - Save the credentials and securely store the **Client ID** and **Client Secret**. ![Image 2025-08-13 at 9.49.48 PM.jpeg](/storage/kb-images/f1f9919762-inline.png) #### 7. Configure Connect in FlowMattic - Navigate to the **FlowMattic -> Connects** settings in your WordPress dashboard. - Click **Connect Integration** button - Search for **Google Contacts** and click the box - Provide the following details: - **Connect Name**: Enter a meaningful name. - **Client ID**: Paste the Client ID from Google Cloud. - **Client Secret**: Paste the Client Secret from Google Cloud. - Click **Save Connect & Authenticate** #### 8. Authenticate and Generate Tokens - After saving the connection, you will be redirected to Google’s login page. - Log in using one of the test user accounts. - Grant permissions for the specified scopes. - Upon successful authentication, the application will store the **Access Token** and **Refresh Token** for future API requests. ### Tips - Ensure that you have enabled the API for **Google Contacts** - FlowMattic needs your site's cron jobs to be functional in order to renew the Access Token. Make sure the cron jobs are working fine, and you have set up the server-side side crons. - Read more about cron jobs here - [Authentication keeps expiring or Delay not working](https://support.flowmattic.com/kb/article/46/authentication-keeps-expiring-or-delay-not-working) - Regularly review and update test users as needed. ### Additional Resources - [Google Cloud Console Documentation](https://cloud.google.com/docs/) - [Google Contacts Documentation](https://developers.google.com/contacts/api) --- # Comprehensive Guide to Setting Up Google Console Project for Gmail Integration Source: https://support.flowmattic.com/kb/article/151/comprehensive-guide-to-setting-up-google-console-project-for-gmail-integration Connect your Gmail account to FlowMattic to send emails, manage drafts, organize labels, and search your inbox — all from within your automated workflows. --- ## Prerequisites Before connecting Gmail to FlowMattic, you need to create a Google Cloud project with OAuth credentials. Follow the steps below to set up your Google Cloud Console project. --- ## Step 1: Create a Google Cloud Project 1. Go to [Google Cloud Console](https://console.cloud.google.com/). 2. Click the project dropdown at the top of the page and select **New Project**. 3. Enter a project name (e.g., "FlowMattic Gmail Integration"). 4. Click **Create**. ![Create Google Cloud Project](https://assets.infidesk.support/kb/inline/2026/07/jgYFhQC0f1a7z7zJXkMWSY3lDc7LGIMuJtUZzpDZ.png) --- ## Step 2: Enable the Gmail API 1. In the Google Cloud Console, navigate to **APIs & Services > Library**. 2. Search for **Gmail API**. 3. Click on **Gmail API** and then click **Enable**. ![Enable Gmail API](https://assets.infidesk.support/kb/inline/2026/07/Jxo4YOBFx6wRoWIz7jeFNHi2qr2Jw2lBPRzhxRjP.png) --- ## Step 3: Configure the OAuth Consent Screen 1. Navigate to **APIs & Services > OAuth consent screen**. 2. Select **External** as the user type and click **Create**. 3. Fill in the required fields: - **App name**: Enter your app name (e.g., "FlowMattic"). - **User support email**: Select your email address. - **App logo**: Optional — upload a logo if desired. - **Authorized domains**: Add `flowmattic.com`. - **Developer contact email**: Enter your email address. 4. Click **Save and Continue**. ![OAuth Consent Screen](https://assets.infidesk.support/kb/inline/2026/07/AasbdPSuTdf0ic4xya7xHKYqDvdOmrTAWqgtFMAG.png) --- ## Step 4: Add Scopes 1. On the **Scopes** step, click **Add or Remove Scopes**. 2. Search for and add the following Gmail API scopes: - `https://mail.google.com/` — Full access to Gmail (read, send, delete, manage). - `https://www.googleapis.com/auth/gmail.send` — Send email only. - `https://www.googleapis.com/auth/gmail.modify` — Read, send, delete, and manage labels. - `https://www.googleapis.com/auth/gmail.readonly` — Read-only access. 3. Select the scopes appropriate for your use case. For full functionality, select `https://mail.google.com/`. 4. Click **Update** and then **Save and Continue**. ![Add Scopes](https://assets.infidesk.support/kb/inline/2026/07/hIIrwNk69tWhgWzwkIKpZO51MkhGZ6melty7LwPH.png) > **Tip:** If you only need to send emails, the `gmail.send` scope is sufficient. For full workflow automation (search, labels, drafts), use the full `mail.google.com` scope. --- ## Step 5: Add Test Users 1. On the **Test users** step, click **Add Users**. 2. Enter the Gmail email address(es) you want to use for testing. 3. Click **Add** and then **Save and Continue**. ![Add Test Users](https://assets.infidesk.support/kb/inline/2026/07/WsrpQfVfd3xl71JQzRRllDobwGip8CV4YgwOgYJA.png) > **Note:** While your app is in "Testing" mode, only test users listed here can authorize the connection. Once you publish the app, any Google account can connect. --- ## Step 6: Create OAuth Credentials 1. Navigate to **APIs & Services > Credentials**. 2. Click **Create Credentials** and select **OAuth client ID**. 3. Set the **Application type** to **Web application**. 4. Enter a name (e.g., "FlowMattic Gmail"). 5. Under **Authorized redirect URIs**, add the following callback URL: ``` https://api.flowmattic.com/google/gmail ``` 6. Click **Create**. 7. Copy the **Client ID** and **Client Secret** — you will need these in the next step. ![Create OAuth Credentials](https://assets.infidesk.support/kb/inline/2026/07/Swm8WgeUmjYUF69pdIbVQYcmL7TNfTLTH8LNHhh0.png) > **Important:** Make sure you copy the Client ID and Client Secret immediately. You can always access them later from the Credentials page, but it's easiest to copy them now. --- ## Step 7: Connect Gmail in FlowMattic 1. In your WordPress dashboard, go to **FlowMattic > Connects**. 2. Click **Add New Connection**. 3. Search for **Gmail** and select **Gmail (Custom)**. 4. Enter the **Client ID** and **Client Secret** from Step 6. 5. Click **Connect**. 6. You will be redirected to Google's authorization page. Sign in with a Google account that is listed as a test user (from Step 5). 7. Review the permissions and click **Allow**. 8. You will be redirected back to FlowMattic with a successful connection. ![Connect Gmail in FlowMattic](https://assets.infidesk.support/kb/inline/2026/07/JXUnzfISFfTsevQpFyQDqDas7KhgpwXSh3iBXV3L.png) --- ## Step 8: Verify the Connection Once connected, FlowMattic will automatically: - Retrieve your Gmail profile information. - Store the access and refresh tokens securely. - Schedule automatic token renewal via WordPress cron. You can verify the connection is active by checking the **Connects** page — your Gmail connection should show a green status indicator. ![Verify Connection](https://assets.infidesk.support/kb/inline/2026/07/prbfPgYXLnMNZd4TYeFEl5m0nkGlpB41rDeuzNBN.png) > **Important:** FlowMattic requires your site's cron jobs to be functional in order to auto-renew the Access Token. If your cron jobs are not running, the connection will expire and need to be re-authorized. --- ## Available Gmail Actions > **Note:** Gmail provides workflow **actions** only — there is no Gmail trigger. To start a workflow when an email arrives, use the [IMAP Email Parser](/kb/article/117/imap-email-parser), which can monitor a Gmail inbox over IMAP. Once connected, you can use the following actions in your FlowMattic workflows: ### Email Management | Action | Description | |--------|-------------| | **Send Email** | Send an email to one or more recipients with support for CC, BCC, reply-to, and HTML content. | | **Send Template Email** | Send an email using a pre-built FlowMattic email template with dynamic variable injection. | | **Find Email** | Search for a single email in Gmail using search queries. | | **Find Multiple Emails** | Search for multiple emails with query filters and label filtering. | | **Get Email Details** | Retrieve full email details and metadata by message ID. | | **Mark Email as Read** | Mark a specific email as read by message ID. | | **Reply to Email** | Reply to an existing email thread. | ### Draft Management | Action | Description | |--------|-------------| | **Create Draft** | Create an email draft in Gmail. | | **Send Draft** | Send a previously created draft. | | **Delete Draft** | Delete an email draft. | | **Create Draft Reply** | Create a draft reply to an existing email. | | **Send Draft Reply** | Send a draft reply. | | **Delete Draft Reply** | Delete a draft reply. | ### Label Management | Action | Description | |--------|-------------| | **List All Labels** | Retrieve all Gmail labels in the account. | | **Create Label** | Create a new Gmail label. | | **Delete Label** | Delete an existing Gmail label. | | **Add Label to Email** | Apply a label to a specific email. | | **Remove Label from Email** | Remove a label from a specific email. | --- ## Using Gmail in a Workflow ### Example: Send an Email 1. Create a new workflow or open an existing one. 2. Add a new action step and select **Gmail** as the application. 3. Choose **Send Email** as the action. 4. Select your Gmail connection from the dropdown. 5. Configure the email fields: - **To**: Recipient email address (supports dynamic variables). - **Subject**: Email subject line. - **Message**: Email body (supports HTML formatting). - **CC / BCC**: Optional additional recipients. - **Reply-To**: Optional reply-to address. - **From Name**: Optional sender display name. - **Add Signature**: Toggle to include your Gmail signature. 6. Save and test the action. ![Send Email Action](https://assets.infidesk.support/kb/inline/2026/07/Rf2IzUTYUvlVlv40GJVUWPPCmjZV4TJWxDWNI9QQ.png) ### Example: Search and Process Emails 1. Add a **Find Multiple Emails** action to search Gmail. 2. Use Gmail search query syntax in the **Search Query** field: - `from:example@gmail.com` — Emails from a specific sender. - `subject:invoice` — Emails with "invoice" in the subject. - `is:unread` — Only unread emails. - `after:2024/01/01` — Emails after a specific date. - `has:attachment` — Emails with attachments. 3. Set the **Max Results** to limit the number of returned emails. 4. Optionally filter by **Label** to narrow results. 5. Use the returned message IDs with **Get Email Details** to retrieve full email content. ![Search Emails Action](https://assets.infidesk.support/kb/inline/2026/07/nJ5ziQ1g1R7djWb0BOKnkmrrZnBeshM5ijyV8ULy.png) --- ## Template Email Support FlowMattic supports sending template-based emails through Gmail with the following features: - **Dynamic Variables**: Use `{{variable_name}}` syntax to inject workflow data into email templates. - **Pre-header Text**: Add email preview text that appears in the inbox before the email is opened. - **Send Count Tracking**: Automatically tracks how many times a template has been sent. --- ## Troubleshooting ### Connection Expired If your Gmail connection stops working, it may be due to expired tokens. Ensure your WordPress cron jobs are running properly. You can: - Install a cron job monitoring plugin. - Set up a real server-side cron job to trigger `wp-cron.php` regularly. - Re-authorize the connection from the **Connects** page. ### Insufficient Permissions If you receive permission errors when performing actions, verify that: - The Gmail API is enabled in your Google Cloud project. - The correct scopes were added during OAuth consent screen setup. - The Google account used for authorization has access to the required Gmail features. ### App Not Verified Warning When authorizing the connection, Google may show an "App not verified" warning. This is normal for custom OAuth apps. Click **Advanced** and then **Go to [App Name] (unsafe)** to proceed with the authorization. --- ## Summary | Setting | Value | |---------|-------| | **OAuth Callback URL** | `https://api.flowmattic.com/google/gmail` | | **API Base URL** | `https://gmail.googleapis.com/gmail/v1/users/me/` | | **Authentication** | OAuth 2.0 with automatic token refresh | | **Available Actions** | 18 (Email, Draft, and Label management) | | **Template Support** | Yes (dynamic variables and pre-header text) | --- # Comprehensive Guide to Setting Up Google Console Project for Google Meet API Integration Source: https://support.flowmattic.com/kb/article/95/comprehensive-guide-to-setting-up-google-console-project-for-google-meet-api-integration ### Overview This guide provides a step-by-step process to set up a Google Cloud project and configure it for integrating the Google Meet API. It includes instructions for enabling the API, configuring OAuth credentials, and completing the authentication process. ### Steps to Set Up Google Console Project #### 1. Create a Google Cloud Project - Log in to the [Google Cloud Console](https://console.cloud.google.com/). - Click on the Select a project dropdown at the top of the page, then click on New Project. - Provide the following details: -- **Project Name:** Enter a meaningful name (e.g., “Google Meet API Integration”). -- **Location:** Leave it as “No organization” if you do not have an organization. - Click Create. Google will redirect you to the project dashboard #### 2. Enable Google Meet API - Navigate to **[APIs & Services > Library](https://console.cloud.google.com/apis/library)**. - In the API Library: -- Search for **Google Meet API**, click on it, and then click **Enable**. #### 3. Configure the OAuth Consent Screen - Go to **[APIs & Services > OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent)**. - Choose **External** as the user type and click Create. - Fill out the following details: -- **App Name:** Enter a meaningful name (e.g., “FlowMattic Google Integration”). -- **User Support Email:** Enter your email address. -- **App Logo:** Optional, but you can upload a logo if desired. -- **Authorized Domains:** Add the following domain: flowmattic.com -- **Developer Contact Information:** Enter your email address. - Click Save and Continue. #### 4. Add Scopes - On the “[Scopes](https://console.cloud.google.com/auth/scopes)” screen: - Click Add or Remove Scopes. -- Select the following scopes from the list or manually add them: - `https://www.googleapis.com/auth/meetings.space.created` - Click Update and then Save and Continue ![Image 2025-08-13 at 12.19.20 AM.jpeg](/storage/kb-images/53a501ce9a-inline.png) #### 5. Add Test Users - On the **[Audience](https://console.cloud.google.com/auth/audience)** tab, under “**Test Users**” section: -- Click **Add Users**. -- Enter the email addresses of the Google accounts you will use to test the integration (e.g., your own or any users who will authenticate the connection). -- You can add multiple email addresses, separated by commas or one per line. - Click **Save and Continue**. ![Add Test Users.png](/storage/kb-images/eca60ff313-inline.png) #### 6. Create OAuth 2.0 Credentials - Go to **[APIs & Services > Credentials](https://console.cloud.google.com/apis/credentials)**. - Click **+ Create Credentials** and select **OAuth Client ID**. - On the **Create OAuth Client ID** screen: - Select **Web Application** as the application type. - Provide a name for the credential. - Add the callback URL to the **Authorized Redirect URIs** : - `https://api.flowmattic.com/google/meet` - Save the credentials and securely store the **Client ID** and **Client Secret**. ![Image 2025-08-13 at 12.40.38 AM.jpeg](/storage/kb-images/edaabebd43-inline.png) #### 7. Configure Connect in FlowMattic - Navigate to the **FlowMattic -> Connects** settings in your WordPress dashboard. - Click **Connect Integration** button - Search for **Google Meet** and click the box - Provide the following details: - **Connect Name**: Enter a meaningful name. - **Client ID**: Paste the Client ID from Google Cloud. - **Client Secret**: Paste the Client Secret from Google Cloud. - Click **Save Connect & Authenticate** #### 8. Authenticate and Generate Tokens - After saving the connection, you will be redirected to Google’s login page. - Log in using one of the test user accounts. - Grant permissions for the specified scopes. - Upon successful authentication, the application will store the **Access Token** and **Refresh Token** for future API requests. ### Filter Usage Guide You can apply filters in Google Meet actions to narrow down the results based on specific criteria. The following filter fields are supported: - **space.meeting_code** – Filter by the meeting code. - **space.name** – Filter by the meeting space name. - **start_time** – Filter by the meeting start time. - **end_time** – Filter by the meeting end time. #### Examples - Filter by Meeting Space Name ``` space.name={google_meet3.name} ``` - Filter by Meeting Code ``` space.meeting_code={google_meet4.meetingCode} ``` - Filter by Date Range (Start Time) ``` start_time>="2025-08-01T00:00:00.000Z" AND start_time<="2025-08-10T00:00:00.000Z" ``` - Filter for Ongoing Meetings (No End Time) ``` end_time IS NULL ``` **Tip**: Always use ISO 8601 date format (YYYY-MM-DDTHH:mm:ss.sssZ) for start_time and end_time filters. ### Tips - Ensure that you have enabled the API for **Google Meet** - FlowMattic needs your site's cron jobs to be functional in order ro auto renew the Access Token. Make sure the cron jobs are working fine and you have set up the server side crons. - Read more about cron jobs here - [Authentication keeps expiring or Delay not working](https://support.flowmattic.com/kb/article/46/authentication-keeps-expiring-or-delay-not-working) - Regularly review and update test users as needed. ### Additional Resources - [Google Cloud Console Documentation](https://cloud.google.com/docs/) - [Google Meet Documentation](https://developers.google.com/workspace/meet/api/guides/overview) --- # Comprehensive Guide to Setting Up Google Console Project for Sheets and Drive API Integration Source: https://support.flowmattic.com/kb/article/59/comprehensive-guide-to-setting-up-google-console-project-for-sheets-and-drive-api-integration ### Overview This guide provides a step-by-step process to set up a Google Cloud project and configure it for integrating Google Sheets and Drive APIs. It includes instructions for enabling APIs, configuring OAuth credentials, and completing the authentication process. ### Steps to Set Up Google Console Project #### 1. Create a Google Cloud Project - Log in to the [Google Cloud Console](https://console.cloud.google.com/). - Click on the Select a project dropdown at the top of the page, then click on New Project. - Provide the following details: -- **Project Name:** Enter a meaningful name (e.g., “Google Sheets API Integration”). -- **Location:** Leave it as “No organization” if you do not have an organization. - Click Create. Google will redirect you to the project dashboard #### 2. Enable Google Sheets and Drive APIs - Navigate to **[APIs & Services > Library](https://console.cloud.google.com/apis/library)**. - In the API Library: -- Search for **Google Sheets API**, click on it, and then click **Enable**. -- Search for **Google Drive API**, click on it, and then click **Enable**. #### 3. Configure the OAuth Consent Screen - Go to **[APIs & Services > OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent)**. - Choose **External** as the user type and click Create. - Fill out the following details: -- **App Name:** Enter a meaningful name (e.g., “FlowMattic Google Integration”). -- **User Support Email:** Enter your email address. -- **App Logo:** Optional, but you can upload a logo if desired. -- **Authorized Domains:** Add the following domain: flowmattic.com -- **Developer Contact Information:** Enter your email address. - Click Save and Continue. #### 4. Add Scopes - On the “[Scopes](https://console.cloud.google.com/auth/scopes)” screen: - Click Add or Remove Scopes. -- Select the following scopes from the list or manually add them: - `https://www.googleapis.com/auth/spreadsheets` - `https://www.googleapis.com/auth/drive` - Click Update and then Save and Continue ![Add Scopes](/storage/kb-images/6c4f225454-inline.png) #### 5. Add Test Users - On the "[Audience](https://console.cloud.google.com/auth/audience)" tab, under “**Test Users**” ssection: -- Click **Add Users**. -- Enter the email addresses of the Google accounts you will use to test the integration (e.g., your own or any users who will authenticate the connection). -- You can add multiple email addresses, separated by commas or one per line. - Click **Save and Continue**. ![Add Test Users.png](/storage/kb-images/eca60ff313-inline.png) #### 6.Create a Google Drive Connect to get the endpoint URL - Go to your site -> FlowMattic -> **Connects** - Click the **Connect Integration** button in header and choose Google Drive - You will a modal similar to the following, copy the **Redirect URL**, we need it for the next step - Once you get the Client ID and Client Secret after next step, you need to add them here and click **Authenticate and Save Connect**, and process your authentication - After successful authentication, you can use this Google Drive connect in any of your workflows. ![Google drive connect](https://assets.infidesk.support/kb/inline/2026/07/IsLSh0yTgUDPYz8YwTIn9G2961nQaxWnkCe0We8c.jpg) #### 7. Create OAuth 2.0 Credentials - Go to **[APIs & Services > Credentials](https://console.cloud.google.com/apis/credentials)**. - Click **+ Create Credentials** and select **OAuth Client ID**. - On the **Create OAuth Client ID** screen: - Select **Web Application** as the application type. - Provide a name for the credential. - Add the callback URL to the **Authorized Redirect URIs** : - `https://yoursite.com/wp-json/flowmattic/v1/auth/google-drive` - Save the credentials and securely store the **Client ID** and **Client Secret**. ![Copy the Client ID and Client Secret](/storage/kb-images/974f4f819d-inline.png) #### 8. Configure Connect in FlowMattic - Navigate to the **FlowMattic -> Connects** settings in your WordPress dashboard. - Click **Connect Integration** button - Search for **Google Sheets** and click the box - Provide the following details: - **Connect Name**: Enter a meaningful name. - **Client ID**: Paste the Client ID from Google Cloud. - **Client Secret**: Paste the Client Secret from Google Cloud. - Click **Save Connect & Authenticate** #### 9. Authenticate and Generate Tokens - After saving the connection, you will be redirected to Google’s login page. - Log in using one of the test user accounts. - Grant permissions for the specified scopes. - Upon successful authentication, the application will store the **Access Token** and **Refresh Token** for future API requests. ### Tips - Ensure that you have enabled both the APIs for **Google Spreadsheets** and **Google Drive API** - FlowMattic needs your site's cron jobs to be functional in order ro auto renew the Access Token. Make sure the cron jobs are working fine and you have set up the server side crons. - Read more about cron jobs here - [Authentication keeps expiring or Delay not working](https://support.flowmattic.com/kb/article/46/authentication-keeps-expiring-or-delay-not-working) - Regularly review and update test users as needed. ### Additional Resources - [Google Cloud Console Documentation](https://cloud.google.com/docs/) - [Google Sheets API Documentation](https://developers.google.com/sheets/api/) - [Google Drive API Documentation](https://developers.google.com/drive/api/) --- # Comprehensive Guide to Setting Up Google Console Project for Slides API Integration Source: https://support.flowmattic.com/kb/article/98/comprehensive-guide-to-setting-up-google-console-project-for-slides-api-integration ### Overview This guide provides a step-by-step process for setting up a Google Cloud project and configuring it to integrate the Google Slides API. It includes instructions for enabling the API, configuring OAuth credentials, and completing the authentication process. ### Steps to Set Up Google Console Project #### 1. Create a Google Cloud Project - Log in to the [Google Cloud Console](https://console.cloud.google.com/). - Click on the Select a project dropdown at the top of the page, then click on New Project. - Provide the following details: -- **Project Name:** Enter a meaningful name (e.g., “Google Slides API Integration”). -- **Location:** Leave it as “No organization” if you do not have an organization. - Click Create. Google will redirect you to the project dashboard #### 2. Enable Google Slides API - Navigate to **[APIs & Services > Library](https://console.cloud.google.com/apis/library)**. - In the API Library: -- Search for **Google Slides API**, click on it, and then click **Enable**. #### 3. Configure the OAuth Consent Screen - Go to **[APIs & Services > OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent)**. - Choose **External** as the user type and click Create. - Fill out the following details: -- **App Name:** Enter a meaningful name (e.g., “FlowMattic Google Integration”). -- **User Support Email:** Enter your email address. -- **App Logo:** Optional, but you can upload a logo if desired. -- **Authorized Domains:** Add the following domain: flowmattic.com -- **Developer Contact Information:** Enter your email address. - Click Save and Continue. #### 4. Add Scopes - On the “[Scopes](https://console.cloud.google.com/auth/scopes)” screen: - Click Add or Remove Scopes. -- Select the following scopes from the list or manually add them: - `https://www.googleapis.com/auth/presentations` - `https://www.googleapis.com/auth/drive` - Click Update and then Save and Continue ![Image 2025-08-24 at 12.02.59 AM.jpeg](/storage/kb-images/b1cf416825-inline.png) #### 5. Add Test Users - On the **[Audience](https://console.cloud.google.com/auth/audience)** tab, under “**Test Users**” section: -- Click **Add Users**. -- Enter the email addresses of the Google accounts you will use to test the integration (e.g., your own or any users who will authenticate the connection). -- You can add multiple email addresses, separated by commas or one per line. - Click **Save and Continue**. ![Add Test Users.png](/storage/kb-images/eca60ff313-inline.png) #### 6. Create OAuth 2.0 Credentials - Go to **[APIs & Services > Credentials](https://console.cloud.google.com/apis/credentials)**. - Click **+ Create Credentials** and select **OAuth Client ID**. - On the **Create OAuth Client ID** screen: - Select **Web Application** as the application type. - Provide a name for the credential. - Add the callback URL to the **Authorized Redirect URIs** : - `https://api.flowmattic.com/google/slides` - Save the credentials and securely store the **Client ID** and **Client Secret**. ![Image 2025-08-23 at 11.57.50 PM.jpeg](/storage/kb-images/2eccbccd8d-inline.png) #### 7. Configure Connect in FlowMattic - Navigate to the **FlowMattic -> Connects** settings in your WordPress dashboard. - Click **Connect Integration** button - Search for **Google Slides** and click the box - Provide the following details: - **Connect Name**: Enter a meaningful name. - **Client ID**: Paste the Client ID from Google Cloud. - **Client Secret**: Paste the Client Secret from Google Cloud. - Click **Save Connect & Authenticate** #### 8. Authenticate and Generate Tokens - After saving the connection, you will be redirected to Google’s login page. - Log in using one of the test user accounts. - Grant permissions for the specified scopes. - Upon successful authentication, the application will store the **Access Token** and **Refresh Token** for future API requests. ### Tips - Ensure that you have enabled the API for **Google Slides** - FlowMattic needs your site's cron jobs to be functional in order to renew the Access Token. Make sure the cron jobs are working fine, and you have set up the server-side side crons. - Read more about cron jobs here - [Authentication keeps expiring or Delay not working](https://support.flowmattic.com/kb/article/46/authentication-keeps-expiring-or-delay-not-working) - Regularly review and update test users as needed. ### Additional Resources - [Google Cloud Console Documentation](https://cloud.google.com/docs/) - [Google Slides Documentation](https://developers.google.com/slides/api) --- # Connect a form to a workflow Source: https://support.flowmattic.com/kb/article/176/connect-a-form-to-a-workflow Every FlowMattic form fires a **New Form Submission** trigger. This guide connects a form to a workflow so each submission runs an automation. ## Step 1 — Note your field keys Open your form in **FlowMattic → Forms** and check each field's **Field key**. The key is what the workflow receives as `{{key}}` — for example a field keyed `email` becomes `{{email}}`. Set stable, meaningful keys before building the workflow, because renaming a key later breaks any mapping that used it. ![A form field selected in the editor showing its Field key property](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-form-builder-form-field-key.png) ## Step 2 — Create a workflow with the Form Builder trigger 1. Go to **FlowMattic → Workflows** and create a new workflow. 2. For the trigger app, choose **Form Builder**. 3. For the trigger event, choose **New Form Submission**. ![Workflow trigger set to Form Builder with New Form Submission](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-form-builder-wf-form-trigger.png) ## Step 3 — Scope the trigger to a form Under **Choose Form**, select which form fires this workflow: - Select a **specific form** for per-form logic — the most common choice. - Select **Any Form** when one workflow should run for every form submission on the site, such as logging every submission to Slack or a Table. ## Step 4 — Capture a test submission Submit a test entry on the form (from any page it is embedded on), then click **Capture Response** to pull that submission in. This gives the workflow real field data to map against in the next steps. ## Step 5 — Map the fields in your actions Add your action steps and map the form fields using their `{{key}}` tokens. For example, a Google Sheets **Create Row** action maps `{{name}}`, `{{email}}`, and `{{message}}` to columns; an Email action maps them into the message body. ![An action step with the variable picker open, showing the captured form fields available as tokens](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-form-builder-wf-form-fields.png) ## Step 6 — Turn the workflow on Save and enable the workflow. The next submission on the scoped form (or any form, if you chose Any Form) will run it. --- # Connect Amazon Bedrock to FlowMattic Source: https://support.flowmattic.com/kb/article/215/connect-amazon-bedrock-to-flowmattic Amazon Bedrock gives you access to foundation models — Claude, Nova, Llama, Mistral and Cohere — hosted inside AWS. Connecting Bedrock to FlowMattic lets your AI Agent and other AI features use those models with your existing AWS account and billing. ## What this connect does — and does not — give you **Bedrock is a credentials connect, not a set of workflow actions.** Once connected, Bedrock models become selectable in the AI Agent and FlowMattic's other AI surfaces. **You will not find "AWS Bedrock" actions in the step picker, and that is correct.** If you are looking for a Bedrock step to drop into a workflow, what you actually want is the **AI Agent** action, with a Bedrock model chosen inside it. ## Setting it up Go to **FlowMattic → Connects**, add a new connection and choose **AWS Bedrock**. There are two ways to authenticate. **Use one or the other — not both.** ### Option 1: Bedrock API key (recommended) In the AWS Console, open **Amazon Bedrock → API keys** and generate a long-lived key. It starts with `ABSK`. Paste it into the **Bedrock API Key** field and **leave the IAM fields blank**. This is the simpler path and the one we recommend. ### Option 2: IAM credentials If your organisation requires IAM, create an access key under **IAM → Users → Security credentials** and enter the **Access Key ID** and **Secret Access Key**. Leave the Bedrock API Key field blank. Note that AWS shows the secret access key **only once**, when you create it. If you did not save it, you cannot retrieve it later — generate a new key pair. ### Region Set the **region** to match where you have Bedrock access. This matters more than people expect — see below. ## The two things that go wrong Almost every Bedrock connection problem is one of these two, and neither is a FlowMattic fault. ### 1. You have not requested access to the model Bedrock does not give you every model by default. **Each foundation model requires you to explicitly request access in the AWS console**, per model. Until AWS approves it, calls to that model fail even though your credentials are perfectly valid. In the AWS Console, go to **Amazon Bedrock → Model access** and check the status of the model you are trying to use. Request access if it is not already granted. Approval is usually quick, but it is a separate step from creating your key. ### 2. The model is not available in your region **Bedrock model availability varies by region**, and model access is granted per region. A model you have access to in `us-east-1` is not automatically available in `eu-west-1`. So if you see *"model not found"* or *"access denied"* on a connection you are sure is configured correctly, check that you requested access to that specific model **in the same region your connect is set to**. A region mismatch produces exactly this error. ## Quick checklist Before contacting support about a Bedrock connection, confirm: - You filled in **either** the `ABSK` API key **or** the IAM pair — not both. - The region on the connect matches the region where you requested model access. - The model you are trying to use shows as **access granted** in the AWS console, in that region. - Your AWS account has Bedrock enabled and is in good standing. If all four are true and it still fails, get in touch and include the exact error message and the region. --- # Connect Supabase to FlowMattic Source: https://support.flowmattic.com/kb/article/234/connect-supabase-to-flowmattic The [Supabase integration](https://flowmattic.com/integration/supabase/) lets your workflows read and write Supabase tables, call Postgres functions, manage Storage files, and react to database changes — all from inside WordPress. Before you can use any of its actions or triggers, you need to create a **Connect**: a saved credential that every Supabase step in your workflows reuses. This guide walks you through it end to end. You'll enter your credentials once — every action inherits them, so you never re-enter the key or URL on individual steps. ## Before you start You'll need a Supabase account with a project created at [supabase.com](https://supabase.com). Both free and paid projects work. ## Step 1 — Get your Supabase API key 1. Open your project in the Supabase Dashboard. 2. Go to **Project Settings → API Keys**. 3. Copy a **secret key** (it starts with `sb_secret_…`). If your project still uses legacy JWT keys, the `service_role` key works too. > **Important:** use a **secret** (`sb_secret_…`) or legacy `service_role` key — not a publishable/anon key. Publishable keys are subject to Row Level Security, so your workflow's inserts and updates would be blocked. The secret key stays on your server and is never exposed to visitors. ## Step 2 — Get your Project REST URL 1. Still in **Project Settings**, open **Data API**. 2. Copy your project's REST endpoint. It looks like: ``` https://your-project-ref.supabase.co/rest/v1 ``` That's everything you need from Supabase. ## Step 3 — Create the Connect in FlowMattic 1. In your WordPress admin, go to **FlowMattic → Connects** and click **Connect Integration**. ![The Connects screen with the Connect Integration button](https://assets.infidesk.support/products/flowmattic/kb-images/supabase-connect/connects-page.png) 2. Search for **Supabase** and click the Supabase card. ![Searching for Supabase in the integration picker](https://assets.infidesk.support/products/flowmattic/kb-images/supabase-connect/pick-supabase.png) 3. Fill in the connect form: - **Connect Name** — anything that helps you recognize it later, e.g. *My Supabase Project*. - **Supabase API Key** — paste the secret key from Step 1. - **Project REST URL** — paste the REST endpoint from Step 2. ![The Supabase connect form with all three fields filled](https://assets.infidesk.support/products/flowmattic/kb-images/supabase-connect/connect-form.png) 4. Click **Save Connect**. Supabase now appears in your Connects list, ready to use in any workflow. ## What you can do once connected Add a **Supabase** action step to any workflow and pick from: - **Rows:** Insert Row, Bulk Insert Rows, Update Row, Upsert Row, Delete Row, Select Rows, Get Row by ID, Count Rows - **Functions:** Call a Postgres Function (RPC) - **Storage:** Upload File, List Files, Delete File, Get Public URL, Create Signed URL The integration also ships **triggers** — *New Row Inserted*, *Row Updated*, and *Row Deleted*. These are delivered through **Supabase Database Webhooks**: when you add a Supabase trigger to a workflow, FlowMattic shows you a webhook URL, and the trigger step's instructions walk you through adding it under **Database → Webhooks** in your Supabase project. ## Troubleshooting - **401 / permission denied on writes** — you connected with a publishable/anon key. Create the connect again with a secret (`sb_secret_…`) or `service_role` key. - **404 or "relation does not exist"** — double-check the Project REST URL: it must be your own project reference and end with `/rest/v1` (no trailing slash). - **Multiple projects?** Create one Connect per Supabase project and pick the right one on each workflow step. --- # Connect Zoom or Google Meet for booking links Source: https://support.flowmattic.com/kb/article/177/connect-zoom-or-google-meet-for-booking-links When a booking calendar's location is Zoom or Google Meet, FlowMattic can generate a real join link for each booking from the host's connected account. This guide covers connecting the account and assigning it to a calendar. ## Step 1 — Connect the account under Connects 1. Go to **FlowMattic → Connects**. 2. Add the connection for the account that should host the meetings: - **Zoom** — the Zoom integration must be installed first (under **FlowMattic → Integrations**), then connect your Zoom account here. - **Google Meet** — connect a **Google Calendar** account. Meet links are created through a Google Calendar event, so Bookings uses your Google Calendar connection for Meet. ![The FlowMattic → Connects screen with a Google Calendar account connected](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-bookings-connects-google.png) The account you connect is the one whose Zoom or Meet space each meeting is created in, so connect the host's account. ## Step 2 — Set the calendar's location and host account 1. Open your calendar under **FlowMattic → Bookings**. 2. In the **Location** section, set the location to **Zoom** or **Google Meet**. 3. In the account picker that appears — **Zoom account** for Zoom, or **Google account** for Google Meet — select the connected account that should host the meetings. 4. Save. ![The calendar editor's Location section set to Zoom, with the Zoom account picker](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-bookings-location-zoom.png) ## What happens on each booking When an invitee books, FlowMattic creates the meeting in the host's connected account and adds the join link to the confirmation email and the calendar invite automatically. ## If no account is connected If the location is Zoom or Meet but no account is picked, the booking still goes through — the invitee is booked — but no meeting link is added. As the editor notes, until you pick an account the confirmation email links to the booking page instead of a meeting link. Connect and select the account, and future bookings will include the link. --- # Context or Action Menu in FlowMattic Source: https://support.flowmattic.com/kb/article/34/context-or-action-menu-in-flowmattic In FlowMattic, the **Context Menu** or **Action Menu** appears when you click the three-dot icon next to an action step or route in the workflow. This menu provides a set of relevant actions, such as renaming, duplicating, copying, pasting, or deleting action steps and routes, making it easier to manage and organize your workflow elements. By offering these options directly within the workflow interface, the context menu streamlines the process of organizing and modifying actions steps and routes, saving time and reducing the need for navigation through other screens. **Context Menu:** Click the three-dot icon next to an action step or route to access the context menu, which provides various options for managing your workflow, including: ![](/storage/kb-images/7cef2cfa8c-Screenshot-2024-12-08-144809.png) ### 1\. **Rename** - The **“Rename”** option allows you to change the name of an element to make it more identifiable and organized, which is especially helpful in complex workflows. To rename, select this option, enter the new name, and save it. This ensures better organization and makes the workflow easier to navigate. - For an action step, renaming allows you to clarify its function or purpose within the workflow, making it easier to track and manage. For a route in a router, renaming helps to distinguish between different routes, improving workflow organization and clarity when managing multiple routes within the same router step. ### 2\. **Duplicate** - The **“Duplicate”** option allows you to create an exact copy of a selected action step or route, including all its conditions, actions, and configurations. This feature is ideal for reusing similar elements with slight modifications. - When duplicating an action step, the new copy is inserted just below the current step in the workflow, preserving the workflow’s structure. For a route within a router, the duplicated route is added at the end of the current list of routes, maintaining the logical order of the workflow. ### 3\. **Copy** - The **“Copy”** option allows you to copy the configuration of an action step or route without immediately placing it in the workflow. This gives you the flexibility to replicate a specific step or route and paste it elsewhere in the workflow when needed, enabling efficient adjustments and organization of your workflow without altering its current structure. ### 4\. **Paste Below** - The **“Paste Below”** option allows you to insert a copied element beneath the selected one in your workflow, ensuring the correct sequence is maintained. - When pasting a copied action step, it will be placed directly below the selected step, keeping the workflow’s order intact. For routes within a router, when you paste a copied route using “Paste Below,” it will be inserted next to the current route, ensuring it fits logically within the sequence and maintains the proper execution order. ### 5\.**Paste to Replace** - The **“Paste to Replace”** option allows you to replace an existing element with a copied one, completely overwriting the original, including all actions and configurations. This ensures that the new element fully replaces the old one, preserving the integrity of the workflow's structure. - For an action step, when you use "Paste to Replace," the original action step is replaced by the copied one, maintaining the workflow's logical flow. In the case of a route, when you paste a route using “Paste to Replace,” the original route is overwritten, including all the steps within that route, ensuring that the new route takes its place seamlessly in the workflow. ### 6\. Delete - The **“Delete”** option allows you to permanently remove an action step from your workflow when it is no longer needed. Once deleted, the action step is completely removed, and it cannot be restored. Ensure the action step is no longer required before deleting it. - For routes within a router, if a route is deleted, it is permanently removed from the workflow. If all routes are deleted, the entire Router step will also be deleted, effectively removing that entire segment from the workflow. --- # Counter Source: https://support.flowmattic.com/kb/article/39/counter The **FlowMattic Counter** is a versatile feature designed to track and manage numerical values in workflows dynamically. Whether you need to generate sequential numbers, assign unique IDs, or keep a count of specific events, the Counter simplifies these tasks through automation. It is ideal for use cases like tracking orders, monitoring event participation, or managing ticket numbers. This tool allows you to configure starting values, increment or decrement numbers automatically, and format the output with prefixes, suffixes, or padded digits. With its user-friendly interface, you can set up counters with ease while enjoying the flexibility to apply advanced customization for specific workflow requirements. ### Setting Up a Counter in FlowMattic #### 1\. Create a New Workflow Go to the FlowMattic Dashboard, where you can manage and create workflows. To start a new workflow, click the **“New Workflow”** button located in the top-right corner of the Dashboard. This will begin the process of creating your new workflow. #### 2\. Add a Counter Action - In the workflow editor, click the **+** icon to add a new step. From the list of available tools, select **Counter** under the FlowMattic built-in tools section. This tool is essential for automating the tracking of numbers, whether for incrementing or decrementing purposes. - Once selected, choose an appropriate **Action Event** for the counter. Select **Incremental Counter** to increase the number or **Decremental Counter** to reduce it. This depends on whether you want to count up (e.g., for order numbers) or count down (e.g., for ticket availability). ![](/storage/kb-images/e03927c2bd-Screenshot-2024-12-11-170822.png) #### 3\. Configuring the Counter Settings - **Initial Value**: This is the starting point for your counter, where the counting will begin. You can set it to any integer depending on your needs (e.g., `0`, `1`, or `5`). This ensures the counter starts from a defined number before any counting takes place. - **Increment/Decrement Value**: This defines the amount by which the counter should change after each execution. If you want the counter to increase, set a positive value (e.g., `1`). For decreasing, set a negative value (e.g., `-1`). This controls how quickly or slowly the counter progresses. - **Reset on Execution**: Select "Yes" if you want the counter to reset to the initial value after each execution. This ensures the counter starts fresh each time the step is executed. If you select "No," the counter will continue from its current value, without resetting. ![](/storage/kb-images/a8650e8713-Screenshot-2024-12-11-170948.png) #### 4\. Save and Test the Counter - Once the configuration is complete, use the **Test Action** feature to verify the counter’s behavior. This allows you to check whether the counter increments or decrements as intended and ensures that the output formatting meets your expectations. - After testing, click **Save & Close**. This will finalize the counter setup, making it ready for use in your workflow. You can now reference the counter’s output in subsequent actions or integrate it into other applications seamlessly. --- # Create a booking from a workflow Source: https://support.flowmattic.com/kb/article/178/create-a-booking-from-a-workflow A workflow can create a booking on one of your calendars with the **Add Booking** action. This is useful when the booking should follow another event automatically — a successful checkout, a form submission, or a step in an AI agent's chain. ## Step 1 — Have a calendar ready Create the target calendar under **FlowMattic → Bookings** first, with its availability set. The Add Booking action books a slot on an existing calendar; it does not create the calendar. ## Step 2 — Add the Add Booking action 1. Open your workflow and add an action step. 2. Search for **FlowMattic Bookings** and choose **Add Booking**. ![Adding the FlowMattic Bookings → Add Booking action to a workflow](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-bookings-wf-add-booking-action.png) ## Step 3 — Pick the calendar and fill the booking 1. Select the target **Calendar** from the picker. 2. Fill the required fields: **Date** (`YYYY-MM-DD`), **Time** (`HH:MM`, 24-hour), **Invitee Name**, and **Invitee Email**. 3. Optionally add **Phone**, **Company**, **Notes**, **Guest Emails**, **Time Zone**, and **Status** (Confirmed or Pending). Map these fields from captured data in earlier steps — for example the customer details from an order trigger or a form submission. ![The Add Booking action fields — Calendar, Date, Time, and Invitee Name mapped from captured data](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-bookings-wf-add-booking-fields.png) ## Step 4 — Save and use the result Save the step. When it runs, the action: - Creates the booking on the calendar. - Schedules that booking's reminder and follow-up emails. - Fires the same **New Booking** event other bookings fire, so any workflow watching that calendar also runs. - Returns the booking object, so later steps can use its details (such as the manage URL). ## Note A booking created this way behaves exactly like one made on the public page — it appears in the calendar's Bookings view and follows the same lifecycle events. --- # Create a PDF template with AI Source: https://support.flowmattic.com/kb/article/179/create-a-pdf-template-with-ai FlowMattic can draft a PDF template from a written description using a connected AI provider. Instead of laying the document out by hand, you describe what you need and the AI generates a starter template in your library, which you then refine in the PDF Template Builder. ## Before you start AI generation uses a provider connected under **FlowMattic → Connects**, and requires the AI Agent integration to be enabled. Add a provider connection first if you have not already. ## Step 1 — Open the AI generator 1. Go to **FlowMattic → PDF Templates**. 2. Click **Generate with AI** at the top of the page. (You can also start from the **New PDF Template** dialog by choosing the **Generate with AI** tile and clicking **Start with AI**, or use the **Generate with AI** tile inside the builder.) ![The PDF Templates page with the Generate with AI button highlighted](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-pdf-template-builder-pdf-generate-with-ai.png) ## Step 2 — Describe the document In the **Generate a PDF with AI** dialog: 1. Write your brief in **Describe your document** — the more specific, the better. For example: *"Quarterly SaaS invoice with a line-item table, tax breakdown, and payment terms."* Or click one of the **Or start from a template** chips: Invoice, Receipt, Quote, Report, or Contract. 2. Set the **Page size** and **Orientation**. 3. Optionally set a **Template name** — left blank, it is derived from your brief. 4. Choose the **AI provider** and its **Connect**, and optionally a **Model**. ![The Generate a PDF with AI dialog with a filled-in brief, page size, orientation, and provider selected](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-pdf-template-builder-pdf-ai-modal.png) ## Step 3 — Generate Click **Generate template**. Generation is experimental and can take roughly 20–60 seconds. When it finishes, the new template opens in the PDF Template Builder. ## Step 4 — Review and refine Always review the generated result before using it. Check the layout, correct any wording, and confirm the merge tags match the data your workflow will send — the AI marks the dynamic parts as `{{tokens}}`, and you can adjust them in the editor. See *Bind dynamic data in PDF templates with tokens and sample data*. ## Step 5 — Use it in a workflow Once the template looks right, render it from any workflow with the **PDF Builder → Generate PDF from Template** action, selecting this template and mapping your data. See *Generate a PDF from a template in a workflow*. --- # Create a single-use booking link Source: https://support.flowmattic.com/kb/article/180/create-a-single-use-booking-link A single-use booking link can be claimed once. As soon as someone books, it locks and stops accepting bookings. This is useful for a specific prospect, a paid session, or any slot you only want one person to take. ## Step 1 — Create a single-use calendar 1. Go to **FlowMattic → Bookings** and click **New Booking Calendar**. 2. In the **Event details** section, turn on **Single-use link**. It generates a one-time scheduling link with a random, unguessable URL; after one booking the link locks and shows a "no longer available" page. A calendar's link type is fixed once the calendar is created — you cannot convert a regular calendar to single-use or back afterward. Decide before you save. ![The calendar editor's Event details with the Single-use link option enabled](https://assets.infidesk.support/kb/inline/2026/07/Mq2QP9PD2ffKZ1s7puzczyE4gWp7ijjJ0Tr6If4d.png) ## Step 2 — Set the slot details Set the **Duration** and a tight **Date range** covering only the times you have free, so the recipient can only pick from those. ## Step 3 — Copy and send the one-time link Save the calendar and copy its **Booking link** — a one-time URL ending in `/d/{token}/` with a random token. The share rail labels it **One-time link**. Send this link directly to the one person who should book. ![The calendar's Booking link — the one-time link with its random /d/{token}/ URL and a Regenerate control](https://assets.infidesk.support/kb/inline/2026/07/ppO37Pvn5IvsQw6uodq1ZvZNpmM0KZTpbta5lVfA.png) ## What happens after they book As soon as the prospect books, the link locks and shows a "no longer available" page, and stops accepting further bookings. If you need to offer that same calendar again, click **Regenerate** on the calendar's **Booking link** to swap in a fresh token (this replaces the calendar's own link). To hand out a new link per customer automatically instead, use the workflow action below. ## Automate it — issue a fresh link on every payment You don't have to regenerate links by hand. Add a **FlowMattic Bookings → Regenerate Single-Use Link** action to any workflow, and it issues a brand-new single-use link for the calendar each time it runs. A common setup: a payment gateway — Stripe, PayPal, WooCommerce, Paddle, or anything that can send a webhook — confirms a payment, and the workflow emails the buyer their own private booking link. - Point the action at your single-use calendar, or leave it empty to use the calendar from the trigger. - Each run returns the new link as the `{{booking_link}}` merge tag — map that into an **Email** step. (The calendar's own link stays in `{{calendar_url}}`.) - **Issued links are additive.** Sending a new link never voids the ones you've already sent: every issued link books exactly once and locks only itself, and your calendar's own link keeps working too. So you can hand a fresh link to every paying customer without any of them voiding another. ![The workflow builder — a Webhooks trigger, then FlowMattic Bookings → Regenerate Single-Use Link with the Calendar field set, then a Send Email step with the {{booking_link}} tag in the message body](https://assets.infidesk.support/kb/inline/2026/07/RtoSanWFR9Jr3BjwKdrgI1ZozvWCa9RR0s0JaREK.png). ## Note Single-use bookings fire the same lifecycle events as any other booking, so you can still automate the follow-up with a workflow. See *Trigger a workflow on bookings*. --- # Create a WP Table from a CSV File Source: https://support.flowmattic.com/kb/article/243/create-wp-table-from-csv Have your data in a spreadsheet already? Export it as a CSV and FlowMattic builds the WP Table for you — columns, types and all — ready to use in your workflows in under a minute. ## Step 1 — Open WP Tables and click Import CSV Go to **FlowMattic → WP Tables**. Next to Create New Table you'll find **Import CSV**. ![The Import CSV button on the WP Tables screen](https://assets.infidesk.support/products/flowmattic/kb-images/wp-table-csv/wpc-01-import-button.png) ## Step 2 — Upload your CSV file Drag your file onto the upload area, or click to browse. Files up to 20 MB are accepted, and the first row of the CSV is read as the column headers. ![The CSV upload step](https://assets.infidesk.support/products/flowmattic/kb-images/wp-table-csv/wpc-02-upload.png) ## Step 3 — Review the table and its columns FlowMattic reads the file in your browser and prepares everything for review: - **Table name** — prefilled from the file name. Letters, numbers and underscores, up to 64 characters. - **Database** — Local is your WordPress database; any database you've connected is listed too. - **Fields** — one row per CSV column with its name, a sample value, and the detected type. Numbers, emails, dates, date-times, checkboxes, links and long text are recognized automatically from the data — adjust any name or type, and mark a field Required if every row must include it. ![Reviewing the table name, database and detected columns](https://assets.infidesk.support/products/flowmattic/kb-images/wp-table-csv/wpc-03-mapping.png) Every table automatically gets an `id` primary key, and field names are lowercased with spaces turned into underscores — `First Name` becomes the `first_name` column. ## Step 4 — Import Click **Import**. FlowMattic creates the table, then inserts your rows in batches of 50 so large files import reliably. If a batch fails mid-way — a dropped connection, for example — you can resume right where it stopped. ![The finished import](https://assets.infidesk.support/products/flowmattic/kb-images/wp-table-csv/wpc-04-success.png) ## Step 5 — Open your table Click **Open table** and your data is there — typed columns, inline editing, search, filters and CSV export, like any other WP Table. Workflows can read and write it right away. ![The imported data in the table grid](https://assets.infidesk.support/products/flowmattic/kb-images/wp-table-csv/wpc-05-grid.png) ## Good to know - **Checkbox values just work.** `yes`/`no`, `true`/`false`, `on`/`off` and similar values become properly checked or unchecked boxes. - **A column named `id` is renamed `csv_id`** — the automatic primary key owns that name. - **Table names must be unused.** If a table with the same name already exists in the chosen database (in any letter case), the import tells you so — pick another name. - **Rows that don't fit are skipped, not mangled.** A value that can't pass its column's type check (text in a number column, say) skips that row and the summary tells you how many were skipped and why. - **Adding more data later?** Open the table and use its own **Import CSV** button — that one appends rows to the existing table with the same mapping wizard. --- # Create Custom Variables Source: https://support.flowmattic.com/kb/article/6/create-custom-variables Here's a **step-by-step tutorial** based on how to create and use variables in FlowMattic. ### Step-by-Step Guide: Creating a Custom Variable in FlowMattic #### Step 1: Navigating to the Variables Section 1. **Login to FlowMattic** and access your dashboard. 3. In the left-hand menu, click on **"Variables"**. - This will take you to the **Variables Management** screen where you can see a list of previously created variables or create new ones. #### Step 2: Creating a New Variable 1. On the Variables screen, click on the **"Add New Variable"** button (usually located at the top of the page). 3. A form will appear, prompting you to fill in the details for the new variable. - **Variable Name**: - Enter a unique and meaningful name for your variable (e.g., `current_time` or `user_id`). - **Variable Value**: - This field accepts a plain text value, dynamic placeholders, or even a PHP function. For example: - Entering `PHP:time()` as the value will dynamically call the `time()` function whenever this variable is accessed in your workflow, returning the current Unix timestamp. - Similarly, you can use other PHP functions like `PHP:date("Y-m-d")` to return a formatted date. #### Step 3: Using PHP in Variables - FlowMattic supports PHP functions directly in the **Variable Value** field, which is extremely useful for dynamically generating data. - **Example:** - If you input `PHP:time()` as the variable value, FlowMattic will evaluate the PHP code when the variable is accessed in the workflow. - This ensures that the value is always current and generated at runtime. #### Step 4: Saving the Variable 1. After entering the **Variable Name** and **Variable Value**, click on **"Save"** or **"Create"**. - Your variable will now appear in the list of available variables, and its value will be updated each time it is accessed in workflows. #### Step 5: Using the Variable in a Workflow 1. Navigate to the **Workflows** section of FlowMattic. 3. When creating or editing a workflow, locate the step where you wish to use the variable. - Most fields that accept dynamic data (such as messages, emails, or API requests) will allow you to insert variables. 1. Click the **"Database"** icon or in the input field to bring the dynamic data dropdown, then find the variable in the "Variables" toggle. OR type the variable name (e.g., `{{variable_name}}`) where you want to use the variable. - If you created a variable with a PHP function (e.g., `PHP:time()`), this function will be called and evaluated dynamically when the workflow is triggered. #### Step 6: Testing Your Variable 1. Run your workflow and check the output to ensure that the variable works as expected. - For example, if you used the `PHP:time()` function, the workflow should output the current Unix timestamp wherever you used the variable. ### Example Use Case - **Current Timestamp Variable**: - If you create a variable `current_time` with the value `PHP:time()`, you can use this variable in an email, API request, or other workflow step to always have the exact timestamp when the workflow runs. - **Formatted Date Variable**: - If you want the current date in `YYYY-MM-DD` format, you can create a variable with the value `PHP:date("Y-m-d")`. ### Conclusion By following these steps, you can effectively create and manage custom variables in FlowMattic, using PHP functions for dynamic and real-time data processing in your workflows. This is especially useful for automating tasks that rely on up-to-date information like timestamps, dates, or other PHP-based calculations. --- # Create QR-coded images Source: https://support.flowmattic.com/kb/article/181/create-qr-coded-images An image template can include a QR code whose target is different on every render. This is how you produce unique event tickets, attendee badges, or check-in cards where each person gets their own scannable code. ## Step 1 — Add a QR element 1. Open your template in **FlowMattic → Image Templates**. 2. On the **Elements** tab, drag a **QR Code** element onto the canvas and position it where the code should appear. ![The image editor with a QR Code element placed on the canvas](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-image-template-img-qr-on-canvas.png) ## Step 2 — Bind the QR value to a token 1. Select the QR Code element. 2. On the **Element** tab, set its **URL / Value** field to a token such as `{{ticket_url}}`. The URL / Value can be any text or URL. Using a token means the encoded value comes from your workflow at render time rather than being fixed. Set the code's on-canvas size with its **W** and **H** under **Position & size**. ![The QR Code element's Element tab with the URL / Value field set to {{ticket_url}}](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-image-template-img-qr-value-field.png) ## Step 3 — Add any supporting tokens Add other tokens the design needs, such as a `{{attendee_name}}` heading, so each image is personalised alongside its unique code. See *Add tokens and sample data to an image template*. ## Step 4 — Map the token in your workflow 1. In your workflow, add the **Image Builder → Generate Image from Template** action and pick this template in the **Image Template** dropdown. 2. Map `ticket_url` to the unique URL for the current record — for example the manage/booking URL from a booking trigger, or a per-attendee link you generated earlier. 3. Map `attendee_name` to the person's name. Each time the workflow runs, the QR element resolves its token to that run's value before the image is rendered, so every image encodes a distinct, scannable code. ## Generating many at once To produce one QR image per person in a list, place the Generate Image action inside an **Iterator** step and map the tokens to the loop's current item. See *Bulk-generate images with the Iterator*. --- # Create Reusable Workflow Steps with Sub-Workflows Source: https://support.flowmattic.com/kb/article/110/create-reusable-workflow-steps-with-sub-workflows Ready to supercharge your FlowMattic workflows? This guide walks you through creating and using Sub-Workflows step by step. By the end, you'll have built your first reusable workflow component. ## Before You Start **What you'll learn:** - How to build a Sub-Workflow from scratch - How to pass data to Sub-Workflows - How to return data from Sub-Workflows - How to call Sub-Workflows from parent workflows - Best practices and troubleshooting tips **What you'll need:** - WordPress site with FlowMattic plugin installed - Access to FlowMattic dashboard in WordPress admin - Basic familiarity with creating FlowMattic workflows - 15 minutes to follow along **Important Note:** FlowMattic is a WordPress plugin, so you'll be working within your WordPress admin dashboard throughout this tutorial. ## The FlowMattic Sub-Workflow Process FlowMattic has a unique approach to creating Sub-Workflows. Here's the high-level process: 1. **Create parent workflow** → Add trigger and initial steps 2. **Add Call Sub-Workflow action** → Configure parameters to pass 3. **Create Sub-Workflow in new tab** → Set Sub-Workflow trigger 4. **Click "Capture Response"** → Sub-Workflow listens for data 5. **Test parent workflow action** → Sends test data to Sub-Workflow 6. **Sub-Workflow captures parameters** → Now has the data structure 7. **Build Sub-Workflow actions** → Process the captured data 8. **Add Return Response** → Send results back to parent 9. **Complete parent workflow** → Use returned data **Why this order?** It makes parameter passing automatic and error-free. The Sub-Workflow captures exactly what the parent sends. --- ## Part 1: Create Your Parent Workflow First Unlike some automation platforms, FlowMattic has a unique workflow for setting up Sub-Workflows. You'll start with the parent workflow, then create the Sub-Workflow. This approach makes parameter passing easier and more intuitive. Let's create a practical example: a Sub-Workflow that formats customer contact information. ### Step 1: Create the Parent Workflow 1. In WordPress admin, navigate to **FlowMattic → Workflows** 2. Click **Create New Workflow** 3. Name it: "Gravity Forms to CRM" (this is our parent workflow) 4. Click **Save** ### Step 2: Add Your Trigger For this example, let's use a Gravity Forms trigger: 1. Click **Choose Trigger App** 2. Select **Gravity Forms** 3. Choose **New Form Response** as the trigger event 4. Connect your Gravity account and select your form 5. Test the trigger to ensure data is coming through ### Step 3: Add the Call Sub-Workflow Action Here's where it gets interesting. You'll add the Sub-Workflow call action BEFORE creating the actual Sub-Workflow: 1. Click **Add New Step** 2. Search for and select **Sub-Workflow** 3. Choose **Call Sub-Workflow** action 4. Click **Continue** ### Step 4: Configure Parameters to Pass Now define what data you want to send to the Sub-Workflow: 1. Click **Add Parameter** in the Call Sub-Workflow action 2. Add your first parameter: - **Key:** `customer_email` - **Value:** Map to `{trigger.email_address}` from your form 3. Click **Add Parameter** again 4. Add second parameter: - **Key:** `customer_phone` - **Value:** Map to `{trigger.phone_number}` from your form 5. Add third parameter: - **Key:** `customer_name` - **Value:** Map to `{trigger.full_name}` from your form ![call-sub-workflow-action.png](/storage/kb-images/2a94d9ceae-inline.png) **Parameter naming best practices:** - Use lowercase with underscores (snake_case): `customer_email` not `CustomerEmail` - Be descriptive: `order_total` not just `total` - Group related parameters with prefixes: `customer_email`, `customer_name`, `customer_phone` **Important:** Don't test this action yet. We need to create the Sub-Workflow first. --- ## Part 2: Create the Sub-Workflow Now you'll create the actual Sub-Workflow that will process this data. ### Step 5: Open New Tab and Create Sub-Workflow **Keep your parent workflow tab open!** You'll need to switch between tabs. 1. **Right-click** **FlowMattic → Workflows** and open in a new tab 2. In the new tab, click **Create New Workflow** 3. Name it descriptively: "Format Customer Contact Info" - Good names: "Format Customer Data", "Validate Email Address", "Calculate Shipping Cost" - Avoid: "Sub-Workflow 1", "Helper", "Utility" **Why naming matters:** This name appears in dropdowns and helps you identify the workflow's purpose. ### Step 6: Set the Sub-Workflow Trigger 1. Click **Choose Trigger App** 2. Select **Sub-Workflow** 3. Choose **Start Sub-Workflow** as the trigger event 4. Click **Continue** ![sub-workflow - trigger step.png](/storage/kb-images/37cb5095c4-inline.png) This tells FlowMattic this workflow will be called by other workflows. ### Step 7: Click "Capture Response" **This is the crucial step that makes FlowMattic unique:** 1. In the Sub-Workflow trigger settings, click **Capture Response** button 2. This puts the Sub-Workflow in "listening mode" 3. You'll see a message: "Waiting to capture request from parent workflow..." 4. **Keep this tab open** ### Step 8: Go Back to Parent Workflow and Test 1. Switch back to your **parent workflow tab** 2. Scroll to the **Call Sub-Workflow** action 3. Click **Test Action** 4. The parent workflow will send the test data to your Sub-Workflow ### Step 9: Return to Sub-Workflow to See Captured Data 1. Switch back to your **Sub-Workflow tab** 2. You should see: "Request captured successfully!" 3. The Sub-Workflow now has the parameters captured: - `customer_email` - `customer_phone` - `customer_name` 4. Click **Save** to store the captured structure **What just happened?** The parent workflow sent test data, and the Sub-Workflow captured the parameter structure. Now you can use these parameters in your Sub-Workflow actions. ### Step 10: Add Your Processing Actions Now build the logic to process the captured data: **Action 1: Clean Email Address** 1. Click **Add New Step** 2. Select **Text Formatter** 3. Choose **Lowercase** action 4. In the **Text** field, insert: `{customer_email}` (available from captured parameters) 5. Click **Save** **Action 2: Remove Email Whitespace** 1. Add another step 2. Select **Text Formatter** 3. Choose **Trim Whitespace** action 4. In the **Text** field, insert the output from Action 1 5. Click **Save** **Action 3: Format Phone Number** 1. Add another step 2. Select **Text Formatter** 3. Choose **Extract Numbers** action 4. In the **Text** field, insert: `{customer_phone}` 5. This removes all non-numeric characters: `(555) 123-4567` becomes `5551234567` **Action 4: Proper Case Name** 1. Add another step 2. Select **Text Formatter** 3. Choose **Title Case** action 4. In the **Text** field, insert: `{customer_name}` 5. This converts `john doe` or `JOHN DOE` to `John Doe` ### Step 11: Add the Return Response Action **CRITICAL:** Every Sub-Workflow must end with a Return Response action. 1. Click **Add New Step** 2. Select **Sub-Workflow** 3. Choose **Return Response** action 4. Click **Continue** Now define what data to send back to the parent workflow: 1. Click **Add Response Parameter** 2. Add first response: - **Key:** `formatted_email` - **Value:** Insert the output from Action 2 (the trimmed, lowercase email) 3. Add second response: - **Key:** `formatted_phone` - **Value:** Insert the output from Action 3 (numbers only) 4. Add third response: - **Key:** `formatted_name` - **Value:** Insert the output from Action 4 (title case name) ![return-response.png](/storage/kb-images/fe2c47de42-inline.png) ### Step 12: Save and Enable the Sub-Workflow 1. Click **Save Workflow** 2. **Important:** Toggle the workflow status to **ON** (enabled) 3. The Sub-Workflow is now ready to be called --- ## Part 3: Complete the Parent Workflow Now go back to your parent workflow and finish it. ### Step 13: Verify the Sub-Workflow Connection 1. Switch back to your **parent workflow tab** 2. In the **Call Sub-Workflow** action, click the **Sub-Workflow** dropdown 3. You should now see "Format Customer Contact Info" in the list 4. Select it 5. Verify your parameters are still mapped correctly ### Step 14: Use the Returned Data The Sub-Workflow will now return formatted data. Let's use it to create a CRM contact: 1. Click **Add New Step** after the Call Sub-Workflow action 2. Select your **CRM app** (HubSpot, Salesforce, etc.) 3. Choose **Create Contact** action 4. Map the fields using the returned data: - **Email:** `{sub_workflow.formatted_email}` - **Phone:** `{sub_workflow.formatted_phone}` - **Name:** `{sub_workflow.formatted_name}` **Notice the prefix:** All returned data from Sub-Workflows uses `{sub_workflow.your_key_name}` > Note: The dynamic tags used in this article are for representative purpose only. You should use the dynamic tag selection dropdown and choose the tag wisely. ### Step 15: Test the Complete Workflow 1. Click **Test Workflow** on the parent workflow 2. Submit a test form response 3. Watch the execution: - Parent workflow triggers - Calls Sub-Workflow with parameters - Sub-Workflow processes data - Returns formatted data - Parent workflow creates CRM contact 4. Check your CRM to verify the contact was created with formatted data **Congratulations!** You've created your first working Sub-Workflow in FlowMattic. --- ## Part 4: Reuse Your Sub-Workflow in Other Workflows The real power of Sub-Workflows comes from reusing them. Let's create another parent workflow that uses the same Sub-Workflow. ### Example: FluentCart Orders to CRM Same Sub-Workflow, different data source. This shows the power of reusability. ### Step 1: Create New Parent Workflow 1. Navigate to **FlowMattic → Workflows** 2. Click **Create New Workflow** 3. Name it: "FluentCart Orders to CRM" 4. Set trigger to **FluentCart → New Order** 5. Configure and test the trigger ### Step 2: Add Call Sub-Workflow Action 1. Click **Add New Step** 2. Select **Sub-Workflow** 3. Choose **Call Sub-Workflow** action 4. In the dropdown, select **"Format Customer Contact Info"** (your existing Sub-Workflow) ### Step 3: Map Different Parameters Now map the FluentCart data to the same Sub-Workflow parameters: 1. **customer_email:** Map to `{trigger.customer.email}` 2. **customer_phone:** Map to `{trigger.customer.phone}` 3. **customer_name:** Map to `{trigger.customer.first_name} {trigger.customer.last_name}` **Notice:** Same parameter names, different data sources. The Sub-Workflow doesn't care where the data comes from. ### Step 4: Use the Returned Data 1. Add a new step 2. Select your **CRM app** 3. Choose **Update or Create Contact** action 4. Map fields: - **Email:** `{sub_workflow.formatted_email}` - **Phone:** `{sub_workflow.formatted_phone}` - **Name:** `{sub_workflow.formatted_name}` ### Step 5: Save and Test 1. Save the workflow 2. Enable it 3. Test with a real or test FluentCart order **Result:** Same Sub-Workflow, different trigger, same reliable formatting logic. If you need to change how phone numbers are formatted, update the Sub-Workflow once and both parent workflows instantly use the new logic. --- ## Understanding the Workflow Flow Here's what happens when a parent workflow runs: ``` 1. Parent Workflow Trigger Fires (Gravity Form submitted, FluentCart order created, etc.) ↓ 2. Parent Workflow Actions Execute (Any steps before the Sub-Workflow call) ↓ 3. Call Sub-Workflow Action Sends Data Parameters: customer_email, customer_phone, customer_name ↓ 4. Sub-Workflow Receives Parameters Trigger: Start Sub-Workflow captures the data ↓ 5. Sub-Workflow Actions Execute Format email → Trim spaces → Format phone → Format name ↓ 6. Sub-Workflow Returns Response Returns: formatted_email, formatted_phone, formatted_name, status ↓ 7. Parent Workflow Receives Response Data available as {sub_workflow.key_name} ↓ 8. Parent Workflow Continues Uses returned data in subsequent steps ↓ 9. Parent Workflow Completes ``` --- ### Using Dynamic Return Values You don't have to return static keys. Build them dynamically: **Example: Return processed item count** - Action step: Count items in a list → Result: `5` - Return Response: - Key: `items_processed` - Value: `{count_step.result}` ### Nesting Sub-Workflows Sub-Workflows can call other Sub-Workflows (but avoid circular references): **✅ Allowed:** - Sub-Workflow A calls Sub-Workflow B - Sub-Workflow C calls Sub-Workflow B - Sub-Workflow A calls Sub-Workflow C **❌ Not Allowed:** - Sub-Workflow A calls Sub-Workflow B - Sub-Workflow B calls Sub-Workflow A - (This creates an infinite loop) --- ## Best Practices ### Design for Reusability **Do:** - Keep Sub-Workflows focused on one task - Use generic parameter names when possible - Think about all potential use cases upfront - Document what parameters expect **Don't:** - Hardcode specific values - Make "mega Sub-Workflows" that do everything - Use workflow-specific logic ### Naming Conventions **Parameters and return keys:** ``` ✅ Good: customer_email, order_total, is_valid ❌ Avoid: email, total, valid ``` **Why?** Descriptive names prevent confusion when you have multiple Sub-Workflows. --- ## Troubleshooting Common Issues ### Issue: "Capture Response" Not Working **Possible causes:** - Parent workflow not set up correctly - Sub-Workflow not in listening mode **Solutions:** - ✅ Ensure you clicked "Capture Response" in the Sub-Workflow BEFORE testing parent workflow - ✅ Keep the Sub-Workflow tab open and visible while testing parent - ✅ Check that the Call Sub-Workflow action has parameters configured - ✅ Try refreshing both browser tabs and start over ### Issue: Sub-Workflow Not Appearing in Dropdown **Solutions:** - ✅ Ensure the Sub-Workflow has "Start Sub-Workflow" trigger - ✅ Verify the Sub-Workflow is saved and enabled (toggle is ON) - ✅ Refresh the parent workflow page - ✅ Clear WordPress cache if using a caching plugin ### Issue: Parameters Not Available in Sub-Workflow **Check:** - ✅ Did you complete the "Capture Response" step successfully? - ✅ Did you test the Call Sub-Workflow action in parent workflow? - ✅ Are you using the correct parameter names (case-sensitive)? - ✅ Check the Sub-Workflow trigger settings to see captured parameters ### Issue: No Data Returned to Parent Workflow **Check:** - ✅ Return Response action is added to Sub-Workflow - ✅ Return Response is the last step in Sub-Workflow - ✅ Return Response parameters have valid values mapped - ✅ Sub-Workflow is enabled and saved - ✅ Sub-Workflow isn't failing before Return Response step ### Issue: "Sub-workflow is currently disabled" Error **Solution:** 1. Go to **FlowMattic → Workflows** 2. Find the Sub-Workflow mentioned in the error 3. Click the toggle to turn it **ON** 4. Return to parent workflow and test again ### Issue: Parent Workflow Fails After Sub-Workflow Call **Check:** - ✅ Using correct return key names: `{sub_workflow.key_name}` - ✅ Return keys match exactly what you defined (case-sensitive) - ✅ Sub-Workflow completed successfully (check execution logs) - ✅ Returned data type matches expected type in parent workflow ### Issue: "Circular dependency detected" Error **Solution:** Your Sub-Workflow structure creates an infinite loop: - Sub-Workflow A calls Sub-Workflow B - Sub-Workflow B calls Sub-Workflow A Restructure your workflows to break the circular reference. ### Issue: Parameters Have Wrong Data **Check:** - ✅ Parameter mapping in parent workflow is correct - ✅ Using the right trigger fields (check field names) - ✅ Data exists in the trigger (test trigger first) - ✅ No typos in parameter keys --- **Need help?** Visit [FlowMattic Support](https://support.flowmattic.com) or contact our support team. --- **Related Articles:** - Understanding Sub-Workflows in FlowMattic - FlowMattic Sub-Workflows and How to Use Them --- # Creating Custom App for your application using APIs Source: https://support.flowmattic.com/kb/article/58/creating-custom-app-for-your-application-using-apis Creating a custom app within FlowMattic provides a powerful way to integrate external applications that are not already available in the FlowMattic integrations library. This guide outlines the steps required to create a custom application using APIs in FlowMattic, enabling you to extend its functionality and streamline your workflows. ### Steps to Create a Custom App #### 1. Navigate to the Custom Apps Section Begin by accessing the WordPress dashboard. From there, locate and open the `FlowMattic -> Custom Apps` section to manage or create new custom applications. #### 2. Create a New Application To initiate the creation of a custom application: - Click on the `Create New App` button. - In the `App Info` tab, provide the necessary details such as the name and description of the app. - Once all required fields are completed, click on the `Save App Info` button to finalize the creation of your custom application. #### 3. Add Actions to Your Custom Application Actions are the tasks your custom app can perform. To define these actions: - Navigate to the `Actions` tab within your custom app. - Actions may include tasks like creating, updating, or managing specific data, depending on your requirements. #### 4. Configure a New Action To set up a new action for your custom app: - Click on the `Create New Action` button. This will open a configuration popup. - In the popup, you will find the following fields to configure: - **Action Name**: Provide a meaningful and descriptive name for the action (this is a mandatory field). - **Action Description**: Optionally, include a brief description of what the action does. - **Action Event API Configuration**: Specify the API endpoint, body, and header parameters. Alternatively, you can import a cURL request for faster setup. #### 5. Configure Action Settings in Detail Use the available configuration tabs to define the action’s settings: - **Basic**: - Set the API Endpoint, HTTP Method (e.g., GET, POST, PUT, DELETE), and Request Content Type (e.g., JSON, XML, Form Data). - **Headers**: - Enable and add any headers required by the API you are integrating with. - **Body**: - Enable Request Body Parameters and input the necessary fields. - If the API requires custom JSON or XML, you can input it in the `Request Body (Raw JSON/XML)` section. - Use placeholders (e.g., `{{title}}`, `{{content}}`) to dynamically reference parameters within your workflow. #### 6. Save the Configured Action Once you have completed configuring the action, click the `Save Action` button to store the action within your custom app. #### 7. Use the Custom Application in Workflows After completing the setup, your custom app will be available for use in FlowMattic workflows. You can now integrate it seamlessly into your automation processes. ### Importing cURL Requests for Quick API Configuration FlowMattic simplifies the process of configuring actions by allowing you to import cURL requests directly. Here’s how you can leverage this feature: 1. Open your custom app and navigate to the `Actions` tab. 2. Click on the `Create New Action` button to add a new action. 3. In the action configuration popup, select the `Import cURL Request` button. 4. Paste the cURL request into the provided text area and click the `Process Request` button. 5. FlowMattic will parse the cURL request and automatically set the API endpoint, body, and header parameters. 6. Review the parsed configuration and make any necessary adjustments. 7. After verifying the details, click the `Save Action` button to save the action. It is recommended to test the action after saving to ensure that it functions as expected. Using the cURL request import feature can significantly reduce setup time, especially when integrating with APIs that provide example cURL requests in their documentation. Tools like Postman can also be used to test APIs and generate cURL requests for import into FlowMattic. ### Additional Tips for Success - Always have the API documentation for the application you are integrating at hand. This will help you understand the required endpoints, parameters, and authentication methods. - Thoroughly test API endpoints and parameters before finalizing your configuration to avoid errors during execution. - Use clear and descriptive names for your actions. This will make it easier to manage and organize your workflows within FlowMattic. By following these detailed steps, you can effectively extend the capabilities of FlowMattic to connect with virtually any application that supports APIs. This flexibility allows you to create robust and customized automation workflows tailored to your specific needs. If you encounter any issues or require assistance while creating your custom app or importing cURL requests, do not hesitate to reach out to FlowMattic support for guidance. We are always here to help! --- # CSV Creator by FlowMattic Source: https://support.flowmattic.com/kb/article/115/csv-creator-by-flowmattic Export & Generate CSV Files Automatically. CSV Creator is a powerful FlowMattic integration that enables you to automatically generate and export CSV files from multiple data sources in WordPress. Create CSV files from FlowMattic Tables, JSON data, or arrays, with advanced filtering using custom WHERE queries and dynamic date range shortcuts. Perfect for automated data exports, reporting workflows, customer list management, and seamless integration with external systems. All generated CSV files are automatically saved to your WordPress media library with customizable delimiters, headers, and file naming options. Key Features: Database table exports, custom SQL queries, date range filtering (7_DAYS_AGO, 1_MONTH_AGO), JSON to CSV conversion, array data transformation, automatic WordPress media library integration, flexible record limiting and sorting, multiple delimiter support (comma, semicolon, tab, pipe, colon), and dynamic file naming. Use Cases: Automated customer data exports, scheduled sales reports, product catalog generation, email marketing list creation, backup automation, third-party system integration, inventory snapshots, and data pipeline workflows. ## Quick Start The CSV Creator module provides three powerful actions to generate CSV files: ### 1. Create from FlowMattic Table Export data from your FlowMattic tables with flexible filtering and sorting options. **Key Features:** - Select any database (local or external) and table - Choose record selection mode: - **All Records** - Export everything - **First X Records** - Get the first N records - **Last X Records** - Get the most recent N records - **Custom Query** - Filter with WHERE conditions **Custom Query Power:** ``` status = 'active' country = 'USA' created_at >= '2025-01-01' price > 100 AND category = 'electronics' ``` **Date Range Shortcuts:** ``` created_at >= 7_DAYS_AGO # Last 7 days created_at <= 30_DAYS_AGO # Older than 30 days created_at >= 1_MONTH_AGO # Last month created_at >= 2_YEARS_AGO # Last 2 years ``` **Sort & Limit:** - Sort results by ID (Ascending/Descending) - Limit number of records returned (optional) ### 2. Create from JSON Convert JSON data into CSV format with automatic header detection. **Example:** ```json [ {"name": "John", "email": "john@example.com", "status": "active"}, {"name": "Jane", "email": "jane@example.com", "status": "pending"} ] ``` ### 3. Create from Array Use array data from previous workflow steps to create CSV files. **Perfect for:** - Processing data from API responses - Converting filtered results from previous steps - Dynamic data transformation workflows ## CSV Options **Delimiters:** - Comma (`,`) - Default - Semicolon (`;`) - Tab - Pipe (`|`) - Colon (`:`) **Headers:** - **Include Headers** - Column names as first row (recommended) - **No Headers** - Data only **File Naming:** - Custom filename (optional) - e.g., `customer-export` - Auto-generated - `FlowMattic-csv-YYYY-MM-DD-HH-MM-SS.csv` ## Response Data Every CSV creation returns: ```json { "status": "success", "file_url": "https://example.com/wp-content/uploads/2025/10/export.csv", "file_path": "/var/www/html/wp-content/uploads/2025/10/export.csv", "file_size": "15.2 KB", "file_size_bytes": 15625, "record_count": 250, "attachment_id": 1234, "message": "CSV file created successfully" } ``` Use these values in subsequent workflow steps! ## Common Use Cases **📊 Data Exports** - Export customer lists for email marketing - Generate product catalogs for external systems - Create backup files of important data **📈 Reporting** - Daily sales reports - Monthly active user lists - Inventory snapshots **🔄 Data Integration** - Export data for import into other systems - Generate feeds for third-party services - Create data pipelines between applications **🎯 Filtered Exports** - Export only active customers: `status = 'active'` - Get US customers from last 30 days: `country = 'USA' AND created_at >= 30_DAYS_AGO` - High-value orders: `total > 1000 AND status = 'completed'` ## Tips & Tricks **1. Combine with Schedulers** Set up automatic daily/weekly exports using FlowMattic's Schedule trigger. **2. Email CSV Files** Chain with Email action to automatically send generated CSV files to recipients. **3. Use Dynamic File Names** Include dates or workflow data in filenames: `sales-report-{current_date}` **4. Test Your Queries** Start with a small limit (e.g., 10 records) to verify your WHERE conditions work correctly. **5. Handle Nested Data** JSON and Array sources automatically encode nested objects/arrays into CSV cells. --- **Available Since:** FlowMattic 5.4.0 --- # CSV Parser Source: https://support.flowmattic.com/kb/article/40/csv-parser The **CSV Parser** by FlowMattic is a powerful tool designed to help users effortlessly parse CSV files into structured JSON data. This allows you to automate the process of reading and processing CSV files without the need for complex coding or manual intervention. It's especially useful for users working with large datasets that need to be transformed into formats compatible with other systems or applications. Whether you're dealing with customer data, sales records, or any other type of structured data, this tool helps you streamline your workflows, making data integration and automation seamless. FlowMattic’s CSV Parser is ideal for a variety of use cases, such as populating CRMs, updating databases, or syncing information with third-party platforms like Google Sheets. By converting CSV data into JSON, it enables you to take full advantage of FlowMattic's broader automation capabilities, from triggering further actions to passing data between applications. With a few simple steps, you can set up and utilize the CSV Parser in your workflows to save time and increase efficiency in your daily operations. #### Setting Up a CSV Parser by FlowMattic Here’s a step-by-step guide to setting up the **CSV Parser** by FlowMattic within your workflow: ### Step 1: Create a New Workflow Go to the FlowMattic Dashboard, where you can manage and create workflows. To start a new workflow, click the **“New Workflow”** button located in the top-right corner of the Dashboard. This will begin the process of creating your new workflow. ### Step 2: Add the CSV Parser and Select Action Event - **Add the CSV Parser Tool**: Click the **“+”** icon in your workflow and search for **“CSV Parser”**. Select it from the list to add it as an action step in your workflow. This will enable you to process CSV files automatically. - **Choose the Action Event**: Select the action event **“Parse CSV File”**, which converts the CSV file (or its URL) into JSON format. This prepares the data for use in the next steps of your workflow. ![](/storage/kb-images/128edf7610-Screenshot-2024-12-11-235231.png) ### Step 3: Configure the Settings - **Enter CSV file URL**: You need to provide the direct URL where your CSV file is hosted. This could be a link to a file stored on any platform that supports publicly accessible URLs, like Google Drive or Dropbox. Make sure the URL is accessible so FlowMattic can fetch the file and read its contents. - **Set Header Row**: If your CSV file has a header row (the first row with column names), select **"Yes"**. This will help FlowMattic recognize the column names and treat the data appropriately, so it can be used in future steps of your workflow. If there is no header row, select **"No"**, and FlowMattic will treat the first row as data, not headers. ![](/storage/kb-images/e574221b77-Screenshot-2024-12-11-235409.png) ### Step 4: Test and Save the Workflow - Once the configuration is complete, use the **Test Action** feature to verify that the CSV file is parsed correctly. This allows you to check whether the data is properly converted into JSON and ensures that the output formatting meets your expectations. - After testing, click **Save & Close**. This will finalize the CSV parsing setup, making it ready for use in your workflow. You can now reference the parsed data in subsequent actions or integrate it into other applications seamlessly. --- # Customize booking emails Source: https://support.flowmattic.com/kb/article/182/customize-booking-emails Booking calendars send a set of transactional emails: a booking confirmation, a reminder, a reschedule notice, a cancellation notice, a follow-up, and an internal new-booking alert. You control which template each of these uses in two places — a global default for every calendar, and a per-calendar override — and you edit the templates themselves in the Email Templates library. ## Set the global defaults (all calendars) 1. Open **FlowMattic → Bookings**. 2. Click **Email notifications** in the top bar. 3. The **Email notifications** dialog lists each notification — Booking confirmation, Reminder, Reschedule notice, Cancellation notice, Follow-up, and the internal New booking alert. 4. For each one, choose the template it should use and toggle whether it is sent. Booking confirmation is always on; Follow-up is off by default. 5. Click **Save defaults**. These are the defaults every calendar uses unless a calendar overrides them. ![The Email notifications dialog on the Bookings page — per-notification template selectors and the Save defaults button](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-bookings-email-notifications.png) ## Override the emails for one calendar 1. Open the calendar under **FlowMattic → Bookings**. 2. Scroll to the **Booking emails** section of the calendar editor. 3. Each notification is set to **Use account default**. To override just this calendar, pick a different template for any notification; a **Reset** control on the row returns it to the account default. 4. Save the calendar. ![The Booking emails section inside a calendar's editor, with the per-notification template dropdowns](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-bookings-booking-emails-section.png) ## Edit the template content Both the global defaults and the per-calendar overrides choose from templates stored in the **Email Templates** library, under the **Booking emails** group. To change the wording, branding, or the dynamic fields a booking email shows (such as the invitee's name, the event name, the date and time, and the meeting link): 1. Open **FlowMattic → Email Templates** (or click **Open the email template builder** from the Email notifications dialog). 2. Open the booking template you want to change — for example **Booking confirmed** or **Reminder — 24 hours before**. 3. Edit and save. ![A booking confirmation template open in the Email Templates editor](https://assets.infidesk.support/products/flowmattic/kb-images/fmx-bookings-email-booking-confirmation.png) ## Note on timing The confirmation is sent immediately when a booking is made. The reminder and the follow-up are scheduled for a future time and dispatched by WordPress cron, so they depend on cron running on time — see *Booking reminders and follow-ups are not sending on time* if scheduled emails arrive late. --- # Customize your chatbot's appearance Source: https://support.flowmattic.com/kb/article/218/customize-your-chatbots-appearance You can restyle your AI Assistant chatbot to match your site — colours, fonts, shape, avatar and position. Everything here lives on the **Theme** tab when you edit an assistant at **FlowMattic → AI Assistants**. ![The Theme tab of an AI Assistant, showing the fifteen theme presets, the Light/Dark mode switch and the Brand Color field](https://assets.infidesk.support/products/flowmattic/kb-images/v70/218-chatbot-theme.png) ## Start with a theme preset The quickest route is **Theme Preset**, which applies a coordinated set of colours in one click. Fifteen are available: Default, Gray, Blue, Purple, Green, Red, Orange, Teal, Pink, Indigo, Sky, Amber, Rose, Dark, and Custom. Pick the one closest to your brand, then adjust individual colours if you need to. Choosing **Custom** lets you set everything by hand. Separately, **Mode** switches the chatbot between **Light** and **Dark**. ## Colours **Brand Color** is the one that does the most work — it drives the chat header, the buttons and the accent colours together. If you only change one thing, change this. **Page Background** sets the colour behind the conversation. For finer control, open the **Advanced Appearance** section, which is collapsed by default. There you will find: - **Header Text Color** - **Bot Message Text Color** - **User Message Background** - **User Message Text Color** - **Chatbox Icon Background** There is no separate control for the header background or the send button — both follow Brand Color. ## Fonts, size and shape - **Font Family** — System Default, or Inter, Open Sans, Roboto, Lato, Poppins, Nunito, Georgia or Courier New. - **Font Size** — Small, Medium or Large. - **Border Radius** — None, Small, Medium, Large or Full Round. - **Message Bubble Style** — Rounded, Sharp or Bubble. - **Loading Animation** — Pulsing Dots, Spinner Icon or Wave Dots. - **Show message timestamps** — on or off. ## Avatar, icon and launcher button - **Chatbox Icon** — the icon on the floating chat button. A default chat icon is used if you upload nothing. - **Bot Avatar** — shown next to bot messages and on the chat widget button. - **Button Label** — optional text beside the chat icon, for example "Chat with us". Leave it empty for an icon-only button. ## Position on screen **Widget Position** offers **Left** or **Right** — that is, bottom-left or bottom-right. There are no top positions and no margin or offset controls. **This setting only affects the floating widget embed.** If you embed the chatbot with the shortcode or an iframe, it sits wherever you place it on the page and the position setting does nothing. ## Chat background image Turn on **Enable chat background image** to put an image behind the conversation. You can upload your own or use the default, then tune it with: - **Background Size** — Cover, Contain or Auto - **Background Repeat** — Repeat, No Repeat, Repeat Horizontal or Repeat Vertical - **Background Blend Mode** — Normal, Multiply, Screen, Overlay, Soft Light, Color Burn, Luminosity, Exclusion or Difference - **Color Overlay Opacity** — 0 to 100 If text becomes hard to read over a busy image, raise the overlay opacity rather than changing the image. ## Removing "Powered by FlowMattic" The **Show "Powered by FlowMattic"** toggle is **on by default**. Switch it off to remove the badge from the chat window. ## Text your visitors see These two live on the **Settings** tab rather than Theme: - **Welcome Message** — the assistant's opening line. If you leave it empty, visitors see "How can I help you today?" - **Input Placeholder** — the grey hint in the message box. Empty falls back to "Write your message…" The chat header shows the **assistant's name**, so rename the assistant itself if you want different header text — there is no separate header title field. ## Embedding, and which settings apply Three ways to embed, from the **Embed** section: **1. Shortcode** ``` [flowmattic_chatbot chatbot_id="YOUR_ID" width="600px" height="800px"] ``` `width` defaults to `100%` and `height` to `600px`. This renders the chatbot inline on the page. **2. iFrame** — paste the supplied `