# Splashify Pro — Complete User Documentation > This is the full-text version of the Splashify Pro user documentation. > Generated for AI consumption. Source: https://docs.splashifypro.com > Generated at: 2026-05-11T17:06:18.438Z > Total pages: 156 --- ======================================================================== ## Splashify Pro Documentation URL: https://docs.splashifypro.com/ ======================================================================== # Splashify Pro Documentation Welcome to the official documentation for **Splashify Pro** — your all-in-one WhatsApp Business messaging platform. Send broadcasts, automate conversations with AI chatbots, manage contacts, run calling campaigns, and track everything from a single dashboard. ## Platform Overview | Feature | Description | |---------|-------------| | **Messaging** | Real-time WhatsApp conversations with your customers | | **Broadcasts** | Send bulk WhatsApp & RCS campaigns to targeted segments | | **AI Agents** | Automate replies with GPT-powered Chat AI Agents | | **Chatbot Flows** | Build no-code workflow bots with a visual flow builder | | **Calling** | WhatsApp Business voice calls with recordings | | **Contacts** | Full CRM with segments, tags, and custom attributes | | **Templates** | Manage Meta-approved message templates | | **Analytics** | Track message volume, costs, and campaign performance | ## Quick Links - [**Get Started →**](/getting-started) — Create your account and connect WhatsApp - [**WhatsApp Setup →**](/whatsapp-setup) — Connect your WABA and verify your business - [**Send a Broadcast →**](/broadcasts) — Reach thousands of contacts in one click - [**Build a Chatbot →**](/ai-agents) — Automate your customer conversations - [**API & Developer →**](/settings/developer) — Integrate Splashify Pro into your own apps ## App URL Access your dashboard at: ``` https://app.splashifypro.com ``` ## Support - **Email:** support@splashifypro.in - **WhatsApp:** Message us directly from the [Support](/support) section in your dashboard ======================================================================== ## Getting Started URL: https://docs.splashifypro.com/getting-started ======================================================================== # Getting Started Get your Splashify Pro account up and running in minutes. This section covers account creation, login, and an orientation to the dashboard. ## What You'll Need - A valid business email address - A WhatsApp Business phone number (for connecting WhatsApp) - A Meta Business account (required to connect WABA) ## Steps at a Glance 1. **[Sign Up](/getting-started/signup)** — Create your account with email and OTP verification 2. **[Log In](/getting-started/login)** — Secure login with optional 2FA 3. **[Dashboard](/getting-started/dashboard)** — Understand the dashboard layout and setup checklist 4. **[Connect WhatsApp](/whatsapp-setup)** — Link your WhatsApp Business Account ## Platform URLs | Portal | URL | |--------|-----| | App Dashboard | `https://app.splashifypro.com` | | API Base URL | `https://apis.splashifypro.com/api/v1/` | > **Tip:** Splashify Pro works best on desktop Chrome or Edge. Mobile support is available but some features (like the flow builder) are optimized for desktop. ======================================================================== ## Dashboard URL: https://docs.splashifypro.com/getting-started/dashboard ======================================================================== # Dashboard Your dashboard is the central hub for your Splashify Pro account. It shows your setup status, key metrics, and quick-access actions. ## Dashboard Sections ### Setup Checklist When you first sign up, the dashboard shows a **Setup Checklist** with the steps needed to get fully operational: | Step | Description | |------|-------------| | **Connect WhatsApp** | Link your WhatsApp Business Account (WABA) | | **Add Wallet Balance** | Recharge your wallet to send messages | | **Complete KYC** | Verify your business identity | | **Apply for OBA** | Apply for Official Business Account (green tick) | | **Set Up Billing** | Add your GSTIN for invoice generation | Each step shows as ✅ complete or ⏳ pending. Click any step to navigate to the relevant settings page. ### Wallet Balance The top bar shows your current **wallet balance**. Click it to: - View transaction history - Recharge your wallet via Zoho Payments > Wallet balance is deducted per message sent based on your plan's pricing. ### Announcement Banner If there are any active system announcements (maintenance, new features, incidents), they appear as a cycling banner at the top of the dashboard. ## Sidebar Navigation | Section | What it Does | |---------|-------------| | **Dashboard** | Setup status and overview | | **Messages** | Real-time conversation inbox | | **Contacts** | CRM — manage contacts, segments, tags | | **Broadcasts** | Create and manage bulk campaigns | | **AI Agents** | Chat AI Agents and Workflow Bots | | **Templates** | WhatsApp & RCS message templates | | **Flows** | WhatsApp Flows management | | **Calling** | WhatsApp Business Calling | | **Analytics** | Message stats and expense tracking | | **Track Expenses** | Billing log and cost breakdown | | **Wallet** | Balance and transactions | | **Support** | Create and track support tickets | | **Settings** | All account, team, and integration settings | ## Notifications The bell icon in the top bar shows unread activity notifications. Click to view recent events such as: - New incoming messages - Broadcast completion - Low wallet balance alert - KYC status updates ## Low Balance Alert When your wallet balance falls below a threshold, a **Low Balance Dialog** pops up prompting you to recharge before messages are blocked. ======================================================================== ## Login & 2FA URL: https://docs.splashifypro.com/getting-started/login ======================================================================== # Login & 2FA ## Standard Login 1. Go to [https://app.splashifypro.com/auth/login](https://app.splashifypro.com/auth/login) 2. Enter your **email address** and **password** 3. Click **Sign In** If you have **Two-Factor Authentication (2FA)** enabled, you'll be prompted for a verification code before accessing the dashboard. ## Two-Factor Authentication (2FA) 2FA adds an extra layer of security. When enabled, every login requires a one-time code sent to your registered email or WhatsApp. ### 2FA Verification Steps 1. After entering your password, the 2FA screen appears 2. Check your **email** or **WhatsApp** for the 6-digit code 3. Enter the code and click **Verify** > **2FA codes expire after 10 minutes.** Request a new code if needed. ## Team Member Login Team members added by the account owner log in with a **password set via invitation email**. 1. Click the link in your invitation email 2. Set your password on the `/auth/set-team-password` page 3. Log in at the standard login page with your email and new password ## Forgot Password 1. Click **Forgot Password** on the login page 2. Enter your registered email address 3. Check your inbox for a password reset link 4. Click the link and set a new password The reset link is valid for **30 minutes**. ## Session Management - Sessions last **3 months** — you stay logged in unless you explicitly sign out - A maximum of **5 concurrent devices** can be active at once - If you log in on a 6th device, you'll be shown a list of active sessions to revoke one ### View Active Devices Go to **Settings → Devices** to: - See all active sessions (device, IP address, last seen) - Identify which session is the current device - Remotely log out any device > Logging out a device takes effect immediately — that session is instantly invalidated. ## Troubleshooting | Issue | Fix | |-------|-----| | Wrong password | Use **Forgot Password** to reset | | 2FA code not received | Check spam/junk; request a new code | | Account locked | Contact support@splashifypro.in | | Device limit reached | Revoke an old session from the device list shown at login | ======================================================================== ## Sign Up URL: https://docs.splashifypro.com/getting-started/signup ======================================================================== # Sign Up Create your Splashify Pro account in under 2 minutes. ## Step 1: Go to the Sign Up Page Navigate to [https://app.splashifypro.com/auth/signup](https://app.splashifypro.com/auth/signup) ## Step 2: Enter Your Details Fill in the registration form: | Field | Description | |-------|-------------| | **Full Name** | Your name or business contact name | | **Email Address** | Your business email — used for login and notifications | | **Phone Number** | Mobile number with country code (e.g. `+91 9876543210`) | | **Password** | Minimum 8 characters | | **Organization Name** | Your company or brand name | | **Country** | Select your country from the dropdown | ## Step 3: Verify Your Email (OTP) After submitting the form, you'll be redirected to the **OTP Verification** screen. 1. Check your inbox for an email from `noreply@splashifypro.com` 2. Enter the **6-digit OTP** in the verification field 3. Click **Verify** > **OTP expires in 10 minutes.** Click **Resend OTP** if you don't receive it within 60 seconds. ## Step 4: You're In! After successful verification, you'll land on your **Dashboard** with a setup checklist. The first thing you'll want to do is [connect your WhatsApp Business Account](/whatsapp-setup/connect-waba). ## Already Have an Account? [Log in here →](/getting-started/login) ## Troubleshooting | Issue | Fix | |-------|-----| | OTP not received | Check spam/junk folder; click Resend OTP | | Email already registered | Use the [Login](/getting-started/login) page or reset your password | | OTP invalid | OTPs expire after 10 minutes — request a new one | ======================================================================== ## WhatsApp Setup URL: https://docs.splashifypro.com/whatsapp-setup ======================================================================== # WhatsApp Setup To send and receive WhatsApp messages through Splashify Pro, you need to connect a **WhatsApp Business Account (WABA)** and register a phone number. ## Setup Flow ``` Meta Business Account ↓ Connect WABA (Embedded Signup) ↓ Register Phone Number ↓ Complete KYC (Business Verification) ↓ Start Messaging ✓ ``` ## Prerequisites Before you start, make sure you have: - A **Meta Business Account** — [create one at business.facebook.com](https://business.facebook.com) - A **phone number** that is NOT already registered on WhatsApp personal or WhatsApp Business App - A valid **business website** or Facebook Page - Business address and category details > **Important:** You cannot use a phone number that is currently active on the WhatsApp mobile app. You must first delete or deregister that number from the app. ## Quick Setup Checklist | Step | Action | Status | |------|--------|--------| | 1 | Connect WABA via Meta Embedded Signup | Required | | 2 | Register your phone number | Required | | 3 | Submit KYC documents | Required | | 4 | Apply for Official Business Account (OBA) | Optional | ======================================================================== ## Connect WhatsApp (WABA) URL: https://docs.splashifypro.com/whatsapp-setup/connect-waba ======================================================================== # Connect WhatsApp (WABA) Splashify Pro uses **Meta Embedded Signup** to connect your WhatsApp Business Account (WABA) securely without sharing your Meta credentials. ## Step 1: Open the Setup Wizard 1. Go to your **Dashboard** 2. Click **Connect WhatsApp** in the setup checklist, or navigate to **Settings → Channels** 3. Click **Connect WhatsApp Business Account** ## Step 2: Start Meta Embedded Signup A **Meta popup window** will open. Follow the steps inside it: 1. **Log in with Facebook** — Use the Facebook account connected to your Meta Business Manager 2. **Select or Create a Business Portfolio** — Choose your existing Meta Business Account or create a new one 3. **Create or Select a WABA** — Either pick an existing WhatsApp Business Account or create a new one 4. **Select or Create a Phone Number** — Choose a phone number to register 5. **Verify the Phone Number** — Enter the OTP sent via SMS or voice call to that number 6. **Complete Signup** — Click Finish to return to Splashify Pro ## Step 3: Wait for Connection After the popup closes, Splashify Pro automatically: - Receives your WABA ID and Phone Number ID from Meta - Creates your WhatsApp channel in the system - Registers the webhook for receiving messages This usually takes **10–30 seconds**. Your dashboard will refresh and show your WABA as **Connected**. ## WABA Status Indicators | Status | Meaning | |--------|---------| | 🟢 **Connected** | WABA is active, messages can be sent/received | | 🟡 **Pending** | Waiting for Meta approval | | 🔴 **Restricted** | Account has messaging restrictions from Meta | | ⚪ **Not Connected** | No WABA linked yet | ## Troubleshooting | Issue | Fix | |-------|-----| | Popup blocked | Allow popups from `app.splashifypro.com` in browser settings | | Phone number already used | Deregister the number from WhatsApp app first | | Business not verified | Complete Meta Business Verification at business.facebook.com | | Signup failed | Ensure you have admin access to the Meta Business Account | ## Next Step After connecting your WABA, [register your phone number →](/whatsapp-setup/phone-registration) ======================================================================== ## Business Verification (KYC) URL: https://docs.splashifypro.com/whatsapp-setup/kyc ======================================================================== # Business Verification (KYC) KYC (Know Your Customer) verification unlocks higher messaging tiers and is required for sending broadcasts to large audiences. ## Why KYC is Required | Without KYC | With KYC | |-------------|----------| | Limited to 250 conversations/day | Starts at 1,000 conversations/day | | Can only message users who messaged first | Can send outbound template messages | | No broadcast campaigns | Full broadcast access | ## Step 1: Navigate to KYC 1. Go to **Dashboard** 2. Click **Complete KYC** in the setup checklist 3. Or navigate to **Settings → Account Details → KYC** ## Step 2: Submit Business Documents Fill out the KYC form with the following information: ### Business Details | Field | Description | |-------|-------------| | **Legal Business Name** | Exact name as registered (must match government records) | | **Business Type** | Sole Proprietor, Private Limited, LLP, etc. | | **GSTIN** | Your GST Identification Number (for Indian businesses) | | **Business Address** | Registered office address with PIN code | | **Business Category** | Industry category (e.g. E-Commerce, Healthcare, Education) | | **Website URL** | Your business website | ### Required Documents | Document | Accepted Formats | |----------|-----------------| | **Business Registration Certificate** | PDF, JPG, PNG (max 5MB) | | **GST Certificate** | PDF, JPG, PNG (max 5MB) | | **Proof of Address** | Utility bill or bank statement | | **Authorized Signatory ID** | Aadhaar, PAN, Passport | ## Step 3: Submit for Review Click **Submit KYC**. Our team reviews submissions within **1–3 business days**. ## KYC Status | Status | Meaning | |--------|---------| | **Not Submitted** | KYC form not yet filled | | **Pending** | Under review by Splashify Pro team | | **Approved** ✅ | Verified — higher limits unlocked | | **Rejected** ❌ | Resubmission required (reason provided) | > You'll receive an email notification when your KYC status changes. ## After KYC Approval Once approved: - Messaging limits increase automatically - You become eligible to [apply for Official Business Account](/whatsapp-setup/oba) - Broadcast campaigns to large segments are unlocked ======================================================================== ## Official Business Account (OBA) URL: https://docs.splashifypro.com/whatsapp-setup/oba ======================================================================== # Official Business Account (OBA) An **Official Business Account** (OBA) gives your business the green tick ✅ badge on WhatsApp, increasing trust and improving message open rates. ## What is OBA? The OBA badge appears next to your business name in customer chats. It signals that Meta has verified your business as legitimate and notable. **Benefits:** - Green checkmark next to your display name - Higher customer trust and engagement - Eligibility for higher message tier limits - Better deliverability on broadcast campaigns ## Requirements Before applying, ensure: 1. ✅ WABA is connected and phone number registered 2. ✅ KYC is approved 3. ✅ Business has an active online presence (website, social media) 4. ✅ Business meets Meta's notability criteria > **Note:** OBA is granted by Meta, not Splashify Pro. Approval is at Meta's discretion and typically takes **5–15 business days**. ## How to Apply 1. Go to **Dashboard** 2. Click **Apply for OBA** in the setup checklist 3. Complete the OBA application form: - Confirm your business name and category - Provide business website URL - Optionally link your Facebook Page 4. Click **Submit Application** Splashify Pro submits the application to Meta on your behalf. ## Application Status | Status | Meaning | |--------|---------| | **Not Applied** | Application not submitted | | **Submitted** | Application sent to Meta, awaiting review | | **Approved** 🟢 | Green tick active on your WABA | | **Rejected** | Application denied — review Meta's feedback and reapply after 30 days | ## Tips for Approval - Ensure your business name on WABA matches your official business name - Have an active, professional website (no landing page builders) - Active presence on social media and Google My Business helps - Avoid generic or ambiguous business names ======================================================================== ## Register Phone Number URL: https://docs.splashifypro.com/whatsapp-setup/phone-registration ======================================================================== # Register Phone Number After connecting your WABA, you need to formally register your phone number with the WhatsApp Business Platform to enable two-way messaging. ## Step 1: Go to Phone Registration 1. Navigate to **Dashboard** or **Settings → Channels** 2. Click **Register Phone Number** next to your connected WABA ## Step 2: Choose Verification Method Select how you want to receive the verification PIN: - **SMS** — A 6-digit PIN sent via text message - **Voice Call** — A voice call reads out the PIN > **Note:** If your number is a VoIP or landline, choose **Voice Call**. ## Step 3: Enter the PIN Enter the 6-digit PIN you receive and click **Verify & Register**. ## Step 4: Confirm Registration Once verified, your phone number status changes to **Registered**. You can now: - Send and receive WhatsApp messages - Use approved message templates - Create broadcast campaigns ## Phone Number Requirements | Requirement | Details | |-------------|---------| | Not on WhatsApp App | Number must be deregistered from the consumer WhatsApp app | | Can receive SMS/calls | The number must be able to receive SMS or voice calls | | Country code | Must include full international country code | ## Display Name When registering, your WABA's **display name** is shown to customers. This name: - Is set during the Meta Embedded Signup - Must match your business name - Can be changed later in Meta Business Settings (subject to approval) ## Troubleshooting | Issue | Fix | |-------|-----| | PIN not received | Check if the number can receive SMS; try voice call | | Registration failed | Ensure the number is not active on WhatsApp app | | Number already registered | Contact support to transfer the number | ## Next Step [Complete KYC (Business Verification) →](/whatsapp-setup/kyc) ======================================================================== ## Messaging URL: https://docs.splashifypro.com/messaging ======================================================================== # Messaging The **Messages** page is your real-time inbox for all WhatsApp conversations. View, reply, assign, and resolve conversations from one unified interface. ## Navigate to Messages Click **Messages** in the left sidebar, or go to: ``` https://app.splashifypro.com/messages ``` ## Inbox Layout The Messages page has three panels: | Panel | Description | |-------|-------------| | **Conversation List** (left) | All conversations, filterable by status and assignee | | **Message Thread** (center) | The active conversation with full chat history | | **Contact Details** (right) | Contact info, tags, notes, and activity log | ## Conversation Statuses | Status | Meaning | |--------|---------| | **Open** | Active conversation, needs attention | | **Resolved** | Conversation marked as done | | **All** | Shows all conversations | ## Real-Time Updates Conversations update in real-time via WebSocket. New incoming messages appear instantly without needing to refresh the page. A notification badge shows unread message counts. ## Key Features - **Infinite scroll** — Load older messages as you scroll up - **Media support** — View images, videos, documents, and audio directly in the thread - **Voice messages** — Play audio directly in the browser - **Template messages** — Send approved WhatsApp templates from the message input - **Interactive messages** — View button replies and list selections - **Optimistic UI** — Messages appear immediately after sending, even before server confirmation ======================================================================== ## Assign & Resolve URL: https://docs.splashifypro.com/messaging/assign-resolve ======================================================================== # Assign & Resolve ## Assigning a Conversation Assign conversations to specific team members to route customer queries to the right person. 1. Open a conversation 2. Click the **Assign** button in the conversation header (top right) 3. Select a team member from the dropdown 4. The conversation is now assigned and the agent is notified > When a conversation is assigned to a human agent, the AI chatbot automatically **pauses** and does not send automated replies — the human takes over. ### Unassigning To unassign, click the assignee's name and select **Unassign**. This hands the conversation back to automated handling. ## Resolving a Conversation Mark a conversation as resolved when the customer query is complete. 1. Click **Resolve** (✓) in the conversation header 2. The conversation moves to the **Resolved** tab 3. If the customer replies again, the conversation automatically **reopens** as Open ## Auto-Resolve Configure conversations to auto-resolve after inactivity: 1. Go to **Settings → Live Chat** 2. Enable **Auto-Resolve** 3. Set the inactivity period (e.g. 24 hours, 48 hours) Conversations that have no new messages for the configured period will automatically be resolved. ## Off-Hours Handling You can configure what happens when customers message outside your working hours: 1. Go to **Settings → Live Chat** 2. Set **Working Hours** (Mon–Sat, 9AM–6PM, etc.) 3. Set an **Off-Hours Message** (e.g. "We're closed right now. We'll reply tomorrow morning.") 4. Toggle **Auto-Resolve outside working hours** if needed ## Welcome Message Send a welcome message automatically when a new conversation starts: 1. Go to **Settings → Live Chat** 2. Enable **Welcome Message** 3. Write your welcome text 4. Save The welcome message is sent once per new contact when they first message you. ======================================================================== ## Conversations URL: https://docs.splashifypro.com/messaging/conversations ======================================================================== # Conversations ## Conversation List The left panel shows all your WhatsApp conversations. Each conversation card shows: - **Contact name** (or phone number if unnamed) - **Last message preview** - **Time** of last message - **Assignee** (team member or unassigned) - **Unread badge** for unread messages ## Filtering Conversations Use the filter bar above the conversation list to narrow down results: | Filter | Description | |--------|-------------| | **Status** | Open, Resolved, or All | | **Assigned to Me** | Only show conversations assigned to you | | **Unassigned** | Conversations not assigned to any team member | | **Search** | Search by contact name or phone number | ## Opening a Conversation Click any conversation card to open it in the center panel. The message thread loads the last 50 messages and supports scrolling back to older messages. ## Message Thread Inside a conversation, messages are displayed chronologically: - **Inbound messages** (from customers) appear on the **left** - **Outbound messages** (from your team) appear on the **right** - Message **delivery status** icons: Sent ✓, Delivered ✓✓, Read 🔵✓✓ - **Timestamp** shown on each message ### Message Types Supported | Type | Description | |------|-------------| | Text | Plain text messages | | Image | JPEG, PNG images with caption | | Video | MP4 videos with caption | | Document | PDF, DOCX, and other files | | Audio | Voice messages with inline player | | Location | GPS coordinates shown on map link | | Contacts | vCard contacts | | Interactive (Buttons) | Quick reply and CTA buttons | | Interactive (List) | List picker messages | | Template | Approved WhatsApp template messages | ## Contact Details Panel The right panel shows details about the selected conversation's contact: - **Name, phone, email** - **Tags** — add/remove tags to segment contacts - **Custom attributes** — any custom contact fields you've defined - **Assigned agent** — who is handling this conversation - **Activity log** — history of actions taken on this contact - **Call button** — initiate a WhatsApp call directly ======================================================================== ## Live Chat Settings URL: https://docs.splashifypro.com/messaging/live-chat ======================================================================== # Live Chat Settings Configure how Splashify Pro handles conversations automatically. Navigate to **Settings → Live Chat**. ## Welcome Message An automatic message sent when a customer starts a new conversation. | Setting | Description | |---------|-------------| | **Enable** | Toggle welcome message on/off | | **Message Text** | The text sent to new customers | ## Off-Hours Message Sent automatically when a customer messages outside your working hours. | Setting | Description | |---------|-------------| | **Enable** | Toggle off-hours reply on/off | | **Message Text** | E.g. "Thanks for reaching out! Our team is available Mon–Sat 9AM–6PM IST." | ## Working Hours Define when your team is available: 1. Select each day of the week 2. Set **From** and **To** time for each active day 3. Choose your **timezone** 4. Save Outside these hours, the off-hours message is triggered automatically. ## Auto-Resolve Automatically resolve conversations after a period of inactivity. | Setting | Description | |---------|-------------| | **Enable** | Toggle auto-resolve on/off | | **Inactivity Period** | Time without reply before auto-resolving (e.g. 24h, 48h, 7 days) | > **Tip:** Use auto-resolve with welcome messages so resolved conversations restart cleanly when customers message again. ======================================================================== ## Sending Messages URL: https://docs.splashifypro.com/messaging/send-messages ======================================================================== # Sending Messages ## Message Input Bar The message input bar is at the bottom of the conversation thread. ### Send a Text Message 1. Click in the message input field 2. Type your message 3. Press **Enter** or click the **Send** button ### Send Media Click the **attachment icon (📎)** to attach: | Type | Max Size | Formats | |------|----------|---------| | Image | 5 MB | JPEG, PNG, WebP | | Video | 16 MB | MP4, 3GP | | Document | 100 MB | PDF, DOCX, XLSX, etc. | | Audio | 16 MB | MP3, OGG, AMR | Add an optional caption for images and videos. ### Send a Template Message Templates are pre-approved messages you can send outside the **24-hour customer service window**. 1. Click the **template icon (📄)** in the message bar 2. Search or browse approved templates 3. Fill in any variable placeholders (e.g. `{{customer_name}}`, `{{order_id}}`) 4. Click **Send** > **When to use templates:** WhatsApp only allows free-form messages within 24 hours of the customer's last message. After 24 hours, you must use an approved template. ### Send a Canned Message Canned messages are pre-saved reply shortcuts. 1. Type `/` in the message input to open the canned message picker 2. Search by keyword 3. Select a canned message to insert it instantly Manage your canned messages at **Settings → Canned Messages**. ## Message Status | Icon | Status | |------|--------| | ⏳ | Sending | | ✓ | Sent (reached WhatsApp servers) | | ✓✓ | Delivered (reached the recipient's device) | | 🔵 ✓✓ | Read (recipient opened the message) | | ❌ | Failed — check error details | ## 24-Hour Messaging Window WhatsApp's policy: - **Within 24 hours** of the customer's last message: send any message type freely - **After 24 hours**: only approved **template messages** can be sent The conversation thread shows a banner when the 24-hour window has passed. ======================================================================== ## Contacts URL: https://docs.splashifypro.com/contacts ======================================================================== # Contacts The **Contacts** section is your customer CRM. Store, organize, and segment your contacts to power targeted broadcasts and personalized conversations. ## Navigate to Contacts Click **Contacts** in the left sidebar, or go to: ``` https://app.splashifypro.com/contacts ``` ## What You Can Do | Feature | Description | |---------|-------------| | **Add contacts** | Manually create contacts one by one | | **Import contacts** | Bulk upload from CSV | | **Edit & delete** | Update or remove contact records | | **Tag contacts** | Apply labels for categorization | | **Create segments** | Build filtered lists for targeted broadcasts | | **Custom attributes** | Add extra fields (e.g. "Order ID", "City") | | **Block/Unblock** | Prevent or restore messaging for a contact | ## Contact Fields Each contact record contains: | Field | Description | |-------|-------------| | **Name** | Full name | | **Phone** | WhatsApp number with country code | | **Email** | Optional email address | | **Tags** | Labels applied to this contact | | **Custom Columns** | Any custom attributes you've created | | **Created At** | When the contact was added | | **Last Activity** | Timestamp of last interaction | ======================================================================== ## Custom Attributes URL: https://docs.splashifypro.com/contacts/attributes ======================================================================== # Custom Attributes **Custom Attributes** (also called contact columns) let you store extra data fields on contacts beyond the defaults — for example, "Order ID", "City", "Plan Type", "Subscription Date". ## Manage Custom Attributes 1. Go to **Settings → Attributes** 2. View existing custom attributes 3. Click **+ Add Attribute** to create a new field ### Attribute Settings | Field | Options | |-------|---------| | **Name** | Display name (e.g. "City") | | **Key** | API key (auto-generated from name, e.g. `city`) | | **Type** | Text, Number, Date, Boolean | ## Supported Attribute Types | Type | Example Values | |------|---------------| | **Text** | "Mumbai", "Premium", "Order #123" | | **Number** | `1500`, `99.99` | | **Date** | `2024-01-15` | | **Boolean** | `true` / `false` | ## Set Attribute Values ### On a Contact 1. Open a contact 2. Scroll to the **Custom Attributes** section 3. Click the field and enter the value 4. It saves automatically ### Via CSV Import Include columns matching your attribute keys: ```csv name,phone,city,plan_type John Doe,+919876543210,Mumbai,Pro ``` ### Via Chatbot Flow The **Update Column** node in the flow builder can set attribute values based on user input during a chatbot conversation. ## Using Attributes in Segments Filter contacts by custom attributes when creating segments: - **Condition:** `city → equals → Mumbai` - **Condition:** `plan_type → equals → Pro` ## Using Attributes in Templates Reference attributes in message templates with `{{variable_name}}` syntax. During broadcast creation, map each variable to a contact attribute. ======================================================================== ## Import Contacts URL: https://docs.splashifypro.com/contacts/import ======================================================================== # Import Contacts Import thousands of contacts at once using a CSV file. ## Step 1: Prepare Your CSV Your CSV must have at minimum a **phone** column. Recommended columns: ```csv name,phone,email,city,tag John Doe,+919876543210,john@example.com,Mumbai,vip Jane Smith,+918765432109,jane@example.com,Delhi, ``` ### Column Rules | Column | Required | Notes | |--------|----------|-------| | `phone` | ✅ Yes | Include country code (e.g. `+91`) | | `name` | Optional | Falls back to phone if blank | | `email` | Optional | Must be valid email format | | Any other column | Optional | Treated as custom attribute | > **Phone format:** Include the `+` and country code. Numbers without country code may fail to match existing contacts. ## Step 2: Open Import Dialog 1. Go to **Contacts** 2. Click **Import Contacts** 3. Click **Choose File** and select your CSV ## Step 3: Review and Import The import is automatic: - **New contacts** are created - **Existing contacts** (matched by phone) are updated - **Invalid rows** (bad phone format, missing required field) are skipped - **Previously deleted contacts** are restored if they match by phone ## Step 4: View Results After the import completes, a summary appears: | Metric | Description | |--------|-------------| | **Created** | New contacts added | | **Updated** | Existing contacts updated | | **Skipped** | Invalid or duplicate entries | | **Failed** | Rows that couldn't be processed | ## Tips - Always include country codes in phone numbers - Use UTF-8 encoding for your CSV (especially for non-English names) - Maximum recommended import size: **50,000 rows** per file - Headers are case-insensitive (`Phone`, `phone`, `PHONE` all work) ======================================================================== ## Manage Contacts URL: https://docs.splashifypro.com/contacts/manage-contacts ======================================================================== # Manage Contacts ## Add a Contact Manually 1. Go to **Contacts** 2. Click **+ Add Contact** 3. Fill in the form: - **Name** (required) - **Phone Number** (required — include country code, e.g. `+919876543210`) - **Email** (optional) - Any **custom attributes** you've configured 4. Click **Save** ## Edit a Contact 1. Click on any contact row to open the contact detail 2. Click **Edit** 3. Update the fields 4. Click **Save** ## Delete a Contact 1. Click on a contact row 2. Click the **Delete** button (trash icon) 3. Confirm deletion > Deleting a contact removes them from all segments but does **not** delete their message history. ## Search & Filter Use the search bar at the top of the Contacts page to find contacts by: - Name - Phone number - Email ## Block / Unblock Blocking prevents any outbound messages (including broadcasts) from reaching a contact. 1. Open a contact 2. Click **Block Contact** 3. Confirm To unblock, open the same contact and click **Unblock**. ## Opt-Out Management If a contact replies with opt-out keywords (e.g. "STOP", "Unsubscribe"), they are automatically flagged. Manage opt-outs at **Settings → Opt Management**. ======================================================================== ## Segments URL: https://docs.splashifypro.com/contacts/segments ======================================================================== # Segments **Segments** are dynamic filtered lists of contacts based on conditions. Use segments as broadcast audiences to target the right customers. ## Navigate to Segments Go to **Settings → Segments**, or access segments during broadcast creation. ## Create a Segment 1. Go to **Settings → Segments** 2. Click **+ Create Segment** 3. Enter a **segment name** (e.g. "Mumbai VIP Customers") 4. Add **filter conditions** using the condition builder: ### Filter Conditions | Field Type | Available Operators | |------------|-------------------| | Contact name | contains, equals, starts with | | Phone number | contains, equals | | Tag | has tag, does not have tag | | Custom attribute | equals, contains, greater than, less than | | Created date | before, after, between | ### Combining Conditions - **AND** — Contact must match all conditions - **OR** — Contact must match at least one condition **Example:** `Tag = "premium"` AND `City = "Mumbai"` → Only premium contacts from Mumbai ## View Segment Contacts 1. Open a segment 2. Click **Preview Contacts** to see the matching contacts 3. The **contact count** updates automatically as contacts are added/removed ## Edit a Segment 1. Open the segment 2. Click **Edit** 3. Modify the conditions 4. Save — the segment updates immediately ## Delete a Segment 1. Open the segment 2. Click **Delete Segment** 3. Confirm > Deleting a segment does not delete the contacts in it. ## Using Segments in Broadcasts When creating a broadcast: 1. Go to the **Audience** step 2. Select **Segment** as the source 3. Choose your segment 4. The recipient count is estimated based on current segment members Segments are evaluated at **broadcast send time**, so contacts added after scheduling will be included. ======================================================================== ## Tags URL: https://docs.splashifypro.com/contacts/tags ======================================================================== # Tags Tags are simple labels you can apply to contacts to categorize them (e.g. "VIP", "Lead", "Churned", "New Customer"). ## Manage Tags 1. Go to **Settings → Tags** 2. View all existing tags 3. Click **+ Add Tag** to create a new tag 4. Click the edit icon to rename a tag 5. Click the delete icon to remove a tag > Deleting a tag removes it from all contacts that have it. ## Apply Tags to Contacts ### From the Conversation View 1. Open a conversation 2. In the **Contact Details** panel on the right 3. Find the **Tags** section 4. Click **+ Add Tag** and select or type a tag name ### From the Contact List 1. Go to **Contacts** 2. Click on a contact 3. Open the **Tags** section 4. Add or remove tags ### Via CSV Import Include a `tag` column in your CSV. Multiple tags can be separated by a pipe `|`: ```csv name,phone,tag John Doe,+919876543210,vip|premium ``` ## Using Tags in Segments Create segments filtered by tags: 1. **Condition:** `Tag → has tag → "VIP"` 2. Result: All contacts tagged as VIP ## Common Tag Examples | Tag | Use Case | |-----|----------| | `lead` | New potential customer | | `customer` | Existing paying customer | | `vip` | High-value customer | | `churned` | Customer who stopped buying | | `support` | Has open support request | | `do-not-disturb` | Do not send broadcasts | ======================================================================== ## Broadcasts URL: https://docs.splashifypro.com/broadcasts ======================================================================== # Broadcasts **Broadcasts** let you send a single message to thousands of contacts at once — using WhatsApp templates or RCS messages. ## Navigate to Broadcasts Click **Broadcasts** in the left sidebar, or go to: ``` https://app.splashifypro.com/broadcasts ``` ## Broadcast Types | Type | Channel | Best For | |------|---------|---------| | **WhatsApp Broadcast** | WhatsApp Business API | Transactional alerts, promotions, updates | | **RCS Broadcast** | RCS (Rich Communication Services) | Rich media campaigns with buttons | ## Broadcast Statuses | Status | Meaning | |--------|---------| | **Draft** | Created but not yet sent | | **Scheduled** | Set to send at a future time | | **Processing** | Currently being sent | | **Completed** | All messages dispatched | | **Failed** | Sending encountered errors | | **Cancelled** | Manually stopped before completion | ## Broadcasts List The Broadcasts page shows all your campaigns with: - Campaign name and channel - Status badge - Recipient count - Sent / Failed / Pending counts - Created date - Actions: View Report, Cancel (if in progress) ## Before You Broadcast Make sure you have: 1. ✅ An approved **message template** (for WhatsApp) 2. ✅ Sufficient **wallet balance** 3. ✅ A **segment** or contact list to target ======================================================================== ## Broadcast Reports URL: https://docs.splashifypro.com/broadcasts/broadcast-reports ======================================================================== # Broadcast Reports After a broadcast is sent, view detailed delivery analytics in the **Broadcast Report**. ## Access a Report 1. Go to **Broadcasts** 2. Find your completed broadcast 3. Click **View Report** or click the broadcast name ## Report Overview The top of the report shows summary cards: | Metric | Description | |--------|-------------| | **Total Recipients** | Number of contacts targeted | | **Sent** | Messages dispatched from your WABA | | **Delivered** | Messages confirmed delivered to device | | **Read** | Messages opened by recipients | | **Failed** | Messages that could not be delivered | | **Pending** | Messages still in queue | ## Delivery Rate Calculation ``` Delivery Rate = (Delivered / Sent) × 100 Read Rate = (Read / Delivered) × 100 ``` ## Per-Contact Delivery Table Scroll down to see each recipient's delivery status: | Column | Description | |--------|-------------| | Contact Name | Recipient name | | Phone | Phone number | | Status | Sent / Delivered / Read / Failed | | Timestamp | When the status was last updated | | Error | Failure reason (if failed) | ## Common Failure Reasons | Error | Cause | |-------|-------| | `User not on WhatsApp` | Number not registered on WhatsApp | | `Number opted out` | Contact previously opted out | | `Messaging limit reached` | WABA daily tier exceeded | | `Template rejected` | Template was rejected by Meta after approval | | `Invalid phone number` | Phone number format is incorrect | ## Failed Message Refunds Failed messages are automatically refunded to your wallet. Refunds typically process within **24 hours**. ## Broadcast Creator The report shows which team member created and sent the broadcast, so you can track campaign ownership. ## Export Use the browser's print/save function to export the report. Native CSV export is coming soon. ======================================================================== ## Create a Broadcast URL: https://docs.splashifypro.com/broadcasts/create-broadcast ======================================================================== # Create a Broadcast ## Step 1: Start a New Broadcast 1. Go to **Broadcasts** 2. Click **+ New Broadcast** 3. Choose the channel: **WhatsApp** or **RCS** --- ## WhatsApp Broadcast ### Step 2: Select a Template Browse your approved WhatsApp templates and select one. - Filter by template category: **Marketing**, **Utility**, **Authentication** - Preview the template on the right before selecting - Only **approved** templates can be used for broadcasts ### Step 3: Choose Your Audience Select who will receive this broadcast: | Option | Description | |--------|-------------| | **Segment** | Target a saved segment (recommended) | | **All Contacts** | Send to your entire contact list | | **Upload CSV** | Import a one-time contact list just for this broadcast | The recipient count is shown after selecting the audience. ### Step 4: Map Template Variables If your template has variables (e.g. `{{1}}`, `{{customer_name}}`), map each one to a contact field: | Variable | Map to | |----------|--------| | `{{1}}` | Contact Name | | `{{2}}` | Custom Attribute: "Order ID" | | `{{3}}` | Static value: "Mumbai" | ### Step 5: Schedule or Send Now | Option | Description | |--------|-------------| | **Send Now** | Broadcast starts immediately after creation | | **Schedule** | Pick a future date and time (your account timezone) | ### Step 6: Confirm and Launch Review the summary: - Template name - Audience count - Estimated cost (deducted from wallet) - Send time Click **Launch Broadcast** to confirm. --- ## Billing Broadcast costs are deducted from your wallet per message: - **Marketing template:** Higher per-message rate - **Utility template:** Lower per-message rate - Failed messages are automatically refunded Check your balance before sending at **Wallet** in the sidebar. --- ## Cancel a Broadcast To stop an in-progress broadcast: 1. Go to **Broadcasts** 2. Find the broadcast with status **Processing** 3. Click **Cancel** 4. Confirm Messages already sent cannot be recalled. Only unsent messages are stopped. ======================================================================== ## RCS Broadcasts URL: https://docs.splashifypro.com/broadcasts/rcs-broadcast ======================================================================== # RCS Broadcasts **RCS (Rich Communication Services)** is the next-generation SMS. RCS Broadcasts allow you to send rich, interactive messages — with images, carousels, and buttons — to contacts' native SMS apps on supported Android devices. ## RCS vs WhatsApp | Feature | RCS | WhatsApp | |---------|-----|---------| | No app install needed | ✅ | ❌ | | Delivered to SMS inbox | ✅ | ❌ | | Supports Android only | ✅ | Both iOS & Android | | Rich media (images, buttons) | ✅ | ✅ | | Template approval required | ✅ | ✅ | ## Creating an RCS Broadcast 1. Go to **Broadcasts** 2. Click **+ New Broadcast** 3. Select **RCS** as the channel ### RCS Campaign Steps **Step 1: Campaign Name** Give your campaign a descriptive name for internal tracking. **Step 2: Select RCS Template** Choose from your approved RCS templates. Templates must be submitted and approved before use. **Step 3: Choose Audience** Same as WhatsApp — select a segment, all contacts, or upload a CSV. **Step 4: Map Variables** If your RCS template has variables, map them to contact fields. **Step 5: Schedule or Send** Choose to send immediately or schedule for a later time. ## RCS Templates Create RCS templates at **Templates → RCS Templates**. RCS templates support: - Plain text messages - Image messages - Card messages (image + title + description + buttons) - Carousel messages (multiple cards) See [Templates](/templates) for how to create and submit RCS templates. ## Billing RCS messages are charged per message sent based on your RCS plan. Rates are separate from WhatsApp pricing. Check your current RCS balance in **Wallet**. ## Delivery - RCS delivers only to Android devices with RCS support enabled - If RCS is not supported, the message may fallback to SMS (depending on carrier and your plan) - Delivery reports are available in the broadcast report ## View RCS Broadcast Report After the broadcast, click **View Report** on the broadcast row to see: - Total sent - Delivered count - Failed count - Per-contact delivery status ======================================================================== ## WhatsApp Broadcasts URL: https://docs.splashifypro.com/broadcasts/whatsapp-broadcast ======================================================================== # WhatsApp Broadcasts WhatsApp Broadcasts use **Meta-approved message templates** to send messages to large audiences outside the 24-hour customer service window. ## How WhatsApp Broadcasts Work 1. You select an approved template 2. Splashify Pro sends each message individually from your WABA 3. Recipients receive messages in their WhatsApp as if sent from your number 4. Replies open a regular conversation in your inbox > WhatsApp limits the number of messages you can send per day based on your messaging tier. Higher tiers are unlocked by completing KYC and maintaining good message quality. ## Messaging Tiers | Tier | Conversations/Day | |------|------------------| | **Tier 1** | 1,000 | | **Tier 2** | 10,000 | | **Tier 3** | 100,000 | | **Tier 4** | Unlimited | Tier upgrades happen automatically when Meta's quality rating criteria are met. ## Template Categories | Category | Use Case | Approval Time | |----------|----------|--------------| | **Marketing** | Promotions, offers, announcements | 24–48 hours | | **Utility** | Order updates, OTP, transactional | Usually faster | | **Authentication** | OTP for login/verification | Fastest | ## Message Quality Rating Meta monitors message quality based on: - **Read rate** — How many recipients open your messages - **Block rate** — How many recipients block you after receiving messages - **Opt-out rate** — How many recipients report or opt out Poor quality can lower your tier or restrict your account. Always send relevant, expected messages. ## Rate Limits Splashify Pro handles WABA rate limiting automatically: - Messages are queued and sent at the optimal rate - Large broadcasts are processed in batches - No manual rate limiting required ## Template Variable Tips | Tip | Details | |-----|---------| | Personalize with `{{name}}` | Higher open rates | | Keep CTAs clear | One call-to-action works better than multiple | | Test before sending | Use the preview feature on the template page | ======================================================================== ## AI Agents & Chatbots URL: https://docs.splashifypro.com/ai-agents ======================================================================== # AI Agents & Chatbots Splashify Pro offers two types of automation agents: ## Agent Types | Type | Description | Best For | |------|-------------|---------| | **Chat AI Agent** | GPT-powered agent that reads your instructions and responds intelligently | FAQ bots, support automation, lead qualification | | **Workflow Bot** | Visual no-code flow builder with trigger-based conversation paths | Structured conversations, data collection, onboarding | ## Navigate to AI Agents Click **AI Agents** in the left sidebar, or go to: ``` https://app.splashifypro.com/ai-agents ``` ## How Automation Works When a customer sends a message: ``` Incoming WhatsApp message ↓ Is a human agent assigned? ↓ No Is there a default Workflow Bot? ↓ Yes → Run the bot flow ↓ No Is there a Chat AI Agent? ↓ Yes → AI generates reply ↓ No Message sits unhandled in inbox ``` When a **human agent** is assigned to a conversation, all automated replies pause — the human takes control. ## Setting a Default Agent 1. Go to **AI Agents** 2. Find your Workflow Bot 3. Click the **star icon ⭐** (Set as Default) Only Workflow Bots can be set as default (Chat AI Agents handle specific conversations, not all inbound messages by default). ## AI Credits AI Agent responses consume **AI credits**. Each reply uses a certain number of credits based on the length of the conversation. - View your AI credit balance at **AI Credits** in the sidebar - Recharge AI credits at **Settings → AI Credits** - When credits run out, the AI agent stops responding and the conversation becomes available for human handling ======================================================================== ## Chat AI Agent URL: https://docs.splashifypro.com/ai-agents/chat-ai-agent ======================================================================== # Chat AI Agent A **Chat AI Agent** uses GPT (large language model) to read your instructions and automatically respond to customer messages in a natural, human-like way. ## Create a Chat AI Agent 1. Go to **AI Agents** 2. Click **+ New Agent** 3. Select **Chat AI Agent** 4. Fill in the agent details: ### Agent Configuration | Field | Description | |-------|-------------| | **Name** | Internal name (e.g. "Customer Support Bot") | | **Instructions** | The system prompt — tell the AI who it is and how to behave | | **Knowledge Base** | Add documents or text the AI should know about | | **Tone** | Professional, Friendly, Formal | | **Language** | Default language for responses | ### Writing Good Instructions Your instructions define how the AI behaves. Example: ``` You are a customer support agent for Acme Store. You help customers with: - Order status inquiries - Return and refund policies - Product recommendations Always be polite and professional. If you cannot answer a question, say "Let me connect you with our team." Do NOT make up information not in the knowledge base. ``` ## Knowledge Base Add documents for the AI to reference: 1. Open your Chat AI Agent 2. Click **Knowledge Base** 3. Add content via: - **Plain text** — Paste FAQs, policies, product descriptions - **URL** — The AI fetches and indexes the page - **File upload** — PDF, DOCX support The AI uses the knowledge base to answer questions accurately without hallucinating. ## Testing Your Agent 1. Open the agent 2. Use the **Test Chat** panel to simulate a conversation 3. Review the AI's responses 4. Adjust instructions if needed ## Assigning to a Conversation You can manually assign a Chat AI Agent to a specific conversation: 1. Open the conversation in **Messages** 2. Click **Assign AI Agent** in the conversation header 3. Select your agent ## Deactivating / Archiving 1. Open the agent 2. Toggle **Status** to **Inactive** Inactive agents do not process messages but their configuration is preserved. ## AI Credits Usage Each AI-generated response consumes credits based on: - Input tokens (conversation history + instructions) - Output tokens (the response generated) Monitor usage at **Settings → AI Credits**. ======================================================================== ## Flow Builder URL: https://docs.splashifypro.com/ai-agents/flow-builder ======================================================================== # Flow Builder The **Flow Builder** is a visual drag-and-drop canvas where you connect nodes to build your chatbot conversation flow. ## Open the Flow Builder 1. Go to **AI Agents** 2. Click on a **Workflow Bot** 3. The flow builder opens automatically ## Canvas Controls | Action | How | |--------|-----| | **Pan** | Click and drag on empty canvas | | **Zoom** | Scroll wheel, or use +/− buttons | | **Select node** | Click on a node | | **Move node** | Click and drag a node | | **Connect nodes** | Drag from an output handle to an input handle | | **Delete connection** | Click the edge and press Delete | | **Delete node** | Select node → press Delete or use the node menu | ## Node Palette The left sidebar shows available node types. Click a node type to add it to the canvas. ### Node Categories **Send Messages** - Send Text - Send Image - Send Video - Send Document - Send Audio - Send Button Message (interactive) - Send List Message (interactive) - Send Template Message **Ask / Collect Input** - Ask Question (text) - Ask Number - Ask Phone - Ask Email - Ask Date - Ask URL - Ask Media / File - Ask Location - Ask Choice (multiple choice buttons) **Logic & Flow Control** - Condition (if/else branching) - Delay (wait before next step) - AI Agent (hand off to another bot) **Actions** - HTTP Request (call an external API) - Update Contact Column (set a custom attribute) - Update Contact Tag (add/remove tag) - AI Generate (generate dynamic text using AI) - Assign Agent (assign conversation to team member) - Resolve Conversation ## Building a Flow ### Step 1: Start with a Trigger Every flow must start with an **On Message** trigger node. It's added automatically when you create a new bot. ### Step 2: Add Nodes 1. Click a node in the **Node Palette** (left sidebar) 2. It appears on the canvas 3. Drag it to position it ### Step 3: Connect Nodes - Drag from the **output handle** (circle on the right/bottom of a node) to the **input handle** of the next node - Conditional nodes have two outputs: **True** (yes path) and **False** (no path) ### Step 4: Configure Each Node Click on a node to open its configuration panel on the right: - Set the message text, media, or logic - Map variable placeholders to contact attributes - Configure conditions and operators ### Step 5: Test the Flow Use the **Test** button to simulate the flow in a preview mode. ### Step 6: Save and Publish - Click **Save** to save your progress as a draft - Click **Publish** to make the bot live ## Variables Variables let you store and reuse dynamic values throughout a flow. ### Storing User Input When using Ask nodes, the user's answer is saved to a **variable**: ``` Ask Question: "What is your name?" Save to variable: "customer_name" ``` Later nodes can reference `{{customer_name}}` in message text. ### Mapping to Contact Attributes Use the **Update Contact Column** node to persist variables to the contact's profile in the database. ## Maya AI Flow Generator Instead of building a flow from scratch, describe what you want in plain language and let **Maya AI** generate a complete, ready-to-run flow automatically. ### How it works 1. Open a Workflow Bot in the Flow Builder 2. Click the **Maya** button (top-right of the canvas toolbar) 3. Type a description of the flow you want — e.g. *"Ask for name, email, and service interest, then send a confirmation message"* 4. Select the **Mode**: - **Replace** — clears the current canvas and builds the new flow from scratch - **Append** — adds the generated nodes to the existing canvas 5. Click **Generate** — Maya will build the flow in seconds 6. Review the generated nodes; use the **Refine** input if you want to adjust specific parts 7. Click **Apply to Canvas** to insert the flow ### Cost Each generation deducts **₹5** from your **Wallet**. The deduction happens only after the AI returns a valid flow — a failed call costs nothing. ### Supported node types (23) Maya can generate flows using any of these node types: | Category | Nodes | |----------|-------| | **Trigger** | On Message | | **Send** | Send Text, Send Button, Send List, Send Media, Send Template | | **Ask** | Ask Text, Ask Number, Ask Email, Ask Phone, Ask Choice | | **Logic** | Condition, Delay, Jump to Flow | | **AI** | AI Generate | | **Actions** | HTTP Request, Set Variable, Update Tag, Update Column, Assign Conversation, Unassign Conversation, Resolve Conversation, Stop Chatbot | ### Tips for better results - Be specific: *"Ask for the customer's name, then ask for their city, then send a text saying 'Thanks \{\{name\}\}, we'll contact you in \{\{city\}\} shortly'"* - Mention branching: *"If the customer selects Premium, send the premium offer; otherwise send the standard offer"* - Describe the goal: *"Lead capture flow for a real-estate business — collect name, budget, and preferred location"* - Use **Refine** to tweak individual parts without regenerating the whole flow ## CTWA Ads Integration When triggered from a Click-to-WhatsApp (CTWA) ad, the flow receives the ad's **Source ID**. Use the **On Message** trigger with "For Specific Ads" to build dedicated landing-style flows per ad campaign. ======================================================================== ## Flow Node Reference URL: https://docs.splashifypro.com/ai-agents/flow-nodes ======================================================================== # Flow Node Reference ## Trigger Nodes ### On Message Node The entry point of every flow. Defines what messages activate the bot. | Setting | Options | |---------|---------| | **Trigger Type** | Any Message / Specific Keywords / Any CTWA Ad / Specific CTWA Ads | | **Keywords** | Comma-separated keywords (case-insensitive match) | | **Source IDs** | CTWA ad source IDs for ad-specific triggers | | **Behavior** | Normal / Only once per new contact / Only if resolved | --- ## Send Message Nodes ### Send Text Sends a plain text WhatsApp message. - Supports `{{variable_name}}` placeholders - Supports emoji ### Send Image / Video / Document / Audio Sends a media file. - **URL:** Direct link to the media file - **Caption:** Optional text below the media ### Send Button Message Sends an interactive message with up to **3 quick reply buttons**. | Field | Description | |-------|-------------| | Body text | The main message | | Footer | Optional sub-text below body | | Buttons | Up to 3 button labels | Each button connects to a separate output handle for branching. ### Send List Message Sends an interactive list picker with sections and rows. | Field | Description | |-------|-------------| | Header | Optional header text | | Body | Main message | | Button Label | Text of the "View Options" button | | Sections | Up to 10 sections, each with up to 10 rows | ### Send Template Message Sends an approved WhatsApp message template. | Field | Description | |-------|-------------| | Template | Select from approved templates | | Variables | Map template variables to contact attributes | --- ## Ask / Input Nodes All Ask nodes send a question and **wait for the user's reply** before proceeding. | Node | Validates | |------|-----------| | **Ask Question** | Any text | | **Ask Number** | Numeric input | | **Ask Phone** | Valid phone format | | **Ask Email** | Valid email format | | **Ask Date** | Date format | | **Ask URL** | Valid URL | | **Ask Media** | Image / Video | | **Ask File** | Document / File | | **Ask Location** | GPS location share | | **Ask Choice** | Buttons (up to 3 choices) | ### Ask Node Settings | Setting | Description | |---------|-------------| | **Question text** | The message sent to the user | | **Save to variable** | Variable name to store the answer | | **Invalid response message** | Sent if the user's input fails validation | --- ## Logic Nodes ### Condition Node Branches the flow based on a condition. | Field | Description | |-------|-------------| | **Variable** | The variable or contact attribute to check | | **Operator** | equals / not_equals / contains / starts_with / ends_with | | **Value** | The value to compare against | **Outputs:** - **True** handle → path taken when condition is met - **False** handle → path taken when condition is not met ### Delay Node Pauses the flow for a specified duration before executing the next node. | Field | Options | |-------|---------| | **Duration** | Any number | | **Unit** | Seconds / Minutes / Hours | --- ## Action Nodes ### HTTP Request Node Calls an external API and optionally stores the response in a variable. | Field | Description | |-------|-------------| | **Method** | GET / POST / PUT / DELETE | | **URL** | The API endpoint | | **Headers** | Key-value pairs | | **Body** | JSON body (for POST/PUT) | | **Save response to** | Variable name | ### Update Contact Column Sets a custom attribute on the contact. | Field | Description | |-------|-------------| | **Column** | The custom attribute to update | | **Value** | Static value or `{{variable}}` | ### Update Contact Tag Adds or removes a tag from the contact. | Field | Options | |-------|---------| | **Action** | Add tag / Remove tag | | **Tag** | Select from existing tags | ### AI Agent Node Hands off the flow to another **Workflow Bot** (sub-flow). | Field | Description | |-------|-------------| | **Select Bot** | Choose a published Workflow Bot | ### AI Generate Node Generates dynamic text using AI based on a prompt. | Field | Description | |-------|-------------| | **Prompt** | Instruction for the AI (can include `{{variables}}`) | | **Save to variable** | Where to store the generated text | ### Assign Agent Node Assigns the conversation to a specific team member. | Field | Description | |-------|-------------| | **Agent** | Select a team member | ### Resolve Conversation Node Marks the conversation as resolved. Useful at the end of a flow. ======================================================================== ## Untitled URL: https://docs.splashifypro.com/ai-agents/instagram-bots ======================================================================== # Instagram Chatbots Workflow Bots can run on Instagram in addition to WhatsApp. Pick the channel when you create the bot — channel is permanent post-create. The same flow editor, the same node palette (minus a few WA-only nodes), and the marquee feature: a **Send WhatsApp Template** node that hands a qualified lead from Instagram to WhatsApp for richer engagement. > **Plan + connection requirements:** Instagram bots need a plan with **Instagram Automation** enabled, AND a connected Instagram Business account at [/instagram-automation](/instagram-automation). Trial users get full access. ## Channel scoping Each bot is either **WhatsApp** or **Instagram**, picked at create-time and immutable. The flow editor renders the matching node palette per channel — IG bots don't see WA-only nodes (and vice versa). | Concern | WhatsApp | Instagram | |---|---|---| | Trigger types | Keyword, any-message, CTWA Ads | DM keyword, DM any, story reply, comment-on-post | | Send-type nodes | Text, media, button, list, CTA, template, carousel | Text, media, button (quick-replies), **Send WhatsApp Template** (handoff) | | Ask-type nodes | Text, number, email, phone, date, URL, media, file, location | Text, number, email, phone, date, URL, media (no file, no location) | | 24h/7d window | Not enforced | Auto-attaches `HUMAN_AGENT` tag 24h–7d, refuses send beyond 7d | | Default-bot star | Independent — one default per channel | Independent — one default per channel | ## IG trigger types Pick one per bot in the **On Message** node: - **Any DM** — fires on any plain inbound DM. Story replies and comment-triggered DMs are excluded so they can be handled by their dedicated triggers. - **DM Keyword** — case-insensitive substring match against keywords you list. Optional fuzzy / case-match toggles match the WA keyword UI. - **Story Reply** — fires when a customer replies to one of your stories. Optional story-id filter restricts to specific stories; empty = any story. - **Comment on Post** — fires when a customer comments on a post you pick from the IG media grid. Optional keyword filter restricts to comments containing certain words. All four support the standard behavior gates (every message / only-once-per-contact / only-if-resolved). ### Constraint on comment triggers When the trigger is **Comment on Post**, the first node connected after the trigger MUST be a Send-type (Send Text / Send Media / Send Button). The bot replies via Meta's comment-scoped private-reply API which only accepts the immediate content of the reply — there's no way to "run the bot to completion before sending." If the first node is a Condition or Delay, the customer never receives a DM and the session never starts. Save fails with a clear error if you try. ### Comment trigger overlap with comment-to-DM rules If a [comment-to-DM rule](/instagram/automation-rules) on the same post + keyword matches first, the rule fires and the bot is skipped. So: - For one-shot DM replies → use a comment-to-DM rule - For multi-step qualification flows → use a bot with a comment trigger - Don't put both on the same post + keyword — only the rule will run ## Send WhatsApp Template (cross-channel handoff) The marquee feature. Drop this node anywhere in your IG flow to hand off to WhatsApp: 1. **Phone source variable** — pick the variable that holds the captured phone (typically the saveAs of an Ask Phone node earlier in the flow). 2. **WhatsApp template** — pick an APPROVED template from your WA template library. 3. **Variable mapping** — map body / header / button params, same UI as the WA Send Template node. 4. **After handoff** — choose what happens next: - **End IG flow** (default): one-shot template send, IG flow stops. - **Continue on WhatsApp via bot…**: chained WA bot resumes when the customer replies on WA. IG-captured variables transfer verbatim into the WA session. 5. **Compliance acknowledgement** — required to save. Confirms the recipient has opted into WhatsApp messages. Marketing templates without explicit opt-in violate Meta policy. When the node fires, we: - Find or create a WA contact tagged `instagram-handoff` with `metadata.source_ig_conversation_id` cross-linking back to the originating IG conversation. - Find or create the WA conversation row (channel='whatsapp'). - Send the template via your standard WA messaging path. Wallet deduction + reseller markup apply normally. - (If continue-on-WA) insert a paused chatbot session keyed on the WA conversation + chosen bot. The customer's first WA reply resumes the bot. - Record a `cross_channel_handoff` row in the activity log with both conversation ids. If the phone variable is empty / invalid, or the user has no WABA connected, the node logs an audit row and advances the flow without sending — surrounding nodes (CRM tag updates, audit webhooks, etc.) still run. ## 24h / 7d messaging window Meta restricts who you can DM and when: - **0–24h** since the customer's last inbound: send freely. - **24h–7d**: the IG send layer auto-attaches the `HUMAN_AGENT` message tag. The bot still works but Meta's policy requires this for non-promotional follow-ups. - **Beyond 7d**: Meta refuses the send. The flow logs the skip and advances to the next node — Condition / HTTP / UpdateColumn / UpdateTag / SendWhatsAppTemplate still run for an expired-window contact. The Send WhatsApp Template handoff is the one path that bypasses the window, since WA templates have their own opt-in policy. ## Setting a default IG bot Independent from the default WA bot. Star button on each bot row in [/ai-agents](/ai-agents) — IG bots get a pink star, WA bots emerald. Stars per channel are independent: starring an IG bot doesn't unstar your WA default. Inbound IG DMs that don't match a more specific bot (keyword / story / comment) fall through to the default IG bot if one is set, OR to the welcome / off-hours auto-reply if those are configured under [Settings → Live Chat](/settings/live-chat). ## What lives where - **Bot creation + channel pick** — [/ai-agents](/ai-agents) → Create Agent → Workflow Bot → pick WhatsApp or Instagram. - **Flow builder** — [/chatbot/[id]](/chatbot) — same canvas as WA bots, IG-pink accent + filtered palette. - **Comment-to-DM rules (one-shot)** — [/instagram-automation](/instagram-automation) — keep for simple "comment X → DM Y" use cases. - **Default-bot star + channel pill** — agent list at [/ai-agents](/ai-agents). - **Live testing** — [/messages](/messages) Instagram tab; bots fire on real inbound. ======================================================================== ## AI Credits & Pricing URL: https://docs.splashifypro.com/ai-agents/pricing ======================================================================== # AI Credits & Pricing Every AI agent reply — text or voice — deducts from your **AI Credits** wallet (separate from your WhatsApp messaging wallet). Top-up at **Settings → AI Credits**. All prices below are in **INR**, deducted in real time after each reply. ## Chat (text in, text out) Chat AI agents and the **AI Generate Text** node are billed per token of input + output: | Direction | Rate per 1M tokens | Rate per token | | --------- | ------------------ | -------------- | | Input (your prompt + history + KB context) | **₹15** | ₹0.000015 | | Output (the agent's reply) | **₹60** | ₹0.000060 | A typical WhatsApp reply uses around **400 input + 80 output tokens**: ``` input = 400 × 0.000015 = ₹0.0060 output = 80 × 0.000060 = ₹0.0048 total = ₹0.0108 per message ``` That's about **₹1.08 per 100 chat replies** for a typical agent. A support agent serving 10,000 messages a month costs around **₹100-150** in chat credits. ### What counts as a token Tokens are how the model measures text — roughly 4 characters or ¾ of an English word. We count exactly the prompt + completion tokens reported by the model and deduct that, no rounding up. The system prompt (your agent's role, goal, instructions, tone + the entire knowledge base text) is part of the **input** count, so larger knowledge bases mean slightly higher per-message costs. Trim KB files to relevant content for the cheapest rate. ## Voice (incoming voice notes & spoken replies) When a customer sends a **WhatsApp voice note** to a chat AI agent, two extra services run on top of the chat charge: 1. **Speech-to-Text** — the voice note is transcribed before being sent to the model 2. **Text-to-Speech** — the agent's reply is converted back to audio and sent as a voice note (only when the inbound was audio) | Service | Rate | | ------- | ---- | | **Speech-to-Text** | **₹0.0104 / second** of audio | | **Text-to-Speech** | **₹0.00375 / character** of reply | A typical voice exchange: ``` Customer voice note (10s) STT 10 × 0.0104 = ₹0.104 Chat reply (400+80 tokens) chat = ₹0.011 Agent voice note (200 chars) TTS 200 × 0.00375 = ₹0.75 ────── Total per voice exchange ≈ ₹0.87 ``` A chat-only exchange costs **~₹0.01**; a voice exchange costs **~₹0.87** because the audio pipeline is the dominant cost. ### When voice charges apply | Inbound | Outbound | Charges | | ------- | -------- | ------- | | Text | Text | Chat only | | **Voice note** | Text | Chat + Speech-to-Text | | **Voice note** | **Voice note** | Chat + Speech-to-Text + Text-to-Speech | The agent automatically replies with audio when the inbound was audio. To force text-only replies, edit the agent's instructions (e.g. "Always reply with text, never audio"). ## Voice AI Agent (real-time phone calls) Distinct from the chat AI agent — **Voice AI Agents** handle live WhatsApp Business calls. Pricing is per-second of call time, not per-token. See [Voice AI Pricing](/voice-ai/pricing) for details. ## Where to see your usage - **Settings → AI Credits** — current balance + recent deductions - **Track Expenses → AI Credit Usage** — full history with per-call breakdown of token counts, audio seconds, and characters Each row records the call type (chat, speech-to-text, text-to-speech) so you can see exactly what your AI agents are doing. ## Insufficient credits When your balance falls below the cost of the next call, the agent **stops replying** and the conversation auto-unassigns so a human team member can take over. Top up at **Settings → AI Credits** — deductions resume immediately on the next inbound. The default minimum balance to keep the agent active is **₹0.001** (covers about 10 short text exchanges). Drop the balance below that and the conversation gets handed to your unassigned queue without any failed-message charges. ## Maya AI — Flow Generation **Maya AI** generates complete chatbot flows from a plain-language prompt. This is billed from your **Wallet** (not AI Credits), as a flat per-generation fee. | Action | Cost | |--------|------| | Generate a flow | **₹5 per generation** | The ₹5 is deducted only after the AI returns a valid flow. A failed or timed-out call costs nothing. If your wallet balance is below ₹5, generation is blocked until you top up. ## Maya AI — Template Generation **Maya AI** on the template create page generates a full WhatsApp template (header, body, and buttons) in one click. | Action | Cost | |--------|------| | Generate a template | **₹2 per generation** | Same rules apply: deducted from **Wallet** only on success, free on failure, blocked if balance < ₹2. ## Need higher volume? For accounts processing 100K+ AI replies per month, custom rates are available. Email **support@splashifypro.in** with your expected monthly volume. ======================================================================== ## Workflow Bot URL: https://docs.splashifypro.com/ai-agents/workflow-bot ======================================================================== # Workflow Bot A **Workflow Bot** uses a visual flow builder to define structured conversation paths. Unlike the Chat AI Agent (which responds freely), a Workflow Bot follows a defined script — collecting data, sending messages, and taking actions at each step. ## Create a Workflow Bot 1. Go to **AI Agents** 2. Click **+ New Agent** 3. Select **Workflow Bot** 4. Enter a name 5. Click **Create** — you'll be taken to the **Flow Builder** ## How Workflow Bots Work A bot flow is a connected graph of **nodes**. When a trigger fires, the bot executes nodes one by one: ``` Trigger (On Message / On CTWA Ad) ↓ Send a message ↓ Ask a question → Save answer to contact ↓ Condition: Was answer "Yes"? ↓ Yes ↓ No Send callback Send goodbye request message message ``` ## Triggers Every bot flow starts with an **On Message** trigger node that defines when the bot activates: | Trigger | Description | |---------|-------------| | **For Any Message** | Bot activates on every incoming message | | **For Specific Keywords** | Activates when message matches keywords (e.g. "Hi", "Start", "Menu") | | **For Any CTWA Ads** | Activates when message comes from any Click-to-WhatsApp ad | | **For Specific Ads** | Activates only for specific CTWA source IDs | ### Trigger Behavior Options | Option | Description | |--------|-------------| | **Only once per new contact** | Bot runs only the first time a new contact messages | | **Only if chat is resolved** | Bot only activates for resolved conversations | ## Set as Default Bot To have the bot handle all inbound messages automatically: 1. On the **AI Agents** list page 2. Click the **⭐ star icon** next to your Workflow Bot 3. It becomes the default — all unassigned conversations are handled by this bot ## Publish the Bot After building and testing your flow: 1. Click **Publish** in the flow builder 2. Status changes from **Draft** to **Published** 3. The bot is now live and active > Unpublished (Draft) bots do not process messages even if set as default. ## Session Management The bot tracks each contact's progress through the flow using **sessions**: - Sessions are stored per contact per flow - If a contact stops mid-flow and messages again, the bot **continues from where they left off** - Sessions expire after **24 hours** of inactivity — the next message restarts the flow ## Nested Bots You can call one Workflow Bot from another using the **AI Agent Node**. This allows modular, reusable sub-flows. ======================================================================== ## Instagram URL: https://docs.splashifypro.com/instagram ======================================================================== # Instagram Splashify Pro connects your **Instagram Business account** so you can: - **Auto-DM** users who comment on your reels with a trigger keyword - **Reply publicly** to those comments at the same time - **Chat with DMs** in the same unified inbox you use for WhatsApp + RCS Everything runs through the official **Instagram Graph API with Instagram Login** — no Instagram password is ever shared with Splashify Pro, and you can revoke access at any time from your Instagram settings. ## Three parts of the feature | Part | What it does | Where to find it | |------|--------------|------------------| | **Connect** | One-time Instagram Login flow that authorises Splashify Pro | [/instagram-automation](https://app.splashifypro.com/instagram-automation) | | **Automation Rules** | Per-reel keyword triggers → auto-DM + public reply | Same page, Rules tab | | **Instagram Inbox** | Live DM conversations alongside WhatsApp + RCS | [/messages](https://app.splashifypro.com/messages) — **Instagram** tab | ## Prerequisites To connect, your Instagram account must be either: - **Business** account, or - **Creator** account Personal accounts are not eligible — Instagram's Graph API blocks them. To convert, open the Instagram mobile app → **Settings → Account → Switch to Professional Account**. ## Plan requirements Instagram is included on **GROWTH**, **ADVANCED**, and **ENTERPRISE** plans. On a trial account you have full access during the trial period — the feature locks after the trial ends unless your current plan has it enabled. ## How the comment-DM flow works ``` Someone comments on your reel ↓ Comment contains one of your trigger keywords? ↓ No → nothing happens (comment stays logged under Activity) ↓ Yes Auto-send private DM to that commenter Optionally post a public reply under their comment Log everything to the Activity feed ``` Triggers fire in **seconds** — Meta pushes webhook events the moment the comment lands, and Splashify Pro processes them inline. Continue with [**Connect Instagram**](/instagram/connect) to start setup. ======================================================================== ## Automation Rules URL: https://docs.splashifypro.com/instagram/automation-rules ======================================================================== # Automation Rules Each rule is scoped to **one reel (or post)** and fires when someone comments on it with a matching keyword. You can have multiple rules on the same reel — e.g. one for `price`, another for `link`. ## Create your first rule ### 1. Open the Rules tab On [/instagram-automation](https://app.splashifypro.com/instagram-automation), click the **Rules** tab. You'll see all rules with their media thumbnail, keyword, and trigger count. ### 2. Click "New Rule" A side sheet opens with an empty form. ### 3. Pick a reel or post You'll see a grid of your recent 25 posts/reels pulled live from Instagram. Click the one you want this rule to apply to. Click **Change** if you need to pick a different one. ### 4. Set the trigger keyword The keyword is a **case-insensitive substring match** against the comment text. **Examples:** | Trigger keyword | Comments that match | |-----------------|---------------------| | `price` | "What's the price?", "PRICE??", "priced too high" | | `link` | "Send link", "Linked in bio?" | | `how much` | "how much is it", "How Much?", "howmuch" ❌ (no space) | Pick something short and specific. Common pitfalls: - **Too generic** — `hi` will fire on nearly every comment - **Too specific** — `what is the price in dollars` will never match ### 5. Set the DM message What gets sent as a private reply when the rule fires. Keep it under 1000 characters — Instagram truncates longer messages. You can include links. Instagram renders clickable link previews in DMs. ### 6. (Optional) Set a public comment reply The text posted as a **public reply under the comment** at the same time as the DM is sent. Common pattern: `Check your DMs! 📬` — lets the commenter (and onlookers) know the DM was sent. Leave blank if you only want a private DM with no public footprint. ### 7. Save The rule goes live immediately. Comments that arrive from this moment onwards will be checked against it. ## How matching works When Instagram pushes a comment event to Splashify Pro: ``` Comment text → lowercased → "contains" check against each active rule's keyword ``` - Multiple rules on the same reel are checked **in creation order** - The **first matching active rule** fires; other rules for the same comment are skipped - Comments with no match are still logged to the Activity feed (so you can see what's coming in) ## Managing rules | Action | How | |--------|-----| | **Pause / activate** | Click the power icon on the rule row | | **Edit keyword or messages** | Click the pencil icon | | **Delete** | Click the trash icon — irreversible | | **See firing count** | Each rule card shows "Triggered N×" | ## Common patterns ### Lead magnet — "send me the link" ``` Trigger: link DM: Here you go 🎁 https://your-site.com/guide Reply 'yes' if you want me to follow up with pricing! Reply: Check your DMs 📬 ``` ### Price list on demand ``` Trigger: price DM: Our starter pack is ₹2,000/mo, pro is ₹5,000/mo, and enterprise is custom. Full breakdown: https://your-site.com/pricing Reply: DM'd you our pricing — check your inbox 💬 ``` ### Course waitlist signup ``` Trigger: join DM: Welcome! To secure your spot, drop your email here and I'll send the enrolment link within 24h. Reply: (leave blank — keeps it more personal) ``` ## Limits and quirks - **One DM per matching comment** — we don't fire the same rule multiple times for the same comment ID - **Deleted comments** — if the commenter deletes their comment after we send the DM, the DM stays; Instagram doesn't retract it - **Carousel posts** — rules work on the carousel as a whole, not per slide Continue to [**Instagram Inbox**](/instagram/inbox) to handle the DMs that land after automations fire. ======================================================================== ## Connect Instagram URL: https://docs.splashifypro.com/instagram/connect ======================================================================== # Connect Instagram The connect flow takes about **30 seconds**. You do it once per Instagram account. ## Before you start Check your Instagram account type in the mobile app → **Settings → Account**: - ✅ **Business account** — works - ✅ **Creator account** — works - ❌ **Personal account** — Instagram Graph API does not allow apps to manage comments/DMs on personal accounts. Convert to Professional (Business or Creator) first. It's free and reversible. ## Step-by-step ### 1. Open the Instagram page In the Splashify Pro sidebar, click **Instagram**. You'll land at [app.splashifypro.com/instagram-automation](https://app.splashifypro.com/instagram-automation). If your plan doesn't include Instagram automation, you'll see an **Upgrade Plan** card here instead. Upgrade first, then return. ### 2. Click "Connect Instagram" You'll be redirected to `instagram.com/oauth/authorize` — Instagram's own login page. ### 3. Sign in with Instagram Log in with your Instagram Business/Creator credentials. If you're already logged into Instagram in this browser, it'll skip the password step. ### 4. Review and approve permissions Instagram will ask you to grant Splashify Pro these permissions: | Permission | Why Splashify Pro needs it | |------------|---------------------------| | `instagram_business_basic` | Read your profile and reels so you can pick which posts get automation rules | | `instagram_business_manage_comments` | Receive comment events via webhook + post public replies | | `instagram_business_manage_messages` | Send the private DM when a trigger keyword matches | Tap **Allow**. Instagram redirects you back to Splashify Pro. ### 5. We finish the setup in the background Behind the scenes, Splashify Pro: - Swaps the authorization code for a **long-lived access token** (~60-day validity) - Reads your profile for the username + profile picture - **Subscribes our app** to Instagram webhook events for `comments` and `messages` You'll see your account appear with a **Webhooks active** badge. ## After connecting You're ready to [**create your first automation rule**](/instagram/automation-rules). ## Disconnecting Click **Disconnect** on the connected-account card. Splashify Pro: 1. Unsubscribes from your Instagram webhooks (Meta stops sending events to us) 2. Deletes your stored access token 3. Removes every automation rule and activity log for this account Your Instagram account itself is unaffected — this just severs our access. ## What gets stored | Stored in Splashify Pro | Not stored | |------------------------|------------| | Your Instagram User ID + username + profile picture URL | Your Instagram password | | Long-lived access token (AES-encrypted at rest) | Your DMs or comments in bulk — we only read the specific events Meta pushes | | Automation rules you create (keywords, DM text, etc.) | | ## Token expiry The long-lived token expires 60 days after issue. Splashify Pro will prompt you to reconnect when it's nearing expiry. Refreshing just takes one click. ======================================================================== ## Instagram Inbox URL: https://docs.splashifypro.com/instagram/inbox ======================================================================== # Instagram Inbox Once you connect Instagram, every **DM** you receive lands in the same `/messages` page as WhatsApp and RCS — no context switching between apps. ## Finding the Instagram inbox On [/messages](https://app.splashifypro.com/messages), a tab switcher appears at the top of the conversation list: - **WhatsApp** (green) - **RCS** (purple) — only when RCS is active - **Instagram** (pink) — only when Instagram is connected Click **Instagram** to see only DM conversations. ## What you can do | Action | How | |--------|-----| | **Read incoming DMs** | They appear automatically as Instagram webhooks arrive | | **Reply** | Type in the composer at the bottom, hit **Send** | | **See commenter history** | DMs triggered by automation rules show the commenter's Instagram username | | **Add a contact** | Normal contact panel works — tag, note, etc. | ## Composer states The composer at the bottom of the chat thread has three states, based on **when the user last messaged you**. These are enforced by Instagram (not Splashify Pro) and govern what you can send. ### 0–24 hours — unrestricted (green banner) ``` ✓ Free-reply window open • 23h 45m left ``` You can send **any** text freely. No tags required. ### 24 hours–7 days — Human Agent tag required (amber banner) ``` ⚠ 24-hour window has passed. Your message will be sent with the Human Agent tag (valid for 6d 5h more). ``` Instagram requires messages sent in this window to carry a `HUMAN_AGENT` tag, which Splashify Pro adds automatically. Your message still gets through. The tag is designed for human customer support — not promotions. This requires Meta App Review approval for the **Human Agent** feature on your app (already submitted for Splashify Pro). ### More than 7 days — locked (red banner) ``` 🔒 This user hasn't messaged you in over 7 days. Instagram blocks new outbound DMs until they message you again. ``` The composer is disabled. Instagram doesn't allow **any** outbound DM to a user who hasn't interacted with your account in the last 7 days — not even with the Human Agent tag. You have to wait for them to message you again. See [**Messaging Windows**](/instagram/messaging-windows) for the full policy reference. ## Comments vs DMs A **comment** on one of your reels does **not** reset the 7-day messaging window. Only an actual **DM** from the user counts. But — when your automation rule fires and we send the private DM, Instagram treats the DM-from-comment as within the standard 24h window automatically (since it's tied to the comment). ## Attachments Instagram currently supports `text`, `image`, `video`, `audio`, and `ig_reel` attachments in DMs. Inbound attachments render inline. Outbound attachments from Splashify Pro's composer are limited to text in the current release — we'll expand to media as Meta stabilises the API surface. ## Automation vs inbox Both features share the same underlying connection: - **Automation rules** send the *first* DM to a commenter (keyword trigger) - **Inbox** is where your ongoing conversation with that commenter lives — either continuing the automation-started thread or a cold DM they sent Replying in the inbox uses the same outbound pipeline, including the window policy. ======================================================================== ## Messaging Windows URL: https://docs.splashifypro.com/instagram/messaging-windows ======================================================================== # Messaging Windows Instagram enforces strict rules about **when** you can send a DM to a user. These rules are Instagram's, not Splashify Pro's — we simply reflect them in the composer and enforce them server-side. ## The three windows | Since user's last DM to you | What you can send | Banner colour | |----------------------------|-------------------|---------------| | **0–24 hours** | Any text or media, no tag | Green — "Free-reply window open" | | **24 hours–7 days** | Text only, must carry `HUMAN_AGENT` tag | Amber — "Human Agent tag" | | **More than 7 days** | Nothing. Wait for them to message again | Red — "Locked" | ## Why Instagram does this Instagram's goal is to keep DMs a **conversational inbox**, not a marketing channel. Businesses can respond to user-initiated conversations freely for the first 24h, then progressively lock down to prevent cold outreach and spam. ## How Splashify Pro handles each window ### Inside 24h Your message is sent with no extra metadata. Full creative freedom — attach media, use emoji, link to wherever you want. ### Between 24h and 7d Splashify Pro automatically stamps the outbound message with: ``` messaging_type: MESSAGE_TAG tag: HUMAN_AGENT ``` This tells Instagram the message is a legitimate human-agent follow-up (per Meta's [Human Agent policy](https://developers.facebook.com/docs/instagram-platform/humanagent/)). Valid use cases include: - Following up on a support issue that takes more than 24h to resolve - Responding after a weekend / holiday closure - Sending information a customer specifically asked for Prohibited in this window: promotions, marketing blasts, offer announcements. If you send something that looks promotional, Instagram may flag your account. Requires the **Human Agent** feature to be approved on the Meta App. Splashify Pro has it submitted. ### After 7 days Composer is disabled. Splashify Pro's backend also refuses any DM API call to this user — if your code (or another agent in your org) tries, Meta rejects it. Your only path back: wait for the user to DM you. ## When the clock resets A **new inbound DM** from the user resets `last_inbound_at` on their conversation. This flips the composer back to the green "Free-reply" state for the next 24h. Comments on your reels **do not** reset the window — Instagram treats comments and DMs as separate surfaces. ## Automation rule DMs and the window When your rule fires a DM in response to a comment, Splashify Pro treats that DM as being inside the 24h window automatically — the comment itself is the user's initial engagement signal. This is why comment-triggered auto-DMs always succeed regardless of whether the user has DM'd you before. ## What to show users in your UI The composer banner above the input reflects the window state in real time. The countdown ticks down once a minute. You don't need to manage this yourself. ## API-level checks If you're integrating via Splashify Pro's public API, you can query the current window status for a conversation: ``` GET /api/v1/app/instagram/messages/window?conversation_id=... ``` Response: ```json { "success": true, "window": { "state": "open", "can_reply": true, "needs_human_agent": false, "seconds_remaining": 82500, "last_inbound_at": "2026-04-24T03:15:22Z" } } ``` Use `can_reply` to decide whether to enable your send button. Use `needs_human_agent` to tell the user that their reply will carry the support tag. ======================================================================== ## Troubleshooting URL: https://docs.splashifypro.com/instagram/troubleshooting ======================================================================== # Troubleshooting ## "Your current plan doesn't include Instagram automation" Your plan's Instagram flag is off. Either: 1. **Upgrade to a plan with Instagram** from [/plans/whatsapp](https://app.splashifypro.com/plans/whatsapp), or 2. If you're on a **free trial**, you should have full access — if the trial has expired, upgrading is required 3. If you recently upgraded and still see this message, **hard-refresh** the page (`Ctrl+Shift+R` / `Cmd+Shift+R`) — the app caches the plan state ## "No Instagram Business account found" Your Instagram account is Personal. Instagram's API does not permit apps to manage comments or DMs on Personal accounts. **Fix:** in the Instagram mobile app → **Settings → Account → Switch to Professional Account → Business** (or Creator). Takes about 10 seconds, free, reversible. Then retry the Connect flow. ## Comment events aren't firing my rule Check in this order: **1. Is the rule Active?** On the Rules tab, the rule row shows either an **Active** or **Paused** pill. Click the power icon to toggle. **2. Does the keyword actually appear in the comment text?** Matching is case-insensitive substring. `price` matches "Pricing?" and "PRICE" but NOT "priy" or "cost". **3. Is the comment on the reel this rule is scoped to?** Rules are **per-reel**. If you set up a rule on Reel A and the comment is on Reel B, it won't fire. Check the thumbnail on the rule row to confirm. **4. Are webhooks subscribed?** On the connected-account card, look for the **Webhooks active** badge. If it says **Webhooks pending**, the subscribe call failed during connect. Click **Disconnect**, then **Connect Instagram** again. **5. Check the Activity tab.** Every comment on any tracked reel gets logged — even ones that didn't match. If your comment doesn't appear in the Activity feed at all, the webhook isn't reaching us. ## "DM send failed" on a triggered comment Common causes in order of likelihood: - **Commenter deleted the comment** — the DM API needs a live comment ID to send a private reply - **Commenter's account is private and hasn't messaged you** — Instagram may block DMs to strangers in this case - **You hit Instagram's API rate limit** — ~200 calls/hour per Instagram account. Spacing rules out helps Check the **Activity** tab — failed DMs show the exact Instagram error in red. ## Public reply not posting Usually means Instagram flagged the reply as duplicate or too-quick. Instagram throttles "reply spam" aggressively. If multiple people comment the same trigger keyword within seconds, Instagram may reject the second and subsequent public replies. The DM will still succeed. **Fix:** vary the reply text slightly per rule, or leave it blank for high-volume keywords. ## Connected Instagram account shows wrong username The profile fetch runs during connect. If your Instagram username changed after connecting, click **Disconnect** and reconnect to refresh. ## Everything was working, then stopped Check the connection card's **Token expires at** date. Instagram long-lived tokens live ~60 days. After expiry: - Webhook events stop reaching Splashify Pro - Sending DMs returns authentication errors - Activity feed stops populating **Fix:** click **Disconnect**, then **Connect Instagram** — the whole flow takes 30 seconds. We'll add an auto-refresh path before you hit this, but manual reconnect always works. ## Still stuck? Open a support ticket from [/support](https://app.splashifypro.com/support) and include: - Your Instagram username - The reel URL where the rule should have fired - The trigger keyword - A sample comment text that didn't fire We can look up the activity log on our side and see exactly where it broke. ======================================================================== ## Calling URL: https://docs.splashifypro.com/calling ======================================================================== # Calling Splashify Pro supports **WhatsApp Business Calling** — make and receive voice calls directly through the WhatsApp Business Platform, with full recording and billing support. ## Navigate to Calling Click **Calling** in the left sidebar, or go to: ``` https://app.splashifypro.com/calling ``` ## What You Can Do | Feature | Description | |---------|-------------| | **Outbound calls** | Call customers directly from the Messages page | | **Incoming calls** | Answer inbound WhatsApp calls in the browser | | **Call recordings** | All calls recorded and stored automatically | | **Call history** | View all past calls with duration and status | | **Call permissions** | Request calling permission from contacts | | **Analytics** | Call volume, duration, and cost analytics | ## How It Works Splashify Pro uses **Meta's WhatsApp Business Calling API** and **WebRTC** to connect calls: ``` Your browser (WebRTC) ←→ Splashify Pro signaling ←→ Meta API ←→ Customer's WhatsApp ``` No phone hardware or SIM cards required. Calls work entirely through your web browser. ## Prerequisites - WABA connected and phone number registered - WhatsApp Calling enabled for your WABA (in Meta Business Settings) - Call permission obtained from the contact (for the first call) - Microphone permission granted in your browser ## Call Costs WhatsApp calls are billed per minute. Costs are deducted from your wallet. | Call Type | Rate | |-----------|------| | Outbound business-initiated | Per your plan rate | Check your call analytics at **Calling → Analytics** for cost breakdown. ======================================================================== ## Making Calls URL: https://docs.splashifypro.com/calling/outbound-calls ======================================================================== # Making Calls ## Step 1: Open a Conversation 1. Go to **Messages** 2. Open the conversation with the contact you want to call ## Step 2: Initiate a Call 1. In the **Contact Details** panel on the right side 2. Click the **Phone icon (📞)** next to the contact's number 3. A call dialog opens ## Step 3: Confirm and Call The call dialog shows a confirmation step: - Displays your **business phone number** (the WABA number you're calling from) - Shows a note about call permissions Click **Start Call** to initiate. ## Call States | State | Description | |-------|-------------| | **Connecting** | Establishing connection to Meta API | | **Ringing** | Customer's phone is ringing | | **Active** | Call is live — both parties connected | | **Ended** | Call has concluded | ## During a Call While a call is active, the call dialog shows: | Control | Description | |---------|-------------| | **Mute** | Mute/unmute your microphone | | **Speaker** | Toggle speakerphone | | **End Call** | Hang up the call | | **Duration timer** | Live call duration counter | ## After a Call After hanging up, a **call summary** is shown with: - Call duration - Start and end time The call is logged in the **Calling** page and the conversation's activity log. ## Browser Requirements - Allow **microphone access** when the browser prompts - Use **Chrome** or **Edge** for best WebRTC compatibility - A stable internet connection is required (minimum 1 Mbps upload) ## Troubleshooting | Issue | Fix | |-------|-----| | Call fails immediately | Check if calling permission exists for this contact | | No audio | Check microphone permissions in browser settings | | Call drops | Check internet connection stability | | WABA error | Verify calling is enabled for your WABA in Meta | ======================================================================== ## Call Permissions URL: https://docs.splashifypro.com/calling/permissions ======================================================================== # Call Permissions Before making a **business-initiated** WhatsApp call, the contact must have granted **calling permission**. This is a WhatsApp platform requirement to prevent spam calls. ## How Permissions Work 1. You send a **permission request message** to the contact 2. The contact taps the **"Allow Calls"** button in that message 3. Once granted, you can call them at any time If you try to call without permission, the call will be rejected by Meta. ## Request Call Permission ### Via Interactive Message 1. Open a conversation in **Messages** 2. Click the **Call Permission** button in the message input area (or use the call dialog if the contact hasn't granted permission yet) 3. Select **Send Permission Request** 4. Choose the **permission request template** (pre-configured) 5. Send the message The contact receives an interactive WhatsApp message with a button. When they tap it, permission is granted. ### Via Template Message You can also send a template-based permission request during a broadcast or from the call management page. ## View Permission Status Go to **Calling** and check the contact's permission status: | Status | Meaning | |--------|---------| | **Granted** | Contact has allowed calls — you can call them | | **Pending** | Permission request sent, awaiting response | | **Denied** | Contact declined calling permission | | **Not Requested** | No permission request sent yet | ## Call Permission Templates Create and manage templates used for permission requests: 1. Go to **Calling** 2. Click **Call Templates** 3. Click **+ New Template** 4. Set the template type as **Permission Request** 5. Write the message (include a call-to-action button like "Allow Calls") 6. Submit for approval > Permission request templates require Meta approval like all WhatsApp templates. ## Revoking Permission Contacts can revoke permission at any time from their WhatsApp. If permission is revoked, subsequent call attempts will fail. ## Callback Requests Contacts can also request a **callback** from your business: 1. Enable **Callback Permission** in **Settings → Calling** 2. Contacts can tap a button in your template message to request a callback 3. Callback requests appear in your **Calling** page for follow-up ======================================================================== ## Call Recordings URL: https://docs.splashifypro.com/calling/recordings ======================================================================== # Call Recordings All WhatsApp Business calls through Splashify Pro are **automatically recorded** and stored in the cloud. ## Access Recordings 1. Go to **Calling** 2. Find the call in the call history table 3. Click the **Play** button in the Recording column to listen inline 4. Or click **Download** to download the audio file ## Call Detail Page Click on any call row to open the full **Call Detail** page: - Contact name and phone number - Call direction (Inbound / Outbound) - Start time, end time, and duration - Call status (Completed, Missed, Failed) - **Recording player** — play the audio directly in the browser - **Upload Recording** — if a recording failed to attach, upload manually ## Call History Table The calling list shows all calls with: | Column | Description | |--------|-------------| | Contact | Name and phone number | | Direction | Inbound or Outbound | | Duration | Call length in minutes:seconds | | Status | Completed / Missed / Failed | | Date | When the call occurred | | Recording | Play or download link | ## Storage Recordings are stored in cloud object storage (DigitalOcean Spaces). Recordings are: - Available immediately after the call ends - Retained for the duration of your subscription ## Compliance Note > **Important:** Inform your contacts that calls may be recorded for quality purposes. Recording laws vary by country — ensure you comply with local regulations. ## Filtering Calls Use the filter options in the Calling page to narrow the list by: - Date range - Call status - Contact name or phone ======================================================================== ## Calling Settings URL: https://docs.splashifypro.com/calling/settings ======================================================================== # Calling Settings Configure calling behavior, operating hours, and templates. Navigate to **Settings → Calling**. ## General Settings | Setting | Description | |---------|-------------| | **Enable Calling** | Master toggle to enable/disable WhatsApp calling | | **Show Call Button** | Show/hide the call icon in the Messages UI | | **Allow Callback Requests** | Let contacts request a callback via button | ## Business Hours for Calls Define when your team is available to take WhatsApp calls: 1. Toggle each day of the week 2. Set From/To time for each active day 3. Choose timezone Calls outside business hours can be configured to: - Play a voice message - Send an auto-text reply - Go unanswered ## Holiday Schedule Add holidays when calling is unavailable: 1. Click **+ Add Holiday** 2. Select the date 3. Optionally add a holiday name 4. Save ## Call Templates Manage templates used for call permission requests and callback messages: 1. Click **Call Templates** tab 2. Click **+ New Call Template** 3. Choose template type: - **Permission Request** — Ask contact for calling permission - **Call Button** — Interactive template to initiate a call link Each template must be approved by Meta before use. ## Default Templates Set which templates are used by default for: - **Permission requests** — Sent when permission is needed before a call - **Callback button** — Shown when contact can request a callback To set a default: 1. Go to **Call Templates** 2. Click **Set as Default** on the template you want ======================================================================== ## Templates URL: https://docs.splashifypro.com/templates ======================================================================== # Templates **Message Templates** are pre-approved messages required for initiating WhatsApp conversations outside the 24-hour window. All templates must be approved by Meta before use. ## Navigate to Templates Click **Templates** in the left sidebar, or go to: ``` https://app.splashifypro.com/templates ``` ## Template Types | Type | Channel | Use | |------|---------|-----| | **Marketing** | WhatsApp | Promotions, offers, re-engagement | | **Utility** | WhatsApp | Order updates, reminders, account alerts | | **Authentication** | WhatsApp | OTP, verification codes | | **RCS Templates** | RCS | Rich media campaigns | ## Template Status | Status | Meaning | |--------|---------| | **Approved** ✅ | Ready to use in broadcasts and messages | | **Pending** ⏳ | Submitted to Meta, awaiting review | | **Rejected** ❌ | Meta declined — edit and resubmit | | **Paused** ⚠️ | Temporarily paused by Meta due to quality issues | ## Sync Templates If you have templates created directly in Meta Business Manager, sync them to Splashify Pro: 1. Go to **Templates** 2. Click **Sync Templates** 3. All your Meta-approved templates are imported ## Delete a Template 1. Find the template in the list 2. Click the **Delete** button 3. Confirm > Deleting a template in Splashify Pro also deletes it from Meta. This is irreversible. ======================================================================== ## Create a Template URL: https://docs.splashifypro.com/templates/create-template ======================================================================== # Create a WhatsApp Template ## Step 1: Open Template Creator 1. Go to **Templates** 2. Click **+ Create Template** ## Step 2: Template Basics | Field | Description | |-------|-------------| | **Template Name** | Lowercase letters, numbers, underscores only (e.g. `order_update_v1`) | | **Category** | Marketing / Utility / Authentication | | **Language** | Select the language(s) for this template | ## Step 3: Header (Optional) Add a header above the body text: | Header Type | Description | |-------------|-------------| | **Text** | Bold header text | | **Image** | Image displayed at top | | **Video** | Short video | | **Document** | PDF or file attachment | | **Location** | Static map location | ## Step 4: Body Text The main message content. Use variables for personalization: ``` Hello {{1}}, your order {{2}} has been shipped and will arrive by {{3}}. ``` Variables are numbered `{{1}}`, `{{2}}`, etc. You'll map these to contact fields when sending. **Body text limits:** - Maximum **1024 characters** - Supports `*bold*`, `_italic_`, `~strikethrough~`, `` `monospace` `` formatting ## Step 5: Footer (Optional) Optional small grey text below the body. Commonly used for: - Opt-out instructions - Legal disclaimers ## Step 6: Buttons (Optional) Add interactive buttons. Up to **10 buttons** per template. ### Button Types | Type | Description | |------|-------------| | **Quick Reply** | Pre-set reply button — sends a text back | | **Call to Action: URL** | Opens a website URL | | **Call to Action: Phone** | Initiates a phone call | | **Call to Action: Copy Code** | Copies a coupon/promo code | ## Step 7: AI Generation (Optional) Don't know what to write? Use **Maya AI Generate** to create a complete template in seconds. ### How it works 1. Expand the **Maya AI** panel (Sparkles icon) in the form 2. Type a short description of what the template should do 3. Pick a **Style** — Normal, Poetic, Exciting, or Funny 4. Pick what to **Optimise for** — Click Rate (strong CTAs) or Reply Rate (ends with a question) 5. Click **Generate (₹2 per generation)** 6. Review the generated **Header**, **Body**, and **Buttons** 7. Click **Use This Template** to apply all three fields at once, or **Regenerate (₹2)** to try again ### What gets generated | Field | What the AI produces | |-------|----------------------| | **Header** | Short punchy text (max 60 chars); may include `{{1}}` for a dynamic value | | **Body** | Full message body starting with `Hi {{1}},`; uses `{{2}}`, `{{3}}` etc. for dynamic values | | **Buttons** | 1–3 quick-reply button labels matching the call-to-action | ### Cost Each generation deducts **₹2** from your **Wallet** (same wallet as WhatsApp messaging). The deduction happens only after the AI successfully returns a result — a failed call costs nothing. ### Previous Prompts Click **↶ Previous prompts** (next to the prompt input) to open a history of your last 20 AI-generated templates. Each entry shows: - The prompt you wrote - The generated header, body, and buttons - A **Use this template** button to instantly apply it to the form and set the prompt for further editing This lets you quickly reuse a previous generation without paying for a new one. ### Variables If the AI uses variables like `{{1}}` or `{{2}}` in the header or body, you will see them listed in the **Sample Values** section below the body. Fill these in before submitting so Meta can review the template with realistic content. ## Step 8: Preview and Submit - Use the live **Preview** panel on the right to see how the message will look on a phone - Click **Submit for Approval** Meta reviews templates within **24–48 hours**. You'll receive an email when the status changes. ## Tips for Approval | Do | Don't | |----|-------| | Use clear, business-relevant content | Include promotional language in Utility templates | | Match category to content | Use vague placeholders like `{{1}}` without context | | Keep body concise | Add unsolicited advertising | | One clear CTA | Add misleading buttons | ======================================================================== ## RCS Templates URL: https://docs.splashifypro.com/templates/rcs-templates ======================================================================== # RCS Templates **RCS Templates** are structured message formats used for RCS Broadcasts. Unlike WhatsApp, RCS templates support rich visuals — images, carousels, and action buttons. ## Navigate to RCS Templates 1. Go to **Templates** 2. Click **RCS Templates** tab Or navigate to: ``` https://app.splashifypro.com/templates/rcs ``` ## Create an RCS Template 1. Click **+ Create RCS Template** 2. Fill in the template details: ### Template Settings | Field | Description | |-------|-------------| | **Name** | Internal name for the template | | **Message Type** | Text / Image / Card / Carousel | | **Content** | Message body (type-dependent) | ### RCS Message Types **Text** Simple plain text message. **Image** Image with optional caption. ``` - Image URL (direct link) - Caption text (optional) ``` **Card** Rich card with image, title, description, and buttons. ``` - Image URL - Title - Description - Buttons (up to 4) ``` **Carousel** Multiple cards in a horizontally swipeable view. ``` - Up to 10 cards - Each card: image, title, description, buttons ``` ### Button Types (RCS) | Type | Description | |------|-------------| | **Reply** | Quick reply — sends a predefined text | | **URL** | Opens a web URL | | **Dial** | Dials a phone number | | **Location** | Opens maps to a location | ## Template Review RCS templates go through a review process: 1. **AI Review** — Automatic content check 2. **Admin Review** — Manual approval by Splashify Pro team 3. **Approved** — Ready to use in RCS broadcasts | Status | Meaning | |--------|---------| | **Pending** | Under review | | **Approved** ✅ | Ready to use | | **Rejected** ❌ | Needs revision — review feedback | ## Resubmit a Rejected Template 1. Open the rejected template 2. Click **Edit** 3. Make the required changes (review the rejection reason) 4. Click **Resubmit** ======================================================================== ## Email Marketing — Overview URL: https://docs.splashifypro.com/email ======================================================================== # Email Marketing Send branded email — marketing campaigns, transactional sends, password resets, order confirmations — from your own domain. Recipients see `dkim=pass` against your brand instead of ours. ## What you can do - **Authenticate your sender domain** — publish 3 DNS records once; we sign every send with your domain - **Build templates with the visual editor** — drag-in blocks (heading, image, button, footer), live preview, save once and reuse forever - **Send campaigns** — pick a template, pick an audience (segments + contacts), schedule or send now, watch open + click rates roll in live - **Transactional API** — `POST /public/email/send` from your backend for one-to-one sends (OTP, receipts, password resets) - **Built-in compliance** — RFC 8058 one-click unsubscribe header on every send, suppression list enforced at send-time, hard-bounce auto-remove ## Pricing - **First 100 emails per UTC day are free** — counter shared across marketing + transactional + public API - Beyond that: - **Marketing emails**: ₹0.10 / email + reseller markup (if any) - **Transactional emails**: ₹0.05 / email + reseller markup (if any) - Charges show in [Settings → Track Expenses](https://app.splashifypro.com/settings/track-expenses) as `email_marketing` and `email_transactional` line items, alongside your WhatsApp / RCS deductions ## Plan-gated Email Marketing requires a plan with the **Email Marketing** feature enabled. - **Trial users** get full access during the trial window - **Paid users** need their plan's Email Marketing flag enabled (admin sets this on the plan) If you see "Email Marketing requires an active plan" when opening `/email`, ask the platform admin to enable the flag on your plan. ## How to start 1. **[Connect your sender domain](./sender-domain.mdx)** — publish 3 DNS records on the domain you want to send from. Takes 5 min to publish, < 15 min to verify. 2. **[Build a template](./templates.mdx)** — open the visual editor, add blocks, save. 3. **[Send a campaign](./campaigns.mdx)** — pick template + audience, click Send. Or if you want to send transactional email from your backend, jump to the **[Send Email API](https://docs.splashifypro.com/public-api/send-email)** reference. ## Architecture Every email goes through the same pipeline regardless of source: ``` Your action (campaign / API / template send) ↓ We pre-render the template HTML (react-email cross-client output) ↓ We sign with your domain's DKIM key ↓ We deliver direct to recipient's MX server (STARTTLS, no third-party SMTP relay) ↓ Recipient sees: From , dkim=pass, spf=pass ``` The sender side is fully self-hosted — we don't relay through Resend / SES / Mailgun. Your domain reputation is yours. ## Compliance built in - **One-click unsubscribe** — every email carries `List-Unsubscribe` + `List-Unsubscribe-Post: One-Click` headers (RFC 8058). Gmail and Outlook show their native Unsubscribe button automatically. - **Suppression list** checked at send-time — once a recipient unsubscribes, they're suppressed for your account. New campaigns can't re-mail them. - **Hard bounces auto-suppress** — invalid mailboxes added to your suppression list immediately so you don't keep hitting them and damaging reputation. - **Footer is required** — every template's Footer block auto-injects company name, mailing address, and unsubscribe link. Required by CAN-SPAM (US) / GDPR (EU) / DPDP (India). ## See also - [Connect your domain →](./sender-domain.mdx) - [Build templates →](./templates.mdx) - [Send campaigns →](./campaigns.mdx) - [Troubleshooting →](./troubleshooting.mdx) - [Public API for transactional sends →](https://docs.splashifypro.com/public-api/send-email) ======================================================================== ## Send Email Campaigns URL: https://docs.splashifypro.com/email/campaigns ======================================================================== # Send Email Campaigns A campaign sends one template to many recipients. This is your bulk marketing path — for one-to-one transactional sends use the [public API](https://docs.splashifypro.com/public-api/send-email). ## Prerequisites Before you can create a campaign: 1. **[At least one verified sender domain](./sender-domain.mdx)** — the `from_email` you choose has to live on a domain you've authenticated 2. **At least one [template](./templates.mdx)** — you can't send a blank message 3. **Contacts in segments** — campaigns send to segments. If you don't have any yet, build them at [Settings → Segments](https://app.splashifypro.com/settings/segments) first If any of these is missing, the campaign create wizard will tell you and link directly to the fix. ## Open the wizard [Email → Campaigns](https://app.splashifypro.com/email/campaigns) → **New campaign**. The wizard has 4 steps. You can go Back at any point — nothing is saved until you finish step 4. ## Step 1 — Identity Tell us who the email is from. | Field | Notes | |-------|-------| | **Campaign name** (internal) | Just for your records — recipients never see this. e.g. *"Diwali sale 2026"* | | **From name** | The sender display name. e.g. *"Acme Store"* | | **From email** | Pick a verified domain from the dropdown, then edit the local part. e.g. `hello@acme-store.com`. Must be on a domain in [Sender Domains](https://app.splashifypro.com/settings/email-domain) with status=verified | | **Reply-to** (optional) | Where customer replies should go (often your support inbox) | > **Why does From email matter?** Recipients see the `From` line in their inbox. A friendly one (`hello@acme-store.com`) gets opened more than a noreply (`noreply@acme-store.com`). And replying to "noreply" feels cold — let customers actually respond. ## Step 2 — Pick a template Grid of every template you've built. Click one to select. > Don't have a template yet? The wizard will tell you and link to [Email → Templates → New](https://app.splashifypro.com/email/templates) so you can build one without losing your campaign-in-progress (the wizard preserves your name/from until you finish). ## Step 3 — Audience Pick one or more segments. We send to every contact in those segments who: - Has an email address (contacts without one are silently skipped — no error) - Isn't on your suppression list (hard-bounced before, complained, or unsubscribed) - Isn't a duplicate (the same contact in two segments = one email) Segment counts shown next to each name help you estimate volume before you commit. > **Segments only**: this version doesn't allow ad-hoc contact pickers. If you want to send to a specific list of people, build a segment first at [Settings → Segments](https://app.splashifypro.com/settings/segments) — that's also where the audience is reusable across campaigns. ## Step 4 — Schedule Two options: ### Save as draft (default) Best for first-time senders. Creates the campaign but doesn't send yet. You can review the recipient count on the campaign detail page, then click **Send now** when you're ready. This is the safer flow — it lets you confirm "yes, send to 5,000 people" with one extra click rather than blasting on the wizard's last step. ### Schedule for later Pick a date/time. We'll send at that moment. > **Time zone**: schedule input uses your browser's local time. We convert to UTC server-side. Don't worry about DST or zone math. When you click **Create campaign**, you land on the campaign detail page. ## Send the campaign If you saved as draft, your campaign sits in **Draft** status. Hit **Send now** on the detail page when you're ready. A confirmation dialog asks you to acknowledge: *"Sends to all matching recipients in your selected segments. This action cannot be undone."* Click **Send** — the campaign flips to **Sending** status. You'll see live counters tick up: | Counter | Meaning | |---------|---------| | **Recipients** | Total addresses we'll attempt | | **Sent** | We've handed off to recipient's MX server | | **Delivered** | MX server accepted the message | | **Opened** | Recipient opened (tracked via 1×1 pixel — sprint 5) | | **Clicked** | Recipient clicked any link (tracked via redirect — sprint 5) | | **Bounced** | Hard or soft bounce | | **Unsubscribed** | Recipient hit Unsubscribe | The page auto-refreshes every 5 seconds while sending. You can leave it open or come back later. ## Cancel an in-flight campaign Hit the **Cancel** button while status is `sending`. We stop dispatching new messages immediately. > **Already-delivered emails can't be unsent.** Cancel just stops the queue from processing more. If you cancelled at 50% sent, the other 50% never receive. ## Costs - **First 100 emails per UTC day are free** across your entire account (campaigns + transactional API combined) - Beyond that: - **Marketing email** (campaign sends): ₹0.10/email + reseller markup (if your platform is white-labeled) - **Transactional email** (public API): ₹0.05/email + reseller markup - Charges show in [Settings → Track Expenses](https://app.splashifypro.com/settings/track-expenses) under category `email_marketing` The campaign detail page doesn't show the running cost yet (sprint 6); use Track Expenses for the breakdown. ## Health flags The campaign detail page surfaces warnings when something looks off: - **Bounce rate > 5%** — your list has too many invalid addresses. Bounce rates above 5% damage your sender reputation. Clean the list before the next campaign — remove obvious typos and confirm contacts opted in - **Multiple unsubscribes in quick succession** — common when sending to a stale list. Pause and review your audience definition ## Best practices - **Start small** — first campaign should be 100–500 recipients. Confirm delivery + open rates look reasonable before scaling - **Send time matters** — Tuesday/Wednesday/Thursday between 10am–2pm in the recipient's local time-zone gets the highest open rates for most B2B audiences - **Subject line < 50 chars** — Gmail truncates after that on mobile. Make the first 5 words count - **Personalise** — use `{{first_name}}` in subject + greeting. Open rates jump 20–30% - **A/B subject lines** — split your audience 50/50, send 2 variants, see which wins. (A/B testing as a built-in feature is sprint 6+) - **Don't send too often** — once-a-week is the typical sweet spot for B2C marketing. Daily blasts kill engagement ## See also - [Templates →](./templates.mdx) - [Sender domains →](./sender-domain.mdx) - [Track Expenses →](https://app.splashifypro.com/settings/track-expenses) - [Troubleshooting →](./troubleshooting.mdx) ======================================================================== ## Connect Your Sender Domain URL: https://docs.splashifypro.com/email/sender-domain ======================================================================== # Connect Your Sender Domain Before you can send a single email, you need to authenticate the domain you want to send from (e.g., `acme-store.com`). This proves to recipient servers that emails claiming to be from your domain are actually authorized by you. We give you 3 DNS records to publish; once they resolve, your domain is verified and email-sender signs every outbound mail with your domain's DKIM signature so recipients see `dkim=pass header.d=acme-store.com` instead of our shared zone. ## When to do this Once. Per domain. Setup takes ~5 minutes; DNS propagation takes 5 to 60 minutes. You can authenticate up to 5 domains. Common pattern is to verify your apex (`acme-store.com`) plus a marketing subdomain (`mail.acme-store.com`) — keeps marketing send reputation isolated from your transactional / corporate mail. ## Step 1 — Add the domain 1. Open [Settings → Email Domain](https://app.splashifypro.com/settings/email-domain) 2. Click **Add domain** 3. Type your domain (e.g., `acme-store.com`) — without `https://`, without `@` 4. Click **Add** The page now shows your domain in **Pending** status with the 3 DNS records you need to publish. ## Step 2 — Publish 3 DNS records Open your domain's DNS provider in another tab — Cloudflare, Route 53, Namecheap, GoDaddy, DigitalOcean, whatever you use. Copy each record from the Email Domain page and add it to your DNS: ### SPF — TXT record ``` Type: TXT Hostname: _spf.acme-store.com Value: v=spf1 include:_spf.splashifypro.com ~all ``` > **Already have an SPF record?** Most DNS providers allow only one TXT record at the same name. If `_spf.acme-store.com` already has an SPF (e.g., for Google Workspace), append our `include:` to the existing value: > > `v=spf1 include:_spf.google.com include:_spf.splashifypro.com ~all` ### DKIM — CNAME record ``` Type: CNAME Hostname: splashify._domainkey.acme-store.com Value: splashify._domainkey.mail.splashifypro.com ``` This is a CNAME chain — your record points to ours, recipient servers follow the chain to fetch our public key. Your private key never leaves our infrastructure. > **Cloudflare proxy "flattening"?** If Cloudflare flattens this CNAME to an IP, switch the proxy off (orange cloud → grey cloud) for this record. Email DNS records should never be proxied. ### DMARC — TXT record ``` Type: TXT Hostname: _dmarc.acme-store.com Value: v=DMARC1; p=quarantine; rua=mailto:dmarc@splashifypro.com; pct=100; adkim=r; aspf=r ``` `p=quarantine` is our recommended starting policy — emails that fail SPF/DKIM checks land in spam rather than being rejected outright. Once you're confident your sends authenticate cleanly (give it 30 days), upgrade to `p=reject` for stronger protection against spoofing. ## Step 3 — Verify Back on the [Email Domain](https://app.splashifypro.com/settings/email-domain) page, click **Verify now** on your pending domain. We query your DNS provider directly via Cloudflare 1.1.1.1 / Google 8.8.8.8 (bypassing any system caches) and report each record's status: | Status | Meaning | |---------------|---------| | ✓ Pass | Record found and matches expected pattern | | ✗ NXDOMAIN | Record not yet published. DNS propagation can take up to 1 hour | | ✗ Wrong value | Record exists but doesn't include our `include:` / point at the right CNAME / start with `v=DMARC1`. Compare "Found" vs "Expected" in the UI | | ✗ DNS timeout | Your DNS provider is slow. Click Verify again in a moment | When all 3 are green, status flips to **Verified** and the green badge appears. > **Auto-recheck**: even if you don't click Verify, we re-check every 15 minutes for pending domains. So if you publish DNS at 10:00 and forget about it, the domain auto-flips to Verified by 10:15. ## What happens after verification Email-sender signs every outbound message from `@acme-store.com` with your domain's DKIM: ``` DKIM-Signature: v=1; a=rsa-sha256; d=acme-store.com; s=splashify; ... ``` Recipients (Gmail "Show original", etc.) see: ``` SPF: PASS with IP 203.174.23.244 DKIM: PASS with domain acme-store.com DMARC: PASS ``` Your brand. Your domain. Our infrastructure. ## What you can't do until verified You can build templates and create campaigns in draft. But: - **You can't actually send** from a non-verified `from_email` — campaign Send button errors with "domain not verified" - **Public API `/email/send` returns 400** with `from_email domain '' is not verified.` until verification is complete This is intentional. Sending from an unverified domain hits recipient spam folders 60–90% of the time and damages our shared sending IP's reputation. ## Removing a domain Click **Remove** on the domain card. Confirm. The domain is removed from your account and future sends from that `from_email` will be blocked. > **Old DNS records**: removing a domain in our UI doesn't unpublish the DNS records on your side — those are yours to manage. If you want to fully clean up, delete the SPF / DKIM / DMARC records from your DNS provider too. ## Reseller-specific note If you're an end customer of a reseller (your platform domain is `app.` rather than `app.splashifypro.com`): - The verification flow is identical - Your DKIM CNAME still points to `splashify._domainkey.mail.splashifypro.com` — that's our shared signing infrastructure regardless of which reseller you're under - Your reseller's branding doesn't change the technical setup ## Troubleshooting | Symptom | Fix | |---------|-----| | All 3 records published but still pending after an hour | Click "Verify now" once. If still stuck: confirm records resolve via `dig +short TXT _spf.your-domain.com` and `dig +short CNAME splashify._domainkey.your-domain.com` from any computer. If those return empty, your DNS provider hasn't propagated yet — wait. | | SPF shows "wrong_value" | The recommended SPF didn't get into the TXT record at `_spf.your-domain.com`. Check the actual published value (the UI shows "Found"). Make sure `include:_spf.splashifypro.com` is part of the SPF string. | | DKIM shows "wrong_value" | The CNAME isn't pointing at the right target. Make sure it's `splashify._domainkey.mail.splashifypro.com.` (note the trailing dot in some DNS providers). | | DMARC shows "wrong_value" | The TXT exists but doesn't start with `v=DMARC1`. Re-paste the recommended value. | | Verified yesterday, today shows pending | We re-check every 24h on verified domains. If a record was rotated by your DNS provider or accidentally deleted, you'll get an in-app notification + status flip. Re-publish and click Verify. | ## See also - [Build a template →](./templates.mdx) - [Send a campaign →](./campaigns.mdx) - [Troubleshooting →](./troubleshooting.mdx) ======================================================================== ## Build Email Templates URL: https://docs.splashifypro.com/email/templates ======================================================================== # Build Email Templates Templates are reusable email designs. Build one with the visual editor, then send it to any audience from a campaign — or one-to-one via the public API. > **Cross-client compatibility**: templates compile through [react-email](https://github.com/resend/react-email) (the same library Resend ships) so the final HTML works across Gmail, Outlook, Apple Mail, Yahoo, and mobile clients without you hand-rolling table-based markup. ## When to use a template - Sending the same email shape repeatedly (order confirmations, OTP codes, password resets) - Marketing campaigns where the design should be consistent across sends - Anything you want non-developers on your team to update without redeploying For one-off sends with bespoke HTML, the [public API `/email/send`](https://docs.splashifypro.com/public-api/send-email) endpoint takes inline HTML directly — no template needed. ## Open the editor [Email → Templates](https://app.splashifypro.com/email/templates) → **New template**. A blank template opens with three default blocks (heading, text, footer) so you have something to edit immediately. ## Editor layout Three panes: ``` ┌──────────────┬─────────────────────────────────┬──────────────┐ │ LEFT │ CENTER │ RIGHT │ │ │ │ │ │ Block │ Live HTML preview │ Selected │ │ palette + │ (debounced 600ms after │ block's │ │ ordered │ every edit, rendered through │ properties │ │ block list │ the email-renderer sidecar) │ │ │ │ │ │ └──────────────┴─────────────────────────────────┴──────────────┘ ``` **Top bar**: template name + Save button + mobile/desktop preview toggle. **Subject line**: shown above the editor in its own input. Subject is a property of the template, not a block. ## Available blocks | Block | What it does | |-------|--------------| | **Heading** | H1 / H2 / H3 with bold styling. Use for section titles | | **Text** | Paragraph — plain prose. Supports `{{variable}}` substitution | | **Image** | Image with src, alt text, and width. Use absolute HTTPS URLs | | **Button** | CTA button with custom background colour. Set href + text | | **Divider** | Horizontal rule between sections | | **Spacer** | Blank vertical space — set height in pixels | | **Footer** | Auto-injects company name, address, and unsubscribe link. Required for compliance | Click a block in the palette to add it to the bottom of your layout. Click any block in the layout list to select it; its properties appear in the right pane. Use the up/down chevrons to reorder. ## Variables Use `{{variable_name}}` syntax anywhere in your subject, headings, or text. Variables are substituted per recipient at send-time. For campaigns, the values come from contact attributes (e.g., `{{first_name}}` resolves to each contact's first name). For public API sends, the values come from the `variables` object in your request payload. ### Reserved variables These are always available — no need to set them: | Variable | Value | |----------|-------| | `{{recipient_email}}` | The recipient's email address | | `{{unsubscribe_url}}` | Auto-injected by the Footer block | ### Unknown variables Render as empty strings rather than failing the send. This makes optional fields safe — `{{coupon_code}}` shows nothing for recipients without a coupon. ## Live preview The preview pane re-renders 600ms after your last edit (debounced). It calls the [email-renderer](https://github.com/resend/react-email) sidecar through our backend, so what you see is the actual cross-client HTML that gets shipped to recipients. **Mobile preview**: click the mobile/desktop icon in the top bar to toggle. The preview pane resizes to 375px (mobile) or full-width (desktop) so you can confirm responsive behaviour. ## Save + test send Click **Save** to persist your template. The save also pre-compiles the final HTML so per-recipient sends don't have to re-render — they just substitute variables into the snapshot. > **Save before sending**: variable substitution + sending uses the **last saved version** of the template. If you change a template but don't save, the change won't appear in sends. Click Save before testing. To test a saved template, the easiest path is: 1. Send a one-off campaign to a single contact (yourself) 2. Or via API: `POST /api/v1/public/email/send-template` with `template_id` + your email ## Compliance: the Footer block Every email must include sender identification + an unsubscribe mechanism. The Footer block handles this automatically — it renders: ``` {{sender_company_name}} {{sender_address}} Unsubscribe ``` Set the company name + mailing address in the Footer block's properties. The unsubscribe link is auto-generated per recipient by the email-sender at send-time (HMAC-signed token). > **Don't delete the Footer block.** Sending without it means your emails will fail Gmail / Yahoo's policy checks and likely land in spam. CAN-SPAM (US), GDPR (EU), and DPDP (India) all require sender identification + a working unsubscribe path. ## Editing an existing template Click any template card in [Email → Templates](https://app.splashifypro.com/email/templates) to reopen the editor. > **Already used in a campaign?** Editing a template doesn't change emails that have already been sent. It only affects FUTURE sends from this template. So you can safely tweak a template after a campaign launches without breaking the ones that already went out. If you want a totally different design without losing the original, **duplicate**: click the template, change the name, then re-save → currently this requires copy-paste of the JSON; full duplicate-as-action button lands in a future sprint. ## Deleting a template Trash icon on the template card → confirm. Past sends keep their already-rendered HTML; future campaigns can no longer reference this template. ## Best practices - **Width**: 600px for the body container is the email industry standard — most clients render this cleanly without scrollbars - **Images**: host them on a public CDN (DigitalOcean Spaces, Cloudflare R2, S3). Don't link to your private app URLs — many email clients block authenticated image fetches - **Alt text**: always set `alt` on images. ~50% of inbox previews block images by default; alt text is what shows - **Buttons**: use one primary CTA per email. Multiple CTAs hurt click-through rate - **Plain text fallback**: don't worry about it — we auto-generate a plaintext version from your blocks. Recipients on text-only mail clients see a clean version - **Test on mobile**: ~70% of marketing email opens are on mobile. Toggle to mobile preview before saving ## Limits - **Max 200 templates per account** — this is generous; reach out if you need more - **No custom CSS** in this version — block properties cover ~95% of typical email styling. Sprint 6+ may add an "advanced HTML" block for power users - **No drag-drop** — reorder via the up/down arrows in the block list. Drag-drop adds 30 KB+ of JS for marginal UX gain ## See also - [Send a campaign →](./campaigns.mdx) - [Public API: Send Template Email →](https://docs.splashifypro.com/public-api/send-template-email) - [Troubleshooting →](./troubleshooting.mdx) ======================================================================== ## Email Troubleshooting URL: https://docs.splashifypro.com/email/troubleshooting ======================================================================== # Email Troubleshooting Hit something unexpected? Find your symptom below. ## "Email Marketing requires an active plan" Shown when you visit `/email`, `/email/templates`, `/email/campaigns`, or `/settings/email-domain`. **Cause**: your plan doesn't have the Email Marketing feature flag enabled. **Fix**: - If you're on a **trial**, the feature is free during the trial window. Confirm trial isn't expired in [Settings → Manage Subscriptions](https://app.splashifypro.com/settings/subscriptions) - If you're on a **paid plan**, ask the platform admin to enable Email Marketing on your plan via Admin → Plans → [your plan] → Bundled Features → Email Marketing - Refresh after enabling ## "from_email domain is not verified" Shown when you try to send a campaign or call the public API. **Cause**: the `from_email` you specified is on a domain you haven't completed DNS verification for. **Fix**: 1. Go to [Settings → Email Domain](https://app.splashifypro.com/settings/email-domain) 2. Find the domain in question 3. If status is **Pending**, click **Verify now**. Per-record errors (SPF / DKIM / DMARC) tell you which DNS record is missing 4. If the domain isn't there at all, click **Add domain** and publish the 3 DNS records — see [Sender Domain →](./sender-domain.mdx) ## "domain not verified" on send (sprint 1+) Same root cause as above, surfaced from the `email-sender` worker. Check the campaign detail page or outbox row's `last_error` for the exact failure. ## DNS records published but verification fails **Cause**: DNS propagation lag, wrong hostname, or value mismatch. **Fixes** in order of likelihood: 1. **Wait 15 minutes**. We auto-recheck pending domains every 15 min via Cloudflare 1.1.1.1 / Google 8.8.8.8 directly (bypassing system caches). Most resolve themselves 2. **Confirm the record exists** by querying any external DNS checker (e.g. [dnschecker.org](https://dnschecker.org)) — paste the exact hostname (e.g., `_spf.acme-store.com`) 3. **Check "Found" vs "Expected"** in the verify result on [Email Domain](https://app.splashifypro.com/settings/email-domain). If Found is blank, the record isn't published yet. If Found has a value but doesn't match Expected, you have a typo 4. **Double-suffix issue**: some DNS providers (DigitalOcean, etc.) auto-append your zone to the hostname. If you typed `_spf.acme-store.com` as the hostname, the provider stored it at `_spf.acme-store.com.acme-store.com`. Fix: re-enter the hostname as just `_spf` (the provider adds your domain automatically) 5. **Cloudflare proxy**: if your DKIM CNAME is showing the orange-cloud (proxied) icon, switch it to grey (DNS-only). Cloudflare flattens proxied CNAMEs to A records, breaking the chain ## "daily_free_limit_exceeded" **Cause**: you hit 100 emails for the day across all sources (campaigns + public API). The counter resets at 00:00 UTC. **Fix**: - Wait until midnight UTC for the counter to reset, or - Wait for sprint 6 (wallet billing) — beyond the free limit, additional sends will charge ₹0.10 (marketing) / ₹0.05 (transactional) per email from your wallet. Currently still in dev ## "insufficient_balance" **Cause** (post sprint 6): wallet doesn't have enough to cover a paid send. **Fix**: recharge at [Wallet](https://app.splashifypro.com/wallet) — minimum top-up varies by plan. ## Email landed in spam **Causes** in rough order: 1. **Sender domain not yet verified** → verify it 2. **Brand new domain or IP** → reputation takes 4-8 weeks to build. Send small volumes (50/day → 200/day → 1k/day) for the first 6 weeks 3. **Spam-trigger words** in subject or body → "FREE!!!", "100% guaranteed", excessive caps, !!!! style punctuation 4. **No unsubscribe** → impossible since the Footer block auto-injects, but if you removed Footer from the template, restore it 5. **Image-only email** → ratio of images to text matters. Keep at least 60% of body as readable text 6. **Too many links** → 1 primary CTA + 2 secondary is fine. 10 links per email looks like phishing 7. **Bounce rate above 5%** → your list has invalid addresses, hurting reputation. Suppress hard bounces, remove obvious typos before sending Use [mail-tester.com](https://www.mail-tester.com) to score your template — aim for 9+/10. ## "Renderer service unavailable" in template editor **Cause**: the email-renderer Node sidecar is unreachable. **Fix**: should auto-recover within seconds. If it persists, refresh the page; if still broken, raise a support ticket — this is platform-side, not on you. ## High bounce rate on a campaign **Cause**: list quality. Common patterns: - **Imported from a CSV with old contacts** — emails go stale. ~10% of B2B emails decay/year - **Imported from a public source** (LinkedIn, etc.) — opt-in is questionable, addresses unreliable - **Wrong format** — typos like `gmial.com`, missing TLD, etc. **Fix**: 1. Stop the campaign if bounce rate > 5% on the first batch 2. Use a list-cleaning service (NeverBounce, ZeroBounce, etc.) before the next send 3. Build segments based on engagement — only send to contacts who interacted in the last 90 days ## Variable showing as `{{first_name}}` literally in the email **Cause**: variable substitution didn't fire. Two reasons: 1. **You changed the template but didn't save** — sends use the last-saved version. Click Save, then send again 2. **Variable name doesn't match the contact attribute** — `{{first_name}}` looks for an attribute literally named `first_name`. Check the attribute spelling at [Settings → Attributes](https://app.splashifypro.com/settings/attributes). Common: `firstName` vs `first_name` For the public API, `{{var}}` looks up `var` in the `variables` object you sent. Mismatched key = empty replacement. ## Recipients say they didn't unsubscribe but still got marked **Cause**: gmail's native "Unsubscribe" button (powered by RFC 8058 List-Unsubscribe-Post) is one click — sometimes accidental. Or someone reported as spam, which counts as unsubscribe. **Fix**: admin can manually remove from the suppression list at Admin → Email System → Suppression. But only do this with explicit confirmation from the recipient — re-mailing a suppressed address damages your reputation. ## Public API: `Invalid API key.` **Cause**: - Key revoked or regenerated since last use - Wrong header format (`Authorization: Basic ` is correct; `Bearer` is wrong for our public API) - Key copied with leading/trailing whitespace **Fix**: regenerate at [Settings → Developer](https://app.splashifypro.com/settings/developer). Test with `curl`: ```bash curl -X POST https://apis.splashifypro.com/api/v1/public/email/send \ -H "Authorization: Basic sk_live_xxxx" \ -H "Content-Type: application/json" \ -d '{"to":"you@example.com","subject":"test","html":"

