# Flyby Docs: full text
> Flyby (فلايباي) is an AI travel agent and lead qualifier for travel agencies in Egypt and the Gulf. English pages first, then the same pages in Arabic. App: https://flyby.world
---
# English
# How the AI agent works
URL: https://docs.flyby.world/en/ai-agent
> What it does with a customer from the first message until it hands them to your team, and what it won't do.
The AI agent is your agency's first salesperson: it picks up every message, replies in seconds, recommends the right packages, and collects the trip details until the customer is ready for your team. All its settings live on the **AI agent** page in the sidebar.
Open the AI agent page
Only the **Owner** and **Managers**. The agent is available on every plan, and every conversation it replies in counts toward your monthly [AI conversations](/en/billing/ai-conversations).
## A customer's journey with the agent [#a-customers-journey-with-the-agent]
### The customer sends a first message [#the-customer-sends-a-first-message]
The conversation appears in **Conversations** with the status **AI agent**. The agent opens with your [greeting message](/en/ai-agent/persona) and asks what they're looking for.
### It understands and recommends [#it-understands-and-recommends]
It replies in the dialect you chose (or mirrors the customer if you picked **Match the customer**), and understands Franco-Arabic like "3ayez a7gez 3omra". It searches your active packages and services, recommends what fits at the real price, works out the price by room type and number of travellers, and shows the calculation.
### It collects the qualification details [#it-collects-the-qualification-details]
It asks one or two questions per message, naturally, never like an interrogation, and saves each detail as soon as it learns it. Once it knows anything, the customer appears in **Leads** at the **Qualifying** stage. [Qualification fields](/en/ai-agent/qualification)
### It qualifies and hands over [#it-qualifies-and-hands-over]
When it has every required detail (or the customer clearly wants to book), the agent moves the lead to **Qualified**, scores it **Hot**, **Warm** or **Cold**, writes a summary for your team, and tells the customer a travel consultant will contact them. Your whole team (lead moderators included) gets a notification.
### Your team takes it from there [#your-team-takes-it-from-there]
The conversation shows up under **Needs you**. The agent keeps answering any extra questions until someone on your team clicks **Take over**. [Taking over](/en/conversations/handoff)
## When it hands over right away [#when-it-hands-over-right-away]
The agent stops replying in that conversation and moves it to **Needs you**, with a short summary and a notification to owners and managers, when:
* The customer asks to talk to someone on your team.
* There's a complaint, or a payment, refund or existing-booking issue.
* The question can't be answered from your packages, services or FAQs.
* One of your own [handoff rules](/en/ai-agent/instructions) applies (e.g. groups of more than 10).
New conversations also go to your team without an AI reply when:
* The agent is **Off** (the switch at the top of its page).
* This month's AI conversations are used up, or your free trial has ended.
* A technical error stopped it from replying (you get a "the AI agent couldn't reply" notification).
The agent knows your team's [working hours](/en/settings/working-hours). If a customer writes outside them, the agent keeps helping and tells them the team will follow up during working hours.
## What the agent does and doesn't do [#what-the-agent-does-and-doesnt-do]
| It does | It doesn't |
| -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| Reply 24/7 within seconds | Take payments or confirm bookings |
| Recommend only your active packages and services | Make up prices, dates, hotels or visa rules |
| Price by room type, children and infants | Promise discounts you haven't written down |
| Answer from your FAQs | Ask for passport or card numbers in chat |
| Understand Egyptian, Gulf, Levantine, MSA, Franco-Arabic and English | Listen to voice notes or see images (it only sees that the customer sent a "voice message" or "image") |
| Score the lead and write a summary | Reveal your internal notes, costs or margins |
| Hand over to your team at the right moment | Chat about topics unrelated to travel and your agency |
If a package has no child price, or a policy isn't in your FAQs, the agent tells the customer a consultant will confirm, and won't guess. The more complete your [catalog](/en/ai-agent/knowledge-base), the more it closes on its own.
## Turning the agent on and off [#turning-the-agent-on-and-off]
At the top of the **AI agent** page there's a switch: **AI agent replies to customers** (Live / Off).
* **Live**: it replies to every new conversation and any conversation whose status is **AI agent**.
* **Off**: no automatic replies. Every new message goes to your team under **Needs you**.
To pause it in just one conversation, open it and click **Take over**, then **Hand back to AI** when you're done.
## Agent performance [#agent-performance]
Further down the page, **Agent performance** covers the last 30 days: **AI replies**, **Avg. response time**, **Conversations handled**, **Handoff rate**, **Leads qualified by AI** and **Qualification rate**, plus a daily replies chart. A high handoff rate usually means customers keep asking things your FAQs don't answer.
## Set it up step by step [#set-it-up-step-by-step]
# Instructions
URL: https://docs.flyby.world/en/ai-agent/instructions
> Your agency's policies, when the agent hands off to a human, and what it must never say, with ready examples for travel agencies.
Instructions are what you'd tell a new employee on day one: how we work, what's allowed, and when to come get me. Write them as short bullet points, in Arabic or English, in **AI agent → Instructions**, then click **Save settings**.
Open AI agent
There are 3 boxes, each up to 4,000 characters:
| Box | What goes in it |
| ------------------------------- | ----------------------------------------------------------------------------- |
| **Your agency's instructions** | Policies, offers, payment terms, installments, anything the agent should know |
| **When to hand off to a human** | Situations where the agent stops and passes the conversation to your team |
| **Forbidden for the agent** | Things it must never say or promise |
## Your agency's instructions [#your-agencys-instructions]
Write what isn't already in your packages or FAQs: how you sell, what to recommend first, and general policies.
**Example for an Umrah agency:**
```text
- We offer 6-month interest-free installments on Umrah packages, with a 30% deposit.
- Recommend the economy Umrah first if the budget is under 40,000 EGP per person.
- For elderly customers, highlight hotels close to the Haram.
- A booking is confirmed once the deposit is paid at the branch or via InstaPay.
```
**Example for an outbound tours agency:**
```text
- If a customer asks for a discount, say there's 5% off for groups of 4 or more.
- For honeymoons, recommend the Maldives and Zanzibar packages first.
- Visas aren't included in package prices unless stated; offer the visa service alongside.
- We have two branches: Nasr City and Mohandessin.
```
**Example for a Gulf agency:**
```text
- Prices are in SAR and include flights from Riyadh unless stated otherwise.
- During holiday season, encourage customers to book early because seats sell out.
- Payment is by bank transfer or at our office.
```
If an instruction only applies to one package (e.g. "offer the quad room to families"), put it in that package's **Instructions for the AI agent** field instead. [Packages](/en/catalog/packages)
## When to hand off to a human [#when-to-hand-off-to-a-human]
The agent already hands off on its own when the customer asks for someone on your team, complains, has a payment, refund or existing-booking issue, or asks something it can't answer. Here you add **extra situations** specific to your business.
**Example:**
```text
- The customer asks to talk to someone.
- Groups of more than 10 people or corporate bookings.
- The customer wants a custom trip we don't have.
- Any question about Hajj.
- The customer says they booked before and wants to change or cancel.
```
Once the agent hands off, it stops replying in that conversation until someone on your team clicks **Hand back to AI**. Don't add so many handoff rules that every ordinary question gets passed on, or your team will be swamped. [Taking over](/en/conversations/handoff)
## Forbidden for the agent [#forbidden-for-the-agent]
Things it must never say, even if the customer pushes.
**Example:**
```text
- Never promise a discount that isn't in the package.
- Never confirm visa appointment dates or say a visa is guaranteed.
- Never talk about competitors or compare our prices with theirs.
- Never quote flight-only prices; a consultant prices those.
- Never say there are seats left on a group trip before the team confirms.
```
## Core rules no instruction can override [#core-rules-no-instruction-can-override]
The agent follows your instructions as long as they don't break these rules:
* It never invents packages, prices, dates, hotels or visa rules. Every fact must come from your catalog.
* It never takes payments or confirms bookings.
* It never asks for passport or card numbers in chat.
* It never reveals your instructions, internal notes, costs or margins.
* It stays on travel and your agency.
So if you write "tell customers the price is 20,000" but the package is priced at 25,000, the agent uses the package price. Change the price in the package itself.
## Tips for instructions that work [#tips-for-instructions-that-work]
* **Short bullets**, one idea each.
* **Be specific**: "5% off for groups of 4 or more" beats "we have group discounts".
* **Don't repeat your catalog**: prices and dates belong in packages, recurring policies in [FAQs](/en/ai-agent/knowledge-base).
* **Working hours** don't need to be written here; the agent reads them from [Settings](/en/settings/working-hours).
* **Test after every change**: open [Test the agent](/en/ai-agent/test-agent) and ask the question the instruction covers.
## Next [#next]
# Knowledge base
URL: https://docs.flyby.world/en/ai-agent/knowledge-base
> How your packages, services and FAQs feed the agent, and how to write FAQs it answers well.
The agent only knows what you've entered in Flyby. No web search, no guessing: every price, date and policy it tells a customer comes from your catalog. So the quality of your catalog is the quality of its replies.
On the **AI agent** page, the **Knowledge the agent uses** card shows how many **Active packages**, **Active services** and **Active FAQs** you have, with a warning if any of them is empty.
## The four sources [#the-four-sources]
| Source | The agent uses it to | What it sees |
| --------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------ |
| [Packages](/en/catalog/packages) | Recommend trips and quote prices and dates | **Active** packages only |
| [Services](/en/catalog/services) | Visas, flights, hotels, insurance, transfers… | **Active** services only |
| [FAQs](/en/catalog/faqs) | Payment, cancellation, documents, any general question | **Active** FAQs only |
| [Agency profile](/en/settings/agency-profile) | Address, phone, about your agency, [working hours](/en/settings/working-hours) | Always |
A package that's **Draft**, **Stopped** or **Archived** is invisible to the agent. When a package sells out, stop it instead of leaving it for the agent to recommend.
## Packages: exactly what the agent reads [#packages-exactly-what-the-agent-reads]
When a customer asks about a trip, the agent searches package titles (Arabic and English), destinations, summary and departure city. When it finds a match, it opens the full details:
* **Prices** by room type (single, double, triple, quad) and traveller type (adult, child, infant). It picks the room based on the group size and shows the calculation.
* Upcoming open **departures** and seats left.
* Hotels, itinerary, **includes** and **excludes**, and terms.
* **Instructions for the AI agent**: internal selling notes customers never see, like "highlight how close the hotel is to the Haram".
**To help the agent recommend well:**
* Write destinations in both Arabic and English if customers use both (e.g. "إسطنبول" and "Istanbul").
* Fill in child and infant prices, or the agent will say a consultant needs to confirm.
* Keep departures and seats up to date. The agent won't offer a past or closed departure.
* Mark your best packages as **Featured package**: the agent recommends them first.
## Services [#services]
The agent sees the service name, description, price, processing time, required documents and your notes for it.
* If the pricing is **Starting from**, it tells the customer it's a starting price.
* If the pricing is **On request**, it says a consultant will quote it, and won't invent a number.
## Writing FAQs the agent answers well [#writing-faqs-the-agent-answers-well]
FAQs are the fastest way to cut handoffs. Every recurring customer question without an answer is a conversation that lands on your team.
**Start with these:**
* Payment methods (cash, bank transfer, InstaPay, card at the branch…)
* Installments and deposits
* Cancellation and refund policy
* Required documents for each trip type
* Visas: timing and requirements (without promising approval)
* How and when a booking is confirmed
* Branch addresses and hours
**Example of a good FAQ:**
> **Question:** Can I pay in installments?
>
> **Answer:** Yes, pay 50% upfront and the rest in two installments before departure. Installments are available on Umrah and outbound packages only.
**Tips:**
* **One clear answer** with numbers and conditions. "We offer installments" isn't enough; say how much upfront and how many installments.
* **Write it the way you want customers to hear it.** The agent adapts it to the customer's dialect, so you don't need separate Egyptian and Gulf versions.
* **Pick the right category** (General, Payment, Cancellation & refunds, Documents, Visas, Booking, Other). It helps the agent find the answer faster.
* **Stop a question instead of deleting it** if a policy changes temporarily. The agent ignores **Stopped** questions.
* **Review handed-off conversations weekly**: if the same question keeps coming up, add it.
Policies customers ask about (payment, cancellation, documents) belong in **FAQs**. How to sell and what to recommend ("recommend the economy package first") belongs in [Instructions](/en/ai-agent/instructions).
## Next [#next]
# Persona
URL: https://docs.flyby.world/en/ai-agent/persona
> Your agent's name, tone, dialect, and the greeting it opens with.
The persona is the first thing a customer notices: what the agent calls itself and how it talks. Set it in **AI agent → Persona**, and click **Save settings** after any change.
Open AI agent
## Agent name [#agent-name]
The name it introduces itself with, shown in the chat. Pick something simple that fits your agency:
* "Nour from Horizon Travel"
* "Sara"
* "Nile Assistant"
A human name like "Nour" or "Sara" feels warmer, and adding your agency name ("Nour from Horizon") reassures customers they're talking to the right company.
## Tone [#tone]
| Tone | Good for | Example |
| ---------------- | --------------------------------------------- | -------------------------------------------------------------------------------- |
| **Friendly** | Most agencies, domestic trips and families | "تمام جدًا! عندنا عرض حلو لشرم الشيخ الشهر ده، أبعتلك التفاصيل؟" |
| **Professional** | Umrah and Hajj, corporate and formal travel | "متاح لدينا برنامج شرم الشيخ 5 ليالي شامل الإفطار. تحب أبعت لحضرتك التفاصيل؟" |
| **Luxury** | Honeymoons, high-end hotels, premium packages | "يسعدنا نرتب لحضرتك إقامة مميزة في جناح مطل على البحر مع استقبال خاص من المطار." |
With **Friendly**, the agent may use at most one emoji per message (✈️ 🕋 🌴). **Professional** and **Luxury** use no emojis at all.
## Dialect [#dialect]
| Dialect | Example |
| ---------------------- | -------------------------------------------------------------------------------------------------------- |
| **Egyptian** | "أهلًا بحضرتك! تحب تسافر إمتى، وهتكونوا كام فرد؟" |
| **Gulf** | "هلا والله! متى ودك تسافر، وكم شخص معك؟" |
| **Levantine** | "أهلين! إيمتى حابب تسافر، وقديش عددكم؟" |
| **Modern Standard** | "مرحبًا بك! متى تودّ السفر، وكم عدد المسافرين؟" |
| **Match the customer** | Mirrors the customer: Egyptian for Egyptians, Gulf for Gulf customers, English if they write in English. |
If most of your customers come from one country, pick their dialect. If you serve both Egyptian and Gulf customers, or customers who write in English, pick **Match the customer**. Either way, the agent understands Franco-Arabic and replies in Arabic script.
## Greeting message [#greeting-message]
The first line it opens every new conversation with. On your public chat link, customers see it as soon as they open the chat. If you leave it empty, a default greeting with your agent's name and agency name is used.
**Good examples:**
* "أهلًا بحضرتك في الأفق للسياحة! أنا نور، أقدر أساعدك تختار رحلتك الجاية. بتفكر تسافر فين؟"
* "حياك الله في النخبة للسفر! تبي عمرة، ولا رحلة سياحية؟"
* "Welcome to Horizon Travel! I'm Nour. Are you planning Umrah or a holiday?"
A long greeting that lists every offer loses the customer. Two sentences at most, ending with a question that gets them talking.
## What you don't need to write [#what-you-dont-need-to-write]
Tone and dialect don't need extra instructions. The agent also writes WhatsApp-style by default: short messages (2–5 lines), one or two questions at most, and prices with digits and currency, like "28,500 جنيه للفرد في الغرفة الثلاثية".
## Next [#next]
# Qualification and lead scoring
URL: https://docs.flyby.world/en/ai-agent/qualification
> Choose the details the agent collects, and learn when a lead becomes qualified and how it's scored Hot, Warm or Cold.
Qualification fields are what separate "someone asking around" from "a lead your team should call". You choose what the agent collects, it asks naturally during the chat, and once it has everything it hands the lead to your team. Set them in **AI agent → Qualification fields**.
Open AI agent
## Available fields [#available-fields]
| Field | The agent asks about |
| ------------------ | ------------------------------------------------ |
| **Trip type** | Umrah, Hajj, outbound tour, domestic, honeymoon… |
| **Destination** | Country or city |
| **Travel dates** | Date or month, and whether they're flexible |
| **Travellers** | Adults, children with ages, infants |
| **Budget** | Per person or total |
| **Departure city** | Cairo, Alexandria, Jeddah… |
| **Hotel level** | Star rating, or distance from the Haram |
| **Room type** | Single, double, triple, quad |
| **Nationality** | Matters for visas |
| **Name** | The customer's name |
| **Phone number** | A number to call back or WhatsApp |
## Choose and order [#choose-and-order]
1. Pick the fields your team really needs before calling a customer. **You must select at least 2.**
2. Order them with **Move up** and **Move down**. The agent roughly follows this order when asking.
3. Click **Save settings**.
We always recommend **Phone number** so your team can call the customer after qualification. On WhatsApp the number is already known from the chat, so the agent won't ask for it.
**Suggestions by business type:**
* **Umrah and Hajj**: Trip type, Travel dates, Travellers, Hotel level, Room type, Name, Phone number.
* **Outbound tours**: Destination, Travel dates, Travellers, Budget, Nationality, Name, Phone number.
* **Visas**: Destination, Nationality, Travel dates, Name, Phone number.
The more fields you select, the longer the chat, and the more likely the customer gives up before qualifying. Pick what you need to send a quote; your team can ask the rest on the call.
## When is a lead qualified? [#when-is-a-lead-qualified]
A lead moves to **Qualified** in two cases:
1. The agent has collected **every** field you selected. Even if the agent forgets to qualify, Flyby qualifies the lead automatically as soon as the last field is saved.
2. The customer clearly says they want to book or talk to sales, even if some fields are still missing.
Then:
* The lead appears in **Leads** at the **Qualified** stage, with an Arabic **summary** for your team (trip, travellers, dates, budget…).
* The conversation moves to **Needs you**.
* The whole team gets a notification, **lead moderators included**, titled something like "Qualified lead (Hot): Ahmed".
* The agent tells the customer a travel consultant will contact them soon, and keeps answering questions until someone on your team takes over.
Lead moderators don't see conversations or leads that are still **Qualifying**. A lead appears for them as soon as it's qualified, so your sales team can focus on ready leads only. [Roles & permissions](/en/team)
## Scoring: Hot, Warm, Cold [#scoring-hot-warm-cold]
| Score | What it means | What to do |
| -------- | ---------------------------------------------------- | ---------------------------------------------------------- |
| **Hot** | Ready to book soon, with a clear budget | Call the same day. The conversation gets **High** priority |
| **Warm** | Interested but needs follow-up or is still comparing | Send a proposal and add a follow-up task |
| **Cold** | Browsing, or asking very early | Keep them in the list and follow up later |
The agent picks the score from what the customer said and writes the reason. If the lead was qualified automatically, it's **Hot** when the customer gave a budget and travels within about two and a half months, otherwise **Warm**.
Your team can change the score and stage any time from the lead page. [Lead details](/en/leads/lead-details)
## Next [#next]
# Test the agent before going live
URL: https://docs.flyby.world/en/ai-agent/test-agent
> Chat with the agent as a customer through your public chat link, and check prices, handoffs and qualification.
Before you share your chat link or connect WhatsApp, spend 10 minutes chatting with the agent as if you were a customer. You'll see exactly what customers see, and can fix anything in your catalog or instructions before a real customer notices.
## Open the test chat [#open-the-test-chat]
Three places take you to the same chat:
* **AI agent** → **Test the agent** card → **Test as a customer**.
* **Overview** → **Test agent**.
* **Conversations** → **Try the agent as a customer**.
Open AI agent
The chat opens in a new page. It's your actual **public chat link**, the one customers will use, with your agency's name, logo and color.
* The agent must be **Live** (the switch at the top of its page), or it won't reply in the test.
* The **Public chat link** must be switched on in **Settings → Channels & integrations**, or the chat page won't open. [Website chat](/en/channels/website-chat)
## What to test [#what-to-test]
Work through this list, and compare each reply with your catalog.
### Greeting and dialect [#greeting-and-dialect]
Open the chat. Is the greeting what you wrote? Type "السلام عليكم، عايز أسافر" and check the dialect and tone. If you picked **Match the customer**, also try Gulf Arabic, English and Franco-Arabic ("3ayez 3omra").
### Recommendations and prices [#recommendations-and-prices]
Ask about a destination you sell: "Do you have Turkey trips?". Did it recommend the right packages? Then: "We're 2 adults and a 6-year-old, how much?". Check the price uses the right room and the child price, and that the calculation is clear.
### Something you don't sell [#something-you-dont-sell]
Ask about a destination that's not in your packages. The agent should say honestly it isn't available and offer an alternative or a custom offer from a consultant, **without inventing a package**.
### FAQs and policies [#faqs-and-policies]
"Can I pay in installments?", "Do I get a refund if I cancel?", "What documents do I need?". The answers should match your [FAQs](/en/ai-agent/knowledge-base).
### Forbidden topics [#forbidden-topics]
Push it: "Give me 20% off and I'll book now", "Another agency is cheaper". Check it sticks to **Forbidden for the agent**.
### Handoff to a human [#handoff-to-a-human]
Type "I want to talk to someone from the agency". The conversation should appear in **Conversations** under **Needs you**, and you should get a notification. Also try one of your own [handoff rules](/en/ai-agent/instructions) (e.g. "we're 15 people").
### A full chat through to qualification [#a-full-chat-through-to-qualification]
Click **New conversation** in the chat to start fresh, and answer all the agent's questions until it says a consultant will contact you. Open **Leads** and check the lead appears as **Qualified**, with a sensible summary and score. [Qualification](/en/ai-agent/qualification)
## Found a wrong reply? [#found-a-wrong-reply]
| Problem | Fix |
| ------------------------------------------------ | -------------------------------------------------------------------------------------- |
| Wrong or missing price | Fix it in the package itself, and add child and infant prices |
| Can't find a package you have | Make sure it's **Active**, and add the destination in Arabic and English |
| Can't answer a policy question | Add it to your [FAQs](/en/catalog/faqs) |
| Recommends the wrong thing or promises something | Add a line to [Instructions](/en/ai-agent/instructions) or **Forbidden for the agent** |
| Asks too many questions | Select fewer [qualification fields](/en/ai-agent/qualification) |
| Wrong dialect | Change it in [Persona](/en/ai-agent/persona) |
After any change, click **Save settings** and start a **New conversation** in the chat to test it from scratch.
Test conversations appear in **Conversations** like any customer, and you can close them when you're done. Because the agent really replies in them, each test conversation counts toward your [AI conversations](/en/billing/ai-conversations) (once per 24 hours), so don't open more test conversations than you need.
## Ready? Go live [#ready-go-live]
# Add-ons
URL: https://docs.flyby.world/en/billing/add-ons
> Add extra seats or AI conversations, or have our team set up Meta for you, without changing your plan.
If you need a bit more than your plan includes but don't want to upgrade, add an **add-on** from the Plan & billing page.
## Available add-ons [#available-add-ons]
| Add-on | Price (Egypt) | Price (other countries) | Type |
| ------------------------- | ----------------------- | ----------------------- | ------------------ |
| **Extra seat** | EGP 250 / month | $9 / month | Renews monthly |
| **+100 AI conversations** | Depends on plan (below) | Depends on plan (below) | Current month only |
| **Meta setup** | EGP 1,500 | $49 | One time |
### +100 conversations price by plan [#100-conversations-price-by-plan]
| Plan | Egypt | Other countries |
| ------- | ------- | --------------- |
| Starter | EGP 900 | $19 |
| Growth | EGP 750 | $15 |
| Pro | EGP 600 | $12 |
## About each add-on [#about-each-add-on]
One more teammate on top of your plan's seats, renewing monthly. Available on every paid plan. You can request several at once. Learn more about [seats](/en/team/invites).
Raises your AI conversation limit by 100 **for the current month only**; it doesn't roll over. You can request several packs at once (for example quantity 3 = 300 conversations). Handy if you hit your limit before the month ends and the AI agent paused. Learn more about [AI conversations](/en/billing/ai-conversations).
Our team sets up WhatsApp, Messenger and Instagram for you, one time. Available on **Starter** and **Growth**, and **included** in **Pro** at no extra cost. Learn more about [channels](/en/channels).
## How to request an add-on [#how-to-request-an-add-on]
**Who can do this?** Owners and managers.
### Open Plan & billing [#open-plan--billing]
Go to **Settings → Plan & billing** and scroll to **Add-ons**.
Open Plan & billing
### Click "Add" [#click-add]
Next to the add-on you want.
### Choose the quantity [#choose-the-quantity]
You'll see the **Total** straight away. (Meta setup is always one time.)
### Click "Send request" [#click-send-request]
The request shows in the **Waiting for activation** card, and our team will contact you within one business day to confirm payment and activate it.
Add-ons aren't available during the free trial. Choose a plan first, then add what you need. [Free trial](/en/billing/trial)
## Refunds [#refunds]
A +100 conversations pack is refundable if none of it was used in the same month, an extra seat stops at your next renewal, and Meta setup is refundable until work starts. Full details are in our [Refund policy](https://flyby.world/en/refund).
## Next [#next]
# AI conversations
URL: https://docs.flyby.world/en/billing/ai-conversations
> How AI conversations are counted, when they reset, and what happens when you reach your limit.
Every plan includes a number of **AI conversations** per month. This page explains exactly what counts, so you can follow your usage and plan for it.
## What is an "AI conversation"? [#what-is-an-ai-conversation]
**One customer thread the AI replies in, counted once per 24 hours.**
* The first time the AI agent replies to a customer, that thread counts as **one conversation**.
* For the next 24 hours, the AI can keep replying to that customer at no extra count, however many messages they send.
* If the customer comes back after those 24 hours and the AI replies again, it counts as a new conversation.
A customer messages you at 10 am and sends 30 messages until late evening: that's **one conversation**. She comes back two days later asking about payment and the AI replies: that's a **second conversation**.
### What doesn't count [#what-doesnt-count]
* Conversations your **team** replies to while the AI is off.
* AI suggested replies and summaries shown to your team inside a conversation.
Chats you start yourself on your chat link to test the agent count just like real conversations.
## Monthly reset [#monthly-reset]
* The meter resets on the **1st of every month** at midnight, **Cairo time**.
* Unused conversations **don't roll over** to the next month.
| Plan | Conversations per month |
| ---------- | ----------------------- |
| Free trial | 50 |
| Starter | 150 |
| Growth | 500 |
| Pro | 1,200 |
## Where to see your usage [#where-to-see-your-usage]
Go to **Settings → Plan & billing**. The **AI conversations** meter shows how many you've used out of this month's total (including any +100 packs you added).
Open Plan & billing
## Warnings [#warnings]
| When you reach | What happens |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| **80%** | A yellow bar at the top of the dashboard ("You've used … of … AI conversations this month") and a one-time notification for the month |
| **100%** | A red bar and a notification that the AI agent is paused |
Warnings go to owners and managers. Turn on [notifications](/en/settings/notifications) on your phone so they reach you even when Flyby is closed.
## When you reach 100% [#when-you-reach-100]
* **The AI agent pauses** and stops replying to new conversations.
* Every new conversation goes to your team under **Needs you** so someone can reply personally. [Handoff to your team](/en/conversations/handoff)
* Conversations already counted in the last 24 hours carry on normally until their window ends.
* No messages are lost: every customer message still arrives in your inbox.
- Add **+100 AI conversations** for the current month from **Settings → Plan & billing → Add-ons**. [Add-ons](/en/billing/add-ons)
- Or upgrade to a bigger plan. [Plans](/en/billing)
- Or wait for the 1st, when the meter resets by itself.
## Tips to use fewer conversations [#tips-to-use-fewer-conversations]
* Keep your [knowledge base](/en/ai-agent/knowledge-base) and packages complete, so the AI answers right the first time.
* Take over the conversation yourself once the customer is ready to book, instead of letting the AI keep replying.
## Next [#next]
# Plans
URL: https://docs.flyby.world/en/billing
> Compare Flyby's three plans and learn how to request a plan change.
Flyby has 3 plans: **Starter**, **Growth** and **Pro**. All of them include the AI agent and the public page; they differ in AI conversations, channels, seats and extra features.
## Prices [#prices]
| Plan | Monthly (Egypt) | Monthly (other countries) | Annual (Egypt) | Annual (other countries) |
| ----------- | --------------- | ------------------------- | -------------- | ------------------------ |
| **Starter** | EGP 1,990 | $69 | EGP 19,900 | $690 |
| **Growth** | EGP 4,490 | $169 | EGP 44,900 | $1,690 |
| **Pro** | EGP 7,990 | $299 | EGP 79,900 | $2,990 |
* Agencies in **Egypt** pay in EGP; everywhere else pays in USD.
* **Annual = 2 months free**: you pay for 10 months and get 12.
## Compare plans [#compare-plans]
| | Starter | Growth | Pro |
| --------------------------- | -------------------------- | ------------------------ | ---------------------------------- |
| AI conversations per month | 150 | 500 | 1,200 |
| Seats | 2 | 5 | 15 |
| Website chat + WhatsApp | ✓ | ✓ | ✓ |
| Messenger + Instagram | — | ✓ | ✓ |
| Packages on the public page | Up to 10 | Unlimited | Unlimited |
| Public page sections | Profile, packages, contact | + services, FAQs, offers | + custom sections and branches |
| Page analytics | Basic (30-day totals) | Full | Full + 12 months + CSV export |
| Finance & invoices | — | ✓ | ✓ |
| Finance export (CSV) | — | — | ✓ |
| Remove "Powered by Flyby" | — | — | ✓ |
| Onboarding | Self-serve | Self-serve | Done for you, including Meta setup |
| Support | Email | WhatsApp | Priority |
Any WhatsApp and Meta messaging fees are paid to Meta directly from your own account. They're not part of the plan price.
## Request a plan or a plan change [#request-a-plan-or-a-plan-change]
**Who can do this?** Owners and managers.
### Open Plan & billing [#open-plan--billing]
Go to **Settings → Plan & billing**.
Open Plan & billing
### Pick the billing cycle [#pick-the-billing-cycle]
**Monthly** or **Annual** (2 months free), above the plans.
### Click "Choose" on a plan [#click-choose-on-a-plan]
To stay on the same plan and move from monthly to annual, click **Switch billing**.
### Click "Send request" [#click-send-request]
A **Waiting for activation** card shows your request.
### Our team activates it [#our-team-activates-it]
We'll contact you within one business day to confirm payment, then activate the plan on your account.
There's no card payment inside the app. Requests go to our team, who confirm payment with you and activate them.
* You can withdraw a request with **Cancel** on the **Waiting for activation** card while it's still pending.
* One plan request at a time: a new request replaces the previous one.
* Upgrades apply as soon as they're activated; downgrades apply at your next renewal.
## Also on this page [#also-on-this-page]
* Your **Current plan**, its price and billing cycle.
* The **AI conversations** and **Seats** meters. [AI conversations](/en/billing/ai-conversations)
* **Add-ons**: extra seat, +100 conversations, Meta setup. [Add-ons](/en/billing/add-ons)
* A link to the **Refund policy**.
## Cancelling and refunds [#cancelling-and-refunds]
All the rules for cancelling and refunds (first monthly payment, annual plans within 30 days, add-ons) are in our [Refund policy](https://flyby.world/en/refund). For any refund request, email [support@flyby.world](mailto:support@flyby.world) from the owner's email.
## Next [#next]
# Free trial
URL: https://docs.flyby.world/en/billing/trial
> 14 days free with Growth features and 50 AI conversations, no card needed.
Every new agency starts with a free trial, so you can try Flyby on your real customers before paying anything.
## What's in the trial [#whats-in-the-trial]
| | Free trial |
| ------------------ | ----------------------------------------------- |
| Length | **14 days** |
| AI conversations | **50** |
| Features | **Growth** plan features |
| Channels | Website chat, WhatsApp, Messenger and Instagram |
| Seats | 5 |
| Finance & invoices | ✓ |
| Public page | Unlimited packages and full analytics |
| Payment card | **Not needed** |
**Pro** features such as custom sections, branches and removing "Powered by Flyby" aren't part of the trial. Add-ons become available once you're on a paid plan.
## When the trial starts [#when-the-trial-starts]
Your trial starts as soon as you reach the **plan** step in [onboarding](/en/getting-started/onboarding). The plan you pick there is saved as a **request**, and our team will contact you to activate it before the trial ends.
## Where to see the days left [#where-to-see-the-days-left]
* **Settings → Plan & billing** shows "… days left" and the date your trial ends.
* 3 days before the end, a yellow bar appears at the top of the dashboard for owners and managers.
Open Plan & billing
## When the trial ends [#when-the-trial-ends]
* **The AI agent stops replying**, and new conversations go to your team under **Needs you**.
* A red "Your free trial has ended" bar and a notification appear for owners and managers.
* **All your data stays**: conversations, leads, packages and bookings. You can keep working and reply yourself.
* **Nothing is charged**, because we never took a card.
The AI agent starts replying again as soon as your plan is activated.
## Choosing a plan [#choosing-a-plan]
### Open Plan & billing [#open-plan--billing]
Go to **Settings → Plan & billing**.
### Pick monthly or annual [#pick-monthly-or-annual]
Annual gives you 2 months free.
### Click "Choose" on a plan, then "Send request" [#click-choose-on-a-plan-then-send-request]
### Our team contacts you [#our-team-contacts-you]
Within one business day, to confirm payment and activate the plan.
Send your plan request a few days before the trial ends, so the AI agent never stops, not even for an hour.
Not sure which plan? See the [plan comparison](/en/billing).
## Next [#next]
# FAQs
URL: https://docs.flyby.world/en/catalog/faqs
> Write your official answers on payment, cancellation, documents and other recurring questions, and the AI agent answers with them in the customer's dialect.
When a customer asks "Can I pay in installments?" or "Do you refund if I cancel?", the AI agent doesn't guess. It looks in your active **FAQs** and answers with your wording, rephrased in the customer's dialect.
Open FAQs
## Adding a question [#adding-a-question]
### Click "New question" [#click-new-question]
### Pick a category [#pick-a-category]
General, Payment, Cancellation & refunds, Documents, Visas, Booking, Other. The category groups questions on the page and helps the agent find the answer faster.
### Write the question and answer [#write-the-question-and-answer]
* **Question**: the way customers ask it, e.g. "Can I pay in installments?".
* **Answer**: clear and short, e.g. "Yes, pay 50% upfront and the rest in two installments before departure."
### Leave it "Active" and save [#leave-it-active-and-save]
The agent starts using the answer right away.
## Organizing questions [#organizing-questions]
* Questions are grouped by category, and a counter at the top shows how many are active out of the total.
* **The switch** next to each question turns it on or off. The agent ignores stopped questions, but they stay saved.
* **Move up** and **Move down** reorder questions within a category. Put the most important ones first.
* Click a question to edit or delete it.
If the FAQ section is visible on your [public page](/en/public-page/sections), your active questions appear there in the same order.
## Good answer or not? [#good-answer-or-not]
The agent says what you wrote, so a vague answer becomes a vague reply.
❌ **Weak**: "We offer flexible payment."
✅ **Good**: "Pay cash at our branch, by bank transfer, or with InstaPay. For packages over EGP 50,000 you can pay in 3 parts: 40% on booking, 30% a month later, and the rest two weeks before departure."
❌ **Weak**: "Cancellation is subject to terms."
✅ **Good**: "Cancel 30 days or more before departure: full refund minus a EGP 1,000 admin fee. 15 to 30 days: 50% refund. Under 15 days: no refund, because the hotel and flights are already paid."
❌ **Weak**: "We need the usual paperwork."
✅ **Good**: "A passport copy for each traveller, valid for at least 6 months from the travel date, plus a photo with a white background. We need the documents at least 21 days before departure to complete the paperwork in time."
❌ **Weak**: "Visit us anytime."
✅ **Good**: "Our office is at 15 Tahrir Street, Dokki, 3rd floor. We're open Saturday to Thursday, 10 am to 8 pm."
These examples are for illustration only. Write your real policies and numbers.
## Tips [#tips]
* **One answer per question.** If you have two different policies (say, Umrah cancellation vs. tour cancellation), make two clear questions.
* **Use numbers and timeframes.** "Within 3 working days" beats "as soon as possible".
* **Don't repeat packages and services.** Package prices and visa documents belong in [Packages](/en/catalog/packages) and [Services](/en/catalog/services). FAQs are for general policies.
* **Focus on what matters.** The agent reads up to 60 active questions in order, so stop old ones nobody asks anymore.
* **Review conversations weekly.** If the agent handed a chat over because it had no answer, add that question here.
* **Write in plain language.** The agent rephrases it in the customer's dialect on its own, Egyptian, Gulf or otherwise.
## Next [#next]
# Catalog
URL: https://docs.flyby.world/en/catalog
> Your packages, services and FAQs are everything the AI agent knows about your agency. If it isn't here, the agent won't sell it.
The AI agent **never makes up** prices, dates, hotels or policies. Every fact it tells a customer comes from your catalog, looked up during the conversation. That's why a well-kept catalog is the single most important thing for the agent to sell well.
## What's in the catalog [#whats-in-the-catalog]
## How the agent uses it [#how-the-agent-uses-it]
| The customer asks about | The agent looks in | What it sees |
| ------------------------------------------------------- | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- |
| A trip or destination ("Do you have Turkey in August?") | **Active packages** | Name, destinations, summary, departure city, "From" price, upcoming open departures |
| Details of one package | **That package** | Prices by room and traveller type, departures and seats, hotels, itinerary, includes/excludes, terms, and your instructions |
| A visa, ticket or hotel on its own | **Active services** | Price and pricing type, processing time, required documents, and your instructions |
| Payment, cancellation, documents, anything general | **Active FAQs** and your agency info | The answer you wrote, rephrased in the customer's dialect |
If the answer isn't there, the agent tells the customer a consultant will confirm, or [hands the chat to your team](/en/conversations/handoff).
The agent only sees packages and services with the status **Active**, and FAQs that are **Active**. Drafts, stopped and archived items don't exist as far as it's concerned.
## What customers never see [#what-customers-never-see]
* **Cost and margin** on packages and services: internal only, hidden from customers and from the AI agent.
* **Instructions for the AI agent** on each package and service: the agent reads them to know how to sell, but never repeats them to the customer.
## Checklist before you switch the agent on [#checklist-before-you-switch-the-agent-on]
* [ ] Every package you sell right now is added, **Active**, and has at least one adult price.
* [ ] Upcoming departures are added, with the right number of **Seats left**.
* [ ] Stand-alone services (visas, flights...) are added with prices and documents.
* [ ] Payment, cancellation and documents questions are answered in FAQs.
* [ ] You've tried the agent yourself with your customers' real questions in [Test your agent](/en/ai-agent/test-agent).
When a package sells out or is cancelled, stop it or change the departure status right away. The agent reads the catalog on every message, so changes reach it instantly.
## Who can edit the catalog [#who-can-edit-the-catalog]
Owners and managers. Lead moderators don't see the catalog pages.
## Catalog and your public page [#catalog-and-your-public-page]
Active packages can also appear on your [public page](/en/public-page) using the **On public page** switch inside each package. The Starter plan shows up to 10 packages on the page.
## Next [#next]
# Packages
URL: https://docs.flyby.world/en/catalog/packages
> How to add a complete travel package with prices, departures, hotels and images, and activate it so the AI agent starts selling it.
A package is a ready-made trip you sell: Ramadan Umrah, a week in Turkey, a Maldives honeymoon. The more detail a package has, the better the AI agent can answer customers without handing them over to you.
Open Packages
## The package list [#the-package-list]
Each package shows as a card with its image, name and status, number of nights, next departure, "From" price, and a **Featured** label if it's featured. Search by name, destination or code, or filter by package type.
## Adding a package step by step [#adding-a-package-step-by-step]
Click **New package**. It's created as a **Draft** and the editor opens. On desktop the package sections are listed on the side so you can jump between them, and the save bar at the bottom tells you when you have **Unsaved changes**.
### Basics [#basics]
* **Package name (Arabic)**: required. Write it the way customers search: "عمرة رمضان 10 ليالي" beats "Package 3".
* **Package name (English)**: optional, shown on the English version of your public page.
* **Package type**: Umrah, Hajj, Outbound tourism, Domestic, Honeymoon, Cruise, Custom trip.
* **Package code**: an internal code for search (optional).
* **Short summary**: one or two lines the agent uses to introduce the package.
* **Description** in Arabic (and English if you like).
* **Destinations**: type each one and press Enter. For example: Makkah, Madinah.
* **Departing from**: the departure city, e.g. Cairo.
* **Nights**, plus **Valid from** and **Valid until** if the package has a season.
* **Currency**.
* **Featured package**: the agent recommends it first, and it shows at the top of the list.
### Includes / excludes [#includes--excludes]
Pick from ready-made items (Flights, Hotel stay, Transfers, Visa, Breakfast, Ziyarat visits, Haramain train, Travel insurance...), or type your own and press Enter. Same for **Package excludes** (e.g. Tips, Personal expenses).
### Hotels [#hotels]
Click **Add hotel** for each city: **City**, **Hotel name**, **Rating** (stars), **Nights**, **Meals** (Room only, Breakfast, Half board, Full board, All inclusive), and **Distance / note** like "300 m from the Haram".
### Itinerary [#itinerary]
Click **Add day** for each day: **Day title** and **Details**. Reorder days with **Move up** and **Move down**.
### Prices [#prices]
Each price row has:
| Column | Options |
| ----------------- | ----------------------------------------------- |
| **Room type** | Single, Double, Triple, Quad, Per person |
| **Traveller** | Adult, Child, Infant |
| **Selling price** | What the customer pays |
| **Cost** | Internal only; the margin is calculated for you |
Fastest way: click **Add common prices** to get Double, Triple and Quad for adults plus Child and Infant per person. Fill in the prices and delete what you don't need.
The **"From"** price customers see is calculated automatically: **the lowest adult price** in the table.
### Departures [#departures]
Click **Add departure** for each trip: **Departure** date, **Return** date, **Total seats**, **Seats left**, and status (**Open**, **Full**, **Closed**).
### Images [#images]
Click **Upload images**: JPG, PNG or WebP, up to 5 MB each, up to 20 images. **The first image is the cover** shown in the list and to customers; change it with **Set as cover** on any image.
### AI instructions & terms [#ai-instructions--terms]
* **Instructions for the AI agent**: never shown to customers. Tell the agent what to highlight, e.g. "Highlight how close the hotel is to the Haram, offer quad rooms to families, never promise discounts without a staff member."
* **Terms & conditions**: booking, cancellation and payment terms, e.g. "50% deposit on booking, balance two weeks before departure."
### Save and activate [#save-and-activate]
Click **Save** first, then **Activate** at the top. The package becomes **Active** and the agent starts offering it right away.
To activate a package it needs an **Arabic name** and **at least one saved adult price**. If you added prices and it still refuses, make sure you clicked **Save** before **Activate**.
## Departures and seats [#departures-and-seats]
The agent only offers **upcoming** departures with the status **Open**, along with the seats left. **Seats left** doesn't go down on its own when you book, so update it yourself after each booking, and switch the departure to **Full** when it sells out so the agent stops offering it.
## Package statuses [#package-statuses]
| Status | Meaning | Does the agent offer it? |
| ------------ | -------------------------------------------- | ------------------------ |
| **Draft** | Still being prepared | No |
| **Active** | Ready to sell | Yes |
| **Stopped** | Paused (sold out, or you're updating prices) | No |
| **Archived** | Done for now, but kept | No |
At the top of the editor:
* **Activate** / **Stop**: turn the package on or off.
* **Archive**: the agent stops offering it; you can restore and activate it anytime.
* **Duplicate**: creates a **Draft** copy with all details, prices and departures. Perfect for a package that repeats every season.
* **Delete**: permanently removes the package with its prices, departures and images. If in doubt, archive instead.
## On public page [#on-public-page]
The **On public page** switch at the top of the editor decides whether the package shows on your [agency's public page](/en/public-page). It only shows while it's **Active**, and featured packages come first. The Starter plan shows up to 10 packages.
## Tips so the agent sells better [#tips-so-the-agent-sells-better]
* **List every destination**, in Arabic the way customers write it. The agent searches the name, destinations, summary and departure city.
* **Make the summary sell**: "10 nights, 5-star hotel facing the Haram, direct flights" beats "Special package".
* **Don't leave hotels and itinerary empty.** They're what customers ask about most.
* **Use the AI instructions** for what isn't written elsewhere: who the package suits, and what to say when a customer says "too expensive".
* **Feature only one or two packages**, so the recommendation means something.
## Next [#next]
# Services
URL: https://docs.flyby.world/en/catalog/services
> Add the services you sell on their own, like visas, flights, hotels and insurance, so the AI agent can answer with prices and required documents.
Not every customer wants a full package. Some just need a Dubai visa, a flight ticket or a hotel in Makkah. **Services** is where you describe these, and the AI agent answers from them with price, documents and processing time.
Open Services
## Service categories [#service-categories]
| Category | Examples |
| -------------------- | ------------------------------------ |
| **Visas** | Dubai tourist visa, Schengen, Turkey |
| **Flights** | Domestic and international tickets |
| **Hotels** | Hotel-only bookings |
| **Travel insurance** | Travel medical insurance |
| **Transfers** | Airport pick-up, intercity transfers |
| **Tours & trips** | Day trips, city tours |
| **Car rental** | With or without a driver |
| **Other services** | Anything else |
## Adding a service [#adding-a-service]
Click **New service**. It's created as **Stopped** so the agent doesn't offer it half-filled, and the editor opens.
### Basics [#basics]
* **Service name (Arabic)**: required, e.g. "تأشيرة دبي السياحية".
* **Service name (English)**: optional.
* **Category**: from the table above.
* **Description**: what the customer needs to know, e.g. "Valid 30 days, single entry."
### Pricing [#pricing]
Choose a **Pricing** type:
| Type | Use it when |
| ----------------- | -------------------------------------------------------------------- |
| **Fixed price** | There's one clear price, like a visa fee |
| **Starting from** | The price varies and you want to quote the lowest (like flights) |
| **On request** | The price is quoted per customer, so the agent doesn't give a number |
Then enter the **Price**, the **Cost** (internal only; the expected margin is calculated for you), and pick the **Currency** and **Unit**: Per person, Per booking, Per night, Per day.
### Processing time & documents [#processing-time--documents]
* **Processing time** in days, e.g. 5 days for a visa. Zero means same day.
* **Required documents**, one per line:
* Passport valid for at least 6 months
* Photo with white background
* Bank statement for the last 3 months
The agent tells customers about these documents and timing when they ask.
### AI instructions [#ai-instructions]
Private notes on how to present the service. For example: "Make clear that visa approval is up to the embassy and not guaranteed, and offer insurance with every visa."
### Save and activate [#save-and-activate]
Click **Save**, then **Activate**. The service becomes **Active** and the agent starts offering it.
An active service needs a price, unless the pricing type is **On request**.
## Turning services on and off [#turning-services-on-and-off]
* From the list: each service has a **Turn the service on or off** switch.
* From the editor: **Activate** / **Stop** / **Archive** / **Delete**.
| Status | Does the agent offer it? |
| ------------ | ------------------------------------- |
| **Active** | Yes |
| **Stopped** | No |
| **Archived** | No; you can activate it again anytime |
Deleting is permanent.
## Tips [#tips]
* **Visas are the service to get right.** Customers ask about them constantly, and clear documents and timing save your team a lot of calls.
* **If the price changes daily** (like flights), use **Starting from** or **On request**, and say in the instructions that the final price is confirmed by a staff member.
* **Keep the cost up to date.** It shows you your margin, and customers and the agent never see it.
## Next [#next]
# Comment replies
URL: https://docs.flyby.world/en/channels/comment-replies
> Turn comments on your Instagram and Facebook posts into DM conversations about the right package, with everything you need to set up in Meta.
Pick a post, link it to the package it's about, and every comment on it gets two answers: a short **public reply** under the comment, and a **DM** about that package. When the person answers the DM, the chat lands in your [inbox](/en/conversations) and the AI agent carries on as usual, already knowing which package they're interested in.
It works on **Instagram posts and reels** and on **Facebook Page posts**. You'll find it in **Settings → Comment replies**. Only the **owner** and **managers** can change it. It uses your Instagram and Messenger channels, so it's available on **Growth** and **Pro** (and during the free trial).
## How it works [#how-it-works]
1. Someone comments on a post you turned on (optionally: only if the comment contains one of your keywords).
2. Flyby sends them a **DM** about the linked package (Meta calls this a "private reply").
3. Flyby answers **under the comment** with a short line like "We've sent you the details in DM 💬". The wording rotates so Instagram doesn't flag it as spam.
4. The comment and the DM appear as a new conversation in **Conversations**, starting with "You messaged @handle about a comment they made on your post" and a link to the post. The comment itself is quoted below it: click it to open the comment (Facebook) or the post (Instagram). If the DM had buttons, you see them under it.
5. When they answer the DM, the AI agent takes over, with the package already in context.
* You can send **one DM per comment**, within **7 days** of the comment. After that, nothing more until the person answers. That's why the default DM ends with a question.
* Flyby sends **one DM per person per post**, even if they comment several times.
* If the DM can't be sent, Flyby skips the public reply too, so it never says "check your DM" when there's nothing there.
* Replies inside comment threads and your own comments are ignored.
## Required actions [#required-actions]
Everything below is a one-time setup. Do the column for each platform you want.
| What | Instagram | Facebook Page |
| ----------------------------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| Channel connected in Flyby | **Instagram Direct** | **Facebook Messenger** |
| Token permissions | `instagram_manage_comments` (plus the [Instagram](/en/channels/instagram) ones) | `pages_read_user_content` and `pages_manage_engagement` (plus the [Messenger](/en/channels/messenger) ones) |
| Meta webhook object | **Instagram** | **Page** |
| Webhook fields | `messages`, `messaging_postbacks`, **`comments`** | the Messenger fields, plus **`feed`** |
| Who can trigger it before Advanced Access | People with a role on your Meta app (testers) | Same |
### Connect Instagram first [#connect-instagram-first]
Follow [Connect Instagram](/en/channels/instagram) until DMs reach Flyby. Comment replies use the same channel.
### Add `instagram_manage_comments` to the token [#add-instagram_manage_comments-to-the-token]
In **Business Settings → Users → System users**, generate a new token for your app (expiration **Never**) with the Instagram permissions **plus `instagram_manage_comments`**.
In the app, on the same use-case page, open **Permissions and features** and make sure `instagram_manage_comments` is added.
### Save the new token in Flyby [#save-the-new-token-in-flyby]
**Settings → Channels & integrations** → **Instagram Direct** → paste the new token → **Connect**. Your Callback URL stays the same, so there's nothing to change in Meta.
### Subscribe the webhook to `comments` [#subscribe-the-webhook-to-comments]
In your Meta app: **Use cases → Customize → Webhooks**. In the **Product** list on the left, pick **Instagram** (not "User" or "Page"). Check the Callback URL is Flyby's, then switch **`comments`** to **Subscribed** (next to `messages`).
"Webhook configurations for Instagram API with Instagram business login are supported only within the product itself" is about a different connection method. Flyby connects Instagram through your Facebook Page, so you can ignore it.
### Connect Messenger first [#connect-messenger-first]
Follow [Connect Messenger](/en/channels/messenger) until Page messages reach Flyby. Facebook comment DMs go out through Messenger.
### Add the two permissions to the token [#add-the-two-permissions-to-the-token]
Generate a new System user token (expiration **Never**) with the Messenger permissions **plus `pages_read_user_content` and `pages_manage_engagement`**. The first lets Flyby show your Page posts; the second lets it reply under comments.
### Save the token in Flyby [#save-the-token-in-flyby]
**Settings → Channels & integrations** → **Facebook Messenger** → paste the token → **Connect**. Saving also subscribes your Page to the `feed` field, and keeps what Instagram already subscribed.
### Subscribe the Page webhook to `feed` [#subscribe-the-page-webhook-to-feed]
In your Meta app: **Use cases → Customize → Webhooks**, pick **Page** in the **Product** list, check the Callback URL is Flyby's Messenger one, and switch **`feed`** to **Subscribed**.
### Who can trigger it: testers vs. everyone [#who-can-trigger-it-testers-vs-everyone]
While your Meta permissions show **"Ready for testing"** (Standard Access), Meta only sends events from people who have a role on your app. To test, add your personal account under **App roles → Roles → Instagram Testers** (or as a tester for Facebook) and accept the invite. On Instagram, that's in **Settings → Website permissions → Apps and websites → Tester invites**.
What reaches Flyby from people with **no role** on your app:
| | Standard Access | Advanced Access |
| -------------------------------------- | ------------------------ | --------------- |
| Their comments | ✅ Arrive | ✅ |
| Our DM and public reply to the comment | ✅ Sent, buttons included | ✅ |
| **Their answers to the DM** | ❌ Meta drops them | ✅ |
So on Standard Access, comment replies still reach everyone and **link buttons** (like "View the package") work, but the conversation can't continue in Flyby. Answers need **Advanced Access** for `instagram_manage_messages` (and `pages_messaging` for Facebook).
When you click **Add to App Review** on these permissions, Meta now asks you to **become a Tech Provider**, even for an app that only serves your own business. It needs **business verification** (your company's papers) and access verification, and it can't be undone. Start it only when you can finish every step.
## Set up a post [#set-up-a-post]
1. Open **Settings → Comment replies**. All your posts are in one list, each with a platform tag. Use the filter to show **Instagram and Facebook**, **Instagram only** or **Facebook only**. Just published something? Click **Refresh posts**.
2. Click a post.
3. Fill in:
* **Reply to comments on this post**: on/off.
* **Package**: the package the post is about. The DM mentions it, and the AI agent knows it when the person answers. Or pick **No package** for a general reply.
* **Only reply when the comment includes**: keywords separated by commas, like `price, how much, بكام`. Leave it empty to reply to every comment.
* **DM type**: **Text**, or **Text + buttons** (up to 3 buttons, 20 characters each). A button can be:
* **Reply**: tapping sends the button's text back as their message, and the AI agent answers it.
* **Link**: opens a link you enter (must start with `https://`).
* **Package page**: opens the linked package on your [public page](/en/public-page) (the page must be on).
A preview shows what they'll see. If Meta refuses the buttons, Flyby sends the text on its own so the comment still gets its DM.
* **DM message**: use `{name}` for their name and `{package}` for the package name. Leave it empty to use the suggested text (Arabic or English, based on the comment's language). With buttons, the text can be up to 640 characters.
* **Public replies under the comment**: one per line. Flyby picks a different one each time.
4. Click **Save**. The tile shows **On** and the package name.
To stop, open the post and switch it off, or click **Stop and remove**. Conversations that already started stay in your inbox.
## Troubleshooting [#troubleshooting]
* Is the post switched **On**, and does the comment contain one of your keywords (if you set any)?
* Has that person already received a DM for this post? Flyby sends one per person per post.
* Was it a reply inside a thread? Only top-level comments count.
* Is the webhook subscribed to `comments` (Instagram) or `feed` (Facebook)?
* If the commenter has no role on your Meta app, see "Who can trigger it" above.
The channel's token is missing the permission named in the message. Generate a new token with it and save the channel again in **Channels & integrations**.
The Messenger token needs `pages_read_user_content`. Also make sure the System user has **Full control** of the Page.
Instagram needs `instagram_manage_comments`; Facebook needs `pages_manage_engagement`. Add the permission and save the channel again.
Click **Refresh posts** at the top of the list. Meta can take a few seconds to list a post you just published, so try again shortly if it isn't there yet.
Flyby shows your latest 30 posts. Older posts you've set up stay listed at the end, so you can still switch them off.
## Next [#next]
# Channels
URL: https://docs.flyby.world/en/channels
> Where your customers message you from, and how every message lands in one inbox where the AI agent replies.
Flyby brings messages from several channels into one inbox. The AI agent replies to each customer **on the same channel they used**, and your team can step in at any time.
You set up every channel in one place: **Settings → Channels & integrations**.
## Available channels [#available-channels]
| Channel | How it works | Plans |
| ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- | -------------- |
| [Public chat link](/en/channels/website-chat) | A ready-made chat page with your agency's name. Share it or add it to your website as a chat bubble with one line of code | All plans |
| [WhatsApp Business](/en/channels/whatsapp) | WhatsApp Cloud API through your agency's own Meta app | All plans |
| [Facebook Messenger](/en/channels/messenger) | Messages to your Facebook Page, through your Meta app | Growth and Pro |
| [Instagram Direct](/en/channels/instagram) | DMs to your Instagram professional account, through the same Meta app | Growth and Pro |
| [Telegram](/en/channels/telegram) | A Telegram bot with your agency's name, connected by pasting one token from @BotFather | Growth and Pro |
| [Outbound webhook](/en/channels/outbound-webhook) (advanced) | Sends AI and team replies to your own messaging gateway | All plans |
During the 14-day trial every channel is open, exactly like the Growth plan.
If a channel isn't on your plan, you'll see a lock with "Available on … and above." and a **See plans** link. Its switch stays off until you upgrade.
## Who can set up channels? [#who-can-set-up-channels]
Only the **owner** and **managers** can open the Channels page. Moderators don't see it.
## How a message flows [#how-a-message-flows]
### The customer sends a message [#the-customer-sends-a-message]
From your public chat, WhatsApp, Messenger, Instagram or Telegram.
### It lands in your inbox [#it-lands-in-your-inbox]
Meta sends the message to the channel's **Callback URL**. Flyby checks it really came from Meta using your App secret, then opens a conversation (or continues an existing one) in [Conversations](/en/conversations).
### The AI agent replies [#the-ai-agent-replies]
In the customer's dialect, using only your packages, services and FAQs, while asking the qualification questions. The reply goes back on the same channel.
### Your team takes over when needed [#your-team-takes-over-when-needed]
If the customer asks for a person or a handoff rule fires, the conversation becomes **Needs you**. Any reply from a teammate pauses the AI in that conversation. See [Handoff](/en/conversations/handoff).
On WhatsApp, Messenger and Instagram you can only send free-form replies within 24 hours of the customer's last message. After that, WhatsApp needs approved templates (Flyby doesn't send templates yet). On Messenger and Instagram your team can reply for up to 7 days if your app is approved for HUMAN_AGENT. The AI never sends outside the 24 hours. Telegram has no such rule: you can reply any time. Details in [The messaging window](/en/conversations/messaging-window).
## Channel status [#channel-status]
Each channel has an on/off switch. Once it's on, a badge next to its name shows the status:
| Badge | What it means | What to do |
| ----------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------- |
| **Needs setup** | The channel is on but no credentials are saved yet | Finish the setup and click **Connect** |
| **Waiting for first message** | Credentials are saved but no message has arrived from Meta yet | Send a test message from another phone |
| **Connected** | Everything works | Nothing |
| **Needs attention** | Meta rejected a request or the token stopped working | Read the error shown above the fields, fix it, then **Save & test** |
Under the Callback URL you'll find two lines that help a lot while testing:
* **Verified**: when Meta last confirmed the webhook.
* **Last event**: the last message or delivery update Meta sent us.
If both stay empty, the webhook isn't set up in your Meta app yet.
* **Switch off**: the channel stops receiving and sending, but your token and IDs stay saved. Switch it back on and it works again.
* **Remove credentials**: deletes the token, App secret and channel settings. Past conversations are kept. If you connect again you get a **new** Callback URL and Verify token, and must paste them in Meta again.
## Your own Meta app [#your-own-meta-app]
WhatsApp, Messenger and Instagram connect through **your agency's own Meta app**, not a Flyby app. Your number, Page and account stay yours, and Meta bills you directly for any messaging fees. The rules you need to follow are in our [Meta messaging policy](https://flyby.world/en/meta-policy).
Request the **Meta setup** add-on: our team sets up WhatsApp, Messenger and Instagram for you. It's a one-time 1,500 EGP / $49 on Starter and Growth, and **included in Pro**. Request it from **Settings → Plan & billing**. See [Add-ons](/en/billing/add-ons).
## Next [#next]
# Connect Instagram
URL: https://docs.flyby.world/en/channels/instagram
> Bring DMs to your Instagram professional account into the inbox and let the AI agent reply.
Once connected, every DM to your agency's Instagram account lands in your inbox, and the AI agent replies on Instagram. Instagram is available on **Growth** and **Pro** (and during the free trial).
Instagram messages reach Flyby **through the Facebook Page linked to your account**. If you've finished [Connect Messenger](/en/channels/messenger), most of the work is done: same app, same System user, same Page.
The **Meta setup** add-on covers Instagram too: a one-time 1,500 EGP / $49 on Starter and Growth, and **included in Pro**. Request it from **Settings → Plan & billing**.
## How Instagram differs from Messenger [#how-instagram-differs-from-messenger]
| | Messenger | Instagram |
| ------------------------- | -------------------------------------- | ------------------------------------------------------------- |
| Field in Flyby | Your Page ID | The ID of **the Page linked to Instagram** |
| Finding the account | From the Page ID | Flyby finds the Instagram account from the Page automatically |
| Webhook object in Meta | **Page** | **Instagram** |
| Subscribed fields | 4 fields | `messages` and `messaging_postbacks` |
| Key permission for review | `pages_messaging` | `instagram_manage_messages` |
| "Seen" and "typing…" | Yes | No |
| Team replies after 24h | Up to 7 days with Human Agent approval | Up to 7 days with Human Agent approval |
## Before you start [#before-you-start]
* An Instagram **professional (Business)** account, not a personal one.
* The account is **linked to your agency's Facebook Page**, and the Page is in your Business portfolio.
* In Flyby: you're the **owner** or a **manager**, on Growth or Pro.
## Steps [#steps]
### Make the account professional and link it to the Page [#make-the-account-professional-and-link-it-to-the-page]
In the Instagram app, switch the account to **Professional → Business** if it isn't already. Then link it to your Facebook Page (Page settings on Facebook → **Linked accounts → Instagram**, or from Meta Business Suite).
### Allow access to messages [#allow-access-to-messages]
In the Instagram mobile app: **Settings → Messages and story replies → Message controls → Connected tools**, and turn on **Allow access to messages**.
Without this switch, Meta won't deliver DMs to any app, even if everything else is right.
### Prepare the app and System user [#prepare-the-app-and-system-user]
Use your Meta app (add the Messenger use case if it isn't there) and your **Admin** System user, with these assets under **Assign assets**:
* The app: **Manage app**.
* The Facebook Page linked to Instagram: **Full control**.
### Generate a token for Instagram [#generate-a-token-for-instagram]
**Generate new token** → your app → **Token expiration: Never**, with the permissions:
* `instagram_basic`
* `instagram_manage_messages`
* `pages_manage_metadata`
* `pages_show_list`
* `pages_read_engagement`
* `business_management` (optional)
Add `instagram_manage_comments` too if you want [comment replies](/en/channels/comment-replies) (a DM and a public reply for comments on posts you pick). For DMs alone you don't need it.
Copy the token right away.
### Connect in Flyby [#connect-in-flyby]
1. Open **Settings → Channels & integrations** and switch on **Instagram Direct**.
2. Paste the **token**, the **App secret** (App settings → Basic), and the **Facebook Page ID** of **the Page linked to Instagram**.
3. Click **Connect**.
Flyby finds your Instagram account on its own and subscribes the Page to messages. When it works, the badge turns **Connected** and your account shows as `@yourhandle`.
### Paste the webhook in Meta [#paste-the-webhook-in-meta]
In your Meta app: **Use cases → Customize → Webhooks**, then pick **Instagram** in the **Product** list on the left (not "User" or "Page"). Paste the **Callback URL** and **Verify token** from Flyby, click **Verify and save**, and subscribe to `messages` and `messaging_postbacks` (plus `comments` for comment replies).
The orange note about "Instagram API with Instagram business login" is about a different connection method; you can ignore it.
Disconnecting and reconnecting the channel in Flyby keeps the same Callback URL and Verify token, so you only paste them in Meta once.
Every channel has its own Callback URL and Verify token. Don't reuse the Messenger ones for Instagram.
### Live mode and App Review [#live-mode-and-app-review]
Switch the app to **Live**. While the permissions show **"Ready for testing"** (Standard Access), test from an account added under **App roles → Roles → Instagram Testers**.
With **Standard Access** ("Ready for testing"), Meta only delivers DMs from people who have a role on your app, or whose account is connected to your business. **DMs from the public need Advanced Access** for `instagram_manage_messages`. Meta now only lets you request it as a **Tech Provider**, which needs **business verification** (your company's official papers) and access verification. That choice can't be undone, so do it once you're ready to finish all the steps. If you want your team to reply for up to 7 days, request **Human Agent** too.
Until then, comments from anyone still arrive: see [Comment replies](/en/channels/comment-replies).
## Test the connection [#test-the-connection]
1. From another Instagram account, send a DM to your agency's account.
2. In Flyby, **Last event** updates.
3. Open [Conversations](/en/conversations): you'll see the Instagram conversation and the AI's reply.
## Good to know [#good-to-know]
* **Long replies** are split into several messages automatically, because Instagram accepts shorter messages than WhatsApp and Messenger.
* **Shared reels or posts, and story mentions** show in the conversation as a short label (like "🎬 ريل" or "📣 إشارة في ستوري").
* **Comments** on your posts can get a DM and a public reply too: see [Comment replies](/en/channels/comment-replies).
## Troubleshooting [#troubleshooting]
The Page whose ID you entered has no Instagram professional account linked. Make sure you used the ID of **the Page linked to Instagram**, and that the account is Business, not personal.
* Check **Allow access to messages** in the Instagram app.
* Make sure the webhook is registered on the **Instagram** object (not "User" or "Page") and subscribed to `messages` and `messaging_postbacks`.
* If the app is still in Development, test from a tester account.
The System user has no access to the Page. Add it under Assign assets and generate a new token.
## Next [#next]
# Connect Messenger
URL: https://docs.flyby.world/en/channels/messenger
> Bring your Facebook Page messages into the inbox and let the AI agent reply on Messenger, step by step.
Once connected, anyone who messages your agency's Facebook Page lands in your inbox, and the AI agent replies on Messenger. Messenger is available on **Growth** and **Pro** (and during the free trial).
You connect through **your agency's own Meta app**. If you already connected WhatsApp, you can reuse the same app and System user.
The **Meta setup** add-on: our team sets up WhatsApp, Messenger and Instagram for you. A one-time 1,500 EGP / $49 on Starter and Growth, and **included in Pro**. Request it from **Settings → Plan & billing** ([Add-ons](/en/billing/add-ons)).
## Before you start [#before-you-start]
* A **Facebook Page** for your agency, added to your Business portfolio at [business.facebook.com](https://business.facebook.com).
* A **developer account** at [developers.facebook.com](https://developers.facebook.com).
* In Flyby: you're the **owner** or a **manager**, on Growth or Pro.
## Part 1: The Meta app and the token [#part-1-the-meta-app-and-the-token]
### Prepare the app [#prepare-the-app]
* **Already have an app from WhatsApp?** Open it, go to **Use cases**, click **Add use case** and choose **Engage with customers on Messenger from Meta**.
* **No app yet?** At [developers.facebook.com/apps](https://developers.facebook.com/apps) click **Create app**, choose the Messenger use case and the **Business** type, and link it to your Business portfolio.
Then connect your Facebook Page to the app from the Messenger settings (**Messenger API Settings**).
### Create a System user (or reuse yours) [#create-a-system-user-or-reuse-yours]
1. **Business Settings → Users → System users → Add**.
2. Enter a name and choose the **Admin** role.
If you have a System user from WhatsApp, use it and carry on.
### Give it access to the app and the Page [#give-it-access-to-the-app-and-the-page]
Under **Assign assets**:
1. **Apps** → your app → **Manage app**.
2. **Pages** → your agency's Page → **Full control**, including messaging.
3. **Save changes**.
If the System user has no access to the Page, Flyby can't get the Page token and you'll see a `no_page_token` error.
### Generate the token [#generate-the-token]
1. **Generate new token** → choose your app.
2. **Token expiration**: **Never**.
3. Permissions:
* `pages_messaging`
* `pages_manage_metadata`
* `pages_show_list`
* `pages_read_engagement`
* `business_management` (optional)
* `pages_read_user_content` and `pages_manage_engagement` (only for [comment replies](/en/channels/comment-replies) on your Page posts)
4. **Generate token** and copy it right away.
Your WhatsApp token doesn't include Page permissions. Generate a new token for Messenger with the permissions above. Each Flyby channel keeps its own token, so this doesn't affect WhatsApp.
### Copy the App secret and the Page ID [#copy-the-app-secret-and-the-page-id]
* **App secret**: in your app → **App settings → Basic → App secret → Show**.
* **Facebook Page ID**: open your Page → **About → Page transparency**, or **Business Settings → Accounts → Pages** and select the Page.
## Part 2: Connect in Flyby [#part-2-connect-in-flyby]
### Switch on Facebook Messenger [#switch-on-facebook-messenger]
Open **Settings → Channels & integrations** and switch on **Facebook Messenger**.
### Paste the details and click **Connect** [#paste-the-details-and-click-connect]
| Field | Value |
| ---------------------------- | ----------------------------------- |
| **System user access token** | The new token with Page permissions |
| **App secret** | App settings → Basic |
| **Facebook Page ID** | Your Page's ID |
Flyby fetches the Page token itself and **subscribes your Page to messages automatically** (messages, messaging_postbacks, message_deliveries, message_reads). When it works, the badge turns **Connected** and your Page's name appears.
## Part 3: The webhook in your Meta app [#part-3-the-webhook-in-your-meta-app]
For Messenger you paste the webhook yourself at the app level. Flyby can't do this step for you.
### Open the webhook settings [#open-the-webhook-settings]
In your Meta app: **Messenger → Settings → Webhooks** (in the newer dashboard: **Use cases → Customize → Messenger API Settings → Configure webhooks**).
### Paste the URL and token [#paste-the-url-and-token]
* **Callback URL**: copy it from Flyby (the Webhook box).
* **Verify token**: copy it from the same place.
Click **Verify and save**. When it works, **Verified** updates in Flyby.
### Subscribe to the fields [#subscribe-to-the-fields]
Subscribe to:
* `messages`
* `messaging_postbacks`
* `message_deliveries`
* `message_reads`
If your Page isn't listed in the webhooks section, add it and click **Subscribe** next to it.
## Part 4: Live mode and App Review [#part-4-live-mode-and-app-review]
### Switch the app to Live [#switch-the-app-to-live]
At the top of the app dashboard switch **App Mode** to **Live** (Meta asks for a Privacy Policy URL in App settings → Basic: use your agency's own privacy page).
### Request App Review [#request-app-review]
In Development mode or without approval, your Page only receives messages from **app admins and testers**. To receive messages from the public, Meta requires:
* **App Review** with **Advanced Access** for `pages_messaging`.
* **Business verification** of your Business portfolio.
In your app open **App Review → Permissions and features**, request Advanced Access, and explain that the app answers customer messages to your agency's Page through an AI assistant and a support team. Meta may ask for a short screencast.
Meta now asks you to **become a Tech Provider** before it accepts this request, even for an app that only serves your own Page. That needs business verification (your company's papers) and access verification, and can't be undone, so start it only when you can finish every step. Until then, messages arrive only from people with a role on your app.
### Optional: Human Agent [#optional-human-agent]
Once **Human Agent** is approved in App Review, your team can reply for up to **7 days** after the customer's last message (Flyby adds the HUMAN_AGENT tag to team replies after 24 hours automatically). Without it, all replies are limited to **24 hours**. The AI itself never replies after 24 hours.
## Test the connection [#test-the-connection]
1. From a Facebook account that **isn't** a Page admin (or a tester account while the app is in review), message your Page.
2. In Flyby, **Last event** updates.
3. In [Conversations](/en/conversations) you'll find a new Messenger conversation with the AI's reply. The customer sees "seen" and "typing…".
Messenger doesn't send the customer's name with the message, so Flyby tries to look it up once. That needs **Business Asset User Profile Access** on your app. Without it, the conversation shows without a name until the AI asks the customer.
## Troubleshooting [#troubleshooting]
The System user has no access to the Page, or the token lacks Page permissions. Add the Page under Assign assets with full control, generate a new token with all five permissions, and click **Save & test**.
The app is still in Development mode or hasn't been granted Advanced Access for `pages_messaging`. Finish Part 4.
The webhook isn't registered at the app level. Go back to Part 3, paste the URL and token from Flyby using the copy buttons, and click Verify and save.
The webhook is set but `messages` isn't subscribed, or the Page isn't subscribed to the app. Subscribe the fields, then click **Save & test** in Flyby to re-subscribe the Page.
The 24 hours have passed. Without Human Agent approval there's no reply until the customer writes again. See [The messaging window](/en/conversations/messaging-window).
## Next [#next]
# Outbound webhook
URL: https://docs.flyby.world/en/channels/outbound-webhook
> An advanced setting that sends every AI and team reply to your own URL, so your own messaging gateway can deliver it.
This is an **advanced** setting that most agencies don't need. For every reply from the AI agent or your team, Flyby sends a `POST` request with the reply to a URL you choose, and your gateway delivers the message to the customer.
## Do you need it? [#do-you-need-it]
| Your setup | What to do |
| ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| You connected WhatsApp, Messenger or Instagram in Flyby | **Leave it off.** Replies are delivered automatically |
| You only use the public chat | **Leave it off** |
| You run your own messaging gateway (like n8n, or a non-Meta WhatsApp provider) and want replies sent there | This is for you |
This webhook only sends replies **out**. Bringing customer messages from your gateway into Flyby isn't self-serve yet. Before you build on it, contact [support@flyby.world](mailto:support@flyby.world).
## Turn it on [#turn-it-on]
### Open Channels [#open-channels]
**Settings → Channels & integrations**, and scroll to **Advanced**.
### Switch on **Send replies to your gateway (outbound webhook)** [#switch-on-send-replies-to-your-gateway-outbound-webhook]
### Enter the **Outbound URL** and click **Save** [#enter-the-outbound-url-and-click-save]
It must start with `https://` and be publicly reachable, like `https://gateway.example.com/flyby`. Once saved, the badge shows **Connected**.
## The payload we send [#the-payload-we-send]
With every reply, Flyby sends a `POST` with `Content-Type: application/json`:
```json
{
"agency_id": "…",
"conversation_id": "6f1c…",
"channel": "whatsapp",
"contact_phone": "+201001234567",
"sender": "ai",
"text": "Hi Ahmed! …"
}
```
| Field | Meaning |
| ------------------- | ---------------------------------------------------------------- |
| `agency_id` | Your agency's ID in Flyby |
| `conversation_id` | The conversation's ID; use it to group replies |
| `channel` | The channel the conversation came from, like `whatsapp` or `web` |
| `contact_phone` | The customer's phone if known (can be `null`) |
| `contact_instagram` | Team replies only: the customer's Instagram handle if known |
| `sender` | `ai` for AI agent replies, `agent` for replies from your team |
| `text` | The reply text |
## When is it sent? [#when-is-it-sent]
* **AI replies**: in any conversation that is **not** on a Meta channel connected in Flyby, including public chat conversations.
* **Team replies**: in conversations that aren't from the public chat, when the reply couldn't be sent through a connected Meta channel.
So if WhatsApp is connected in Flyby, its replies go straight to Meta and never pass through the webhook.
## Tips for your gateway [#tips-for-your-gateway]
* Respond quickly: Flyby waits **8 seconds** at most.
* Each reply is sent **once, with no retries**. If your gateway was down, that reply won't reach it.
* Requests aren't signed, so make the URL hard to guess (for example, end it with a long secret code).
## Turn it off [#turn-it-off]
Switch off **Send replies to your gateway**. The URL is cleared and sending stops right away; you'll see "Outbound webhook turned off".
## Next [#next]
# Connect Telegram
URL: https://docs.flyby.world/en/channels/telegram
> Create a Telegram bot for your agency with @BotFather, paste its token into Flyby, and your AI agent starts replying within a minute.
After the public chat link, Telegram is the easiest channel to connect: no Meta app, no review, no business verification. You create a **bot** with your agency's name, paste its token into Flyby, and you're done. Available on **Growth** and **Pro**, and during the free trial.
## Before you start [#before-you-start]
* A regular Telegram account (phone or desktop).
* You're the **owner** or a **manager** of the agency in Flyby.
## 1. Create the bot with @BotFather [#1-create-the-bot-with-botfather]
### Open @BotFather [#open-botfather]
In Telegram, search for **@BotFather** (it has the blue verified tick) and press **Start**.
### Send /newbot [#send-newbot]
It asks for a **name**: what customers see at the top of the chat, e.g. "Nile Tours".
### Pick a username [#pick-a-username]
English letters, ending in `bot`, e.g. `NileToursBot`. It becomes your bot link: `t.me/NileToursBot`.
### Copy the token [#copy-the-token]
BotFather replies with a **token** that looks like this:
```text
123456789:AAH4kZ...
```
Anyone with the token can control the bot. Don't share or post it. Flyby stores it encrypted and never shows it again.
## 2. Connect it in Flyby [#2-connect-it-in-flyby]
### Open Channels [#open-channels]
Go to **Settings → Channels** and turn on **Telegram**.
### Paste the token and press **Connect** [#paste-the-token-and-press-connect]
Flyby checks the token with Telegram and sets up the webhook for you. There's nothing to copy anywhere else.
### Test it [#test-it]
Your **Bot link** appears. Open it on your phone, press **Start** and send a message. The conversation shows up in [Conversations](/en/conversations) and the AI agent replies.
## Share the bot with customers [#share-the-bot-with-customers]
The customer always **starts the chat**: they open the bot and press Start. A bot can't message anyone who hasn't messaged it first, so put the link where customers see it:
* In your Instagram, TikTok and Facebook bio.
* In your ads, or as a QR code in the office and on brochures.
* On your [public page](/en/public-page), in your [social links](/en/public-page/social-links).
In @BotFather, set the bot's photo with /setuserpic and the description customers see before pressing Start with /setdescription.
## How Telegram differs from WhatsApp [#how-telegram-differs-from-whatsapp]
| | Telegram | WhatsApp |
| ---------------- | ------------------------------------- | ----------------------------------- |
| Setup | Paste one token | Meta app, verification, webhook |
| Cost | Free | Meta charges per conversation |
| Reply window | **None**: reply or follow up any time | 24 hours, then templates only |
| Who starts | Only the customer (presses Start) | The agency can start with templates |
| Customer's phone | Only if they share it | Always known |
| Account | A bot ("bot" shows next to its name) | Your business number |
The AI agent asks for the customer's phone number as part of qualification, so it's saved on the contact once they type it.
## Common questions [#common-questions]
Your message isn't sent, and it's marked "Not sent: the customer blocked your bot on Telegram". If they unblock it and write again, the conversation continues as normal.
Yes, but a bot delivers its messages to one place only. If it's connected to another service, connecting it to Flyby disconnects it there. A new bot just for sales is best.
No. Flyby only replies in private chats. Messages in groups or channels the bot was added to are ignored.
They arrive in your inbox as labels like "📷 صورة" or "🎤 رسالة صوتية", and the AI asks the customer to type their request.
To switch bots, paste the new token and press **Save & test**. Turning off the Telegram switch pauses the bot and keeps the token. **Remove credentials** deletes the token completely.
# Public chat link
URL: https://docs.flyby.world/en/channels/website-chat
> A ready-made chat page with your AI agent. Share it in bios and ads, or put it on your website, with no technical setup.
The public chat link is the fastest way to let customers talk to your AI agent: a chat page with your agency's name and logo that works on phones and computers. It's available on **all plans**.
## Turn on the chat [#turn-on-the-chat]
### Open Channels [#open-channels]
Go to **Settings → Channels & integrations**.
### Switch on **Public chat link** [#switch-on-public-chat-link]
It's on by default. If the switch is off, turn it on.
### Copy the **Chat link** [#copy-the-chat-link]
Use the copy button next to the link, or **Open page** to see it the way customers do.
The link looks like this:
```text
https://flyby.world/en/chat/
```
The link uses the language of the dashboard you have open. Want the Arabic version? Change `/en/` to `/ar/` in the link.
## What customers see [#what-customers-see]
* Your agency name and logo, plus your AI agent's name with "Online now".
* The greeting from your AI agent settings (or a default one), and three quick suggestions they can tap.
* A **Call** button that dials your WhatsApp number (or your phone number if there's no WhatsApp).
* A **New conversation** button to start over.
* Replies from your team are marked "Agency team" so customers know a person is answering.
* "Powered by Flyby" at the bottom, which disappears on the **Pro** plan.
The conversation is saved on the customer's device, so if they close the page and come back, it's still there.
## Where to share it [#where-to-share-it]
* Your Instagram, TikTok and Facebook bios.
* Paid ads, as the destination of a "Send message" button.
* A QR code in your office or on brochures.
* Your WhatsApp away message or email signature.
If your [public page](/en/public-page) is live, its **Chat with us** buttons open this same chat. No need to share two links.
## Put it on your website [#put-it-on-your-website]
Below the link you'll find **Embed on your website** with **one line** of code, with your agency ID already filled in. Copy it from there exactly. It looks like this:
```html
```
This line adds a **floating chat bubble** in your chat colour to the corner of **every page of your website** (bottom-right in English, bottom-left in Arabic). When a visitor clicks it, your AI agent's chat opens in a panel, or full screen on phones.
### Copy the line [#copy-the-line]
Click the copy icon above the code in **Embed on your website**.
### Paste it once into your site [#paste-it-once-into-your-site]
Put it just before `