# Welcome

#### What is Zaapi?

Zaapi is an AI-first customer messaging platform built for e-commerce businesses in Southeast Asia. We bring every customer conversation — from Facebook, Instagram, WhatsApp, LINE, Shopee, Lazada, TikTok Shop, and your website — into one workspace, and turn them into tickets your team can track, resolve, and learn from.

#### How Zaapi helps your team

**One workspace for every channel.** Stop switching tabs. Every conversation lands in the same inbox, with full customer and order context attached.

**Conversations become tickets.** Each customer issue is captured as a ticket with a clear status, owner, and resolution — so nothing gets lost, and you can measure what's actually happening across your support operation.

**AI that does the work.** Our AI Agent handles repetitive questions, qualifies leads, and drafts replies, freeing your team for the conversations that need a human.

**Analytics you can act on.** Track resolution times, agent performance, ticket volume by category, and CSAT — all in real time.

#### About this help centre

This help centre walks you through everything Zaapi can do — setting up channels, managing tickets, training your AI Agent, and getting the most out of analytics. Use the navigation on the left to jump to a topic, or search if you know what you're looking for.


# Zaapi Service Standards

### Service Guide & How We Work Together

*Please read before subscribing. This guide explains how we work together, so we can serve you better.*

> ℹ️ Our AI Agent replies instantly, 24/7, as the first line of support. A member of our team then follows up according to the response guideline below.

### 1. Within scope & outside scope

#### Before you subscribe

**Within scope**

* Answering your questions via chat, and calling you back if you leave your number (per the guideline below — AI replies first, and our team follows up within about 1 business day).
* Advising on the plan that best fits your operation.
* Advising on setup — the flows and configuration that suit your operation.

**Outside scope**