test

","from_email":"hello@your-verified-domain.com"}' ``` ## Public API: `Rate limit exceeded` **Cause**: per-plan rate limit (e.g., 40 requests/minute on starter plans). **Fix**: - Reduce send rate - Implement exponential backoff in your code on 429 responses - Upgrade your plan for a higher limit - See [Rate Limits](https://docs.splashifypro.com/public-api/rate-limits) ## Status endpoint returns "queued" forever **Cause**: the `email-sender` worker isn't processing your queue. Either it's down (rare) or your specific message hit a permanent error early. **Fix**: 1. Wait 30 seconds — most queued messages reach `sent` within 5 sec 2. If still queued after 60 sec, check Settings → Track Expenses to see if any deduction happened (suggests it actually sent) 3. If genuinely stuck, raise a support ticket with the `message_id` ## Still stuck? - Try the [Public API Live API Tester](https://docs.splashifypro.com/public-api/try-it) for API issues - Ask Maya — the in-app AI assistant has the full email-marketing knowledge base loaded. Open Maya from the headset icon - Raise a support ticket from [Settings → Support](https://app.splashifypro.com/support) — include the `message_id` if it's a delivery issue ## See also - [Sender domain setup →](./sender-domain.mdx) - [Templates →](./templates.mdx) - [Campaigns →](./campaigns.mdx) ======================================================================== ## Lead Capture Widget URL: https://docs.splashifypro.com/lead-widget ======================================================================== # WhatsApp Lead Capture Widget A floating WhatsApp bubble you embed on your website. Visitors fill a short form (name + phone + optional message), the contact is auto- created in your Splashify Pro CRM, and they're redirected to WhatsApp with their message prefilled — landing the conversation in your team inbox already linked to the new contact. ## What you get - **One-line embed** — paste a ` ``` Click **Copy** to grab it. ## 5. Paste into your site ### Plain HTML / static site Add the snippet just before the closing `` tag of every page you want the widget on: ```html ... ``` ### WordPress - **Header/Footer plugin** — paste into the Footer Scripts box (Insert Headers and Footers, WPCode, or similar). - **Theme functions** — add to `footer.php` just before ``. - **Elementor** — use a Custom Code element set to "Insert in body end". ### Shopify `Online Store → Themes → Edit code → theme.liquid` → paste before ``. ### Wix / Squarespace / Webflow Each platform has a "custom code" / "embed code" feature. Paste the snippet in the **body end** position so it loads after the rest of the page. ### React / Next.js ```tsx // app/layout.tsx (Next.js 13+) export default function RootLayout({ children }: { children: React.ReactNode }) { return ( {children}