* Inbound phone calls — we work through chat, scheduled call-backs, and demos.
* Building your automations or AI knowledge base for you — this is available as a paid service ([zaapi.com/ai-services](http://zaapi.com/ai-services)).

#### After you subscribe

**Within scope**

* Answering your questions via chat (AI first, our team per the guideline).
* Receiving your bug reports and escalating them to our developers.
* Passing your feature requests to the product team to consider.
* Advising on any new feature we launch.

**Outside scope**

* Fixing bugs directly — our team relays your report to the developers and shares the fix back with you. Fix timelines are set by the development team.
* Sharing our full product roadmap in advance — we're not always able to confirm what we'll build, or when.

### 2. Response times

These are the times we **aim** for a member of our team to reply — a general guideline rather than a guarantee. Our AI answers instantly as the first line.

| Priority                                 | When it applies                                                                                          | We aim to respond within              |
| ---------------------------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------- |
| **P0 — Can't operate**                   | Inbox down, or your main channel is disconnected                                                         | **4 business hours**                  |
| **P1 — Broken but workable, or billing** | A feature is broken but you have a workaround; or a billing request (e.g. "I need my invoice / renewal") | **1 business day**                    |
| **P2 — How-to & setup**                  | "Check my flow — why doesn't it do this?", general questions, minor bugs                                 | **2 business days**                   |
| **P3 — Feature request**                 | A new capability or enhancement                                                                          | **4 business days** (acknowledgement) |

> ℹ️ These response times are our **internal service guidelines, not a guaranteed commitment**. They reflect what we aim for during support hours (**Monday–Friday, 09:00–18:00, ICT / GMT+7**); actual times may vary with volume and complexity.

### 3. Free trial & billing

* **7-day free trial**, including up to 300 free AI messages. Extensions are arranged case-by-case by your account executive (AE).
* **Default payment is through the billing page in the system.** Once you pay, your subscription starts automatically — the same applies to top-ups and upgrades — and a receipt is automatically sent to your email.
* For any supporting documents beyond the automatic receipt — such as an e-Tax Invoice, withholding tax documents, or a formal invoice — please contact your AE (around 1 business day, in line with our service guideline).
* **Payment is by credit/debit card only.**
* **Published pricing and promotions** ([zaapi.com/pricing](http://zaapi.com/pricing)) are final. Special discounts are arranged case-by-case via your AE.
* **Thai clients** (registered under a +66 number):
  * To deduct 3% withholding tax, let your AE know — we'll calculate the net amount and send a separate payment link.
  * A full e-Tax Invoice is issued after payment.
  * Bank transfer is arranged case-by-case, usually for amounts above THB 30,000.
  * Subject to a minimum 3-month plan.

### 4. Refunds

Refunds are considered **case-by-case** (our Terms of Use note that all sales are final) and are **net of the 3% card-processing fee**.

* We can usually offer a **pro-rated refund** when it's **on our side** that you're permanently unable to operate — for example, a channel is permanently disconnected, or we retire a feature that's essential to your operation.
* Refunds generally **don't apply** for: minor or temporary bugs; AI response accuracy; or self-billing errors (such as forgetting to downgrade or cancel).

### 5. Good to know about the product

A few things worth knowing, so you know what to expect.

#### AI message pricing (billed separately from your subscription)

| Volume                  | Thailand (THB) | International (USD) |
| ----------------------- | -------------- | ------------------- |
| 1,000 messages          | ฿1,250         | $40                 |
| 10,000 messages (−10%)  | ฿11,250        | $360                |
| 100,000 messages (−25%) | ฿93,750        | $3,000              |

*Roughly ฿1.25 / $0.04 per message.*

#### AI Agent

* **You're in control of how the AI responds** — its quality depends on how you train it. AI can occasionally make mistakes, which is a normal characteristic of AI rather than a product fault, and isn't covered by refunds.
* Built for **accuracy over speed** (\~3–4 seconds per reply).
* **Cannot send images** (it can send a link to an image).
* For rigid, word-for-word scripts, use **Flow Builder**; the AI Agent is designed for natural, dynamic conversation.

#### Channel-specific notes

* **LINE:** Please reply **inside Zaapi** — messages sent from the LINE OA app won't sync to Zaapi. History before the connection date isn't imported. Messages sent via API (including through Zaapi) count toward your paid LINE quota; replies within 10 minutes of the customer's message don't count. See LINE's own plans at [lineforbusiness.com/th](http://lineforbusiness.com/th).
* **Meta (Facebook/Instagram):** A 24-hour reply window, which Zaapi extends to 7 days — promotional content can't be sent after the first 24 hours.
* **Shopee:** You can message within 7 days of the buyer's last message, and up to 5 in a row before they reply. AI Agent messages count toward your response rate; automated messages don't.
* **TikTok Shop:** US-based shops aren't supported, and video messages can't be sent on TikTok chats.
* **History import:** On connection, only the last 90 days of history is imported (Facebook, Instagram, Shopee, Lazada, TikTok).

> ⚠️ This Service Guide helps explain how we work and does not replace Zaapi's Terms of Use ([zaapi.com/terms-of-use](http://zaapi.com/terms-of-use)). If anything here differs from the Terms of Use, the Terms of Use take precedence. Service times are guidelines during stated support hours, not guarantees. Zaapi may update this guide from time to time; the latest published version applies.

*© 2026 Zaapi · v1.0*


# Step 1: Create an account

Set up your Zaapi account and start your 7-day free trial.

### Before you start

{% hint style="info" %}
We recommend registering on a **desktop computer**. Some account creation steps aren't available on the mobile app or a mobile browser.
{% endhint %}

### Create your account

1. Go to [app.zaapi.com/register](https://app.zaapi.com/register).
2. Enter your **mobile number**, **business name**, and **email address**.
3. Click **Register**.
4. Check your inbox for a verification email and click the link to verify your address.

Your account is now active and your **7-day free trial** has started — you'll have full access to every Zaapi feature during the trial.

### Next step

Connect your messaging channels so customer conversations start flowing into your workspace as tickets.


# Step 2: Connect your first messaging channel

Connect your messaging channels so customer conversations start flowing into your workspace as tickets.

### Connect a channel

1. Go to [app.zaapi.com](https://app.zaapi.com).
2. Open **Settings** → **Integrations**.
3. Click the channel you want to connect and follow the on-screen steps.

Repeat for every channel your business uses.

### Available channels

For setup details and limitations of each integration, see the docs below.

**Messaging apps**

* [Facebook](/integrations/facebook-messenger)
* [Instagram](/integrations/instagram)
* [WhatsApp](/integrations/whatsapp-business)
* [LINE](/integrations/line)

**Marketplaces**

* [Shopee](/integrations/shopee)
* [Lazada](/integrations/lazada)
* [TikTok](/integrations/tiktok-shop)

**Email**

* [Gmail](/integrations/gmail)
* [Outlook](/integrations/outlook)

**Website**

* [Website Chat Widget](/integrations/website-chat-widget)

### Next step

Invite your team members so they can start handling tickets.


# Step 3: Invite your team

Add your team members so they can start handling tickets in Zaapi.

### Invite a team member

1. Go to [app.zaapi.com](https://app.zaapi.com).
2. Open **Settings** → **Team Management**. You'll see a list of everyone currently on your account.
3. Click **Add** in the top right corner.
4. Enter the team member's **name** and **email address**.
5. Assign them to one or more **Teams** (if you've set them up) and choose which channels they can access.
6. Click to send the invite.

The team member will receive an email with a link to set up their password and log in at [app.zaapi.com/login](https://app.zaapi.com/login).

{% hint style="info" %}
For a detailed breakdown of team member roles and permissions, see Roles.
{% endhint %}

### Next step

Organise your inbox so tickets get to the right people automatically.


# Step 4: Navigate your ticket inbox

Understand how Zaapi structures customer data, then set up the ticket fields and saved views your team will use every day.

### How Zaapi organises customer data

Zaapi uses a three-level model:

* **Contact** — the customer. One person, with all their details in one place.
* **Conversation** — the ongoing message thread between that contact and your business on a single channel (a Facebook DM thread, a WhatsApp chat, a Chat Widget session). One contact can have multiple conversations across different channels.
* **Ticket** — a single, trackable customer issue inside a conversation. Each ticket has its own ID, fields, owner, status, and resolution. One conversation can produce many tickets over time.

Tickets are the unit of work your team measures and resolves. Conversations and contacts give them context.

### Set up ticket fields

Ticket fields are the structured data captured on every ticket — Summary, Priority, Enquiry Type, Resolution, Product Enquired, and any custom fields you create. They turn unstructured conversations into reportable data, and your team fills them in directly from each ticket.

To configure them:

1. Go to **Settings** → **Ticket Fields**.
2. Click **Create field** to add a new one, or toggle existing fields on and off.
3. Choose a **field type** (text, dropdown, product, etc.) and mark the field as required if your team should always fill it in.
4. Choose which integrations the field applies to.

{% hint style="info" %}
Start small. Summary, Priority, and a Resolution dropdown will cover most teams — you can add more fields as your reporting needs grow.
{% endhint %}

For more detail, see Ticket Fields.

### Organise your inbox with saved views

Saved views are filtered, named lists of tickets your team can return to in one click — for example, "VIP customers — unresolved", "Refund requests this week", or "Shopee tickets waiting on the customer".

Two things to know:

* **Saved views are shared across your organisation.** Anyone on your team can open any saved view from **All saved views** in the sidebar.
* **Pinning is personal.** Pin the views you use most often to your sidebar under **Pinned by me** — your pins only affect your own view.

To create a saved view, apply filters in the inbox and save the result. To pin one, hover over a view in the sidebar and click the pin icon.

For more detail, see Saved Views.

### Next step

Start handling tickets and reporting on your team's performance.


# Step 5: Track performance with analytics

Track how your team and channels are performing, and slice ticket data by any field you've configured.

{% hint style="info" %}
Analytics data only appears after you've integrated at least one channel and started receiving tickets.
{% endhint %}

### What you can analyse

Open the **Analytics** tab to see performance broken down across three areas:

* **Conversation performance** — response times, missed conversations, new vs. returning customers, and message volume across every channel and integration.
* **Agent performance** — per-agent breakdowns of response times, tickets handled, and resolution rates.
* **Ticket fields** — slice ticket volume and outcomes by any field you've set up, including Resolution, Enquiry Type, Priority, Product Enquired, and Labels. Use this to spot what your customers are contacting you about and how often each issue gets resolved.

For a full breakdown of the metrics and how they're calculated, see Analytics.

### Next step

Install the mobile app so you can keep an eye on tickets on the go.


# Step 6: Install the mobile app

Use Zaapi on your phone to respond to tickets on the go.

### Download the app

The Zaapi mobile app is available on iOS and Android.

* [Download for iOS](https://apps.apple.com/us/app/zaapi-all-chats-in-one-inbox/id6740839366)
* [Download for Android](https://play.google.com/store/apps/details?id=com.zaapi.app)

Sign in with the same email and password you use on the desktop app.

{% hint style="info" %}
The mobile app is designed to complement the desktop experience — it's built for replying to tickets when you're away from your computer. Some advanced features (analytics, settings, ticket field configuration) are only available on desktop.
{% endhint %}

### You're all set

That's the start guide complete. From here, dive into the sections that matter most to your team.


# Facebook Messenger


# How to connect

### Steps to connect

1. **Go to the Integrations Area** – Navigate to **Settings > Integrations** in Zaapi.
2. **Click "Connect Facebook & Instagram"** – Both platforms must be connected together in this step.
3. **Ensure Business Portfolio Linkage** – Your Facebook and Instagram accounts must be linked to the appropriate **Business Portfolio** before proceeding.
4. **Log Into Facebook** – A new pop-up will appear. Sign in with your Facebook account, ensuring you have **admin access** to the pages/accounts you wish to connect.
5. **Select Pages** – Choose the Facebook pages you want to connect, then click **Continue**.
6. **Select Business Portfolios** – Pick the business portfolios you want to connect, ensuring they include the pages selected in the previous step. Click **Continue**.
7. **Select Instagram Accounts** – Choose the Instagram accounts you want to connect, then click **Continue**.
8. **Confirm and Save** – Click **Save**, then click **Got it** to finalize the connection.
9. **Wait for Zaapi to Complete the Integration** – You will be redirected back to Zaapi, where the integration process will take a few seconds to complete. Once done, your Facebook and Instagram accounts will be successfully connected.

{% hint style="warning" %}
Ensure your Facebook page and Instagram profile are linked together before connecting. To find out how, [click here](https://www.facebook.com/business/help/connect-instagram-to-page).
{% endhint %}


# Limitations

### **Messaging Window**

When a customer sends you a message on Facebook, you have a standard messaging window to respond to that customer of **24 hours**. During this 24 hour period, you can send all types of content (i.e responses to their questions or promotional content). Every time a customer sends you a new message, this messaging window resets.

If you need more time to respond to a customer, Zaapi uses the "Human Agent" tag when sending messages, which **extends this messaging window from 24 hours, to 7 days** after the customer last sent you a message. During this time, you can send updates about the customers order or respond to any enquiries, but you should not send any promotional content.

| Within 24 hours                              | Within 7 days                                                                                                                              | Over 7 days |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ----------- |
| All messages (including promotional content) | All messages except for promotional content (i.e check out our new sneakers in stock at [www.sneakershop.com](http://www.sneakershop.com)) | No messages |

***

### **File Upload Limitations**

* Image (8 MB)
  * .jpg, .jpeg, .png (not .heic)
* Audio (25 MB)
* Video (25 MB)

***

### **Character Count Limitations**

For Facebook messages, you can send a maximum of 2,000 characters in a single response

***

### Conversation History Import Limits

Upon successfully integrating this channel, the system will automatically import your past conversation history from the last 90 days.

{% hint style="info" %}
**Note on older conversations:** If a customer sends a new message in an existing conversation that is older than 90 days (and wasn't part of the initial import), the system will automatically fetch the entire history of that specific thread. Once the new message is received, you will be able to scroll up to view all previously un-imported messages from that conversation.
{% endhint %}

***

### Unsupported Messages

Due to limitations from the Facebook API, there may be a number of messages that we cannot support in Zaapi. We regularly update this list with the latest changes. Any message that is not included in this list will be supported by default.

| Message                                   | Image Reference                                                     | Description                                                                                                                                 |
| ----------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Messaging directly from Facebook products | ![](/files/McMA9HnHIeBgSgWUdCdF)                                    | If a customer clicks on a Facebook product and then clicks to chat, we will not show the product that they clicked on                       |
| Messaging directly from a Facebook story  |                                                                     | If a customer clicks on your story and then sends a message directly, the message will show in Zaapi but the story they replied to will not |
| Reactions to messages                     | <img src="/files/KSzCgePGOy98ls2DqLgO" alt="" data-size="original"> | If a customer reacts to a message that you sent, this will not appear in Zaapi                                                              |


# Error troubleshooting

### **Issues Sending or Receiving Messages**

If you are experiencing any issues sending or receiving messages from Facebook in Zaapi, you will need to check your conversation routing settings within Facebook and set the Zaapi Seller App as your main messaging provider.&#x20;

To do this, login to your Facebook and switch the page that you manage. Open your page and click **Settings**.

<figure><img src="/files/ZXfrBQV4COG6Gx4jy1zZ" alt="" width="375"><figcaption></figcaption></figure>

Within the settings area, click the **Page Setup** option from the left hand side and then click **View** under Advanced messaging.

<figure><img src="/files/uJkrEW4HYxqObOeHV4Ko" alt="" width="375"><figcaption></figcaption></figure>

On this page you will see a list of connected apps. Remove any other apps that you are not currently using from Business Integrations. Then click **Edit** next to the Zaapi Seller App at the top.

<figure><img src="/files/bCVb6CglXyaL2PBjzOGz" alt="" width="375"><figcaption></figcaption></figure>

Ensure that all of your toggles are set to **ON** like the below image.

<figure><img src="/files/QU6xx6OSV4QASf9NQBSP" alt="" width="375"><figcaption></figcaption></figure>

Then under the **App Settings** section, click **Configure** for both Facebook and Instagram receivers, and select **Zaapi Seller App** from the drop down list.

<figure><img src="/files/Bl7BISjWhTDJn5V5VE7b" alt="" width="375"><figcaption></figcaption></figure>

When you have finished, return to the **Page Setup** area in **Settings**. Click **View** under Messenger conversation routing.

<figure><img src="/files/VShaAh7XtS9AyKxcJ4mE" alt="" width="375"><figcaption></figcaption></figure>

Then click **Edit** under the default routing app. Ensure that the default app is set to Zaapi Seller App, then return to the page setup area and do the same thing for Instagram Conversation Routing.

<figure><img src="/files/6TXD0l6ztxeA4tGDKumL" alt="" width="375"><figcaption></figcaption></figure>

***

### **Error Messages**

If you are experiencing an issue sending messages on Facebook, you should receive an error code as your message tries to send. You can check the table below for the list of codes and suggested actions.

<table><thead><tr><th>Error Message</th><th width="122">Error Code</th><th>Action</th></tr></thead><tbody><tr><td>This person is currently unavailable</td><td>551</td><td><p>Facebook doesn't specify the exact reason for this error, but it can be one of the following:</p><ul><li>The person blocked messages from your Page (that's why you are not able to contact them via a private message)</li><li>The person deactivated/deleted their account</li><li>The person's account got restricted or disabled by Facebook</li><li>There's a technical issue on Facebook's side</li></ul></td></tr><tr><td>People have reported your page. You are blocked from sending messages for 24 hours.</td><td>2022</td><td>This might happen because too many people have blocked your page in a short period of time or Facebook has flagged your page for spam. You can wait 24 hours and try again.</td></tr><tr><td>Messaging permission check failure</td><td>10</td><td>This error might occur because you are trying to send a message outside of the standard messaging window of 24 hours that Facebook views as promotional content. Please check the content of your message and try again.</td></tr><tr><td>Upload attachment failure.</td><td>100</td><td>The image you have tried to upload does not meet the requirements. Check the file size limits and try again.</td></tr><tr><td>Your connection has been expired. Please reconnect this chat intergration to resume usage in Zaapi</td><td>-</td><td>There is an issue with your chat integration. Please go to the settings area to reconnect your page and try again.</td></tr><tr><td>An unexpected internal error occurred</td><td>-1</td><td>Facebook might have experienced an internal error. You can retry sending the message and contact our team if the issue persists.</td></tr><tr><td>Time ran out when uploading media files</td><td>-2</td><td>You may be trying to send a large file. Check your internet connection and try again.</td></tr><tr><td>The chat is currently controlled by Messenger while the user is in an automated question and answer flow. Please wait for the flow to finish before trying again.</td><td>10</td><td>The user is currently engaged in a question/answer flow on Meta. Please wait until the flow is finished before sending.</td></tr><tr><td>Length of param message[text] must be less than or equal to 2000</td><td>100</td><td>Please shorten your message.</td></tr><tr><td>Human agent tag is unavailable for this page/app</td><td>100</td><td>This error typically indicates a routing conflict in outbound messages due to multiple messaging apps connected to your Facebook account. To resolve this, ensure that Zaapi is set as the default routing app in your Facebook advanced messaging for conversation routing.</td></tr><tr><td>general.ZPCHAT0020</td><td>-</td><td>Zaapi might have experienced an internal error. You can retry sending the message and contact our team if the issue persists.</td></tr></tbody></table>

For a full list of other errors that you may receive, please check the Facebook API error documentation [here](https://developers.facebook.com/docs/messenger-platform/error-codes/).


# Track conversions

### Overview

When a customer makes a purchase from you on Facebook or Instagram within the chat, it's important to send that conversion event back to Meta so that it will reflect in your Ad data and so that Meta can use this information to show your ads to more people like that.&#x20;

<figure><img src="/files/MNwo0sb6kFXcuOHJng5z" alt=""><figcaption></figcaption></figure>

***

### How to send the "Purchase" event to Meta

1. You must integrate Facebook and/or Instagram with Zaapi

   1. Please note: in order to send conversion events to Meta, the user who integrates Facebook pages **must be an admin (i.e have "Full Control" of both the page & ad account** you want to send conversions to. You can check this in Meta Business Suite - the permissions should look something  like the below:

   <figure><img src="/files/1tewcXL93aQgJSA9zr86" alt=""><figcaption></figcaption></figure>
2. In the chat integrations settings in Zaapi, click the small cog icon

<figure><img src="/files/Er8pWYSR6OgMhnozdLzo" alt=""><figcaption></figcaption></figure>

1. Toggle "ON" the pages/accounts you would like to send the events to Meta for

   <figure><img src="/files/qckCF1fTXzjmf3Ru0gMc" alt=""><figcaption></figcaption></figure>
2. Go to the "Workflows" tab in settings and ensure you have "Log Chat Conversion after closing" turned "ON"
   1. This is important as the purchase event is only sent to Meta for chats that are closed and logged as a conversion

<figure><img src="/files/ZxcFkVFCrdL5WR1FhVcG" alt=""><figcaption></figcaption></figure>

1. Go to the chats list and mark a chat as "Closed"
2. Select "Converted" and enter the amount that the customer spent (optional)

   1. You do not need to enter an amount in the conversion
   2. If you click "Close without logging" or "Unconverted", this will not send an event to Meta

   <figure><img src="/files/N1NI2Yk4A2QE1Vd5Phjj" alt=""><figcaption></figcaption></figure>
3. Check that the event has been sent successfully to the specific dataset by navigating to the chat integrations page in Zaapi, clicking the small cog icon, then clicking the specific "dataset id" of the page you just converted a chat for
4. This will take you to Meta events manager where you can check if the "Purchase" event has been sent successfullyy (please wait atleast 1 hour for the event to show)

   <figure><img src="/files/SEyAAafeE3KvxJiCNgOq" alt=""><figcaption></figcaption></figure>

***

### Limitations

* Meta only currently allows apps to send the "Purchase" event
* The status of the customer in the business suite inbox will not change, but the event would still have been sent successfully to Meta&#x20;

***

### Troubleshooting

* Ensure that you wait **atleast** 1 hour for the event to display
* Ensure that the user who integrated the Facebook/Instagram on Zaapi is both a Page admin and an admin of the Ad account linked to that page


# Instagram


# How to connect

### Steps to connect

1. **Go to the Integrations Area** – Navigate to **Settings > Integrations** in Zaapi.
2. **Click "Connect Facebook & Instagram"** – Both platforms must be connected together in this step.
3. **Ensure Business Portfolio Linkage** – Your Facebook and Instagram accounts must be linked to the appropriate **Business Portfolio** before proceeding.
4. **Log Into Facebook** – A new pop-up will appear. Sign in with your Facebook account, ensuring you have **admin access** to the pages/accounts you wish to connect.
5. **Select Pages** – Choose the Facebook pages you want to connect, then click **Continue**.
6. **Select Business Portfolios** – Pick the business portfolios you want to connect, ensuring they include the pages selected in the previous step. Click **Continue**.
7. **Select Instagram Accounts** – Choose the Instagram accounts you want to connect, then click **Continue**.
8. **Confirm and Save** – Click **Save**, then click **Got it** to finalize the connection.
9. **Wait for Zaapi to Complete the Integration** – You will be redirected back to Zaapi, where the integration process will take a few seconds to complete. Once done, your Facebook and Instagram accounts will be successfully connected.

{% hint style="warning" %}
Ensure your Facebook page and Instagram profile are linked together before connecting. To find out how, [click here](https://www.facebook.com/business/help/connect-instagram-to-page).
{% endhint %}


# Limitations

### **Messaging Window**

When a customer sends you a message on Instagram, you have a standard messaging window to respond to that customer of **24 hours**. During this 24 hour period, you can send all types of content (i.e responses to their questions or promotional content). Every time a customer sends you a new message, this messaging window resets.

If you need more time to respond to a customer, Zaapi uses the "Human Agent" tag when sending messages, which **extends this messaging window from 24 hours, to 7 days** after the customer last sent you a message. During this time, you can send updates about the customers order or respond to any enquiries, but you should not send any promotional content.

### File Uploads Size Limits

* Image (8 MB)
  * .jpg, .jpeg, .png (not .heic)
* Audio (25 MB)
* Video (25 MB)

### Character Count

For Instagram messages, you can send a maximum of 1,000 characters in a single response

### Conversation History Import Limits

Upon successfully integrating this channel, the system will automatically import your past conversation history from the last 90 days.

{% hint style="info" %}
**Note on older conversations:** If a customer sends a new message in an existing conversation that is older than 90 days (and wasn't part of the initial import), the system will automatically fetch the entire history of that specific thread. Once the new message is received, you will be able to scroll up to view all previously un-imported messages from that conversation.
{% endhint %}


# Error troubleshooting

#### Why can’t I receive inbound Instagram messages?

If you are not receiving Instagram messages inside Zaapi, it is usually because the connection permissions between Meta (Facebook/Instagram) and Zaapi have become outdated. This often happens if the admin connected to the account changes their Facebook password.

Please follow these steps to restore the connection:

1\. To ensure Zaapi can receive messages, it must be set as the primary receiver.

* Go to your Facebook Page Settings.
* Navigate to Settings > Advanced Messaging > Handover Protocol > Instagram receiver.
* Select Zaapi as the *Primary Receiver*.

2\. You must allow third-party tools to access your messages via the mobile app.

* Open the Instagram app on your mobile device.
* Go to Settings and privacy > Messages and story replies > Message controls.
* Toggle on Allow access to messages.

3\. Once the settings above are correct, you need to reconnect the channel.

* Go to your Zaapi Integration settings.
* Locate your Instagram channel settings.
* Click the Reconnect button.

4\. Send a test message to your Instagram account from a personal account (not the business account itself) to verify that it now appears in your Zaapi inbox.

***

#### Why don't "Message Requests" appear in Zaapi?

Currently, Instagram's API does not send "Message Requests" (messages from people you don't follow or potential spam) to third-party platforms like Zaapi. We can only display messages that land directly in your primary Inbox.

To ensure you receive all messages in Zaapi, you must change your Instagram privacy settings so that new chats go directly to your Inbox rather than the Message Requests folder.

You can learn how to manage your message request settings on Instagram's official help page [here](https://help.instagram.com/585369912141614).


# WhatsApp Business


# Requesting Access

Access to the WhatsApp Business integration is by application only. The first time you try to connect WhatsApp Business, you'll be prompted to submit a request form.

Zaapi assesses every application against:

* [WhatsApp Business Messaging Policy](https://whatsappbusiness.com/policy/)
* [WhatsApp Business Terms of Service](https://www.whatsapp.com/legal/business-terms)
* [WhatsApp Messaging Guidelines](https://www.whatsapp.com/legal/messaging-guidelines)
* [Meta Commerce Policy](https://www.facebook.com/policies_center/commerce)
* Zaapi's own onboarding and risk criteria

If your request is approved, you'll receive an in-app notification letting you know you can connect WhatsApp Business. See [How to connect](/integrations/whatsapp-business/how-to-connect) for the next steps.

**Before you apply:** your Meta Business account must be verified. See Meta Business verification below.

### Meta Business Verification

Business verification is how Meta confirms that your business is a legitimate business or organization. It's free, and it's not the same as the Meta blue tick (verified badge).

To verify your business in Meta Business Manager:

1. Go to [**Business Settings > Security Center**](https://business.facebook.com/settings/security) and click **Start Verification**.
2. Add your organization details: legal name, address, phone number, and website.
3. Choose how you'd like to receive your confirmation code.
4. Upload your business's supporting documents.
5. Enter the confirmation code.
6. Click **Done**.

<p align="center"><img src="/files/0DK0fNKCeiU4hINBCR4d" alt="" data-size="original"></p>


# How to connect

### Steps to connect

{% hint style="warning" %}
Before starting, make sure that your Facebook account is an Admin of the Meta Business Portfolio which owns the WhatsApp Account.&#x20;
{% endhint %}

1. **Go to the Integrations Area** – Navigate to **Settings > Integrations** in Zaapi.
2. **Click "WhatsApp Business"** – you will see two different connection options each with separate instructions below:
   1. [Connect WhatsApp Business App](#connecting-whatsapp-business-app) - known as "coexistence", this option will allow you to use both Zaapi and your existing WhatsApp Business app
   2. [Connect a new WhatsApp Cloud API Phone Number](#connect-a-new-whatsapp-business-app) - use this option to connect a new WhatsApp phone number, or [migrate an existing Cloud API number to Zaapi](#migrating-from-another-cloud-api-provider)

<div data-full-width="false"><figure><img src="/files/G7DhDWyQkZNI2SdER7vD" alt="" width="375"><figcaption></figcaption></figure></div>

### Connecting WhatsApp Business App (aka Coexistence)

**Requirements**

* This is only available to businesses that are actively using the WhatsApp Business App and are eligible according to Meta's criteria, based on tenure and messaging quality
* WhatsApp Business App version 2.24.17 or later
* The phone number is added to your Meta Business Portfolio - [learn more](https://www.facebook.com/business/help/713785646327651)
* Your business must not be registered in a currently unsupported country - [see list of unsupported countries](https://developers.facebook.com/docs/whatsapp/embedded-signup/custom-flows/onboarding-business-app-users#unsupported-countries)

**Steps to Connect**

After selecting the "Connect WhatsApp Business App" option, a Facebook login modal will appear. Log in to your Facebook account and follow the steps

1. Choose the Meta Business Portfolio that your phone number belongs to
2. Enter and verify the phone number
3. Scan a QR code using the WhatsApp business app
4. Leave the WhatsApp Business app for a few minutes whilst the connection is in progress. Once complete, your Business app will refresh and show that the number is now connected to the API via Zaapi

Note: when asked if you would like to "Share chat history", you can select "Don't share chats" since chat history import is not yet supported.&#x20;

### Connect a new WhatsApp Business App

After selecting the the "Connect WhatsApp Business App" option, a Facebook login modal will appear. Log in to your Facebook account and follow the steps

1. Choose the Meta Business *Portfolio* that your phone number belongs to.&#x20;
2. Choose or create a WhatsApp Business *account* and *profile*
3. Confirm and finish

### Migrating from another cloud API provider

Ready for a better WhatsApp experience? You can migrate to Zaapi from any [WhatsApp Business Solution Provider (BSP)](https://respond.io/blog/whatsapp-partners-whatsapp-business-solution-provider) in a few simple steps.

| Migrated ✅                       | Not Migrated ❌                     |
| -------------------------------- | ---------------------------------- |
| Quality rating                   | Chat history                       |
| Approved, high quality templates | Rejected and low quality templates |
| Official Business Account Status |                                    |
| Display name                     |                                    |
| Messaging limit                  |                                    |

You can find more about this migration process in the official [WhatsApp documentation](https://developers.facebook.com/docs/whatsapp/solution-providers/support/migrating-phone-numbers-among-solution-partners-via-embedded-signup/).

#### Prerequisites

Before you begin, make sure:

* Your Meta Business Account is verified.
* Your WhatsApp Business Account (WABA) is approved.
* Your WABA has a valid payment method added in Payment Settings.
* Two-step verification is disabled for the phone number. You can disable it in WhatsApp Manager (see this [guide](https://developers.facebook.com/docs/whatsapp/cloud-api/phone-numbers#disabling-two-step-verification)).
* You can receive a one-time password (OTP) on the phone number being migrated (via SMS or voice).

#### Migration process

Once you’ve met the prerequisites, log in to your Zaapi account and follow these steps:

1. Open Integrations: Go to Settings → Integrations.
2. Select WhatsApp Business: Choose “Connect a new or existing WhatsApp Cloud API phone number.”
3. Authenticate with Facebook: Log in and select the relevant Business Portfolio.
4. Create a new WhatsApp Business Account & Profile—this is for internal reference only and is not public. Your Meta Business Portfolio will remain the same.
5. Enter your phone number: select your preferred OTP delivery method. When migrating from another provider, you’ll see a yellow warning message like the one shown below.
6. Verify the number: enter the OTP and click Next.
7. Confirm and finish: review your selections and complete the migration.

{% hint style="warning" %}
In step 5, the yellow warning appears specifically when you’re migrating a phone number from another provider. **This is expected**—continue with the verification to proceed.
{% endhint %}

<figure><img src="/files/Dv8FOG52tMAbNqEMe69h" alt="" width="375"><figcaption></figcaption></figure>


# Limitations

### Messaging Window

When a customer sends you a message on WhatsApp, you have a standard messaging window to respond to that customer of **24 hours**. During this 24 hour period, you can send all types of content (i.e responses to their questions or promotional content). Every time a customer sends you a new message, this messaging window resets.

**Outside of the messaging window** (i.e. when more than 24 hours have passed since the customer’s last message), you can still send pre-approved template messages from Zaapi. You can create your own templates or use the default re-engagement template provided by Zaapi. Note that message templates must be approved by Meta before they can be used — this process may take up to 1 day. See Meta’s [Message Template Guidelines](https://developers.facebook.com/docs/whatsapp/message-templates/guidelines/) for more information.

<figure><img src="/files/iXqq66UTeEgUC8d3IhwJ" alt="" width="375"><figcaption></figcaption></figure>

***

### File Upload Limitations

* Image (5 MB)
  * .jpg, .jpeg, .png (not .heic)
* Audio (16 MB)
* Video (16 MB)

***

### Limitations when connecting with Coexistence

[Connecting with Coexistence](/integrations/whatsapp-business/how-to-connect#connecting-whatsapp-business-app-aka-coexistence) allows you to maintain use of your WhatsApp Business app. Below is a table of features that are supported and unsupported

<table><thead><tr><th width="294.1328125">Feature</th><th width="203.65234375">WhatsApp Business App</th><th>Zaapi</th></tr></thead><tbody><tr><td>Group Chats</td><td>✅</td><td>❌</td></tr><tr><td>Disappearing messages/view once messages</td><td>❌</td><td>❌</td></tr><tr><td>Message editing/revoking</td><td>❌</td><td>❌</td></tr><tr><td>Live location messages</td><td>❌</td><td>❌</td></tr><tr><td>Message reactions</td><td>✅</td><td>❌</td></tr><tr><td>Voice and video calls</td><td>✅</td><td>❌</td></tr><tr><td>Messaging outside of 24-hour messaging window</td><td>✅</td><td>⚠️ Only with template messages</td></tr></tbody></table>

### Limitations when connecting an API phone number

[Connecting an API phone number](/integrations/whatsapp-business/how-to-connect#connect-a-new-or-existing-whatsapp-cloud-api-phone-number)  means that you will only be able to access your WhatsApp Business chats through Zaapi. Some messaging features are not supported in Zaapi:

* Group chats
* Disappearing messages/view once messages
* Message editing/revoking
* Live location messages
* Message reactions
* Voice and video calls
* You can only message outside of the 24-hour messaging window using pre-approved templates

***

### Limitations sending messages by country

Only Brazilian business accounts can send messages to Brazilian (+55) numbers\
Only Indonesian business accounts can send messages to Indonesian (+62) numbers


# Error troubleshooting

If you encounter an error message while trying to connect or reconnect your WhatsApp Business number, please refer to the guide below.

***

#### Error Code #133006

Message: `Phone number re-verification needed`

**⚠️ What does this mean?**

This error comes directly from Meta (Facebook). It indicates that for security reasons, your phone number requires re-verification before it can continue sending or receiving messages through the API.

This often happens if there has been a change in the number's status, or if Meta's security systems require a fresh confirmation of ownership.

**✅ How to fix it**

You cannot resolve this error alone inside the Zaapi app. We need to help you re-trigger the verification process.

Please reach out to the Zaapi Team immediately so we can assist you:

1. Contact us via our in-app live chat or email support.
2. Send a screenshot of the error or mention code #133006.
3. Our team will guide you through the re-verification steps to get your number back online quickly.


# Template messages

### Overview

WhatsApp Business message templates are predefined messages that businesses can send to customers. You must use a template when you’re messaging someone for the first time or when it’s been more than 24 hours since their last message; templates are also required for broadcast messages.

Every template must be approved by Meta to confirm it complies with WhatsApp’s Business and Commerce Policies—this usually takes a few minutes but can take up to 48 hours. Sending a template starts a business-initiated conversation and is billed based on your location and the template category. Learn more about WhatsApp pricing [here](https://business.whatsapp.com/products/platform-pricing).

### **How to create template messages in Zaapi**

* Go to Settings → Integrations → WhatsApp → Template Manager. A default template (`zaapi_re_engagement_template`) is already created for you.
* Click “Create new template”
* Select the WhatsApp Business Account that will use this template.
* Enter a template name (letters, numbers, and underscores only).
* Choose a category:
  * Marketing – promotional content, special offers, etc.
  * Utility – transactional updates, e.g., order confirmations, shipping updates.
* Choose the language.
* Compose the template (as needed): Header, Body, Footer, and Buttons.
  * Follow the “Optimizing Variables: Best Practices” to ensure all content with variables meets Meta’s guidelines.
* Click Submit for review. The status will show Pending first, then Approved (or Rejected if it doesn’t meet Meta’s policies).

### The mandatory opt-out footer

Every **Marketing**-category template you create in Zaapi carries a fixed opt-out footer. The field is read-only in the template builder — you can't edit or remove it. It reads, in the template's language:

| Language   | Footer                                 |
| ---------- | -------------------------------------- |
| English    | Reply STOP to unsubscribe              |
| Thai       | ตอบกลับ STOP เพื่อยกเลิกการรับข้อความ  |
| Indonesian | Balas STOP untuk berhenti berlangganan |
| Malay      | Balas STOP untuk berhenti melanggan    |
| Filipino   | Sumagot ng STOP para mag-unsubscribe   |
| Lao        | ຕອບກັບ STOP ເພື່ອຍົກເລີກການຮັບຂໍ້ຄວາມ  |
| Vietnamese | Trả lời STOP để hủy đăng ký            |

Templates in any other language use the English footer.

This is intentional. An easy opt-out is the alternative to being blocked or reported — and blocks and reports are what damage your quality rating and your tier. A customer who replies STOP costs you one contact. A customer who blocks you costs you a little of every future broadcast's deliverability.

**Utility**-category templates have an editable footer (up to 60 characters), because they're transactional and not subject to the marketing opt-out requirement.

### Template quality rating

Meta gives every approved template its own quality rating, based on how recipients react to it. Blocks, reports and "not interested" responses pull the rating down; normal engagement keeps it healthy. The rating is per template, not per account — one bad template doesn't drag down the rest of your library.

A template isn't rated straight away. Meta needs it to have been sent to enough recipients first, so newly approved templates show as **Not yet rated** until they've had some traffic.

#### Where to find it

* **Settings → WhatsApp Templates** — the **Quality score** column shows the current rating for every template.
* **The template picker** — in a chat, or when building a broadcast, the rating appears as a badge next to each template name.

Hover the badge to see what the rating means.

#### What each rating means

| Rating             | What it means                                                                                              | Can you send it? |
| ------------------ | ---------------------------------------------------------------------------------------------------------- | ---------------- |
| **High quality**   | Meta has rated this template as high quality based on positive recipient engagement.                       | Yes              |
| **Medium quality** | Meta has rated this template as medium quality.                                                            | **No**           |
| **Low quality**    | Meta has rated this template as low quality due to negative feedback from recipients.                      | **No**           |
| **Not yet rated**  | Meta hasn't rated this template yet. Ratings appear after the template has been sent to enough recipients. | Yes              |

#### Sending is blocked at medium and low quality

Zaapi stops a template from being sent as soon as its rating drops to medium or low. This applies everywhere a template can go out:

* **In chats** — the template can't be selected in the picker, and you'll see *"Sending is unavailable for templates rated medium or low quality"* if you try to send it.
* **In broadcasts** — the broadcast is marked **Failed** and no messages are sent. This check runs when the broadcast actually goes out, so a scheduled broadcast can fail on a rating change that happened after you scheduled it.
* **In workflows and automations** — the send step fails.

This is a deliberate guardrail, and it's stricter than Meta's own behaviour. Meta pauses a low-quality template only after it has already accumulated negative feedback, and continued sending is what escalates from a paused template to a downgraded messaging tier and eventually a restricted phone number. Blocking at medium quality stops that chain early, while the problem is still one template rather than your whole account.

#### If a template drops to medium or low

The rating recovers on its own if the template stops generating negative feedback — but it won't recover while you keep sending it, and you can't send it anyway. What to do:

1. **Read the template again as a customer would.** Is the offer relevant to everyone who received it? Is it clear which business it's from? Does it look like a mass message?
2. **Check who you sent it to.** A good template sent to a poorly targeted audience gets reported. Tighten your targeting before you rewrite the copy.
3. **Edit it, or replace it.** Approved templates can be edited up to 10 times in 30 days, or once in any 24-hour window. If the concept itself isn't working, create a new template rather than editing the same one repeatedly.
4. **Reduce how often you send it.** Repetition to the same contacts is one of the fastest routes to reports and blocks.

Ratings update automatically — Meta notifies Zaapi whenever a template's rating changes, so the badge reflects the current state without you needing to refresh anything.

#### Template quality vs. phone number quality

These are two separate ratings and it's worth knowing which one you're looking at:

|                      | Template quality rating         | Phone number quality rating                   |
| -------------------- | ------------------------------- | --------------------------------------------- |
| Applies to           | One template                    | Your whole WhatsApp Business number           |
| Where to see it      | Settings → WhatsApp Templates   | Connect → WhatsApp accounts                   |
| Effect when it drops | That one template can't be sent | **No** templates can be sent from that number |
| Also affects         | —                               | Your daily messaging tier                     |

A single template rated low is a copy or targeting problem. A *number* rated low is an account-health problem, and it blocks every template you have — so treat template ratings as the early warning.


# Broadcasts


# WhatsApp broadcasts overview

A broadcast is a single WhatsApp message template sent to many contacts at once, delivered as a normal one-to-one chat. Each recipient sees a private conversation with your business — they can't see other recipients, and when they reply, the reply lands in your Zaapi inbox as a regular chat that your team can pick up.

This is not the same as a "broadcast list" in the WhatsApp Business app. Those are capped at 256 contacts and only reach people who have saved your number. Broadcasts in Zaapi run on the WhatsApp Business Platform (Cloud API), so you can reach thousands of contacts, and every send is measurable.&#x20;

{% hint style="warning" %}
**You're only allowed to send broadcast messages to contacts that have given explicit opt-in permission to receive your messages**
{% endhint %}

### What you can use broadcasts for

* **Promotions and campaign launches** — sales, new arrivals, seasonal offers
* **Announcements** — store openings, opening-hours changes, policy updates
* **Re-engagement** — win back customers who haven't messaged in 60 days
* **Event and appointment reminders** — RSVPs, class schedules, bookings
* **Post-purchase follow-up** — review requests, replenishment nudges

### Why broadcast from Zaapi

**Replies become real conversations.** A broadcast is a conversation starter. Replies open in your shared inbox with your existing labels, assignment rules, quick replies and AI handling already applied — so a campaign that works doesn't overwhelm your team.

**Revenue attribution, not just open rates.** Zaapi tracks delivered, read and replied, and also **conversions and conversion value** per broadcast, and per individual recipient. You can see which campaign made money, and click through to the exact chat that closed.

**Compliance handled by default.** Zaapi automatically excludes contacts who opted out of marketing and skips contacts you messaged with a template in the last 24 hours. It also prevents broadcasts that would push you over your WhatsApp daily messaging limit, which is a common cause of WhatsApp account restrictions.

### Before you start

* WhatsApp broadcasts are available on the **Pro** and **Advanced** plans, but are not available during free trial
* You need a **connected WhatsApp Business account** in Zaapi.
* You need a **payment method on your Meta Business Portfolio** — Meta bills you directly for template messages.
* You need at least one **approved** message template.

Broadcast messages are charged at the standard WhatsApp Business Platform messaging rates. Marketing-category messages cost more than utility messages, and rates vary by recipient country.


# Limits and best practices

### Limits at a glance

| Limit                                             | Value                                          |
| ------------------------------------------------- | ---------------------------------------------- |
| Max recipients per broadcast                      | 10,000                                         |
| Recipients per broadcast vs. daily messaging tier | Cannot exceed your WhatsApp tier's daily limit |
| Per-contact template cooldown                     | 24 hours                                       |
| Marketing template footer                         | Fixed opt-out line, not editable               |
| US numbers (+1)                                   | Excluded from all broadcasts                   |
| Plan requirement                                  | Pro or Advanced, not on free trial             |

### Maximum recipients

A single broadcast can reach at most **10,000 recipients**. This applies to all three targeting modes — send to everyone, targeted filters, and CSV upload. If your audience is larger, split it across multiple broadcasts, ideally on different days.

### Don't exceed your daily messaging tier

Meta caps how many unique contacts you can start conversations with in a rolling 24-hour period. Every WhatsApp Business phone number sits in a tier:

| Tier      | Unique contacts per 24 hours |
| --------- | ---------------------------- |
| 50        | 50                           |
| 250       | 250                          |
| 2K        | 2,000                        |
| 10K       | 10,000                       |
| 100K      | 100,000                      |
| Unlimited | No cap                       |

**Zaapi blocks a broadcast at creation if the recipient count would exceed your tier.** You'll see "This would exceed your daily template limit" and nothing is sent.

Tiers scale up automatically as you build a good sending history, and scale back down if your quality rating drops. To move up: send consistently to opted-in contacts, keep engagement high, and keep blocks and reports low.

### Your phone number's quality rating

Meta rates each phone number **High (green)**, **Medium (yellow)** or **Low (red)** based on recipient feedback — blocks, reports, and "not interested" responses.

**Zaapi blocks template sends, including broadcasts, when your rating is medium or low.** This is deliberate: it protects you from the next step, which is Meta restricting or disabling your number. A broadcast that hits this check is marked **Failed** and no messages go out.

If this happens: stop broadcasting, review what you last sent and to whom, and let the rating recover. Refresh the account in Zaapi once Meta's rating improves. Individual templates are also rated — a template rated medium or low is blocked on its own, even if your number is healthy.

### Only broadcast to contacts who opted in

This is the rule that matters most. Meta requires explicit opt-in before you send a marketing template, and it must be clear:

* the customer actively agreed (ticked a box, replied to a request, submitted a form)
* they knew it was your business asking
* they knew what they were agreeing to receive

Buying a list, scraping numbers, or importing everyone who ever transacted with you is not opt-in. The consequence isn't lower open rates — it's blocks and reports, a falling quality rating, a tier downgrade, and eventually a disabled number. Businesses do lose their WhatsApp numbers this way, and the bans are not always reversible.

**Good ways to collect opt-in:**

* A tick box at checkout or on a sign-up form, worded as "Yes, send me offers on WhatsApp"
* A WhatsApp link or QR code where the customer messages you first
* Asking in an existing conversation and recording the answer with a chat label
* A Zaapi chat widget or click-to-WhatsApp ad with clear consent wording

**Track it.** Use a label like `whatsapp-marketing-opt-in` on every contact who consents, then target that label in your broadcasts. It makes your audience defensible and your filters simple.

#### Opt-outs are excluded automatically

When a contact replies STOP, or sets their marketing preference to stop in WhatsApp, Zaapi records it and **permanently excludes them from every future broadcast** — send-to-everyone, targeted, and CSV alike. You don't have to maintain a suppression list, and you can't accidentally re-add them by re-uploading a CSV. If they later opt back in through WhatsApp, they become eligible again.

You can see opt-out status on a contact, and include it in contact exports.

### The mandatory opt-out footer

Every **Marketing**-category template you create in Zaapi carries a fixed opt-out footer. See [#the-mandatory-opt-out-footer](#the-mandatory-opt-out-footer "mention") for details.

### The 24-hour per-contact cooldown

Zaapi only sends one template per contact per 24 hours. Contacts still inside that window are **silently skipped** — they aren't added as recipients and the broadcast doesn't fail.

This is why your actual recipient count can come in below the estimate, and it's the most common reason a contact "didn't get" a broadcast. If you sent a template yesterday morning, ran a test to your own number an hour ago, or another team member broadcast to an overlapping segment, those contacts are on cooldown.

For scheduled broadcasts the check runs at the **scheduled** time, so contacts whose cooldown will have expired by then are included.

### Best practices

**Segment rather than blast.** A 300-person targeted broadcast with relevant copy outperforms a 3,000-person generic one, and it protects your quality rating. Use labels, last-message date and conversion history to send to people the message actually applies to.

**Warm up gradually.** New numbers start at the lowest tier. Send small, high-quality broadcasts to your most engaged contacts first, and grow from there.

**Always send a test first.** Check the rendered copy, image, buttons and links on a real device. Use your own number — a test consumes that contact's 24-hour cooldown.

**Set real fallback values.** Every dynamic variable needs one. "Hi ," is the fastest way to look like spam.

**Give people something to do.** A clear call to action — a reply prompt, a quick-reply button, a link — is what converts a broadcast into a conversation. Broadcasts with buttons consistently outperform plain text.

**Send at sensible local times.** Broadcasts arrive as personal messages. Use scheduling and the country-code filter to avoid landing at 3am, and target one region per send when your audience spans time zones.

**Watch your rates, not just your sends.** Aim to keep blocks, reports and opt-outs under 1% of recipients. Rising opt-out rates are the earliest warning you're over-messaging — cut frequency before Meta cuts your tier.

**Space out your campaigns.** The 24-hour cooldown is a technical floor, not a recommendation. For most businesses, marketing broadcasts more than once or twice a week to the same segment is too much.

**Review analytics before the next send.** Compare read, replied and converted across campaigns. Export the recipients who read but didn't reply, and follow up individually in the inbox rather than broadcasting again.

**Handle the replies.** A broadcast that works generates a wave of inbound chats. Make sure someone is assigned, quick replies are ready, and AI handling or auto-assignment rules are configured before you send to thousands of people.

### Troubleshooting

| Problem                                       | Cause and fix                                                                                                                                          |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| "This would exceed your daily template limit" | Your recipient count is above your tier's daily cap. Reduce the audience or split the broadcast across days.                                           |
| Broadcast status is **Failed**                | Usually your phone number's quality rating dropped to medium/low, or the template's quality score did. Check both, let the rating recover, then retry. |
| Fewer recipients than the estimate            | Contacts on the 24-hour cooldown, opted-out contacts, and US numbers are excluded at send time.                                                        |
| Analytics tab is empty                        | Stats take about a day to appear, then update daily for 30 days.                                                                                       |
| A contact says they didn't receive it         | Check whether they're opted out, on cooldown, or a US number. Look them up in the recipient table on the Analytics tab.                                |
| Template isn't in the picker                  | Only **approved** templates appear. Check its status in Template Manager, and that it belongs to the selected account.                                 |
| CSV upload rejected                           | The first header must be exactly `Phone Number`, and every number needs a country code. Row-level errors tell you which rows to fix.                   |
| Can't click **Send Broadcast**                | Something required is missing — account, template, title, at least one recipient, all variables filled, or a schedule date if you chose Set schedule.  |


# How to send a WhatsApp broadcast

Go to **Broadcasts → WhatsApp Broadcasts → Create Broadcast**. The builder walks top to bottom; a live preview of your message sits on the right.

### Step 1 — Choose the account to send from

Pick the WhatsApp Business account the broadcast goes out from. Only accounts eligible for proactive messaging appear here. If you only have one connected account it's selected for you.

The rest of the form appears once an account is chosen, because templates, labels and contacts are all specific to that account.

### Step 2 — Set the broadcast time

* **Send now** — the broadcast is queued as soon as you confirm.
* **Set schedule** — pick a date and a time. Only future times can be selected; if you choose today, past times are hidden.

Scheduling is worth doing even for "send now" campaigns. Landing in someone's chat at 9am beats 2am, and staggering large sends across days keeps you inside your daily messaging limit.

Two things are evaluated at the **scheduled** send time, not when you build the broadcast:

* the 24-hour per-contact cooldown, so contacts who will be free to message by then are included
* your phone number's quality rating and the template's quality score

### Step 3 — Choose who receives it

Three options:

#### Send to everyone

Every contact on the selected WhatsApp account, most recent first, up to 10,000 recipients. Opted-out contacts and contacts still inside their 24-hour cooldown are excluded automatically.

#### Send to specific people

Add filters to build a targeted audience. Available filters:

| Filter           | Conditions                                                                            | Use it for                                                                |
| ---------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| **Labels**       | Contains all of / Contains any of / Does not contain all of / Does not contain any of | Segments you maintain in the inbox — `vip`, `abandoned-cart`, `wholesale` |
| **Country code** | Equals a dialling code                                                                | Language- or region-specific campaigns                                    |

As you build, the donut chart shows **"Send to approximately N recipients"** against your total contacts. This is an estimate from current data and the real recipient count at send time may be slightly lower, because opt-outs and cooldowns are re-checked when the broadcast runs.

**US numbers (+1) are excluded from all broadcasts** due to Meta restrictions on marketing messages to US numbers.

#### Upload .csv

For lists that don't live in Zaapi yet — event sign-ups, offline collection, another platform.

1. Click **Download WhatsApp CSV template** to get the correct format.
2. The **first column header must be exactly `Phone Number`** — including capitalisation.
3. Include the country code on every number, e.g. `+66812345678`.
4. Any additional columns become available as personalisation variables. Name them clearly (`First Name`, `Order ID`) — you'll pick them by header name later.
5. Upload the file. Zaapi validates every row and reports invalid numbers by row number, e.g. `Row 14: 0812345 is not valid`. Fix them and re-upload.

Numbers already in Zaapi are matched to the existing conversation, so the broadcast appears in that chat's history. Numbers not in Zaapi start a new conversation.

### Step 4 — Choose your message template

Click **Choose template** and pick an **approved** template. Only approved templates can be used — this avoids failed deliveries to contacts outside the 24-hour messaging window.

**Creating a template first:** go to **Settings → WhatsApp Templates → Create new template**. Choose a category (Marketing or Utility), a language, then write the header, body, footer and buttons. Meta review usually takes minutes but can take up to 24 hours. Approved templates can be edited up to 10 times in 30 days, or once in any 24-hour window.

Two things to know when writing a template you plan to broadcast:

* **Marketing templates get a fixed opt-out footer** that you cannot edit — see Page 3.
* **Templates carry their own quality score.** Once a template has been sent enough times, Meta rates it. If it drops to medium or low quality, Zaapi blocks it from being sent — including in broadcasts. Write templates people want to receive.

#### Filling in personalisation variables

If your template body contains variables like `{{1}}`, you'll be asked what each one should be filled with:

| Variable type            | Filled with                                                                                 |
| ------------------------ | ------------------------------------------------------------------------------------------- |
| **Static text**          | The same value for everyone                                                                 |
| **Contact name**         | The contact's name in Zaapi                                                                 |
| **Contact phone number** | The contact's phone number                                                                  |
| **Contact email**        | The contact's email                                                                         |
| **From CSV file**        | A column from your uploaded CSV — only shown when you've uploaded a file with extra columns |

Every dynamic type takes a **fallback value** used when that contact's field is empty. Set a sensible one — "there" for a missing name, not a blank space.

Meta's guidance for variables: don't put a variable at the very start or end of the body, and keep more static text than variable text. `Hi {{1}}, your order {{2}} has shipped!` passes review; `{{1}} {{2}}` does not.

### Step 5 — Name the broadcast

Give it an internal title, up to 100 characters. It's never sent to customers — it's how you'll find the broadcast in the list and in reports later. Include the date or campaign name, e.g. `Songkran promo — VIP — 12 Apr`.

### Step 6 — Test, then send

**Always send a test broadcast first.** Click **Test broadcast**, search for your own number or a colleague's, and send. You'll receive the real message with real variable substitution, so you can check the copy, the image, the buttons and the links.

One caveat: a test is a real template send. It consumes the 24-hour cooldown for whoever receives it, and it's charged at normal rates. Test on your own number, not on a customer you intend to include in the campaign.

When you're happy, click **Send Broadcast** (or **Schedule broadcast**) and confirm. Recipients are then locked in, and the broadcast moves through: **Scheduled → Sending → Sent**. If something goes wrong it lands on **Failed**; broadcasts you delete before they run show as **Cancelled**.

**To cancel a scheduled broadcast**, open the **⋮** menu on its row in the broadcast list and choose **Delete**. It will no longer be sent. Only Admins and Owners can delete broadcasts.

### Viewing broadcast analytics

The **Broadcasts** list shows every broadcast with Title, Account, Targeting, Status, Sent/Scheduled date, Sent, Read, Replied, Conversions, Conversion value and Created by. Sort by any performance column to see which campaigns worked. Search by title, or filter by account and sent date.

Click a broadcast to open it. Two tabs:

#### Details

The account, title, targeting type, send time, the exact template and variable values used, and the filters that built the audience.

Every broadcast also gets an automatic chat label — `broadcast_id.<id>` — applied to every recipient's conversation. That means you can go to **Chats**, filter by that label, and work through the people this campaign reached.

**Broadcast to same audience** reopens the builder pre-filled with this broadcast's targeting, so you can run a follow-up to the same segment without rebuilding the filters.

#### Analytics

Six performance cards:

| Metric              | What it means                                      |
| ------------------- | -------------------------------------------------- |
| **Sent**            | Recipients the broadcast was sent to               |
| **Delivered**       | Messages that reached the device                   |
| **Read**            | Recipients who opened it (% of delivered)          |
| **Replied**         | Recipients who replied (% of delivered)            |
| **Converted**       | Recipients who went on to convert (% of delivered) |
| **Converted value** | Total revenue attributed to the broadcast          |

Below the cards is the full recipient table: contact name, labels, phone number, and per-recipient Delivered / Read / Replied / Converted status plus conversion value. Filter by **engagement status** to isolate a group — everyone who read but didn't reply, everyone who replied but didn't buy — and **Export recipients** to download that filtered list as a CSV. **View chat** on any row jumps straight into that conversation.

Two notes on timing and attribution:

* **Stats take about a day to appear**, then update daily for 30 days. An empty analytics tab minutes after sending is expected.
* **Conversions are attributed to the most recent broadcast a contact received in the previous 7 days.** If you send two broadcasts to the same person in one week, the later one gets the credit.


# LINE


# How to connect

### Steps to connect

1. Get Channel Secret from your LINE Official Account [https://manager.line.biz](https://manager.line.biz/)
2. Get Channel Access Token from your LINE Developers Console [developers.line.biz](https://developers.line.biz)
3. Enter these into Zaapi and connect
4. Go back to the LINE Developers Console and enable webhooks & webhook redelivery

{% hint style="warning" %}
You will need to get a Channel Secret from your LINE Official Account and Channel Access token from the LINE Developers Console - make sure you can access both of these.

If you do not have access to the LINE Developers Console, then [contact the Zaapi team](https://www.zaapi.com/contact-us) for further assistance.
{% endhint %}

### Full Instructions

**Step 1: Get Channel Secret from your LINE Official Account**

1. Log in to your LINE Official Account [https://manager.line.biz](https://manager.line.biz/)
2. Select the LINE account you want connect
3. Go to Settings -> Messaging API -> Click "Enable Messaging API"

   <div align="center"><figure><img src="/files/vUvMgoVljFCpN7pVn8vG" alt="" width="563"><figcaption></figcaption></figure></div>
4. Create a LINE Developers Provider and optionally enter a Privacy Policy & Terms of Use URLs
5. Confirm and create your Provider
6. Save the Channel Secret - you will need to enter this value into Zaapi later

   <div align="center"><figure><img src="/files/VYpoaDlVp3Cdh3gMkbKG" alt="" width="375"><figcaption></figcaption></figure></div>

**Step 2: Get Channel Access Token from LINE Developers Console**

1. Go to the LINE Developers Console [developers.line.biz](https://developers.line.biz)
2. Select the Provider that you created above
3. Select the Messaging API channel and go to the Messaging API tab

<div><figure><img src="/files/LX3RW5jdsgc7mDQ0ETvJ" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="/files/5LlNIL27wDqVi7sA7big" alt=""><figcaption></figcaption></figure></div>

4. Scroll to the bottom and issue a Channel access token (long-lived) - you will need to enter this value into Zaapi later

<div align="center"><figure><img src="/files/eLM5Gw8VgiBSamcO4mrh" alt="" width="294"><figcaption></figcaption></figure></div>

**Step 3: Connect in Zaapi and enable webhooks in LINE Developers**

1. Go to the Integrations Area – Navigate to Settings > Integrations in Zaapi
2. Click "LINE Official Account"
3. Enter the Channel Secret & Access Token obtained above, and click Connect. Wait for your LINE OA account to appear.

<div align="center"><figure><img src="/files/wRi7UmnH5JFzqdmS9S3i" alt="" width="375"><figcaption></figcaption></figure></div>

4. Go back to the [LINE Developers Console](https://developers.line.biz/) Messaging API tab. Refresh the page, and you will see a Webhook URL populated in the Webhook settings section
5. Toggle both "Use webhook" and "Webhook delivery". For Webhook delivery you will be asked to confirm, which you can do. New messages will now start appearing in Zaapi.

<div align="center"><figure><img src="/files/UgIzloFP5zaMmCQTs7Eb" alt="" width="563"><figcaption></figcaption></figure></div>


# Import LINE chat history

### Overview

Due to LINE API limitations, when you first integrate with Zaapi your previous conversations will not be visible in the inbox (only new messages will appear). In order to continue your conversations with previous LINE friends, you must import your LINE OA chat history.

{% hint style="warning" %}
In order to import LINE chat history, your account must be verified and subscribed to the LINE OA Chat package. [Learn how to subscribe to the LINE OA Chat package](https://lineforbusiness.com/th/service/line-oa-features/oa-chat-package)
{% endhint %}

***

### How to import LINE chat history

1. Navigate to the settings are and click "Integrations" in Zaapi
2. Click the "LINE Settings" icon
3. Click the individual LINE account that you want to import
4. From LINE OA, export your chat history
   1. Go to LINE OA on desktop
   2. Click "Basic Settings"
   3. Scroll to the bottom of the page
   4. In the "Chat History Backup" section, click "Create new"
   5. When the .zip file is created, click "Download"
5. Upload the entire .zip file in the modal within Zaapi
6. Click save
7. Wait a few hours for this to successfully import

***

### LINE friends limitations

* Only new customers you have interacted with after integration will appear in Zaapi, until you have imported your LINE chat history
* During the import, Zaapi may not be able to import all friends due to limitations with the LINE API, or due to any of the following reasons:
  * The customer must be a friend of your LINE OA
  * The customer should not have changed their name recently (the sync is matched on the customer name from the file and their name at the time of import)


# Create chats from "Friend add"

### Overview

The **"Create Chats from Friend Add"** feature allows you to automatically create a new conversation with a customer who adds your account as a friend on LINE but has never messaged you. This helps you proactively reach out to potential customers and maximize conversion opportunities. You can enable or disable this feature based on your preferences in the LINE integration settings.

***

### How to create a chat when a new friend adds you

1. Go to **Settings** > **Integrations** in the side navigation of Zaapi.
2. Click on **LINE Integration Settings**.
3. Toggle the setting for **"Create Chats from Friend Add"** to **on**.
4. Select the **LINE OA channels** where you want to automatically create conversations when a customer adds you as a friend.
5. Save your settings to activate the feature.


# Display Admin Name & Photo in LINE

### **Overview**

You can choose to display the admin name and profile photo in LINE to customers using Zaapi. This helps your customers understand which admin they are talking with and personalises their experience.

<figure><img src="/files/vmuLKHcsqwr7cr308rXj" alt=""><figcaption></figcaption></figure>

This is a great feature as it is something that you can only enable if you use Zaapi. LINE OA does not offer this functionality within their own platform.

***

### **How to display admin name & photo in LINE**

1. Make sure you have updated your name and profile photo in your own user settings
2. Navigate to the "Integrations" area on the web platform
3. Click the "LINE Settings" icon&#x20;
4. Toggle this option "On" for each LINE Account that you have integrated


# Limitations

### Message Syncing

When you first integrate LINE with Zaapi, **only new messages (i.e received after integration date) will appear in your inbox**. This is because LINE does not allow any third party to fetch previous conversation history before the first integration.&#x20;

Also, **any messages sent via the LINE OA native platform directly will not appear in Zaapi**. This is because LINE does not send any third party webhooks (notifications of messages sent) for messages sent on their platform. To ensure all messages appear in Zaapi correctly, you can send all messages in Zaapi only.

***

### **LINE Message Limits**

LINE has limits on the number of messages you can send via an API based on the plan you have paid for in LINE. Messages sent via the API are counted in the same way as broadcast messages. If you exceed this limit, you will receive an error message in Zaapi and you may need to upgrade your plan within LINE OA. You can find more details on this [here](https://help.line.me/official_account/ios/categoryId/20006330/pc?contentId=20011707).

{% hint style="info" %}
If you send a reply from Zaapi within 10 minutes of receiving the customer message, LINE will not count this towards your message limits.
{% endhint %}

For details about LINE monthly plans and limits see the below table:

<figure><img src="/files/xxnCUx8iVJTT6DIPiQqx" alt="" width="563"><figcaption></figcaption></figure>

***

### **File Upload Limitations**

* Image (10 MB)
* Video (30 MB)

***

### **Character Count Limitations**

For LINE messages, you can send a maximum of 1,000 characters in a single response.

***

### Unsupported Messages

Due to limitations with the LINE API, there are a number of messages that we are unable to support in Zaapi. We regularly update this table with the latest API changes and are supporting more messages every week.

| Message        | Image Reference                  | Description |
| -------------- | -------------------------------- | ----------- |
| Shared contact | ![](/files/6PLObvfLhG8FMbtG7XeC) |             |


# Shopee


# How to connect

### Steps to connect

1. **Go to Settings** > **Integrations** in Zaapi.
2. Click **"Integrate Shopee"**.
3. Enter the details of your **Shopee store**.
4. Authorize the **Shop Integration** (ensure the **authorization period is set to 365 days**).
5. You will be redirected back to Zaapi.
6. You will be prompted to integrate **Chat Integration**.
7. Follow the same authorization steps as before and click **Authorize**.
8. Once completed, you will return to Zaapi, and your **Shopee store will be connected**.


# Limitations

### File Uploads

* Image (10 MB)
* Video (30 MB)

***

### Character Counts

For Shopee messages, you can send a maximum of 600 characters in a single response<br>

***

### Messaging Limits

* Sellers can only message **within 7 days of the last buyer message**
* Sellers can only send **5 consecutive messages before buyer reply**

***

### Conversation History Import Limits

Upon successfully integrating this channel, the system will automatically import your past conversation history from the last 90 days.

{% hint style="info" %}
**Note on older conversations:** If a customer sends a new message in an existing conversation that is older than 90 days (and wasn't part of the initial import), the system will automatically fetch the entire history of that specific thread. Once the new message is received, you will be able to scroll up to view all previously un-imported messages from that conversation.
{% endhint %}

### Automated Messages and Response Rate

Shopee does **not count automated messages** (such as greeting or welcome messages) toward your store’s **response rate**. These messages are considered system-generated and do not reflect human interaction.

If you want your replies to count toward your store’s response rate, you can use the **Zaapi AI Agent**.\
Messages sent by the AI Agent are treated as **human responses**, helping you maintain or improve your Shopee response rate automatically.


# Lazada


# How to connect

### Steps to connect

Download this [PDF file](https://d3a2p8n0vkdvcj.cloudfront.net/prod/app-assets/files/lazada-integration-en.pdf) for full instructions including screenshots

**Step 1: Start the Integration**

1. Go to **Settings** > **Integrations** in Zaapi.
2. Click **“Connect to Lazada”**.
3. You will be redirected to the **Lazada Marketplace**—ensure you are logged into the correct **Lazada store** you want to integrate.

**Step 2: Authorize Lazada Integration**

4. Select **"Authorization"** and set the period to **“Half a year”**.
5. Click **“Agree to the terms”** and then **“Confirm”**.
6. Click **“Authorised use of services”**.

**Step 3: Enable Zaapi Chats**

7. Find **"Zaapi Chats"** in the Lazada Marketplace.
8. Click **“Use service”**.
9. Click **“Agree”** to accept the terms.
10. Select **your store country** from the country dropdown.
11. Enter your **Lazada account information**.
12. Once completed, you will be redirected back to **Zaapi**, and your **Lazada account will be successfully integrated**.

### Steps to reconnect

1. Ensure you are logged into the **Zaapi web app**.
2. Go to the **Lazada Service Marketplace** and log into the **store you wish to reconnect**.
3. Navigate to the **Orders List** in the **Service Marketplace**: [Lazada Service Marketplace - Orders List](https://marketplace.lazada.co.th/web/subscribe/list.html)
4. Find **“Zaapi Chats”** and click **“Use this service”**.
5. Follow the on-screen steps to reconnect.


# Limitations

### File Uploads

* Image (10 MB)
* Video (30 MB)

### Character Counts

For Lazada messages, you can send a maximum of 1,000 characters in a single response.

### Conversation History Import Limits

Upon successfully integrating this channel, the system will automatically import your past conversation history from the last 90 days.

{% hint style="info" %}
**Note on older conversations:** If a customer sends a new message in an existing conversation that is older than 90 days (and wasn't part of the initial import), the system will automatically fetch the entire history of that specific thread. Once the new message is received, you will be able to scroll up to view all previously un-imported messages from that conversation.
{% endhint %}


# TikTok Shop


# How to connect

### Steps to connect

#### Before you start

* **Owners Only**: Only users with the **“Owner”** role in TikTok Shop can integrate. Users with **“Sub-account”** roles will not be able to do so.
* **Unlimited Duration**: Ensure you select **“Unlimited”** duration to avoid any service interruptions in Zaapi.

**Step 1: Access TikTok Shop Integration**

1. Go to **Settings** > **Integrations** in the side navigation of Zaapi.
2. Click **“Connect TikTok Shop”**.

**Step 2: Redirect to Seller Centre**

3. You will be redirected to the **TikTok Seller Centre**.
4. Select your **country**.
5. Log in to your **TikTok Shop seller account**.

**Step 3: Install and Authorize**

6. Click **“Install”** to begin the integration process.
7. Read and **acknowledge the conditions** and click **“Acknowledge”**.
8. Click **“Authorize”** to grant permission.

**Step 4: Complete the Integration**

9. You will be redirected back to **Zaapi** once the integration is successful.
10. Your **TikTok Shop chat** will now be connected.

{% hint style="warning" %}
To integrate additional TikTok Shops, simply repeat these steps, ensuring to **log out** and **re-login** with each new TikTok Shop account you want to connect.
{% endhint %}


# Limitations

### Supported Countries

Zaapi supports integration with TikTok Shops in the following countries:

* Brazil
* Germany
* Spain
* France
* United Kingdom
* Indonesia
* Ireland
* Italy
* Japan
* Mexico
* Malaysia
* Philippines
* Singapore
* Thailand
* Vietnam

Note that US based TikTok Shops are not currently supported.

### File Uploads

* Image (10 MB)
* Video (can't be sent on TikTok chats)

### Character Counts

For TikTok messages, you can send a maximum of 1,000 characters in a single response

### Conversation History Import Limits

Upon successfully integrating this channel, the system will automatically import your past conversation history from the last 90 days.

{% hint style="info" %}
**Note on older conversations:** If a customer sends a new message in an existing conversation that is older than 90 days (and wasn't part of the initial import), the system will automatically fetch the entire history of that specific thread. Once the new message is received, you will be able to scroll up to view all previously un-imported messages from that conversation.
{% endhint %}

### Unsupported Messages

Due to limitations from the TikTok Shop API, it is not possible **send video messages** on TikTok chats.


# Website Chat Widget


# Configure the chat widget

#### How to Set Up and Configure the Website Chat Widget

The Website Chat Widget allows you to engage with visitors on your website, capture leads, and offer instant support directly from your Zaapi inbox.

This guide will walk you through creating, configuring, and installing your new chat widget.

***

#### 1. Creating a New Chat Widget

First, you need to create the widget from your Zaapi settings.

1. Navigate to Settings in the main menu.
2. Select Integrations.
3. Scroll down to the "Discover" section and find the Website Chat Widget card.
4. Click the + Create button to begin the setup process.

***

#### 2. Configuring the Widget

After creating the widget, you will be taken to the configuration page. This page has four main tabs: Appearance, Content & language, Settings, and Install.

**A. Appearance Tab**

This tab controls the visual style and placement of your chat widget on your website.

* Widget design: Choose how the minimized widget appears.
  * Bubble: A circular icon (default).
  * Bar: A rectangular bar with a short message.
* Color theme: Select a colour that matches your brand's identity. The selected colour will be applied to the widget's header and buttons. You can further customise the colour by entering your brand hex code.
* Alignment position: Choose whether the widget should appear on the Left or Right side of your website.

**B. Content & language Tab**

This tab allows you to control all the text displayed in the widget and set up multiple languages.

* Select language: The widget can automatically display in the visitor's browser language. Click into the language box to select all the languages you want to support.
  * Important: You must provide text for all the required fields for every language you select. You will see a "This field is required" notification for any missing translations.
* Pop-up message: A proactive message that appears to visitors after a set time.
  * Style: Choose between Message (a customisable text pop-up), Ice-breaker (a list of clickable questions), or None.
  * Delay: Set the number of seconds before the pop-up appears.

> Pro-tip: Trigger Automations with Ice-breakers You can connect your ice-breakers to specific automations using the Flow Builder. When a visitor clicks an ice-breaker, it can automatically trigger a flow to answer common questions or qualify leads.
>
> To set this up:
>
> 1. Go to the Automations > Flow Builder section.
> 2. Create a new flow and choose the trigger When a customer sends a message.
> 3. Set the channel to Chat Widget.
> 4. Add a condition to filter by Message content.
> 5. Set the filter text to be an exact match to your ice-breaker question.

* Home screen: This is the main view of the widget when a visitor opens it.
  * Header: Set the Title and optional Subtitle.
  * Go to chat customization: Customise the Title, Reply time message, and Button label.
* Other communication channels: Click + Add channels to offer alternative contact methods like Facebook, Instagram, WhatsApp, Line, Email, or a Phone Number.
* External links: Click + Add external links to direct users to useful pages.
  * For each link, you must provide a Link label (the text that will be displayed) for each language, and the destination URL.

**C. Settings Tab**

This tab contains functional settings for data collection, customization, and the widget's behaviour.

* Widget settings:
  * Widget name: The name that will appear at the top of the widget when starting a new chat. This will be visible to customers, so ensure this is set accurately.
* Data collection:
  * Enable Collect data before chat starts to ask visitors for their contact details. A form will be shown before they can send a message. It's good practice here to ask for a customers contact details so that you can contact them again after the chat has ended on the website.
  * Form header: Customise the Title and Subtitle of the data collection form.
  * Details to request from visitors: Choose which fields to show (Name, Email, Phone number) and toggle whether they are Required.
  * Extra fields: Add up to 3 custom fields to collect more specific information.
    * Any extra information added will be created as a "Note" in the notes are of the customer information. You can ask any further qualifying questions here, for example "What is your membership number?" or "How many orders did you complete?" to gather extra information.
* Additional customization:
  * Show home screen: If toggled off, visitors will go straight to the chat conversation view instead of seeing the home screen first.
  * Disable the chat widget on mobile: Enable this to hide the widget from visitors on mobile devices.
  * Hide "Powered by Zaapi" on the widget: Remove the Zaapi branding (this feature is only available on the Advanced plan).
* Chat avatar:
  * Choose what picture customers see in the chat header.
  * Show logo: Displays your business logo at all times.
  * Show agent: Displays the profile picture of the agent handling the conversation.

***

#### 3. Installing the Widget on Your Website

After your widget is fully configured and saved, the final step is to add it to your website.

1. Navigate to the Install tab.
2. Under "1. Copy this code", click the Copy code button. This will copy the unique JavaScript snippet for your widget.
3. Paste this code snippet into your website's HTML source code just before the closing `</body>` tag. This will ensure the widget loads on every page of your site.
4. Publish the changes to your website. The chat widget should now be live!

> Need help? For detailed, platform-specific instructions, use the step-by-step guides linked at the bottom of the Install page for services like Shopify, WordPress, Webflow, and more.


# Install the chat widget on your website

### Installing the Zaapi Chat Widget on Your Website

This guide provides detailed instructions on how to add the Zaapi Chat Widget to your website. After you have configured your widget's appearance and content, you need to embed its unique code snippet into your site's HTML.

First, Get Your Code Snippet

Before you begin, you need your unique code snippet.

1. In your Zaapi account, navigate to Settings > Integrations.
2. Select your configured Chat Widget.
3. Go to the Install tab.
4. Click the Copy code button to copy the entire snippet to your clipboard.

Now, follow the instructions below for your specific website platform.

***

### For a Custom HTML Website

If your website is built with standard HTML, you will need to edit your site's source files directly. You should send the code snippet to your developer and he/she will be able to do this for you within a few minutes.

1. Open your website's files in a code editor (like VS Code, Sublime Text, or Notepad++).
2. Identify the main template file that is used on every page of your site. This is often `index.html` or a shared footer file (e.g., `footer.html`).
3. In that file, scroll to the very bottom and locate the closing `</body>` tag.
4. Paste your Zaapi code snippet on a new line just before the `</body>` tag.
5. Save your changes and upload the updated file to your web server. The widget should now appear on your site.

***

### For Shopify

You can easily add the **Zaapi Chat Widget** to your Shopify store using Shopify’s **App Embed** feature. This allows you to display the widget on your storefront so customers can start chatting with you directly.

1. **Open Shopify Admin**\
   Go to your Shopify admin panel and navigate to **Online Store → Themes**.
2. **Click Customize**\
   Find the theme currently live on your store and click **Customize**.
3. **Go to App Embeds**\
   In the editor, click the **App Embeds** icon (⚙️) on the left-hand sidebar.
4. **Copy your Widget ID from Zaapi**\
   After creating your widget in Zaapi, click on the Install tab, and copy the widget ID\
   ![](/files/LOIl9cJOWOvwvd5SeWGt)
5. **Paste the widget ID in Shopify to enable**&#x20;
   * Find **Zaapi Chat Widget** in the list.
   * Paste the widget ID into the Widget ID field\
     ![](/files/4OQJfWbSn8LUdQbgBZFZ)
   * Toggle the switch **ON** to activate it on your store.
6. **Adjust Widget Settings (Optional)**\
   You can customize your widget’s colors, position, and callout message directly in Zaapi.\
   To do this:
   * Go to app.zaapi.com on a computer, then **Settings** → **Integrations** → **Website Widget**.
   * Edit your widget’s appearance or settings.
   * Changes will update automatically on your Shopify store.
7. **Save Your Theme**\
   Click **Save** in the top right corner to apply your changes.
8. **Preview Your Store**\
   Visit your store’s front end — you should now see the **Zaapi Chat Widget** in the corner of your website.

***

### For WordPress

The safest and most recommended method for WordPress is to use a plugin to add code snippets. This ensures your widget code isn't removed when you update your theme.

We recommend using the popular "WPCode – Insert Headers and Footers" plugin.

1. From your WordPress Admin dashboard, navigate to Plugins > Add New.
2. In the search bar, type "WPCode" and press Enter.
3. Find the "WPCode – Insert Headers and Footers" plugin, then click Install Now and Activate.
4. Once activated, a new "Code Snippets" item will appear in your left-hand menu. Hover over it and click on Header & Footer.
5. Scroll down to the Footer section.
6. Paste your Zaapi code snippet into the text box under "Footer".
7. Click the Save Changes button. The widget will now appear on your entire WordPress site.

***

### For Webflow

Webflow provides a dedicated section in the site settings for adding custom code to your site's footer.

1. In your Webflow Designer, click the "W" menu icon in the top-left corner and select Site settings.
2. Navigate to the Custom Code tab in the top menu.
3. Scroll down to the Footer Code section.
4. Paste your Zaapi code snippet into the text box that says "Add code before the closing \</body> tag".
5. Click the Save Changes button.
6. Finally, Publish your site to make the changes live. The chat widget will now be visible on your published Webflow site.


# Gmail


# How to connect

{% hint style="warning" %}
You must have a Gmail account in order to access this integration. This can either be a personal Gmail account (i.e <acme@gmail.com>) or a Google Workspace account with a custom domain name (i.e <user@acme.com>).
{% endhint %}

1. Go to the **Integrations** Area – Navigate to Settings > Integrations in Zaapi.
2. Click "**Connect**" – Locate the Gmail card within the integrations list and click the + Connect button.
3. Choose an account – A Google sign-in window will appear. Select the Google Account you wish to connect to Zaapi.
4. Grant Access – Review the permissions requested by Zaapi and click Continue to authorize the connection.
5. Configure Import Settings – You will be directed back to Zaapi to configure the "Gmail import" options:
   * Import email history and labels: Toggle this ON to import your last 7 days of history.
   * Select Categories: Check the boxes for the specific email folders you want to sync (e.g., INBOX, SPAM, CATEGORY PROMOTIONS, etc.).
     * After initial integration, only emails from the selected categories will appear in the Zaapi inbox. All emails will still be visible from within the native Gmail account.
6. Finish Setup – Once you have selected your preferences, click Confirm to complete the integration.


# Import email history

### Understanding Import & Syncing

When setting up your Gmail integration, the settings you choose determine exactly what data is brought into Zaapi.

#### ⏳ Import Time

If you toggle "Import email history and labels" to ON, Zaapi will begin syncing the last 7 days of your email history. Please allow up to 15 minutes for all history to appear in your inbox.

#### 📥 How Syncing Works

The categories you select (e.g., *Inbox, Updates*) act as a filter for both past history and future emails:

* Initial Import: Only the last 7 days of history from the selected categories will be imported.
* Ongoing Sync: From this point onwards, only new emails landing in these specific categories will appear in Zaapi. Emails received in unselected categories will not be synced.

#### ⚙️ Editing Your Settings

If you want to change these preferences later (for example, to stop syncing "Promotions"):

1. Go to Settings > Integrations.
2. Click on the connected Gmail card.
3. Update your checkboxes and save.

***

### Guide to Email Categories

Gmail automatically filters your incoming email into different tabs. Use this guide to decide which boxes to check during setup:

* INBOX (Primary):
  * *What it is:* Your main feed containing personal emails and direct conversations.
  * *Recommendation:* Always select this. This is where your most important customer inquiries land.
* CATEGORY UPDATES:
  * *What it is:* Automated, transactional notifications (confirmations, receipts, shipping alerts).
  * *Recommendation:* Select this only if you wish to receive confirmations and alerts from other services that you use.
* CATEGORY PROMOTIONS:
  * *What it is:* Marketing emails, newsletters, and special offers.
  * *Recommendation:* Select this only if you receive important supplier offers via newsletters. Otherwise, it may clutter your inbox.
* CATEGORY SOCIAL:
  * *What it is:* Email notifications from platforms like Instagram, Twitter/X, or LinkedIn.
  * *Recommendation:* Generally leave unchecked unless you specifically want social media *email alerts* in your inbox.
* CATEGORY FORUMS:
  * *What it is:* Messages from online groups and mailing lists.
  * *Recommendation:* Leave unchecked unless your support team uses email-based discussion groups.
* SPAM:
  * *What it is:* Emails flagged as junk or malicious.
  * *Recommendation:* Leave unchecked.


# Outlook


# How to connect

{% hint style="warning" %}
Note: You must have a Microsoft Outlook account in order to access this integration. This can be a personal account (e.g., <name@outlook.com>, <name@hotmail.com>) or a business Office 365 account.
{% endhint %}

* Go to the Integrations Area – Navigate to Settings > Integrations in Zaapi.
* Click "Connect" – Locate the Outlook card within the integrations list and click the + Connect button.
* Sign in to Microsoft – A Microsoft sign-in window will appear. Enter your credentials to sign in to your Microsoft Outlook profile.
* Grant Access – Review the permissions requested and accept the conditions to authorize the connection.
* Sync Email History – You will be directed back to Zaapi where the integration will finalize.
  * Automatic Sync: Zaapi will automatically initiate a sync of your last 7 days of email history.
  * Ongoing Integration: After the initial sync, your emails will appear in the Zaapi inbox while remaining visible within your native Outlook account.


# Shopify


# How to connect

### Steps to connect

1. Go to the Integrations Area – Navigate to Settings > Integrations in your Zaapi account.
2. Click 'Connect Shopify' – Locate Shopify in the list of available integrations and click the Connect button.
3. Log Into Shopify & Authorize – You will be redirected to the Shopify login page. Sign in to your account and review the permissions required by Zaapi. Click Install app to approve the connection.
4. Wait for Redirect – Once authorized, Shopify will automatically redirect you back to your Zaapi integrations page.
5. Confirm Connection – You will see a "Connected" status next to the Shopify integration in Zaapi. Your Shopify store is now successfully linked!

{% hint style="warning" %}
Ensure you are the store owner or have admin permissions for the Shopify store you wish to connect. Without the correct permissions, you will not be able to install the Zaapi app.
{% endhint %}

#### For users with multiple brands

If you manage multiple brands, you must choose the messaging channels that you associate with that Shopify store. This ensures that the products and customer data visible on a contact's profile are linked to the correct store.

> Example: Your *Doi Sportswear WhatsApp account* should be linked to the *Doi Sportswear Shopify store*.

You can manage these channel associations in the Shopify integration settings after the connection is complete.


# Using the Shopify Integration in the Inbox

### Accessing Shopify Data in the Inbox

After you have successfully connected your Shopify store, you can manage customer data directly from the Zaapi inbox.

1. Navigate to the Inbox – Select any conversation with a customer.
2. Open the Shopify Panel – On the customer information panel on the right-hand side, click on the Shopify logo. This will open the Shopify data view for that contact if a Shopify store is linked to that messaging channel.

### Linking a Contact to a Shopify Customer

When you open the Shopify panel, it will either be empty or already contain a linked customer profile.

**Automatic Linking**

Zaapi will automatically link a contact if their phone number or email address in Zaapi matches an existing customer profile in your Shopify store. You will see their full profile pre-loaded, as shown below.

* If you ever need to disconnect them, you can click the Unlink icon (🔗) to remove the association.

**Manual Linking & Creating Customers**

If no automatic match is found, the panel will show "No Shopify data linked." You have two options:

* Link an existing customer: Use the Search customers bar to find a profile in Shopify by their name, order ID, email, or phone number. Once found, click to link them to the Zaapi contact.
* Create a new customer: If the contact is not yet in your Shopify store, you can create a new customer profile for them directly from Zaapi.

#### Information at Your Fingertips

Once a contact is linked, you get a complete 360-degree view of their information from Shopify.

* Shopify Customer Data: View their full name, email, phone number, and address. You can also click View in Shopify to open their profile directly.
* Shopify Customer Insights: Instantly see key metrics like their total Amount Spent, number of Orders, and how long they've been a customer.
* Live Order History: Scroll through all their past and current orders, including the Order ID, Payment Status, and Fulfillment Status.

### Share Products Directly in Chat

Under the "Shopify E-commerce Data" section, you can access your product catalog to assist customers more efficiently.

* Search Products: Quickly find any item from your connected Shopify store.
* View Live Inventory: The current Stock level for each product is displayed.
* Share with Customers: Click the Send button next to any product to instantly share a link with the customer in the chat.


# Setting up Shopify flows

The Zaapi Flow Builder allows you to automatically send WhatsApp messages to your customers based on specific actions they take on your Shopify store. This guide explains how to use Shopify Triggers to streamline your customer communication, recover lost sales, and keep your buyers informed.

### ⚠️ Important Prerequisites

Before you begin building your flow:

1. Create your WhatsApp Template: These triggers are designed specifically to send WhatsApp Template Messages. You cannot use free-form text.
2. Add Variables: When creating your template in Zaapi, ensure you include variables (e.g., `{{1}}`, `{{2}}`) for dynamic information like Customer Name, Order Number, or Checkout URL.
3. Approve Template: Ensure your template is approved by Meta before attempting to link it in the Flow Builder.

***

### Setting Up Your Flow

To get started, open the Flow Builder, click Start, and select Shopify Triggers. You will need to select your connected Shopify account (e.g., "Doi Sportswear") to proceed.

Here is a breakdown of the available triggers and how to use them.

#### 1. Shopify Order Placed

The Value: This is the most common automation. It sends an immediate confirmation message as soon as a customer completes a purchase. This reassures the customer that their order was received and reduces "Did you get my order?" support inquiries.

How to set it up:

1. Select Shopify order placed as your starting trigger.
2. Connect it to the Send WhatsApp template action.
3. In the action settings, map the Phone Number field to the `{{shopifyCustomerPhone}}` variable.
4. Select your "Order Confirmation" template.
5. Map your variables (e.g., map `{{1}}` to `Customer First Name` and `{{2}}` to `Order Number`).

#### 2. Shopify Order Fulfilled

The Value: Notify customers the moment their package is on its way. This builds excitement and trust. You can include tracking numbers or carrier details if those variables are available in your setup.

How to set it up:

1. Select Shopify order fulfilled.
2. Connect to the Send WhatsApp template action.
3. Select a "Shipping Update" template.
4. Map the relevant variables regarding the product list or order ID.

#### 3. Shopify Checkout Abandoned

The Value: This is your revenue recovery tool. If a customer enters their phone number at checkout but leaves before paying, this trigger can bring them back to complete the purchase.

> Note: This trigger fires automatically 15-20 minutes after the customer abandons the checkout. This delay is intentional to give them time to finish on their own first.

How to set it up:

1. Select Shopify checkout abandoned.
2. Connect to the Send WhatsApp template action.
3. Crucial Step: Select a template that includes a variable for the link.
4. When mapping variables, select Checkout URL. This generates a unique link that takes the customer exactly back to where they left off to complete payment.

#### 4. Shopify Order Cancelled

The Value: If an order is cancelled (either by you or the customer), sending a confirmation message provides closure and good customer service. It confirms that the refund process (if applicable) has started.

How to set it up:

1. Select Shopify order cancelled.
2. Connect to the Send WhatsApp template action.
3. Use a template that politely confirms the cancellation.

#### 5. Shopify New Customer

The Value: This triggers when a customer creates an account on your store (which may happen without an immediate purchase). It is a great opportunity to send a "Welcome to the Family" message or a first-time discount code.

How to set it up:

1. Select Shopify new customer.
2. Connect to the Send WhatsApp template action.
3. Use a general welcome template introducing your brand.

***

### Pro Tip: Using Conditions

You don't just have to send messages to everyone! You can add Conditions between the Trigger and the Message to filter who receives them.

* Filter by Order Value: Only send a VIP "Thank You" message if the order is above a certain amount (e.g., Order Value > 2000).
* Filter by Product: Only send specific care instructions if the order contains a specific item (e.g., Order contains "Summit Pro Hiking Jacket").


# HubSpot


# How to connect

### Steps to connect

1. Go to the Integrations Area – Navigate to Settings > Integrations in your Zaapi account.
2. Click 'Connect HubSpot' – Find HubSpot in the list of available integrations and click the Connect button.
3. Log Into HubSpot – You will be redirected to HubSpot, prompting you to sign in to your HubSpot account.
4. Choose Your HubSpot Account – If you have access to multiple HubSpot portals, select the one you wish to connect to Zaapi and click Choose Account.
5. Authorize the Connection – Review the permissions that Zaapi requires. To approve, click Connect app.
6. Wait for Confirmation – You will be automatically redirected back to Zaapi. The integration will take a moment to finalize.
7. Verify Connection – The HubSpot integration will now show a "Connected" status in your Zaapi settings. Your account is successfully linked!


# Using the HubSpot Integration in the Inbox

### Accessing HubSpot Data in the Inbox

Once your HubSpot account is connected, you can view CRM data for any contact right inside your conversations.

1. Navigate to the Inbox – Select any conversation with a customer.
2. Open the HubSpot Panel – On the customer profile panel to the right, click on the HubSpot logo (the orange sprocket) to open the data view.

### Linking a Contact to HubSpot

When you open the panel, Zaapi will either find a matching contact automatically or give you the option to link one manually.

**Automatic Linking**

If the contact's email address or phone number in Zaapi matches a contact in HubSpot, their information will be automatically linked and displayed.

**Manual Linking & Creating Contacts**

If no automatic match is found, the panel will be empty. You can:

* Link an existing contact: Use the search bar to find the person in HubSpot by their name, email, or phone number and click to link them.
* Create a new contact: If they do not exist in your CRM, you can create a new contact in HubSpot directly from the Zaapi inbox.

### Your CRM Data, All in One Place

Once a contact is linked, you get a powerful, view-only summary of their HubSpot profile, helping you provide context-aware support without switching tabs.

You can see the following information:

* HubSpot Contact Data: View all fields associated with the contact, such as their name, company, and email. You can also click View in HubSpot for a direct link to their full CRM profile.
* Data Highlights: Get a quick summary of key information, including the contact's Lifecycle Stage, creation date, and last activity date.
* Deals: See all associated deals, including their name, amount, close date, and current stage in your pipeline.
* Tickets: View any support tickets linked to the contact, along with their owner and current status.
* Recent Activity: Scroll through a timeline of the contact's recent activities, such as notes, tasks, emails, and meetings logged in HubSpot.
* Associated Companies: See details of the primary company the contact is associated with.


# Understanding tickets

### What is a Ticket?

A Ticket is a single customer support session. It contains the messages exchanged between a customer and your team (or AI Agent) on one channel, from the moment the session starts to the moment it's resolved.

Tickets are the unit of work in Zaapi. Everything in the platform — assignment, labels, notes, automations, analytics — happens at the Ticket level.

A Ticket has:

* A **status**: Open, Closed, or Spam.
* An **assignee** (an agent or team), or no assignee if unassigned.
* A **conversation**.
* A set of **Ticket Fields** with custom data (see the **Ticket Fields** section).

### Contacts, Conversations & Tickets

```
Contact
 └── Conversation (one per channel — e.g. Facebook Messenger, LINE, Shopee Chat)
      └── Ticket (one per support session within a conversation)
      └── Ticket (next session, opened later)
      └── Ticket ...
```

A **Contact** represents a single customer. One customer, one Contact record — regardless of how many channels they use to reach you.

A **Conversation** is the ongoing thread between a Contact and your store on a specific channel. If the same customer messages you on both LINE and Facebook, they have one Contact but two Conversations.

A **Ticket** is a discrete support session within a Conversation. A Conversation can have many Tickets over time — each time a resolved Ticket is reopened (or a new one is created), it becomes a separate Ticket.

### How Tickets are created

A new Ticket is created automatically when:

* A customer sends a message to one of your connected channels and there is no Open Ticket for that Conversation.
* An agent **manually** opens a Ticket on a Contact.

When a Ticket is created, it starts in **Open** status and is unassigned by default (unless an assignment automation routes it).

### Ticket statuses: Open & Closed

Every Ticket sits in one of three states:

* **Open** — the Ticket is active. New customer messages are appended to this Ticket. Open Tickets show up in the default Inbox views.
* **Closed** — the Ticket has been closed by an agent or by an automation. No new messages will be appended unless the Ticket is reopened (see *The Ticket Lifecycle*).

### The difference between Tickets, Comments, and Reviews

Zaapi handles three separate types of customer interaction:

* **Tickets** are direct messages — the customer is messaging you privately on a channel like Messenger, WhatsApp, LINE, or Shopee Chat.
* **Comments** are public posts on your Facebook or Instagram page (see the **Comments** section).
* **Reviews** are public product reviews on Shopee or Lazada (see the **Reviews** section).

Each lives in its own area of Zaapi but can optionally be converted into a Ticket — for example, replying privately to a public comment opens a DM Ticket.


# The ticket lifecycle

### Opening a Ticket

A new Ticket opens automatically in any of these scenarios:

* A customer sends a message to a connected channel and no Open Ticket exists for that Conversation.
* An agent manually opens a Ticket from a Contact's profile.

To open a Ticket manually:

1. Go to **Contacts** and find the customer.
2. Click **Open Ticket** at the top of their profile.
3. Choose the channel you want to start the Ticket on.

### Closing a Ticket

To close a Ticket, click the **Close** button at the top of the Ticket. The Ticket moves to the Closed view.

Automations can also auto-close Tickets after a period of inactivity — see *Auto-close inactive Tickets* in the **Automations** section.

### Reopening a Closed Ticket — the reopen window

When a customer sends a new message after a Ticket has been closed, Zaapi checks whether to reopen the existing Ticket or create a new one based on the **reopen window**.

* If the customer's message arrives **within the reopen window** (default: 24 hours after the Ticket was closed) → the existing Ticket is **reopened**.
* If the customer's message arrives **after the reopen window** → a **new Ticket** is created for that Conversation.

The reopen window is configurable per workspace. Owners and Admins can change it in **Settings → Workflows**. The default is 24 hours; the minimum is 1 minute and the maximum is 7 days.

You can also turn the reopen window off entirely. With the window off, every new message after a Ticket is closed will create a brand new Ticket — agents can still reopen Closed Tickets manually if they want to keep them together.

**When to expect a new Ticket vs. a reopened Ticket:**

| Scenario                                             | Result                   |
| ---------------------------------------------------- | ------------------------ |
| Customer replies within 24h of closure               | Existing Ticket reopened |
| Customer replies more than 24h after closure         | New Ticket created       |
| Agent manually opens a Ticket                        | New Ticket created       |
| Automation closes and customer replies within window | Existing Ticket reopened |

To reopen a Closed Ticket manually, open it from the Closed view and click **Reopen**.


# Quick replies

Quick Replies are saved messages your team can drop into any Ticket in seconds. They're best used for FAQs, shipping policies, common acknowledgements, and any other response you find yourself typing repeatedly.

### Use a Quick Reply

1. In the message composer, type `/` followed by the Quick Reply name.
2. Pick the reply from the list that appears.
3. The text inserts into the composer. Edit it if you need to, then send.

You can also browse all Quick Replies from the **⚡** icon in the composer toolbar.

### Create a Quick Reply

{% hint style="info" %}
Only Owners and Admins can create and edit Quick Replies.
{% endhint %}

1. Go to **Settings** → **Quick Replies**.
2. Click **Add Quick Reply**.
3. Enter a **name** — this is the shortcut your team will type after `/`. Keep it short and memorable (e.g. `shipping`, `refund-policy`, `thanks`).
4. Enter the **message body**.
5. Click **Save**.

The Quick Reply is immediately available to everyone on your team.

### Personalise with variables

Quick Replies support variables that pull data from the Ticket and Contact, so the message personalises automatically when inserted. Common variables include:

* `{customer_name}` — the Contact's name
* `{agent_name}` — the agent sending the reply
* `{order_number}` — the order number on the Ticket (if set)

### Edit or delete a Quick Reply

Go to **Settings** → **Quick Replies**, find the reply in the list, and use the **⋯** menu to edit or delete it. Changes apply immediately for everyone.

### Tips

* **Name them by intent, not channel.** `shipping-delay` is more useful than `whatsapp-shipping`.
* **Keep the body short.** Longer messages are better managed as templates inside your AI Agent.
* **Review monthly.** Delete replies your team has stopped using to keep the list fast to scan.


# Set yourself as Away

Away Status temporarily removes you from automatic Ticket assignment. Use it during breaks, lunch, end of shift, or any time you step away from your inbox.

### Set yourself as Away

1. Click your **profile avatar** in the top-right corner.
2. Toggle **Away** on.

A status indicator on your avatar shows you're Away to the rest of your team.

### What changes when you're Away

* **Auto-assign rules skip you.** New Tickets are assigned to other available agents instead.
* **Tickets already assigned to you stay assigned.** Away doesn't reassign your existing workload — it only affects new incoming Tickets.
* **You can still reply.** Being Away doesn't stop you from opening Tickets and sending messages. It only pauses automatic assignment.
* **Teammates can see your status.** Your avatar shows as Away in mentions, assignment menus, and the team list.

### Resume taking Tickets

Toggle **Away** off from your profile avatar. Auto-assign rules will start including you again immediately.

{% hint style="info" %}
If your team uses scheduled working hours, you don't need to set yourself Away outside those hours — auto-assignment respects working hours automatically.
{% endhint %}


# Configure notifications

Configure how Zaapi alerts you to new Tickets, mentions, replies, and assignments — across desktop notifications and email.

### Configure your notifications

1. Go to **Settings** → **Personal account settings** → **Notifications**.
2. For each event, choose whether you want a **desktop notification**, an **email**, both, or neither.
3. Click **Save**.

Notification settings are personal — each team member configures their own.

### What you can be notified about

* **New Ticket assigned to me** — when a Ticket is assigned to you manually or by an auto-assign rule.
* **New message on an assigned Ticket** — when a customer replies to a Ticket you own.
* **Mention in a Ticket** — when a teammate `@mentions` you in an internal note.
* **New unassigned Ticket** — when a Ticket lands in the inbox with no owner. Useful for team leads.
* **Ticket reopened** — when a Closed Ticket receives a new message.

### Desktop notifications

Desktop notifications appear as native pop-ups from your browser or the desktop app. To receive them:

* In your browser, allow notifications for `app.zaapi.com` when prompted.
* On the desktop app, allow notifications when your operating system prompts you on first launch.

If you've blocked notifications by accident, re-enable them in your browser or system settings.

### Email notifications

Emails are sent to the address on your Zaapi account. To change the address, go to **Settings** → **Personal account settings** → **Profile**.

{% hint style="info" %}
For high-volume Tickets, email notifications can fill your inbox quickly. We recommend keeping email notifications on for **mentions** and **assignments only**, and using desktop notifications for everything else.
{% endhint %}


# Inbox translation

Inbox translation automatically translates incoming customer messages into your Inbox language, and translates your replies back into the customer's language before sending. Handle multilingual support without speaking every language your customers do.

### Before you start

Inbox translation is available on the **Advanced plan**.

### How it works

* **Works on every language** Zaapi can detect — Thai, Vietnamese, Bahasa, Tagalog, Chinese, English, and more.
* **Translates inbound** — incoming messages are shown in your chosen Inbox language. The original message is preserved and viewable on hover.
* **Translates outbound** — your replies are translated to the customer's language before being sent. The customer sees the translation; you see what you typed.
* **Doesn't consume AI credits** — translation is included in the plan, not metered separately.

### Enable Inbox translation

1. Go to **Settings** → **Personal account settings** → **Inbox translation**.
2. Set your **default Inbox language** — the language you want incoming messages translated into.
3. Toggle the feature on.

The setting is personal — each team member can choose their own Inbox language.

### What translation looks like in a Ticket

When a customer messages you in a different language:

* The message displays in your Inbox language.
* Hovering on the message shows the original.
* When you send a reply, Zaapi translates it into the customer's detected language and sends the translated version. Your composer keeps showing what you typed.

### When translation isn't applied

* Messages already in your Inbox language pass through untouched.
* Messages where the language can't be detected reliably (very short messages, emoji-only, mixed language) may not be translated. The original is shown.

### Tips

* **Keep replies clear.** Translation works best on simple, direct sentences. Avoid idioms and slang — they don't always translate cleanly.
* **Confirm names and numbers.** Translation can occasionally affect proper nouns and product names. Double-check before sending for high-stakes Tickets.


# Assigning tickets

Assign Tickets to teammates or Teams so the right person handles each customer issue. Assignment is the foundation of accountability in Zaapi — every Ticket should have an owner.

### Assign a Ticket

1. Open the Ticket from your inbox.
2. Click the **Assign** icon in the top-right of the Ticket.
3. Search for and select a teammate or a Team.

The assignee is notified (based on their notification settings) and the Ticket appears in their **My Inbox**.

### Assigning to an individual vs. a Team

* **Individual** — the Ticket goes to that specific person's My Inbox. Use this when you know exactly who should handle it.
* **Team** — the Ticket goes to the Team's shared queue. Anyone in the Team can pick it up. Use this when any qualified person on the team can handle it (e.g. anyone in the Returns team).

A Ticket can be assigned to a Team and an individual at the same time. The individual is the owner; the Team gives shared visibility.

### Reassign or unassign

Open the Ticket, click the current assignee's name in the top-right, and either select a different teammate or Team, or click **Unassign** to move it back to the **Unassigned** view.

Reassigning notifies the new assignee and removes the Ticket from the old assignee's My Inbox.

### Bulk assign

In the inbox, select multiple Tickets using the checkboxes, then click **Assign** in the toolbar that appears. All selected Tickets are assigned at once.

### Auto-assignment

To assign Tickets automatically based on rules — channel, label, working hours, ticket field values — set up an auto-assignment workflow. Auto-assignment respects:

* Each agent's **Away Status** — Away agents are skipped.
* Each agent's **working hours** — agents outside working hours are skipped.
* Each agent's **channel access** — agents are only assigned Tickets from channels they have access to.

{% hint style="info" %}
If no eligible agent is available, the Ticket stays in the **Unassigned** view until someone becomes available or a teammate manually picks it up.
{% endhint %}


# Saved views

Saved views are filtered, named lists of Tickets your team can return to in one click. They turn ad-hoc filters into reusable inboxes — for example, "VIP customers — unresolved", "Refund requests this week", or "Shopee Tickets waiting on the customer".

### How saved views work

* **Saved views are shared across your organisation.** Anyone on your team can open any saved view from **All saved views** in the sidebar. There's no per-user privacy.
* **Pinning is personal.** Pin the views you use most to your sidebar under **Pinned by me** — your pins only affect your own view.

This split — shared content, personal pinning — means your ops lead can curate the views your team needs, while each agent decides which ones live in their sidebar.

### Create a saved view

1. In the inbox, apply the filters you want. You can combine any of:
   * Channel
   * Status (Open, Snoozed, Closed, Spam)
   * Assignee
   * Team
   * Labels
   * Ticket field values
   * Date range
   * Search keywords
2. Click **Save view** at the top of the filtered list.
3. Give the view a name and click **Save**.

The view appears in **All saved views** for everyone in your organisation.

### Pin a view

Hover over a saved view in the sidebar and click the **pin icon**. The view appears in **Pinned by me** at the top of your sidebar. Click the pin icon again to unpin.

### Edit or delete a saved view

Hover over the view in the sidebar and click the **⋯** menu to rename, edit filters, or delete it.

{% hint style="warning" %}
Deleting a saved view removes it for everyone in your organisation, not just you. If you only want it off your sidebar, unpin it instead.
{% endhint %}

### Examples of useful saved views

* **VIP customers — unresolved** — filter by VIP label + status Open. Lets your team prioritise high-value customers.
* **Aged Tickets** — filter by status Open + last message older than 24 hours. Catches Tickets falling through the cracks.
* **Refund requests** — filter by Enquiry Type = Refund. One-click view of every active refund.
* **Shopee — needs reply** — filter by channel Shopee + last message from customer. Keeps marketplace SLAs on track.
* **My team's Tickets** — filter by Team = your team. Useful for team leads.


# Marking as spam

Mark a Ticket as spam to move it out of your active inbox and exclude it from analytics. Use this for cold sales pitches, automated noise, scams, and any Ticket that isn't a genuine customer enquiry.

### Mark a Ticket as spam

1. Open the Ticket.
2. Click the **⋯** menu in the top-right.
3. Select **Mark as spam**.

The Ticket moves to the **Spam** view in your sidebar, stops appearing in your active inbox, and is excluded from analytics.

You can also bulk-mark Tickets as spam: select multiple Tickets in the inbox and choose **Mark as spam** from the toolbar.

### Restore a Ticket from spam

1. Open the **Spam** view from the sidebar.
2. Open the Ticket.
3. Click the **⋯** menu and select **Not spam**.

The Ticket returns to your active inbox and counts in analytics again.

### Spam vs. Close

* **Mark as spam** — for Tickets that shouldn't have been in your inbox at all (cold pitches, automated noise, scams). Excluded from analytics.
* **Close** — for genuine Tickets you've finished handling. Counted in analytics as resolved.

If you Close a Ticket that was actually spam, it skews your resolution metrics. If you mark a genuine Ticket as spam, it disappears from your team's reporting.

{% hint style="info" %}
New messages from a contact whose previous Ticket was marked as spam still create new Tickets in your active inbox. Marking spam doesn't block the contact — it only affects that one Ticket.
{% endhint %}


# Understanding ticket fields

Ticket fields are the structured data captured on every Ticket. They turn unstructured customer conversations into reportable data — so you can answer questions like "how many refund Tickets did we get this month?" or "what's our average resolution time for shipping issues?".

### Where ticket fields fit

Zaapi's data model has three levels:

* **Contact** — the customer
* **Conversation** — the message thread on a single channel
* **Ticket** — the unit of work, with its own ID, owner, status, and resolution

Ticket fields live on the Ticket. They describe **what this specific issue is about and how it was resolved** — not who the customer is (that's the Contact), or which channel it came in on (that's the Conversation).

### Why ticket fields matter

Without ticket fields, every customer issue is just a thread of messages. You can read them, but you can't measure them.

With ticket fields, you can:

* **Report on volume by category** — how many Tickets were about shipping vs. returns vs. product questions.
* **Track resolution outcomes** — what percentage of refund Tickets ended in a refund vs. an exchange vs. no action.
* **Route Tickets automatically** — send Priority = High Tickets to your senior team.
* **Spot trends early** — a spike in "defective product" Tickets for a single SKU surfaces in analytics before it shows up in returns.
* **Export structured data** — pull Tickets into BI tools or warehouse with clean columns instead of raw text.

### Default fields in every workspace

Every Zaapi workspace comes with a set of ticket fields ready to go:

* **Summary** — a short description of the issue. Used in Ticket lists, search, and analytics.
* **Enquiry Type** — what the customer is contacting you about (e.g. shipping, returns, product question).
* **Resolution** — how the Ticket was resolved (e.g. refunded, exchanged, answered, no action).
* **Priority** — how urgent the Ticket is.
* **Product Enquired** — the product the Ticket is about, linked to your product catalogue.

You can edit, disable, or remove any of these, and add as many custom fields as you need.

### Next

* Creating ticket fields — set up the fields your team will use.
* Populating ticket fields — how fields get filled in, manually and automatically.


# Creating ticket fields

Set up the ticket fields your team needs to capture, report on, and route Tickets.

{% hint style="info" %}
Only Owners and Admins can create or edit ticket fields.
{% endhint %}

### Create a ticket field

1. Go to **Settings** → **Ticket Fields**.
2. Click **Create field**.
3. Enter a **field name** — what your team will see on the Ticket sidebar.
4. Choose a **field type** (see below).
5. Configure the field's options:
   * **Required** — agents must fill this field before they can close a Ticket.
   * **Integrations** — which channels this field applies to. Use this to keep marketplace-only fields (e.g. Shopee Order ID) off Facebook Tickets.
6. Click **Save**.

The field is immediately available on every Ticket that matches the integrations you selected.

### Field types

Pick the type that matches the data you're capturing.

* **Text** — short, free-form text. Use for Summary, customer reference numbers, or anything that doesn't fit a fixed list.
* **Long text** — multi-line text. Use for internal notes or detailed context.
* **Number** — numeric values. Use for quantities, refund amounts, or anything you want to sum or average in analytics.
* **Dropdown** — single-select from a fixed list of options. Use for Priority, Resolution, Enquiry Type — anywhere you want consistency for reporting.
* **Multi-select** — pick multiple options from a list. Use when a Ticket can have more than one tag (e.g. multiple issue types).
* **Date** — single date. Use for follow-up dates, expected resolution dates.
* **Product** — links to a product in your catalogue. Use for Product Enquired so analytics can break down Tickets by SKU.
* **Toggle** — yes/no. Use for binary flags like "Escalated" or "Refund issued".

{% hint style="info" %}
**Dropdown vs. Multi-select.** If you'll filter or report on this field and you want clean, single-value charts, use Dropdown. If a Ticket can genuinely be more than one thing at once, use Multi-select.
{% endhint %}

### System fields and default fields

There are two types of pre-built fields:

* **System fields** are built into Zaapi and can't be deleted. **Summary** is a system field — it's used in Ticket lists, search, and analytics, so every Ticket needs one.
* **Default fields** ship with every workspace as a starting point but are fully editable. **Enquiry Type, Resolution, Priority, and Product Enquired** are defaults — keep them, rename them, change their options, or remove them entirely.

### Edit, disable, or delete a field

In **Settings** → **Ticket Fields**:

* **Toggle the status switch off** to disable a field. It stays on existing Tickets but doesn't appear on new ones.
* **Click the ⋯ menu** to edit the field's name, options, or rules, or to delete it.

{% hint style="warning" %}
Deleting a field also deletes the data captured in that field across every Ticket. To preserve historical data, disable the field instead.
{% endhint %}

### Tips

* **Start small.** Summary, Priority, and a Resolution dropdown will cover most teams. Add fields as your reporting needs grow.
* **Match dropdown options to how you'll report.** If your analytics need "Refunded", "Exchanged", "Repaired", make those your Resolution options — not "Customer happy" or "Issue fixed".
* **Use integrations scoping.** Keep marketplace-specific fields off messaging Tickets and vice versa. A cluttered sidebar slows agents down.
* **Review every quarter.** Fields your team stopped filling in are signals to remove or simplify.


# Populating ticket fields

Ticket fields can be filled in manually by agents, automatically by AI, or set by workflows. Most teams use a mix.

### Fill in fields manually

When an agent works a Ticket, fields appear in the Ticket sidebar.

1. Open the Ticket.
2. Click any field in the sidebar to set its value.
3. Changes save automatically.

If a field is marked **Required**, the agent must fill it in before they can close the Ticket.

### Auto-populated AI fields

Zaapi can populate certain fields automatically using AI, so your team doesn't have to fill them in by hand.

* **AI Summary** — a one-line summary of the Ticket, generated from the conversation. Updates as new messages come in.
* **AI CSAT** — the AI's read on whether the customer was satisfied at the end of the Ticket. Useful when you don't run formal post-Ticket surveys.

AI fields are read-only — agents can't edit them. They're available in analytics and exports like any other field.

### Set fields with workflows

You can use workflows to set field values automatically based on triggers — for example:

* When a Ticket comes in via Shopee, set **Channel Type** = "Marketplace".
* When the Ticket message contains "refund", set **Enquiry Type** = "Refund request".
* When a Ticket is reassigned to the Returns team, set **Priority** = "High".

To set up these rules, go to **Settings** → **Workflows**. See Workflows for full details.

### Required fields and closing Tickets

If a field is marked **Required** in **Settings** → **Ticket Fields**, agents can't close a Ticket without filling it in. They'll see a prompt with the missing fields when they click **Close**.

Use Required sparingly — every required field is a small tax on your agents. The fields most worth requiring are usually **Resolution** and **Enquiry Type**, since they're the ones that drive analytics.


# Understanding contacts

Contacts are the customers behind your conversations. Every person who messages you — on any channel — has a single Contact record in Zaapi, with their details, custom fields, notes, and full Ticket history in one place.

#### Where contacts fit

Zaapi's data model has three levels:

* **Contact** — the customer
* **Conversation** — the message thread on a single channel
* **Ticket** — the unit of work, with its own ID, owner, status, and resolution

```
Contact
 └── Conversation (one per channel — e.g. Facebook Messenger, LINE, Shopee Chat)
      └── Ticket
      └── Ticket ...
```

The Contact describes **who the customer is** — not what any specific issue is about (that's the Ticket), or which channel it came in on (that's the Conversation).

#### One customer, every channel

The same customer might message you on WhatsApp today and Facebook next week. In Zaapi, both Conversations belong to the same Contact — so when they reach out on a new channel, your team isn't starting from zero. Their details, notes, contact fields, and past Tickets are right there in the sidebar.

Zaapi links Conversations to a Contact automatically when the phone number or email matches, and you can also merge Contacts manually. See **Merging contacts**.

#### What's on a Contact

* **Identity** — first and last name, phone number, and email, plus secondary phone numbers and emails collected across channels.
* **Channels** — every channel this customer has used to reach you.
* **Contact fields** — structured data about the customer, both default fields and custom fields you define (see **Creating contact fields**).
* **Notes** — free-form context for your team.
* **Conversation labels** — the labels applied across this customer's Conversations.
* **Ticket history** — every Ticket this customer has ever opened, across all channels.

#### Why contacts matter

* **Context follows the customer.** No more asking a customer to repeat their order number because they switched from Shopee chat to WhatsApp.
* **Track what your business cares about.** Custom contact fields let you capture anything — customer status, industry, total sales, account owner — and keep it attached to the customer, not buried in a thread.
* **Build segments.** Filter the Contacts page by any field to find, say, every newsletter subscriber in retail with total sales over ฿10,000.
* **Take your data with you.** Export Contacts with all their fields for CRM imports, campaigns, or analysis.


# Managing contacts

The Contacts page is every customer in one table — search it, filter it into segments, export it, and add new Contacts before they've ever messaged you.

Open it from **Contacts** in the left navigation. Each row is one customer; the columns show their details and contact fields.

#### How Contacts are created

Most Contacts are created automatically — when a customer messages you on any connected channel, Zaapi creates a Contact (or links the Conversation to an existing one — see **Merging contacts**). You only need to create a Contact manually when you want a customer in Zaapi before their first message, such as a lead from an event or an offline order.

#### Create a contact

1. On the **Contacts** page, click **Create contact**.
2. Enter a **First Name** (required).
3. Add their last name, phone number (with the right country code), and email if you have them.
4. Click **Create contact**.

> Add a phone number or email if you can. That's what Zaapi uses to automatically link this Contact to their Conversations when they message you later.

#### Search and filter

* **Search** by name or username to find a specific customer.
* **Filter** to build a segment. Click the filter icon, add a condition (e.g. **Status** is one of *VIP*), and click **+** to stack more conditions. Filters work on contact fields too — including your custom ones — so you can slice by anything you track: *Newsletter Subscribed = Yes*, *Industry = Retail*, *Account Owner = you*.
* Click **Reset** to clear everything and see all Contacts again.

#### Export contacts

Click **Export** to download your Contacts with their details and fields. Apply filters first to export just a segment — for example, every customer with *Product Interests = Snowboards* for a campaign list.

Use exports for CRM imports, broadcast audience planning, or analysis in a spreadsheet.

#### View and edit a Contact

Click a Contact to open their full record, or click **View contact** in the Ticket sidebar while you're chatting with them. Any field you edit saves automatically — and because fields live on the Contact, the change is visible on every one of their Conversations, on every channel.


# Merging contacts

The same customer often reaches you on more than one channel — WhatsApp for an order update, Facebook for a complaint, Shopee chat at checkout. Merging brings those Conversations together under a single Contact, so whoever picks up the next message sees the full picture: every channel, every past Ticket, every note and field.

#### Automatic merging

Zaapi merges automatically when there's a match on **phone number or email**. If a customer messages you on a new channel and their phone number or email matches an existing Contact, the new Conversation is linked to that Contact — no action needed from your team.

This is why it pays to capture phone numbers and emails on your Contacts: they're the keys Zaapi uses to recognise a returning customer on a new channel.

#### Merge manually

Not every customer can be matched automatically — a customer's Facebook profile, for instance, may not expose a phone number or email. When you spot a duplicate, merge it yourself:

* **From the Contacts page** — open the **⋯** menu on a Contact and choose **Merge**, then select the duplicate Contact to combine.
* **From the Ticket sidebar** — while viewing a Ticket, merge the current Contact with an existing one, and the Conversation you're looking at moves under that Contact.

> Double-check you've got the right customer before merging. A merge combines two Contacts' histories into one record — separating them again isn't a one-click operation.

#### What happens when Contacts merge

* **One record, all channels.** The merged Contact shows every channel the customer has used.
* **Nothing is thrown away.** Additional phone numbers and emails are kept as secondary phone numbers and secondary emails on the Contact.
* **Ticket history is combined.** In the Ticket sidebar, switch **Ticket History** to **This contact** to see every past Ticket across all of the customer's channels — not just the channel you're currently on.
* **Fields and notes carry over.** Contact fields, notes, and labels are visible from any of the customer's Conversations.

#### Why this matters

Before merging, an agent answering a Facebook message had no way of knowing the customer had already been promised a refund on WhatsApp yesterday. After merging, that context is one click away — fewer repeated questions, fewer contradictory answers, and CSAT that doesn't depend on which channel the customer happened to pick.


# Creating contact fields

Contact fields are the structured data you keep on every customer. Beyond the built-in basics (name, phone, email), custom contact fields let you track whatever your business cares about — customer status, total sales, account owner, signed contracts — and filter, segment, and export on it.

{% hint style="info" %}
Only Owners and Admins can create or edit contact fields.
{% endhint %}

#### Create a contact field

1. Go to **Settings** → **Contact Fields**.
2. Click **Create field**.
3. Enter a **field name** — what your team will see on the Contact.
4. Add a **description** (optional) — a short note to help your team understand how to use this field.
5. Choose a **field type** (see below).
6. Click **Create field**.

The field appears on every Contact — in the Ticket sidebar, on the contact page, and as a column on the Contacts page.

#### Field types

Pick the type that matches the data you're capturing.

* **Text** — free-form text, single-line or multi-line. Use for company names, bios, or anything that doesn't fit a fixed list.
* **Numbers & Currency** — numeric values. Use for total sales, order counts, or anything you want to filter by ranges or sum up.
* **Date & Time** — dates, with or without a time. Use for contract start dates, renewal dates, or last contacted.
* **Dropdown** — single-select from a fixed list of options. Use for customer status, industry, product interests — anywhere you want consistency for filtering and segments.
* **Yes / No** — a binary flag. Use for newsletter subscribed, VIP, or consent flags.
* **File upload** — attach a document to the Contact. Use for signed contracts or verification documents.
* **User** — a teammate from your workspace. Use for account owner or collaborators, so ownership is visible on every Conversation.

{% hint style="info" %}
**Dropdown vs. Text.** If you'll ever filter or segment on a field, use Dropdown. Free text gives you "VIP", "vip", and "V.I.P." — three segments where you wanted one.&#x20;
{% endhint %}

#### Default contact fields

Every Contact comes with built-in fields: **First Name, Last Name, Phone Number, Email**, plus **secondary phone numbers and emails** (collected as Conversations merge — see **Merging contacts**), **shipping details**, and a **note**. Custom fields extend this list.

#### Edit, disable, reorder, or delete a field

In **Settings** → **Contact Fields**:

* **Toggle the status switch off** to disable a field. It's hidden from Contacts, but its data is kept — toggle it back on any time.
* **Drag the handle** to reorder fields. This is the order your team sees in the Ticket sidebar, so put the fields agents use most at the top.
* **Click the ⋯ menu** to edit a field's name, description, or options, or to delete it.

{% hint style="info" %}
Deleting a field also deletes the data captured in that field across every Contact. To preserve historical data, disable the field instead.
{% endhint %}

#### Tips

* **Start with fields you'll act on.** A Status dropdown, Account Owner, and one or two business-specific fields cover most teams. Add more as real needs appear.
* **Match dropdown options to your segments.** If your campaigns target "VIP", "Repeat", and "New", make those the options — the Contacts page filters will then map straight onto your campaign lists.
* **Write descriptions.** A one-line description is the difference between a field your team fills consistently and one that quietly rots.
* **Review every quarter.** Fields nobody fills in are clutter in the sidebar — disable them.


# Populating contact fields

Contact fields can be filled in by your team from the Ticket sidebar or the contact page. Because fields live on the Contact — not the Ticket — a value entered once is visible on every Conversation with that customer, on every channel.

#### Fill in fields from the Ticket sidebar

The fastest place to capture data is mid-conversation:

1. Open a Ticket.
2. In the **Zaapi Contact Information** panel, click any field to set its value.
3. Changes save automatically.

A customer mentions they run a retail business? Set **Industry** = *Retail* without leaving the chat. The next agent to speak to them — on any channel — sees it.

#### Fill in fields from the contact page

For bulk clean-up or updates outside a conversation:

1. Go to **Contacts** and click the customer (or click **View contact** in the Ticket sidebar).
2. Click any field to edit it. Changes save automatically.

#### Data that arrives on its own

Not everything needs typing in:

* **Channel details** — when a customer first messages you, Zaapi creates the Contact with whatever the channel provides, such as their name or phone number.
* **Merging** — when Conversations merge under one Contact, extra phone numbers and emails are kept as secondary phone numbers and emails. See **Merging contacts**.

#### Put the data to work

Filled-in fields are what make the Contacts page useful:

* **Filter** by any field to build a segment — every *Newsletter Subscribed = Yes* customer, every Contact owned by a specific teammate.
* **Export** a filtered segment for campaigns or CRM imports.
* **Give context to every reply.** Fields sit in the sidebar on every Ticket, so agents answer with the customer's status, history, and owner in view.

{% hint style="info" %}
Fields only pay off if they're filled in. Keep the list short, put the most-used fields at the top (see **Creating contact fields**), and make capturing them part of how your team closes a Ticket.
{% endhint %}


# Managing comments in Zaapi

### What are Comments?

Comments in Zaapi are public posts left by people on your Facebook or Instagram posts and ads. Zaapi pulls them into a dedicated **Comments** view alongside your Tickets so your team doesn't have to switch between Zaapi, Facebook, and Instagram to keep up with public engagement.

Unlike Tickets (which are private direct messages), Comments are public — your replies are visible to anyone who can see the post.

### How Facebook post comments appear in Zaapi

When someone comments on a Facebook post or ad belonging to a Page connected to Zaapi, the comment appears in **Comments → Facebook** within seconds.

For each comment, Zaapi shows:

* The commenter's name and profile photo
* The comment text and any attached image
* The post or ad the comment was left on
* The Page that received the comment
* Reply controls — Reply, Like, Hide, Delete

### How Instagram post comments appear in Zaapi

Instagram comments work the same way as Facebook comments. They appear in **Comments → Instagram** as soon as they're posted, with the commenter's handle, the comment text, and the post they were left on.

Instagram requires that your Instagram account be linked to a Facebook Page (via Meta Business). See *How to connect Instagram* in the **Channels & Integrations** section.

### Replying to a comment

1. Open the comment in the Comments view.
2. Type your reply in the reply field below the comment.
3. Click **Reply**.

Your reply posts publicly under the comment on Facebook or Instagram. It also appears in the comment thread inside Zaapi.

### Hiding and deleting comments

To hide a comment (so it's no longer visible to other users on Facebook or Instagram, but isn't deleted):

1. Open the comment.
2. Click the **More** menu (⋯) and choose **Hide**.

To delete a comment permanently:

1. Open the comment.
2. Click the **More** menu (⋯) and choose **Delete**.
3. Confirm.

Deleted comments are removed from the post and cannot be recovered.

### Converting a comment into a Ticket (starting a private DM)

If a comment is best handled in private (for example, the customer mentions an order number or wants a refund), you can move the conversation into a private DM Ticket:

1. Open the comment.
2. Click **Send private reply**.
3. Type your message.
4. Click **Send**.

A new Ticket opens in your Inbox on the corresponding channel (Facebook Messenger for Facebook comments; Instagram DM for Instagram comments). The original comment remains in the Comments view, and the new Ticket links back to it.

### Filtering Comments by post or page

The Comments view supports filtering so you can focus on a specific post or Page:

1. Click **Filter** at the top of the Comments list.
2. Filter by **Channel** (Facebook, Instagram), **Page**, **Post**, or **Date**.
3. Apply.

### Comment Automations (auto-reply rules)

You can set up automatic replies to incoming comments — useful when a post or ad gets high comment volume and you want to respond quickly with a standard message.

1. Go to **Automations → Basic Automations**.
2. Choose **Auto reply to Facebook/Instagram comments**.
3. Pick the channel (Facebook or Instagram), the Page, and (optionally) a specific post.
4. Choose a trigger — for example, all comments, or comments containing certain keywords.
5. Write the auto-reply message.
6. (Optional) Choose to also send a private reply (DM) and/or hide the original comment.
7. Save and toggle the rule **On**.

For more advanced comment automations — branching logic, AI handoff, multi-step flows — use the Flow Builder (see the **Automations** section).


# Managing reviews in Zaapi

### What are Reviews?

Reviews in Zaapi are product reviews left by buyers on your Shopee and Lazada listings. Zaapi pulls them into a dedicated **Reviews** view so you can read, reply, and follow up on every review without leaving Zaapi.

Reviews are separate from Tickets and Comments — they are public, attached to a product (not a customer Conversation), and are subject to platform-specific reply rules and time windows.

### Viewing Shopee Reviews

Go to **Reviews → Shopee** to see every review across every connected Shopee shop. Each review shows:

* Star rating (1–5)
* Review text and any photos or videos the buyer attached
* Product name and image
* Buyer name (or anonymised handle, depending on Shopee settings)
* Date the review was posted
* Reply field

#### Filtering by rating, product, date

Click **Filter** at the top of the Reviews list to narrow by:

* **Rating** — 1 to 5 stars
* **Product** — one or more products from your shop
* **Shop** — if you have multiple Shopee shops connected
* **Date** — when the review was posted
* **Reply status** — replied or not yet replied

#### Replying to a Shopee Review

1. Open the review.
2. Type your reply in the reply field below the review.
3. Click **Reply**.

Your reply is posted publicly under the review on Shopee.

Note: Shopee restricts how many times you can reply to a single review and how long after posting you can reply — see *Why can't I reply to some reviews?* below.

#### Marking a Review as Follow-up

If a review needs further action — for example, contacting the customer to resolve an issue — flag it as Follow-up:

1. Open the review.
2. Click the **Follow-up** flag icon.

Filter the Reviews list by Follow-up to come back to flagged reviews later.

### Viewing Lazada Reviews

Go to **Reviews → Lazada** to see every review across every connected Lazada shop. The interface is the same as Shopee Reviews, with the same fields and filters.

#### Filtering by rating, product, date

Click **Filter** to narrow by rating, product, shop, date, or reply status. See *Filtering Shopee Reviews* above — controls are identical.

#### Replying to a Lazada Review

1. Open the review.
2. Type your reply in the reply field.
3. Click **Reply**.

Your reply posts publicly on Lazada. Lazada has its own reply window and policies — see *Why can't I reply to some reviews?* below.

#### Marking a Review as Follow-up

Click the **Follow-up** flag icon at the top of the review. Filter the Reviews list by Follow-up to revisit it later.

### Automating review replies with the Flow Builder

You can use the Flow Builder to auto-reply to reviews based on rating, sentiment, keywords, or product. Useful patterns:

* **Thank-you reply for 5-star reviews** — fire on Marketplace Review Added trigger when rating = 5; send a thank-you reply.
* **Escalation for 1–2 star reviews** — fire when rating ≤ 2; reply with an apology, mark as Follow-up, assign to a senior agent.
* **Sentiment-based** — use the AI Review Sentiment condition to branch on positive, negative, or neutral reviews.

To create one:

1. Go to **Automations → Flow Builder**.
2. Click **Create flow**.
3. Choose the trigger **Marketplace Review Added** and select the marketplace (Shopee or Lazada).
4. Add a **Review Rating** or **AI Review Sentiment** condition.
5. Add the **Reply to Review** action and write the reply text.
6. (Optional) Add **Mark Review as Follow-up** and **Add Note to Review** actions.
7. Save and turn the flow **On**.

### Review reply best practices

* **Reply quickly.** Buyers and other shoppers see your responsiveness. Reply within 24–48 hours where possible.
* **Personalise.** Reference the product or the buyer's specific feedback rather than a generic "Thank you for your review."
* **Acknowledge negative reviews.** Apologise where appropriate, offer a path to resolution (e.g. ask them to message you privately), and avoid being defensive.
* **Don't ask for review changes in public.** If you want a review updated, ask the buyer to contact you privately.
* **Use automation for high volume.** Let the Flow Builder handle 5-star thank-yous so your team can focus on negative or detailed reviews.

### Why can't I reply to some reviews? (platform limitations)

Both Shopee and Lazada restrict review replies in specific ways. Common reasons a review can't be replied to from Zaapi:

* **Already replied on the native platform.** If you (or someone else) already replied to the review directly on Shopee or Lazada, that reply won't appear in Zaapi, and any attempt to reply from Zaapi will fail. Both platforms allow only one reply per review.
* **Buyer deleted the review.** If the buyer removed their review, replies are no longer possible.
* **Shop disconnected.** If your Shopee or Lazada shop is disconnected from Zaapi, replies will fail. Reconnect the shop in **Settings → Integrations**.
* **Platform-side moderation.** Occasionally a review is being moderated by the platform and is temporarily not actionable.

A few important notes about Reviews in Zaapi:

* **Editing or deleting a reply is not supported** in Zaapi. This isn't a Zaapi limitation — Shopee and Lazada don't allow it on their native platforms either, so once a reply is posted it's permanent.
* **Only the last 7 days of reviews are imported** when you first connect a shop. From that point onwards, all new reviews appear in Zaapi as soon as they're posted.
* **Replies posted natively don't sync into Zaapi.** If a review was already replied to on Shopee or Lazada before being imported, the reply text won't show in Zaapi.


# Teams

### Overview

Teams are a great way to organise your admins into groups. You can then use these teams to assignment automations, and to add/remove agents from these teams without having to update the automations manually.

<figure><img src="/files/zNU1scUd0Ol81M6JjSx4" alt=""><figcaption></figcaption></figure>

***

### How to create a team

1. Navigate to the "Team Management" area on the Zaapi web platform
2. Click the "Teams" tab
3. Click "Create a new team"
4. Add the team members to the team
5. Click save


# User Roles

### Overview

When you add a new team member to Zaapi, you can define their specific role in order to determine what permissions they have within the product. There are 3 roles; Owner, Admin & Chat Agent.

| Owner                                                                                                                                                          | Admin                                                                                        | Chat Agent                                                                                                                                           |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| The owner of the account is the user who initially created it. This is the highest level of permissions with all actions available including account deletion. | The admin role has very similar permissions to the owner, but they cannot delete the account | This is the lowest level of permissions reserved for chat agents only. Chat agents cannot access the team management settings or delete the account. |

The owner of the account can transfer the ownership to another user with the admin role, but the account can only have one owner at any particular moment in time.


# Broadcast on LINE

### Overview

You can use Zaapi to create broadcast campaigns to engage with your LINE friends & view the performance data. There are 3 main benefits of using Zaapi to send your broadcasts:

1. You can use labels that you have created in Zaapi to target customers
2. You can see the specific broadcast that a customer received and replied to directly in the chat history

<figure><img src="/files/Or3jcSF5R0sb9vTf8BV6" alt=""><figcaption></figcaption></figure>

***

### How to create a broadcast

1. Click on the "Broadcast" icon in the sidebar
2. Click "LINE" from the menu
3. Click "Create new broadcast"
4. Select which LINE OA you want to trigger the broadcast from
5. Choose whether or not you want to schedule the broadcast or send it immediately
6. Choose whether or not you want to send to all line friends, or if you want to target specific friends
   1. If you want to target specific friends, you can do so via different options
      1. Labels created and applied in Zaapi
      2. Last interaction date (i.e when the customer last sent you a message)
      3. First interaction date (i.e when the customer first sent you a message)
7. Add your broadcast message; you can send text messages with emojis, images/videos or rich messages
8. Give your campaign a name (this will not appear to customers, but will be displayed in the broadcast list so that you can keep track of the campaign - most people use a campaign title & date here)
9. Send a test broadcast by clicking "Test broadcast" and searching for your own LINE profile from the list of users (please note, you must have already had a conversation with your own profile in Zaapi for it to appear in this list)
10. Click send!

***

### Broadcast limitations

* Broadcasts will be charged at the regular rate in LINE OA beyond the free message limit
* If you are on the basic LINE OA plan and you reach your LINE OA message limit, the broadcast will not be sent


# Broadcast on WhatsApp

### Overview

You can use Zaapi to create broadcast campaigns to engage customers via WhatsApp mobile number & view the performance data. There are 2 main benefits of using Zaapi to send your broadcasts:

1. You can use labels that you have created in Zaapi, or upload a .csv file with mobile numbers to target customers
2. You can see the specific broadcast that a customer received and replied to directly in the chat history

{% hint style="warning" %}
Please note, you must have a payment card on file within Meta Business Suite for broadcasts to be sent, and these messages will be charged at the standard rate defined by Meta
{% endhint %}

***

### How to create a broadcast

1. Click on the "Broadcast" icon in the sidebar
2. Click "WhatsApp" from the menu
3. Click "Create new broadcast"
4. Select which WhatsApp account you want to trigger the broadcast from
5. Choose whether or not you want to schedule the broadcast or send it immediately
6. Choose whether or not you want to send to all WhatsApp mobile numbers who have messaged you, or if you want to target specific friends, or send to a list of numbers via .csv upolad
   1. If you want to target specific friends, you can do so via different options
      1. Labels created and applied in Zaapi
      2. Last interaction date (i.e when the customer last sent you a message)
      3. Converted & conversion value of the customer (for chats closed within Zaapi)
      4. Country code of their phone number
   2. If you want to send to a list of mobile numbers, you can import using the template provided
      1. Please ensure you use Phone Number as the first column and that the phone numbers use the correct country code (i.e +44) as part of the number, not starting with "0"
      2. Other columns can be included and then used as template variables
7. Select a template to use for your broadcast message
8. Give your campaign a name (this will not appear to customers, but will be displayed in the broadcast list so that you can keep track of the campaign - most people use a campaign title & date here)
9. Send a test broadcast by clicking "Test broadcast" and searching for your own WhatsApp number from the list of users
10. Click send

***

### Broadcast limitations

* Broadcasts will be charged at the regular rate in Meta Business Suite


# Training AI

### Overview

Zaapi's AI Agent is designed to be your frontline support, handling customer inquiries efficiently and accurately. To unlock its full potential, it's crucial to train it with the right information and instructions.

Training is built on three core components that work together:

1. **Knowledge Source**: The brain of your AI. This is where it gets its general information about your business, products, and policies.
2. **Scenario Handling**: The playbook for your AI. These are specific, step-by-step instructions for handling common situations.
3. **Personality**: The voice of your AI. This defines the tone, style, and specific rules for how the AI communicates.

Let's explore each component in detail.

***

### 1. Knowledge Source: Giving Your AI Its Information

The Knowledge Source is the foundation of your AI's understanding. It contains all the key information—like FAQs, policies, and details about your business, products, or services—that the AI will use to answer customer questions.

How to Add a Knowledge Source:

1. Navigate to AI Agent > Train from the side menu.
2. Select the Knowledge source tab and click + Add knowledge source.
3. You can add information in three ways:
   * Upload File: Upload a document containing your information. We support `.txt`, `.csv`, `.docx`, and `.xlsx` formats. You can download our templates to get started.
   * Add Website: Scrape information directly from a website page, like your help center or FAQ page.
   * Write it yourself: Manually type or paste the information directly into the editor.

**Connecting Knowledge to Your Brands**

Since you might manage multiple stores, it's vital to ensure the AI uses the correct information for each one. When creating a knowledge source, you must select which integrations (e.g., Facebook Page, Instagram account, LINE Official Account) it applies to.

This prevents your AI from sharing information about one brand with customers of another.

* Example: Your "Lego Store Return Policy" knowledge source should only be applied to your Lego Store's Facebook and LINE accounts, not your Coca-Cola Store's accounts.

***

### 2. Scenario Handling: Teaching Your AI What to Do

Scenario Handling allows you to train your AI on how to manage common, predictable customer situations with a clear set of steps. This ensures consistency and accuracy for frequent requests.

How to Add a Scenario:

1. Go to the Scenario handling tab and click + Add scenario.
2. You can start from pre-built templates for common cases like "Check order status" or "Return or refund," or you can create one from scratch.

When building a scenario, you will define:

* When this scenario should trigger: Describe the customer's intent (e.g., "If a customer asks about delivery status"). The AI will use this to identify the right time to use the scenario.
* Where should this scenario run: Select the specific integrations (your stores) where this scenario will be active.
* How should AI respond: Choose one of two actions:
  * Follow instructions: Provide a step-by-step guide for the AI to follow.
  * Escalate to a human agent immediately: Pass the conversation directly to a member of your team.
* Example: You can create a "Return Request" scenario. When a customer writes "I want a refund," the AI will follow your instructions, such as asking for the order number and checking the purchase date, before deciding whether to escalate the chat to a human agent.

***

### 3. Personality: Defining Your AI's Voice and Style

The Personality defines the tone and character of your AI, ensuring it aligns with your brand's voice. You can create different personalities for each of your brands.

How to Add a Personality:

1. Go to the Personality tab and click + Add personality.
2. Assign the personality to the relevant integrations.
3. Configure the following settings:
   * Style your AI agent: Describe the overall personality and tone. For example, "You're a calm and witty tech expert who explains things like a helpful friend."
   * Custom guidelines for response generation: Set specific rules for how the AI replies. For instance: "Always respond in English," "Use emojis sparingly," or "Keep answers short and digestible."
   * Signature Settings: Add a signature at the end of every AI reply to let customers know they are talking to an AI, such as "Sent by AI Agent."

* Example: For a toy store, you might create a "Fun & Friendly" personality that uses emojis. For a corporate B2B service, you could create a "Formal & Professional" personality that avoids slang and provides detailed, structured answers.

By effectively combining Knowledge Sources, Scenario Handling, and Personality, you can build a powerful AI Agent that not only resolves customer issues but also represents your brand perfectly.

***

### **AI Training Limitations**

* **PDF files** cannot be uploaded.
* **Marketplace websites** (Shopee, Lazada, TikTok Shop) cannot be scraped as a knowledge source.
* AI **does not use images** in responses.

Regularly refining training content ensures the AI delivers accurate and effective customer support.


# Best Practices: Knowledge Sources

### Overview

Creating a knowledge source for your AI Agent is like building a library for a brilliant, but very literal, researcher. The better organized the library, the faster and more accurately the researcher can find the right information. A well-structured document is the single most important factor for ensuring your AI provides accurate, relevant, and helpful answers to your customers.

This guide will walk you through the best practices for structuring your knowledge source documents.

#### **How the AI Reads: Understanding "Chunking"**

Before diving into the rules, it's helpful to understand *how* the AI processes your document. The AI doesn't read your document from top to bottom like a human. Instead, it breaks the content down into smaller, manageable pieces of information called **"chunks."**

The primary tool the AI uses to create these chunks is your **headings**. Each heading and the content that follows it becomes a distinct chunk of knowledge.

**Why this matters:** When a customer asks a question, the AI searches its collection of chunks to find the one that best matches the query. If your chunks are messy, unfocused, or poorly defined, the AI will struggle to find the right answer. A clear structure with logical headings is the key to creating effective chunks.

### **Golden Rule: One Topic Per Section**

The most important principle is to keep each section of your document focused on a single, specific topic. Avoid combining multiple ideas under one heading, as this confuses the AI.

* **Bad 👎:** A single "Policies" section that includes information on returns, shipping, and privacy.
* **Good 👍:** Separate sections for "Return Policy," "Shipping Information," and "Privacy Policy."

### **Best Practices for Structuring Your Document**

#### **1. Use Proper Headings (Not Just Bold Text)**

Headings (like H1, H2, H3) are structural elements that tell the AI how your content is organized. Simply making text **bold** or `larger` is a stylistic choice and does not provide the same structural information. The AI relies on formal headings to create its chunks.

**Example:**

**Bad Structure 👎**

> **Our Return Policy** We accept returns within 30 days...
>
> **Shipping Details** We ship all orders via Kerry Express...

**Good Structure 👍**

> ## Returns & Shipping
>
> ### How to Make a Return
>
> We accept returns within 30 days of purchase. To initiate a return, please contact our support team with your order number...
>
> ### Shipping Times and Costs
>
> We ship all orders via Kerry Express. Standard shipping takes 2-3 business days and costs ฿40...

#### **2. Write Clear, Action-Oriented Titles**

Your headings should be descriptive and accurately reflect the content within that section. Use simple, direct language that a customer would use.

* **Start with a verb:** "How to Track Your Order" is better than "Order Tracking."
* **Be specific:** "Return Policy for Sale Items" is better than "Other Policies."
* **Front-load keywords:** Put the most important words at the beginning.

**Example:**

| **Bad Heading 👎**        | **Good Heading 👍**                       |
| ------------------------- | ----------------------------------------- |
| Information               | About Our Company                         |
| Contact                   | How to Contact Customer Support           |
| Product Specs             | T-Shirt Material and Sizing Guide         |
| What to do if it's broken | How to Request a Refund for Damaged Goods |

#### **3. Organize from General to Specific**

Structure your document hierarchically. Start with broad, general topics at the top (using H1 or H2 headings) and then break them down into more specific sub-topics (using H3, H4, etc.). This helps the AI understand the relationship between different pieces of information.

**Example:**

**Bad Structure (Flat and Unorganized) 👎**

> ### Shipping
>
> ### Returns
>
> ### T-Shirt Sizing
>
> ### Payment Methods
>
> ### Damaged Items

**Good Structure (Hierarchical) 👍**

> ## Ordering Information
>
> ### Payment Methods
>
> #### Credit Card Payments
>
> #### Bank Transfers
>
> ## Shipping & Delivery
>
> ### Shipping Costs and Times
>
> ### How to Track Your Order
>
> ## Returns & Refunds
>
> ### Our Return Policy
>
> ### How to Request a Refund for Damaged Items
>
> ## Product Details
>
> ### T-Shirt Sizing Guide
>
> ### T-Shirt Material Information

#### **4. How to Format an FAQ Section**

A common mistake is to format a list of Frequently Asked Questions as plain text. While it looks readable to humans, it can confuse the AI's chunking process, causing it to mix up questions and answers.

The correct way to format an FAQ is to make **each question a heading** (e.g., H3) and **each answer a standard paragraph** below it. This creates a distinct, reliable chunk for every question.

**Bad FAQ Structure 👎**

> Q: How long does shipping take? A: Shipping usually takes 2-3 business days.
>
> Q: What is your return policy? A: We accept returns within 30 days of purchase.

This format can lead to the AI incorrectly matching the answer "Shipping usually takes 2-3 business days" to the question about the return policy.

**Good FAQ Structure 👍**

> ### Frequently Asked Questions
>
> #### How long does shipping take?
>
> Shipping usually takes 2-3 business days.
>
> #### What is your return policy?
>
> We accept returns within 30 days of purchase.

#### **5. Write Simply and Avoid Jargon**

The AI is smart, but it's not a mind reader. Use clear, concise language and avoid internal company jargon, slang, or overly complex sentences. Write the way your customers speak.

* **Bad 👎:** "Per our Q3 fulfillment mandate, all SKUs must be processed via the logistics portal prior to dispatch."
* **Good 👍:** "To get your order, you must first confirm your items on our website. After that, we will ship it to you."

#### **6. Don't Assume Prior Knowledge**

Treat every section as if it's the only thing the AI will read. The AI retrieves individual chunks, not the entire document, so it won't have the context from the previous section.

* **Bad 👎:** In a "Refunds" section, writing "As mentioned above, you'll need your order number." The AI might only retrieve the refund chunk and won't know what "as mentioned above" refers to.
* **Good 👍:** In a "Refunds" section, writing "To request a refund, you will need the order number from your original purchase confirmation."

By following these guidelines, you can create a robust and reliable knowledge source that empowers your AI Agent to perform at its best.


# Testing AI

### Overview

After you've trained your AI Agent with knowledge sources, scenarios, and a unique personality, the next crucial step is to test it. The AI testing page provides a safe sandbox environment where you can interact with your AI just like a customer would, without affecting any of your real conversations.

This allows you to check the AI's accuracy, tone, and behavior before deploying it to handle live customer chats.

### **How to Test Your AI Agent**

1. **Navigate to the Test Page:** From the side menu, go to **AI Agent** > **Test**.
2. **Select the Account to Test:** Your AI's knowledge and skills are tied to specific integrations (e.g., your Facebook Page, Instagram account, etc.). Use the dropdown menu at the top of the chat window to select which specific account you want to test. This ensures you are testing the correct set of knowledge sources, scenarios, and personality.
3. **Start Chatting:** Type a message in the input box at the bottom, just as a customer would. You can ask questions, describe problems, or use phrases that you expect would trigger a specific scenario.
4. **Review the AI's Response:** The AI will generate a response based on its training. You can see the AI thinking and then delivering its answer in the chat window.

#### **Understanding the AI's Thought Process**

Sometimes, the AI might give an unexpected answer. To understand *why* it responded in a certain way, you can use the **"Show thinking"** feature.

After the AI responds, a small button will appear below its message. Clicking this reveals the AI's reasoning. It will show you exactly which **Knowledge Source** or **Scenario** it used to generate the answer.

This is an incredibly powerful tool for troubleshooting:

* **Incorrect Information?** The "Show thinking" feature might reveal that the AI is pulling from an outdated or incorrect section of your knowledge source.
* **Wrong Scenario Triggered?** You might find that a customer's phrase is triggering a different scenario than you intended.
* **No Answer?** If the AI can't answer, this feature will help you see that no relevant knowledge or scenario was found, indicating a gap in your training.

#### **What to Check For When Testing**

Use this checklist to guide your testing process:

* **✅ Accuracy of Information:** Ask specific questions from your knowledge source. Does the AI provide the correct details about your products, policies, or business hours?
* **✅ Scenario Handling:** Use trigger phrases you set up in your scenarios. Does the AI follow the instructions correctly? Does it escalate to a human agent when it's supposed to?
* **✅ Personality and Tone:** Does the AI's language match the personality you defined? Is it formal, friendly, witty, or exactly as you specified in the custom guidelines?
* **✅ Handling of Vague Questions:** What happens when you ask an unclear question? Does the AI ask for clarification, or does it make a wrong guess?
* **✅ Escalation:** Test the boundaries. Try to confuse the AI or ask questions you know it can't answer to ensure it escalates the chat when necessary.

#### **Refining Your Training**

Testing is an iterative process. It's normal to discover areas for improvement. Based on your test results, go back to the **Train** tab to:

* **Update** your knowledge source with clearer headings or more detailed information.
* **Refine** your scenario triggers and instructions.
* **Tweak** your AI's personality and custom rules.

By regularly testing and refining, you can build a highly effective AI Agent that serves your customers accurately and aligns perfectly with your brand.


# Deploy AI

### Overview

Once you have trained and tested your AI Agent, the final step is to deploy it so it can begin handling live customer conversations. Deployment is managed through the **Flow Builder**, giving you complete control over when and how your AI interacts with customers.

You can activate your AI in two ways: by using a pre-built template or by integrating it into a custom flow.

#### **Method 1: Use the "AI Handles All New Chats" Template (Recommended)**

This is the quickest and easiest way to get your AI up and running.

1. Navigate to **Automations > Flow Builder**.
2. Click **+ New flow**.
3. From the template gallery, select **AI Agent** from the side menu and choose the **"AI handles all new chats"** template.
4. This will create a pre-configured flow designed to let the AI be the first point of contact for all new conversations.
5. Configure the flow and click **Publish** to activate it.

#### **Method 2: Add the "Let AI Handle" Node to a Custom Flow**

If you have existing flows or want more granular control, you can add the AI node to any flow.

1. In the Flow Builder, either open an existing flow or create a new one from scratch.
2. Add a new action node and select **"Let AI handle"**.
3. Connect this node to your desired trigger, such as **"Message received"**.

### **Key Configuration Settings**

Whether you use a template or build a custom flow, there are two crucial settings to configure.

#### **1. Set the Flow Trigger Correctly**

For the AI to function as a frontline agent, you must configure the trigger settings correctly.

1. Click on the **"Message received"** trigger node at the start of your flow.
2. In the settings panel on the right, under **Flow trigger settings**, select **"Trigger once every new open chat"**.

**Why is this important?** This setting ensures the AI gets **one chance** to handle the conversation per session. If the AI cannot resolve the issue and escalates the chat to a human agent, it will not try to jump back into the conversation, even if the customer sends more messages. The AI will only become active again after the chat has been closed and the customer starts a new one.

#### **2. Configure the "Let AI Handle" Node Outcomes**

The "Let AI handle" node has two main exit paths that you must configure to control what happens next.

* **When AI agent cannot handle effectively:** This is the escalation path. If the AI determines it cannot answer the question or is instructed to escalate by a Scenario, the flow will proceed down this path. You should connect this to an action like **"Assign to agent"** or **"Add a label"**.
* **If no customer response after...:** This path is triggered if the AI has sent a message but the customer doesn't reply within a specified time (e.g., 1 hour). This is useful for automatically closing inactive conversations. You should connect this to an action like **"Close chat"**.

#### **Flexibility and Control**

The power of using Flow Builder is its flexibility. You can use the "Let AI handle" node as a fallback mechanism. For example, your flow could first check if a customer's message contains specific keywords (like "order status"). If it does, it follows a standard flow. If no keywords are matched, you can then direct the flow to the "Let AI handle" node to manage the query.

> **Final Check:** Before publishing your AI flow, make sure you don't have any other active flows with conflicting triggers. For example, having two active flows that both trigger on every new message can cause unpredictable behavior. Ensure your AI flow is the primary one for handling initial customer contact.


# Analyse AI

Overview

Once your AI Agent is active and handling customer conversations, it's essential to track its performance to understand its effectiveness and identify areas for improvement. The **Analyse** page provides a comprehensive dashboard with key metrics, insights, and logs to give you a clear picture of your AI's impact.

To access the dashboard, navigate to **AI Agent > Analyse** from the side menu.

#### **Dashboard Overview**

At the top of the page, you can filter the data you want to see:

* **Integrations:** Select the specific channels (e.g., Facebook, Instagram, LINE) you want to analyze. You can choose one, several, or all of them.
* **Date Range:** Choose the time period for which you want to view the performance data, such as the last 7 days, last 30 days, or a custom range.

### **Understanding the Metrics**

The dashboard is divided into several sections, each providing valuable insights.

#### **AI Agent Summary**

This section gives you a high-level overview of your AI's activity and success rate.

* **AI Messages Sent:** The total number of messages your AI Agent has sent to customers within the selected period.
* **AI Full Resolution Rate:** This is a key success metric. It shows the percentage of conversations that were handled **entirely by the AI** from start to finish, without any human agent interaction. This is measured from chat open to chat closure.
* **AI Partial Resolution Rate:** The percentage of conversations where the AI handled at least one message but a human agent also participated in the chat. This is measured from chat open to chat closure.

{% hint style="warning" %}
**Important Note:** The metrics and logs on this dashboard only include data from conversations that have been marked as **closed**. Open or ongoing chats are not reflected in these analytics.
{% endhint %}

#### **ROI Summary**

This section helps you quantify the business value your AI Agent is delivering.

* **Agent Time Saved:** An estimate of the time your team has saved by letting the AI handle messages. This is calculated based on the number of messages the AI sends, assuming each message saves one minute of a human agent's time.
* **Money Saved:** An estimate of the costs saved based on the agent time saved. To make this calculation accurate, you need to click **"Update average monthly salary"** and input your team's average salary. The formula divides this salary by 160 working hours to get an hourly rate, then multiplies it by the time saved.

#### **AI Agent Insights**

These charts provide a more detailed breakdown of your AI's activity.

* **AI Messages Sent by Channels:** A bar chart showing the distribution of AI messages across your different integrations. This helps you see which channels your AI is most active on.
* **Case Handling Breakdown:** This chart visualizes the proportion of cases that were fully resolved by the AI, partially resolved, or had no AI involvement.

### **AI Chats Logs: Dive into the Details**

Below the main dashboard, you'll find the **AI Chats Logs**. This is a powerful tool for qualitative analysis. It provides a complete list of every conversation the AI participated in during the selected period.

From here, you can:

* **Filter conversations:** You can filter the log to see only "AI Full" resolutions, "AI Partial" resolutions, or all chats.
* **Review full transcripts:** Click on any conversation to see the full chat history between the customer and the AI.
* **Analyse the AI's thinking:** Just like on the Test page, you can click **"Show thinking"** below any AI message to understand exactly why it gave that response.

Reviewing these logs is the best way to find opportunities to improve your AI. If you see the AI making a mistake, you can analyze its thought process and go back to the **Train** page to update the relevant knowledge source or scenario.


# Troubleshooting AI Issues

### Overview

While the Zaapi AI Agent is powerful, its performance depends entirely on the quality of its training. If you find your AI is making mistakes, giving strange answers, or not behaving as expected, it's almost always an issue that can be fixed by refining its training data.

This guide will help you diagnose and resolve the most common issues.

### **Your First Step: Use "Show Thinking" to Diagnose**

Before you can fix a problem, you need to understand why it's happening. The most important tool for this is the **"Show thinking"** feature on the **Test** page.

When your AI gives a response, click the "Show thinking" button beneath it. This will reveal the AI's step-by-step reasoning:

* It will show you if it tried to find a **Scenario** and whether it was successful.
* It will show you which specific piece of a **Knowledge Source** it used to formulate the answer.
* It will detail the **guidelines** it followed to generate the final response.

By reviewing this, you can immediately see *why* the AI gave a particular answer, which is the key to fixing it.

### **Common Problems and How to Fix Them**

#### **1. The AI Gives Incorrect or Outdated Information**

* **The Problem:** A customer asks about your return policy, and the AI gives information that is two years old.
* **Likely Cause:** The AI is pulling from a poorly structured or outdated knowledge source. The information might be buried in a large, unfocused paragraph, making it hard for the AI to isolate the correct detail.
* **How to Fix It:**
  1. Use "Show thinking" to identify the exact knowledge source being used.
  2. Review that document for clarity, structure, and accuracy. Ensure it uses clear headings and follows our recommended guidelines.
  3. For a complete guide on structuring your documents, please see: [**Best Practices for AI Knowledge Sources**](https://help.zaapi.com/ai/training-ai/best-practices-knowledge-sources).

#### **2. The AI Doesn't Follow a Scenario Correctly**

* **The Problem:** You have a scenario for "Refund Requests," but when a customer says "I want my money back," the AI gives a general answer from the knowledge base instead of following your step-by-step instructions.
* **Likely Cause:** The trigger description in your scenario is not broad enough to catch the customer's phrasing.
* **How to Fix It:**
  1. Go to **AI Agent > Train > Scenario handling** and edit the relevant scenario.
  2. In the "When this scenario should trigger" field, add more variations of how a customer might ask. For example, instead of just "Customer asks for a refund," try "Customer is unhappy and wants a refund, asks for their money back, or says their order was not as expected." The more descriptive you are, the better the AI can match the intent.

#### **3. Website Knowledge Source is Inaccurate**

* **The Problem:** You've added your website's FAQ page as a knowledge source, but the AI is pulling in irrelevant text from menus or sidebars, or the formatting is messy.
* **Likely Cause:** Some website structures are too complex for the AI to scrape cleanly. It can get confused by navigation bars, footers, and pop-ups.
* **How to Fix It:**
  * Instead of scraping the website directly, it's much more reliable to **create a knowledge source manually**. Copy the text from your website and paste it into a Word document (`.docx`) or directly into the "Write it yourself" editor. This allows you to structure it perfectly with clear headings, ensuring the AI only learns the information you want it to.

#### **A Note on AI vs. Flow Builder Chatbots**

It's important to remember that the AI Agent is not a traditional, rule-based chatbot.

* **Flow Builder:** Use this when you need the chatbot to follow a very specific, rigid script every single time. It's predictable and perfect for linear processes like lead qualification.
* **AI Agent:** Use this when you want the chatbot to have natural, dynamic conversations. The goal is not to force it to say a specific script, but to **give it high-quality information** and let it use its intelligence to formulate the best answer.

If you find yourself trying to make the AI follow an exact word-for-word script, you may be better off using the **Flow Builder** for that specific task.

#### **What Are "Hallucinations" and What to Do About Them?**

Occasionally, an AI can "hallucinate"—meaning it provides an answer that seems to come from nowhere and is not based on its training data. This is a rare but known characteristic of Large Language Models.

* **If it's a one-off event:** It might just be an unpredictable glitch. The best course of action is to monitor the situation. It may not happen again.
* **If the issue is consistent:** If the AI repeatedly hallucinates or provides the same incorrect information, it points to a deeper issue in its training.

If you experience a persistent issue that you cannot resolve by refining your training data, please contact our support team for assistance.


# Basic Automations


# Assign chats to agents

### Overview

You can set up agent auto assignment in Zaapi to manage the workload of your entire agent team equally. When a new customer chat is received, the automation will assign the chat to the team member based on the round robin logic.

You can use this automation to direct customer messages from specific channels to the team members responsible, or you can simply set one automation for your entire team so that they only need to focus on their own inbox.

The auto assignment logic will take into account admin working hours, so a new chat will never be assigned to an admin while they are not currently working.

**What is round robin logic?**

Round robin logic is a way of equally distributing chats across your team. It is a sequential assignment logic; for example: A, B, C, A, B, C, A, B, C and so on.

***

### How to set up agent auto assignment

1. Navigate to the "Automations" area on the web app
2. Click to create new automation
3. Select agent auto assignment
4. Select the channels you want to assign new chats from (most people select all channels here)
5. Select individual team members that you want to be included in the auto assignment, or select a team. Learn more about how to create a team [here](/team-management/teams).
6. Give your automation a name
7. Click create automation to trigger it on

***

### Agent auto assignment limitations

* You can only set up one automation for each channel
* Assignment will not occur if a new customer message is received outside of the working hours of all agents in the automation


# Greeting message

### Overview

You can use Zaapi automations to set up a greeting message every time a customer sends you a message to any of your channels.

***

### How to set up a greeting message

1. Navigate to the "Automations" area on the web app
2. Click to create new automation
3. Select greeting message
4. Select the channels you want to trigger the greeting message from (most people select all channels here)
5. Select the time period you want to trigger this automation
   1. This is the time that must pass before that greeting message is triggered again for the same customer (i.e once after every 8 hour period of inactivity). You can set this period&#x20;
6. Give your automation a name
7. Click create automation to trigger it on


# Out of hours message

### Overview

Zaapi’s Out of Hours Automation ensures customers are informed when they reach out outside of business hours. This helps manage expectations by letting them know when they can expect a response.

{% hint style="info" %}
If a **greeting message** is enabled, the out-of-hours message will take priority when triggered during non-working hours.
{% endhint %}

***

### How to set an out of hours message

1. **Go to Basic Automations** – Navigate to the **Basic Automations** tab in the side navigation.
2. **Click "Create New Automation"** – This will open the automation setup.
3. **Select "Out of Hours Message"** – This automation will trigger when a customer messages outside of working hours.
4. **Choose Messaging Channels** – Select the platforms where this automation should apply.
5. **Review and Adjust Business Hours** – Check the current business hours and modify them in settings if needed.
6. **Create the Automated Response** – Choose what to send to the customer:
   * **Text Message** – Add a message, and optionally include variables like `{customer_name}` or `{integration_name}` for personalization.
   * **Images or Videos** – Attach relevant media if needed.
7. **Name Your Automation** – Give it a recognizable name for easy management.
8. **Click "Create Automation"** – The out-of-hours message will now be triggered whenever a customer sends a message outside of business hours.


# Closing chat message

### Overview

The **Closing Chat Message** automation allows you to send a message to customers automatically when a chat is closed. This can be used to inform them that the conversation has ended, encourage them to leave a review, or set expectations for future interactions.

**Example Messages:**

* *"Agent has left the chat."*
* *"Thank you for contacting us! Please leave a review at this link: \[Insert Link]."*

{% hint style="info" %}
This automation will only trigger **once every six hours** per conversation. If a chat is closed and reopened within this time, the message will not be sent again.
{% endhint %}

***

### How to set a chat closure message

1. **Go to Basic Automations** – Navigate to the **Basic Automations** tab in the side navigation.
2. **Click "Create New Automation"** – This will open the automation setup page.
3. **Select "Closing Chat Message"** – This option triggers a message when a chat is closed.
4. **Choose Messaging Channels** – Select the channels where this automation should apply.
5. **Enter the Closing Message** – Choose what to send to the customer:
   * **Text Message** – Add a message, and optionally include variables like `{customer_name}` or `{integration_name}` for personalization.
   * **Images or Videos** – Attach relevant media if needed.
6. **Name Your Automation** – Give it a recognizable name for easy management.
7. **Click "Create Automation"** – The closing message will now be sent whenever a chat is closed (but no more than once every six hours per conversation).


# Auto reply to Facebook/IG comments

### Overview

Keeping up with social media engagement can be daunting, especially as your business expands. That’s where Zaapi’s Facebook comments automation steps in — an innovative tool designed to make connecting with your audience on Facebook easier and more efficient.

This feature allows businesses to automatically reply to post comments, enabling fast, tailored interactions that drive engagement and build lasting customer connections. In this guide, we’ll cover how Zaapi’s Facebook comments automation works, its practical benefits, and strategies to integrate it into your engagement plan.

**Public Reply to Comments**

<figure><img src="/files/6n3DCdpGxxKyObBsZlVL" alt="" width="348"><figcaption></figcaption></figure>

* Respond to FAQs publicly to provide value to a broader audience.
* Address feedback openly to build trust and showcase accountability.
* Encourage further interaction by asking follow-up questions or sparking conversations.

**Send Message to Inbox**

<figure><img src="/files/q0e0ztxramZGaS0fdZ51" alt="" width="375"><figcaption></figcaption></figure>

* Resolve sensitive or complex issues privately for a more personalized approach.
* Share tailored offers or recommendations through direct messages to drive sales.
* Strengthen customer relationships with one-on-one communication for a personal touch.

***

### How to set up Facebook comment automation

1. Navigate to the "Automations" area on the web app
2. Click to create new automation
3. Select "Reply to Facebook comment"
4. Select the Facebook page you want to trigger the comment automation from
5. Select which posts you want to trigger the automation on
   1. All Posts
      1. This will trigger the automation on every existing and new post that you create on Facebook (including ad posts). This can be useful if you want to just set a simple welcome automation to make sure every comment gets pulled into chat.
   2. Specific Posts
      1. This will trigger the automation on only specific posts that you choose. This can be useful if you want to set up an automation for a campaign post (i.e comment CF1) to purchase.
      2. There are two types of posts to choose from here; Regular Posts and Ad Posts.
         1. Regular posts are posts that you create from within Facebook and that appear on your page timeline
         2. Ad posts are posts generated when creating a new ad. These posts will not appear in the list immediately, so you will need to manually search for it using the ad id. To view how to find the ad post id, read the next section below. ![](/files/LDNCQskxet5H7hLw9kDu)
6. Select whether you want this to trigger on every single comment, or only comments of a specific keyword such as "interested"
7. Choose which action you wish to take
   1. Like comments
      1. This creates a public like on the post for everyone to see
   2. Public reply
      1. This creates a public reply on the post for everyone to see
   3. Send message to inbox (i.e provate reply)
      1. This creates a new customer chat in the Zaapi inbox and sends the customer who made the comment a private message in dm
      2. Note that due to Facebook rules, you will not be able to continue the conversation in Zaapi until the customer has sent another message
8. Give your automation a name
9. Click create automation to trigger it on

{% hint style="warning" %}
We recommend that you use a message variable (i.e "Customer Name" or "Integration Name") in your message to avoid being flagged as spam.\
\
For example: "Hello **{customer name}**, thank you for contacting Zaapi!"\
\
![](/files/miGurjLPv18oUkBecmUW)
{% endhint %}

#### **Where to find the ID of an ad post?**

You can find the ad post ID in Business Suite. Go to **Meta Business Suite** → **All tools** → **Page posts** → **Ad posts**, as shown in the screenshot below:

<figure><img src="/files/pc6ssYCiCQcrCtdBLkWN" alt=""><figcaption></figcaption></figure>

***

### Facebook comment automation limitations

* You will not be able to continue the conversation in Zaapi from a private reply comment automation until the customer has sent another message


# Assign labels to chats

### Overview

The **Assign Labels to Chats** automation allows you to automatically tag customer conversations based on specific keywords. This helps categorize chats for better organization and enables you to track trends in the **Analytics Dashboard**.

For example, you can automatically assign a **"Refund"** label when a customer mentions *"Refund"*, *"Money back"*, or similar phrases. This makes it easier to monitor and analyze refund-related inquiries over time.

***

### How to set up label automation

1. **Go to Basic Automations** – Navigate to the **Basic Automations** tab in the side navigation.
2. **Click "Create New Automation"** – This will open the automation setup.
3. **Select "Assign Labels to Chats"** – This option enables automatic labeling based on keywords.
4. **Choose Messaging Channels** – Select the channels where this automation should apply.
5. **Enter Trigger Keywords** – Add words or phrases that will trigger the label assignment.
   * You can also use **AI variables** such as `"Address"` or `"Mobile Number"`, ensuring the label is applied when relevant information is detected.
6. **Assign a Label** – Choose which label should be applied when a keyword is detected.
7. **Name Your Automation** – Give it a recognizable name for easy reference.
8. **Click "Create Automation"** – The system will now automatically assign labels when a customer’s message contains a specified keyword.


# Flow Builder


# Set up guide

### Overview

Flow Builder is Zaapi’s powerful no-code chatbot builder, designed to automate customer interactions across multiple channels, including Facebook, Instagram, LINE OA, Shopee, Lazada, and TikTok Shop. With an intuitive drag-and-drop interface, you can create fully customizable chatbot flows using triggers, conditions, and actions—without any coding required.

With Flow Builder, you can:

* Automate customer support with greeting bots, smart routing, and lead qualification.
* Engage new customers with personalized welcome flows.
* Integrate AI agents for smarter responses.
* Reduce admin workload, speed up response times, and enhance customer support efficiency.

<figure><img src="/files/6pFRfadxUVC5gxCmrdXE" alt=""><figcaption></figcaption></figure>

***

### How to create a flow

1. **Navigate to the Automations area** and click **“Flow Builder”**.
2. Click **“Create new flow”**.
3. Choose a **pre-defined template** or select **“Create from scratch”**.
4. Click **“Add trigger”** and select **“Message received”**.
   * Choose the channels you want this flow to trigger for.
   * Define how often the flow should trigger:
   * ![](/files/QEg1TZuTFg9JhhZM1jPO)
     * **Trigger once per contact**: Runs only once per unique customer.
     * **Trigger once per new open chat**: Runs for each new conversation but won’t repeat until a new chat starts.
     * **Trigger every time**: Runs every time the customer completes the flow.
5. Build your flow using [condition and action nodes](https://app.gitbook.com/o/9re06ynCCWO7P4DjWM2l/s/LCz35HGsZaSVs8jhhqnk/~/changes/63/advanced-flows/nodes-triggers-conditions-and-actions).
6. **Test your flow** before going live.
7. Click **“Publish”**.

{% hint style="warning" %}
It is recommended to turn off any basic automations that might conflict with flows before publishing a new flow. This is to avoid multiple automations sending twice.\
\
For example: if you have a "Greeting message" set up as a basic automation, and a trigger of "New incoming message" set up as a flow, both of these will trigger at the same time and the customer will receive two messages.
{% endhint %}

***

### How to navigate the flows canvas

#### **Connecting Nodes**

* Drag a connector from one node (small circle) to another node to link them.
* If a node isn’t connected, the flow will end at that point.

<figure><img src="/files/1fayxZFA4Q97Uqchtax2" alt="" width="563"><figcaption></figcaption></figure>

#### **Tidy Up**

* Click **“Tidy up”** in the navigation bar to organize your flow visually in a single click.

#### **Renaming Flows and Nodes**

* Click on the flow title at the top to rename it.
* Rename nodes by clicking them and selecting the **pencil icon**. Unique names help team members understand the flow better.

#### **Auto-Save and Version History**

* Flows **auto-save** at regular intervals.
* View **version history** by clicking the icon in the top-left corner. You can restore previous versions if needed.

<figure><img src="/files/4hu7iFiAEiMb31Wk1qgf" alt="" width="563"><figcaption></figcaption></figure>

***

### How to test a flow before publishing

1. Add a **Message Content** node after the **Message Received** trigger.
2. Set a unique keyword (e.g., "Flow test").
3. Enable the flow and message the test keyword in the selected channel.
4. Observe the flow’s behavior and make adjustments if needed.
5. Once satisfied, remove the test Message Content node.

<figure><img src="/files/kcZpCPPNFwltzUKkpge8" alt=""><figcaption></figcaption></figure>

***

### How to pause a flow

1. Open the flow in **“Flow Builder”**.
2. Click the **“Pause”** icon at the top.
3. Choose whether to:
   * **Pause all flows immediately**, or
   * **Allow in-progress flows to complete** before pausing.

For minimal disruption to the customer experience, it’s recommended to let existing flows finish before pausing.


# Trigger nodes

### Messaging triggers

Messaging triggers fire on customer or agent activity in your messaging channels.

* **Message Received** — fires when a customer sends a message to a connected channel. The most common starting point for flows.
* **LINE Friend Added** — fires when a user adds your LINE Official Account as a friend. Use for welcome flows.
* **Data Collection Form Filled** — fires when a customer completes a data collection form (typically inside a flow).
* **Label Added** — fires when a specific Label is applied to a Ticket. Useful for chaining flows.
* **Label Removed** — fires when a specific Label is removed from a Ticket.
* **Incoming Webhook** — fires when an external system sends an HTTP request to Zaapi. The flow receives the payload as variables. Use this to trigger flows from your own systems (orders, inventory, fulfilment, etc.).

### Shopify triggers (requires Shopify integration)

Shopify triggers fire on events in your connected Shopify store.

* **Shopify Order Created** — a new order is placed.
* **Shopify Order Fulfilled** — an order is marked as fulfilled or shipped.
* **Shopify Order Cancelled** — an order is cancelled.
* **Shopify Checkout Abandoned** — a customer leaves checkout without purchasing.
* **Shopify New Customer** — a new customer record is created in Shopify.

Each trigger receives the full Shopify event payload, available as variables in the flow.

### Marketplace triggers (Shopee and Lazada)

Marketplace triggers fire on events from connected Shopee and Lazada shops.

* **Marketplace Review Added** — a buyer submits a product review.
* **Marketplace Order Created** — a new marketplace order is placed.
* **Marketplace Order Shipped** — an order is marked as shipped.
* **Marketplace Order Delivered** — an order is confirmed delivered.
* **Marketplace Order Delayed** — fires after a configurable delay if the order hasn't shipped.
* **Marketplace Payment Reminder** — fires after a configurable delay if payment is pending.
* **Marketplace Order Cancelled** — a marketplace order is cancelled.
* **Marketplace Return / Refund Requested** — a buyer submits a return or refund request.
* **Marketplace Order Delivery Failed** — a delivery attempt fails.
* **Marketplace Order Confirm Receipt** — a buyer confirms they received the order.
* **Marketplace Product Interest** — a buyer enquires about a specific product (with configurable delay before the flow fires).

For each trigger you can scope to specific shops, products, or order tags.


# Handle Incoming Webhooks

### Overview

The **Handle Incoming Webhook** trigger allows you to start a Flow when data is sent to Zaapi from an external system — such as your eCommerce platform, CRM, or any third-party tool.

When an external system sends a **POST request** to your Flow’s webhook URL, Zaapi will receive that data, make it available as variables within the Flow, and automatically continue with the next steps (such as sending a message or searching for a contact).

This is especially useful for automating workflows that depend on external events — for example, when an order is placed, a payment is confirmed, or a support ticket is updated.

***

### How it Works

1. **Webhook URL**\
   Every Flow using this trigger gets its own unique webhook URL.\
   Example:

   ```
   https://webhooks.zaapi.co/triggers/g8Yvbr0paWV9Fi5lWbEQ
   ```

   You can send a **POST request** to this URL from your external system.
2. **Example Data**\
   You can define an example JSON payload to configure which variables Zaapi should extract.\
   Example:

   ```json
   {
     "customer_name": "Jane Doe",
     "phone_number": "+66912345678",
     "order_number": "ORD12345",
     "total_amount": 2500
   }
   ```

   Once saved, these fields will appear as **variables** that can be referenced in later steps of your Flow.
3. **Variables Mapping**\
   After defining your example JSON, Zaapi automatically detects the variable names (keys) and makes them available for use in your workflow.\
   For example, you can use:
   * `{{customer_name}}`
   * `{{order_number}}`
   * `{{total_amount}}`
4. **Search Contact Node**\
   Zaapi also provides a **Search Contact** node that allows you to find an existing customer in your account based on incoming webhook data (like email or phone number).\
   This lets you connect external events (e.g., new order) to the right customer in Zaapi automatically.

***

### Example Use Case: Send WhatsApp Message After an Order is Placed

Here’s an example of how you might use this trigger:

1. **In your eCommerce platform**, set up a webhook to send order data to Zaapi whenever a new order is placed.\
   The payload might look like this:

   ```json
   {
     "customer_name": "Jane Doe",
     "phone_number": "+66912345678",
     "order_number": "ORD12345",
     "total_amount": 2500
   }
   ```
2. **In Zaapi Flow Builder:**
   * Add the **Webhook received** trigger.
   * Paste in the example JSON payload above to configure the variables.
   * Add a **Search Contact** node to find the customer in Zaapi by their `phone_number`.
   * Then add a **Send WhatsApp Message** node and choose a WhatsApp template message.\
     You can personalize the message using variables like:

     ```
     Hi {{customer_name}}, thanks for your order! 🎉  
     Your order number is {{order_number}} with a total of {{total_amount}} THB.  
     We'll update you once it’s shipped!
     ```
3. **Test and Publish the Flow.**\
   Each time your store sends an order webhook, Zaapi will automatically trigger this Flow and send the personalized message to the correct customer.

***

### Tips

* Always make sure your webhook URL is kept **private** — anyone with the link can send data to your Flow.
* You can **test** your webhook by sending a POST request from tools like Postman or cURL.
* Keep your example data simple and representative of real payloads, so variable mapping works correctly.
* You can chain additional steps after receiving the webhook, such as updating a CRM record, tagging a contact, or notifying a support agent.


# Condition nodes

Conditions split a flow into two or more paths based on data. Each condition node has a **True** and **False** output (or multiple outputs for multi-value conditions).

### Message-based conditions

* **Message Content** — checks whether the most recent message contains, equals, or does not contain specific text. Supports text, image, video, audio, sticker, product, and order message types.
* **Message Language** — detects the language of the incoming message (useful for routing to language-specific teams).

### Customer conditions

* **New vs Returning Customer** — branches based on whether the customer has contacted your store before.
* **Customer Waiting Time** — checks how long the customer has been waiting for a reply (greater than / less than a duration).
* **Last Interaction** — checks how long it's been since the customer last sent a message.

### Ticket conditions

* **Conversation Assignee** — checks which agent the Ticket is currently assigned to.
* **Conversation Status** — checks whether the Ticket is Open or Closed.
* **Label** — checks whether a specific Label is or isn't applied to the Ticket. Up to 20 Labels per condition.

### Time conditions

* **Business Hours** — branches based on whether the current time is within or outside the business hours configured in Settings.

### Shopify conditions (requires Shopify integration)

* **Shopify Order Amount** — checks order value (greater than, less than, between, equals).
* **Shopify Order Products** — checks whether the order contains specific products.
* **Shopify Order Tags** — checks whether the order has specific Shopify tags.

### Marketplace conditions (Shopee and Lazada)

* **Review Rating** — star rating of a review (1–5 stars).
* **Review Text** — whether review text contains specific keywords.
* **AI Review Sentiment** — AI classifies the review as positive, negative, or neutral.
* **AI Review Intent Detection** — AI detects a custom intent within a review (you define the intent).
* **Marketplace Products** — whether an order or enquiry relates to specific products.
* **Marketplace Order Cancellation Reason** — the reason code for a cancelled order.
* **Marketplace Order Return / Refund Reason** — the reason code for a return or refund.


# Action nodes

### Messaging actions

* **Send Message** — send a text, image, video, file, carousel, or button template message on the channel the flow was triggered on.
* **Send Button Template** — send an interactive message with clickable buttons. Each button branches to a different flow path. Supports button expiry (the buttons stop working after a set time).
* **Send WhatsApp Template** — send a pre-approved WhatsApp message template (required for messaging customers outside the 24-hour window).
* **Send Email** — send an email from a connected Gmail or Outlook account. Configure To, CC, BCC, subject, and body.
* **Send Marketplace Private Reply** — send a private DM to a buyer on Shopee or Lazada (in response to a public review or enquiry).
* **Send Marketplace Order Card** — send a structured order summary card to a buyer on Shopee or Lazada.
* **Send Marketplace Voucher** — send a voucher code to a buyer on Shopee or Lazada.

### Ticket management actions

* **Assign Ticket** — assign to a specific agent or team. Includes "out-of-hours fallback" and "assign to last handler" options.
* **Unassign Ticket** — remove the current assignment.
* **Add Label** — apply a Label to the Ticket.
* **Remove Label** — remove a Label from the Ticket.
* **Close Ticket** — resolve and close the Ticket.
* **Mark Ticket as Follow-up** — flag the Ticket for follow-up.
* **Add Note to Ticket** — add an internal note (visible to agents only). Supports `@mentions`.
* **Mark as Spam** — move the Ticket to the Spam Inbox.

### Review actions

* **Reply to Review** — post a public reply to a Shopee or Lazada review.
* **Mark Review as Follow-up** — flag the review for follow-up.
* **Add Note to Review** — add an internal note to a review.

### AI actions

* **Let AI Respond** — hand the conversation to the AI Agent. Configure:
  * **Escalation path** — the next flow step if the AI escalates to a human.
  * **Timeout path** — the next flow step if the customer doesn't respond within a set time.
  * **Knowledge Source scope** — which sources the AI should use for this flow (optional).

### Flow control actions

* **Jump To** — loop back to a previous step in the flow. Includes a configurable maximum number of jumps to prevent infinite loops.
* **Send HTTP Request** — send data to an external system via webhook. Supports GET, POST, PUT, PATCH, DELETE, custom headers, and a JSON or form body.


# Send HTTP Request

The **Send HTTP Request** action lets you connect Zaapi with any external app or service that supports webhooks or APIs.\
It’s a powerful way to automate actions outside Zaapi — like sending data to Slack, Google Sheets, or your internal systems — whenever something happens in a Flow.

With this action, Zaapi sends a **request** to a specified **URL**, passing along any information you choose (like a customer’s name, message content, or chat link).\
The receiving app can then use that data to trigger its own workflow.

For example, you can use the Send HTTP Request action to:

* Notify your team in Slack when a complaint message is received
* Send new leads to a CRM or Google Sheet
* Trigger a workflow in another tool when a customer completes a survey

### Supported methods

You can choose from the following HTTP methods depending on what your integration needs:

* **POST** – Send data to another service (most common)
* **GET** – Retrieve data from another service
* **PUT / PATCH** – Update data in another system
* **DELETE** – Remove data from another system

### Body and headers

You can include data in your request by adding key-value pairs in the **Body** (as JSON or Table format).\
If the receiving app requires specific headers — like `Content-Type: application/json` or authentication tokens — you can add those under **Add headers**.

***

### Example Use Cases - Alert Complaints in Slack

If your support team uses Slack to stay on top of urgent issues, you can automatically send a Slack notification whenever a customer sends a complaint message in Zaapi. This helps your team act quickly and follow up directly from the chat.

In this guide, we’ll show you how to:

* Detect complaint-related messages in Zaapi
* Send a Slack notification to alert your team
* Include a link so the team can jump straight into the chat

***

#### Step 1: Create a Slack Workflow with a Webhook

First, you’ll need to create a **Slack workflow** that can receive information from Zaapi through a webhook.

1. Go to your Slack workspace and open the **Workflow Builder**.
2. Click **Create workflow** → name it something like “Complaint Alert.”
3. Choose **From a webhook** as the trigger.
4. Slack will generate a **Webhook URL** — copy it (you will paste this into Zaapi later).
   1. ![](/files/bdNqYv5si1urZsYjYmew)
5. Under **Data variables**, set up two variables:
   * `name` (customer name)
   * `url` (Zaapi conversation link)

Your example HTTP body should look like this:

```json
{
  "name": "Example Name",
  "url": "https://app.zaapi.com/conversations/example"
}
```

***

#### Step 2: Add a Message to Post in Slack

Next, define what Slack should do when it receives the webhook.

1. Add a step to **Send a message to a channel**.
2. Choose the Slack channel (e.g. `#support-alerts`).
3. Write your alert message. Ensure you use the same variables that you set in the previous step (i.e {name} and {url}). For example:

   ```
   {name} has sent a complaint. Please take action.
   ```
4. Add a button so your team can go straight to the conversation:
   * Label: **Go to conversation**
   * Behaviour: **Open link**
   * URL: `{url}`

This will create a message in Slack like:

> **John Doe** has sent a complaint. Please take action.\
> \[Go to conversation]

<figure><img src="/files/YG3v2iF6zGqyMEbKlgle" alt=""><figcaption></figcaption></figure>

***

#### Step 3: Build the Flow in Zaapi

Now let’s create the automation inside Zaapi.

1. Go to **Flow Builder** in your Zaapi workspace.
2. Create a new Flow and name it something like “Complaint Alert to Slack.”
3. Add the following blocks:

   **① Message received**\
   Trigger: When a customer sends you a new message.\
   Channels: Select the chat channels you want to monitor.

   **② Message content**\
   Add a condition to check if the message contains complaint-related keywords.\
   Example: `Contains one of: complaint, refund, issue, not happy, angry`.

   **③ Send HTTP request**\
   Method: **POST**\
   URL: Paste your Slack webhook URL.\
   Headers: You can leave this empty\
   Body (Table):\
   \- name: select the <mark style="background-color:yellow;">{Full Name}</mark> variable\
   \- url: select the <mark style="background-color:yellow;">{Conversation URL}</mark> variable

<figure><img src="/files/4EMvZtZerBQbY4DlJVMy" alt=""><figcaption></figcaption></figure>

```json
{
  "name": "{{ Full Name }}",
  "url": "{{ Conversation URL }}"
}
```

That’s it!\
Whenever a message containing one of your complaint keywords is received, Zaapi will automatically send a POST request to Slack — triggering the workflow and sending the alert




---

[Next Page](/llms-full.txt/1)

