Admin Guide
Open the console

InstantAIguru Admin Guide

Complete reference for the admin console and the Chat Dashboard

Quick Start Guide — 4-Step Setup

A new Guru opens in the setup wizard, which walks you through a password (if your account has none), your Guru’s name, words, look and job, installing it on your site, and adding channels. Everything it sets can be changed later in the console. To personalize your Guru from the console, set these and click Save:

1 Appearance Make the widget yours
Appearance opens first. Step through Words (chat header, welcome message, up to 4 frequent questions), Colors, Icon, Effect and Position, watching the live preview of your own site. Install gives you the one line to paste into your site.
2 General Say who owns the Guru and where customers get help
Fill in Domain owner with your company name, and Support contact for your customers — a URL or contact added to every error message your visitors see.
3 Instructions Review your Guru’s name and job
Enter a Guru name, then describe its Role and skills and Its job.
4 Click Save in the top-right corner

Admin Console Overview

Layout

The console has a menu down the left side and the open section to its right:

  • Left menu — the sections of your Guru: Appearance, General, Instructions, Channels, Knowledge Files, Users, Integrations and Subscription. Below a divider are Settings, a link to the Chat Dashboard, links to the CSAT Dashboard and Live Support when those integrations are on, and this guide. Your account sits at the bottom.
  • Top bar — the name of the open section, and the actions that apply to the whole Guru (below).

The address keeps the open section (for example #channels), so a reload, a bookmark or a link opens that section. The ⇤ button beside the logo collapses the menu to icons, and the console remembers it. On a phone the menu is a drawer opened from the ☰ button.

The InstantAIguru admin console: a dark left menu with Appearance selected, the Appearance section showing the Words step with the chat header, welcome message and four frequent questions, and a live preview of the Acme Widgets storefront with the chat button in its bottom-right corner. The top bar shows Upload Flows, Upload Tools, Design Flows, Re-index and Save.
The admin console, opened on Appearance. Screens here show a sample “Acme Widgets” setup.

The top bar provides these actions:

ButtonDescription
Upload FlowsImports a JSON/.flows file of interactive conversation flows for the Guru. Shown only to users with the Config permission, which a platform administrator grants.
Upload ToolsImports a JSON/.tools file of custom tool definitions the Guru can call. Shown only to users with the Config permission, which a platform administrator grants.
Design FlowsOpens the visual Flow Designer (flow-designer.html) in a new window, handing it your flows, tools and global variables; whatever you send back arrives here as unsaved changes. Shown only to users with the Config permission, which a platform administrator grants.
Re-indexRe-reads your website and knowledge files and rebuilds what your Guru knows. Needs the Reindex permission, and your first and last name filled in (Your profile). See Re-index.
SaveSaves all changes. It turns solid purple when there is something to save.

Your account menu

Click your name at the bottom of the menu for:

ItemDescription
Change email or passwordOpens the same dialog as Change on the General section.
ThemeLight, Dark, or match my device (the default). Remembered in this browser.
ExitLeaves the console for the instantAIguru home page (or siteguru.ai, if you opened the console from there). Warns you if there are unsaved changes, and offers to review them first. If your account has no password yet, Exit stops and asks you to set one.
The left menu with the account menu open above Jordan Rivera: Change email or password, a Theme switch with light, match-device and dark buttons, and Exit.
The account menu.
The admin console in the dark theme, showing the Appearance section with its Words step and the live preview of the Acme Widgets storefront.
The dark theme.

Saving Changes

The Save button in the top-right corner turns solid purple whenever you have unsaved changes. That includes work done elsewhere and handed back to this window — flows, tools and global variables sent over from the Flow Designer, and files brought in with Upload Flows or Upload Tools — not only what you typed into a form.

Review Changes

If you try to Exit or Re-index with unsaved work, the console offers Review Changes. It shows exactly what Save would write: every field, with its Original value beside Your Modification.

The Review Changes dialog. Two red chips under the heading read Flows: 1 changed and Globals: 1 changed. A three-column table lists Field, Original and Your Modification for two rows: flowsMenu[order_lookup] then steps[reply] then value, with the message text changing; and globalVariables then global_business_hours, going from Mon-Fri 9-5 ET to Mon-Sat 8-6 ET.
Review Changes. Each row names the record by identity — the user’s email address, the flow’s id, the step’s id — not by its position in a list, so a change is attributed to the thing it actually happened to.

Two things worth knowing about what you see there:

  • Paths name records, not slots. users[[email protected]] › channels identifies a person, so deleting one user does not make the users below look edited, and reordering flows is not reported as changes.
  • The chips count what changed. Flows, Tools and Globals chips appear only when that registry actually differs, and count changed entities — three edits across two flows is “Flows: 2 changed”, because the rows below already itemise the fields. The Flow Designer hands back its whole registry every time it saves, so a registry that came over untouched says nothing at all. In the figure above, Tools has no chip for exactly that reason.
An import that changes nothing applies nothing
Uploading the flows or tools file you already have — or opening the Flow Designer and saving without editing anything — leaves the Save button unlit and reports that there is nothing to apply. Importing a changed file and then importing the original back undoes the first import rather than leaving it queued.

When someone else has been editing

When you click Save, the console performs a 3-way merge: the configuration as it was when you loaded the page (the original), your changes, and the latest version on the server. Anything only you changed is applied. Anything only the other person changed is kept. If you both changed the same field to different values, a conflict resolution dialog asks you to choose — the original value, yours, or theirs — for each conflict.

  • Agreement is not a conflict. If you and the other person made the same edit, there is nothing to decide and you are not asked.
  • Deletions are resolved whole. If the other person deleted a record while you were editing a field inside it — a user, a channel, a schedule — you are asked about the complete record, not the one field you touched. Keeping “yours” restores the whole thing; several edits inside one deleted record collapse into that single decision.
  • If the server changes again while you are still deciding, your resolutions are dismissed and you are asked to click Save again against the newer version.
Tip
If you click Exit with unsaved changes, you are offered Save and Exit, Discard and Exit, Review Changes and Cancel. Closing or reloading the tab shows your browser’s own leave-page warning.

Permission-Based Access

An administrator gives each user permissions (see Users). A section you have no permission for stays in the menu with a 🔒 lock and does not open; clicking it says so. Each section has its own permission, and General is open to everyone. The Admin permission opens Users, where other users and their permissions are managed. If the section a link points to is locked, the console opens the first section you can use.

The left menu for a user without the Appearance, Instructions, Users and Subscription permissions: those four items are dimmed with a lock icon, and General is open.
Locked sections.

Appearance

What your chat widget says and looks like, beside a live preview. Appearance is the first section of the console, and it works like the setup wizard: six steps, one card at a time, with Back and Next, or click a step’s name to jump to it. Nothing here needs an Apply button — every change shows in the preview at once. Click Save to keep it.

Appearance on its Words step: the step bar Words, Colors, Icon, Effect, Position, Install; the Words card with Chat header, Welcome message and four frequent questions; a Next: Colors button; and on the right a live preview of the Acme Widgets storefront in a browser frame, with the chat button in the bottom-right corner.
Appearance, on its first step. The section is gated by the Appearance permission.

The live preview

The right half shows a picture of your own site with your real Guru on it: the chat button there is the actual widget, so you can open it and chat. The picture is taken the first time you open Appearance. If your site cannot be pictured (for example, because it asks visitors to prove they are a person), the frame says why, offers Try again, and the preview works the same on a plain background.

1. Words

FieldTypeDescription
Chat header text The text in the chat widget’s header bar (for example “Ask Acme”). If left empty, your site shows “Ask Our Guru”.
Welcome message textarea The first message a visitor sees on opening the chat. {{displayName}} becomes the visitor’s name when it is known, otherwise the Generic visitor name set in Settings. Example: “Hi! I’m the Acme Widgets assistant. How can I help you today?”
Frequent questions (up to 4) text × 4 Shown as buttons below the welcome message, to help visitors start (for example “What are your business hours?”). Leave blank to hide.

2. Colors

The Colors step: eight preset buttons, Clean, Blue, Purple, Green, Orange, Red, Dark and Light, and under Or set each color, four color fields for Background, Gradient, Text and Hover, each with a swatch and a hex value.
The Colors step.

Pick one of 8 presets, or set each color yourself. A preset fills in the four colors below:

PresetBackgroundGradientTextHover
Clean #ffffff#ffffff#000000#f0f0f0
Blue #0e92ff#0056b3#ffffff#1aa3ff
Purple #6c5ce7#4834d4#ffffff#7d67f0
Green #27ae60#1e8449#ffffff#2ecc71
Orange #e67e22#d35400#ffffff#f39c12
Red #e74c3c#c0392b#ffffff#e74c3c
Dark #2c3e50#1a2530#ffffff#34495e
Light #ecf0f1#bdc3c7#2c3e50#ecf0f1
ColorDescription
BackgroundThe main color of the chat header, the send button and the chat button.
GradientThe second color of the widget’s gradients — header, send button, frequent-question buttons, the visitor’s own messages and the teasers (usually a darker shade of the background).
TextThe color of text on the colored areas.
HoverThe color shown when the pointer is over a button.

Colors apply as you pick them.

3. Icon

The Icon step: eight icon tiles, Guru (selected), Bubble, Headset, Sparkles, Smile, Help, Bot and Heart, then an Upload your own button and a note that PNG, JPG, GIF, WebP or SVG work and a square image is best.
The Icon step.

The button visitors tap to open the chat:

ChoiceDescription
GuruOur own icon, the default. It takes your colors and saves no image.
Bubble, Headset, Sparkles, Smile, Help, Bot, HeartReady-made icons, drawn in your colors. If you change your colors later, Save redraws the icon in the new ones.
Upload your ownAn image from your computer: PNG, JPG, GIF, WebP or SVG; a square image works best. It appears as the first tile, marked Yours. Pick any other tile to stop using it.
Note
If the hosting page sets window.iAIgW_icon in its embed code, the widget treats the page as self-configured: it uses that icon and does not load any of the settings made here (colors, words, effect, position) unless the page also sets settings.fetch = true.

4. Effect

The Effect step: an Effect dropdown set to None, Starts after (seconds) 5, Runs for (seconds, 0 = keeps going) 0, and Teasers reading Click me!, Need help?, Chat with us. In the preview, a Need help? teaser sits beside the chat button.
The Effect step, with a teaser showing beside the chat button in the preview.

An animation and short teasers that draw attention to the chat button:

SettingTypeDescription
EffectselectNone — no animation. Orbit — a gentle circular motion. Pulse — a pulsing glow. Shake — a quick shake.
Starts after (seconds)numberHow long after the page loads the effect starts. Default: 5.
Runs for (seconds, 0 = keeps going)numberHow long the effect lasts; 0 keeps it going until the visitor opens the chat. Default: 0.
TeaserstextComma-separated messages shown one at a time beside the chat button Shown even with Effect None. Default: Click me!, Need help?, Chat with us.

5. Position

Choose which corner of the page the chat widget occupies, how far in it sits from the edges, and whether visitors may move it themselves. Every control here previews immediately, so there is no Apply button. Click Save to keep it.

The Position card: a Guide button at top right, a four-button corner picker with Bottom right selected, From the side and From the top or bottom fields both set to 20, and a checkbox letting visitors drag the widget.
The Position step. Its Guide button opens this page.
SettingTypeDescription
Corner4 buttonsTop left, Top right, Bottom left or Bottom right. The current choice is highlighted. Default: Bottom right.
From the side (px)numberHow far in from the left or right edge, whichever the corner pins. Default: 20.
From the top or bottom (px)numberHow far in from the top or bottom edge, whichever the corner pins. Default: 20.
Let visitors drag the widgetcheckboxWhen on, a visitor can drag the widget anywhere, and it stays there on their device. It also enables a right-click menu on the widget icon offering the four corners directly. On by default.

Picking a corner moves the chat button in the preview as you click, so you judge the result against your own site rather than against the form:

The Position step with Top left selected, and the live chat button now in the top-left corner of the preview of the Acme Widgets site, with a Need help? teaser beside it.
Selecting Top left. The chat button in the preview moves the moment you click, before you save.
On phones
At 768px wide or less the chat panel spans the width of the screen, so From the side no longer applies there. The corner still matters, because it decides which side the icon sits on. That is what governs thumb reach, and whether the widget collides with a button of your own.
Saving replaces the tighter mobile default
A Guru whose placement has never been saved uses a tighter built-in vertical offset on phones, 10px rather than 20px. Once you save a position your offsets are explicit and are honoured at every screen size, phones included. If the widget sits further from the edge on mobile than you expected after saving, that is why. Reduce From the top or bottom.
Note
A visitor's dragged position is remembered on that visitor's own device and never changes what anyone else sees. It is discarded automatically when you change and save the position here, and when you switch dragging off. The widget cannot be dragged off-screen either: part of it always stays reachable. If a hosting page sets window.instantAIguru.placement in its embed code, that takes priority over the position configured here, exactly as it does for the Chat Icon.

6. Install

The Install step, Add to your site: a note to paste the code once before the closing body tag, and a code box holding the chat-widget script tag with a Copy button.
The Install step.

Add to your site holds the one line of code that puts your Guru on your site. Click Copy and paste it once, before the closing </body> tag. Everything you set in Appearance then reaches your site when you Save, with no new code. See Deploying Your Guru for platform-by-platform steps.

General

Your Guru’s domain and owner, the support contact shown to your visitors, how your site is read, and your own profile.

The General section: Your Guru with Domain acmewidgets.com (read-only), Domain owner Acme Widgets Inc. and Support contact for your customers; Reading your site with the Read linked pages on other sites checkbox; and Your profile with first name, last name, email, a masked password and a Change button.
The General section.

Your Guru

FieldTypeDescription
Domain read-only Your website domain. This is set during onboarding and cannot be changed.
Configuration read-only Shown only when the configuration name differs from the domain (for example, for multi-config setups). Identifies which configuration is active.
Domain owner text Your company or organization name.
Support contact for your customers text A URL or contact information (for example https://support.example.com or an email address) that is added to the error and fallback messages your visitors see, so they always know how to reach a person when the AI cannot help. It is also given to your Guru, so it can point visitors to it in ordinary answers.
Tip
The support contact appears at the end of the platform's error and fallback messages ("Timeout", "System Unavailable" and the like). Those messages are written by the platform, not configured per Guru, and each one is sent in English, Spanish or Portuguese: the language of the conversation where it is known, otherwise your Guru’s language.

Reading your site

FieldTypeDescription
Read linked pages on other sites checkbox When on, links that leave your domain are followed when your site is read — useful if your knowledge spans linked external pages. Leave it off to read only your own domain. Takes effect at the next Re-index.
Note
Platform-administrator fields: a platform administrator also sees Crawl arguments (custom crawl parameters) and Embedding dimensions. These are internal settings and should not be changed without understanding their impact.

Your profile

FieldTypeDescription
First name / Last name text Your name on the account.
Email read-only Your sign-in email. To change it, click Change.
Password read-only Shown as dots. Click Change (or Change email or password in the account menu) to open Change Login Credentials: your current password, a new one of at least 8 characters entered twice, and optionally a new email. Save or discard your other changes first.

Setting your password for the first time

If you reached the console through an email invitation or a Forgot password link, your account does not have a password yet: the Change button reads Set Password, and the password dialog opens by itself without the Current Password field, because there isn’t one.

You cannot leave until you set one
Exit will stop and reopen the password dialog while the account still has no password. Until you set one, anyone else holding a copy of that link can open the account while the link is valid (72 hours for an invitation, 10 minutes for a password reset). Setting a password spends the link — it stops working immediately and cannot be reused — and your session continues normally afterwards.

Instructions

This is where you define your Guru's identity, expertise, and purpose. These instructions shape how the AI assistant behaves and responds to your visitors.

The Instructions section: Who your Guru is, with Guru name, Role and skills, and Its job, and the Advanced notes panel opened to show Understanding the question, Choosing the reference material and Writing the answer.
The Instructions section, with Advanced notes opened.

Who your Guru is

FieldTypeDescription
Guru name text The display name of your AI assistant (e.g., "SalesBot", "HelpDesk Pro", "Maya"). This is the name your Guru uses for itself in conversations. The chat header is set separately, in Appearance › Words.
Role and skills textarea Define the identity and expertise of your Guru. Example: "You are an AI assistant for Example.com, expert in sales and customer service, fluent in English and Spanish." This sets the personality, tone, and knowledge domain of the assistant.
Its job textarea Define the primary job and use case. Example: "Help users find information about our products and services. Guide them through the purchasing process and answer questions about pricing, shipping, and returns." This focuses the assistant on its core responsibilities.

Advanced notes

Collapsed under Advanced notes: optional extra instructions for one step of how an answer is made. Most Gurus never need them — leave them blank to use the default behavior.

FieldTypeDescription
Understanding the question textarea Custom instructions for the prompt evaluation step. This controls how the user's question is analyzed and rephrased to optimize document retrieval. Leave blank to use default behavior.
Choosing the reference material textarea Custom instructions for the document evaluation process. This controls how retrieved documents are scored and selected for inclusion in the response. Leave blank to use default behavior.
Writing the answer textarea Custom instructions for the response generation step. This influences the final answer composition, including style, format, and content guidelines. Leave blank to use default behavior.
Note
The three notes follow the order an answer is made: understanding the question → choosing the reference material → writing the answer. Modifying them can significantly alter behavior.

Channels

Where your Guru answers besides your website: WhatsApp, text messages (SMS), phone calls (Voice) and email. Add them with the buttons at the top of the section: Connect WhatsApp, Add Twilio number (SMS and Voice) and Add email. Each channel type has its own group below.

Channel card states & controls

Every channel card — WhatsApp, SMS, Voice, or Email — behaves the same way:

  • Click the card header to expand or collapse it.
  • Delete button (trash icon) in the header removes the channel after you confirm — the removal (and any billing effect) takes effect when you Save.
  • A “Configuration Required” banner appears when a channel was added from your subscription but is still missing credentials — fill in the missing fields below the banner to activate it.
  • A Subscribed / Not Subscribed badge shows whether the channel is on your live subscription; see Subscription for how channels are counted.
  • Billing follows Save. When you have a live subscription and your saved channel set changes, Save shows a confirmation listing the additions (at your per-channel rate) and removals (prorated credit) with Approve, Discard Channel Changes (keep your other edits, drop the channel changes), or Back. Stripe subscriptions update immediately on one prorated invoice; Shopify redirects you to approve the updated subscription first. Adding a channel saves at once, so this confirmation can appear right after you add one.
  • The Twilio Auth Token field has a Show button to reveal the stored value so you can verify or copy it. The WhatsApp Business Token is shown shortened; hover over it to see the full value.
The Channels section: Connect WhatsApp, Add Twilio number and Add email buttons at the top; the Text messages group with its Acknowledge before answering checkbox and an SMS card expanded with its fields; and collapsed Phone calls and Email cards, each with a Delete button and a subscription badge.
The Channels section. The Text messages group opens with its Acknowledge before answering checkbox, and the SMS card is expanded to show its fields — Channel Name, Twilio Account SID, Twilio Auth Token (with a Show button), Deployment Context, and SMS Language; the Voice and Email cards below are collapsed.

WhatsApp Channels

WhatsApp Business uses Meta's Embedded Signup flow. Connecting a WhatsApp number to your Guru is a popup launched from the Connect WhatsApp button at the top of Channels.

Beyond text, WhatsApp customers can send photos, voice notes and PDFs, all handled automatically with nothing to enable. See Sending Media on the Other Channels.

Acknowledge before answering

The WhatsApp and SMS sections each start with an Acknowledge before answering checkbox. When it is on and a question needs a search of your knowledge, the Guru first sends a short message such as “Let me check that for you…”, and the answer follows as usual. A reply from a flow is sent without one. The setting is off by default and applies to every number in that section. The checkbox appears once the section has at least one number.

What you need

A Facebook account that can manage your business on Meta, and a phone number for WhatsApp that can receive a verification code by SMS or voice call. Everything else can be done inside the signup popup: choosing or creating your business portfolio and WhatsApp Business Account (WABA), and adding and verifying the number.

References:

Connect via Embedded Signup

In Channels, click Connect WhatsApp. Meta’s Embedded Signup popup opens on facebook.com and walks you through:

  1. Facebook login — skipped if you are already signed in in this browser.
  2. Business portfolio — pick yours, or create one.
  3. WhatsApp Business Account — pick one, or create one with the public profile (name, category, description) customers see in WhatsApp.
  4. Phone number — enter the number and verify it with the code Meta sends.
  5. Permissions and finish — review what InstantAIguru may do on the account and click Finish.

Meta changes these screens from time to time and skips the ones whose answer it already knows, so you may see fewer.

Meta then hands the connection back to our app. A new WhatsApp channel card appears in Channels with these fields:

FieldTypeDescription
WhatsApp Phone Numberread-onlyThe WhatsApp phone number from Facebook signup.
Channel NametextA friendly name for this channel (e.g., "Main Support Line").
WhatsApp Phone Number IDread-onlyFacebook API identifier.
WhatsApp Business Account ID (WABA)read-onlyWhatsApp Business Account ID.
Business IDread-onlyFacebook Business ID.
Business Tokenread-onlyAccess token from the signup, shown shortened; hover over the field to see the full value.
WhatsApp Custom GreetingtextareaA channel-specific welcome message for WhatsApp conversations.
WhatsApp Deployment ContexttextareaAdditional context telling the Guru it is deployed on WhatsApp (e.g., formatting guidance, brevity preferences).
Invite callers to switch to WhatsAppcheckboxA caller who asks to continue on WhatsApp gets a WhatsApp message from this number. Meta reviews that message first; turning this on submits it.
Business name in the invitationtextThe name used in that message (up to 60 characters).
Refresh review statusbuttonChecks Meta’s review of the invitation again. The line above it shows the verdict: Approved by Meta, In review at Meta, or Rejected by Meta with Meta’s reason.
Pricing

Meta bills WhatsApp Business Cloud API per message (charged on delivery, not send), with rates varying by recipient country and message category:

CategoryWhat it coversCost
MarketingPromotional content, offers, cart remindersPaid
UtilityOrder confirmations, delivery updates — triggered by a customer actionFree when sent in response to the customer, otherwise paid
AuthenticationOne-time passwords (OTP)Paid
ServiceReplies to customer inquiriesFirst 1,000 free each month on every business phone number (since October 1, 2026), then paid per message

Messages sent within 72 hours of a customer clicking a "Click-to-WhatsApp" ad or Page CTA are free regardless of category. See Meta's current pricing for region-specific rates.

No campaign approval for replies
Once connected, your Guru answers inbound WhatsApp messages immediately. There is no per-campaign approval gate like A2P 10DLC for SMS.

Twilio Setup (Required for SMS & Voice)

Both SMS and Voice channels run on your own Twilio number, and one number serves both. You connect your Twilio account once from the console, and your Guru answers calls and texts on that number. Twilio bills your account directly for the number, messages and minutes; your subscription with us covers the AI handling on top.

Step 1: Have a Twilio Account

If you don’t have one yet, sign up at twilio.com/try-twilio and upgrade it by adding a payment method. Twilio lets only upgraded accounts approve connected apps, and texting registration needs one too.

Step 2: Connect Twilio and Choose a Number

  1. In Channels, click Add Twilio number, then Connect your Twilio account.
  2. Sign in to Twilio and approve InstantAIguru. Twilio creates a separate subaccount just for your Guru (Subaccount for ConnectApp: InstantAIguru), so nothing else in your account is touched, and returns you to the console.
  3. Pick a number:
    • Numbers ready for your Guru lists the numbers already in that subaccount. Click Use this number.
    • Get a new number: enter an area code, click Search, then Choose and Confirm: buy this number. Twilio charges your account for it, about $1.15 a month in the US, plus usage.
    • A number already in your main Twilio account can be used too: in the Twilio console open it (Phone Numbers › Active numbers), choose Transfer, move it to the InstantAIguru subaccount, then press Refresh.
  4. Name the line, choose the Language on calls (English or Spanish here; the line’s own card offers more languages afterwards), and keep Answer phone calls and Answer text messages checked for both. Click Start answering on this number. If your account is subscribed, you approve the change to your subscription, since each line is a channel.

The number’s webhooks are set for you. Calls are answered right away. Texts need the registration in Step 3.

Step 3: Register for Texting (A2P 10DLC)

US carriers deliver business texts only from registered numbers (A2P 10DLC). Once a texting line is added, the same dialog shows Texting registration, and we file it with Twilio for you:

  1. Fill in your business details: legal name, EIN, business type, industry, website, address and your contact details.
  2. Carriers’ reviewers must see your texting number on a public page of your site with our “Text us” text right next to it, and texting sections in your terms and privacy policy. Enter the three page addresses, copy the three texts onto those pages, and click Check pages.
  3. Click Register for texting, then Confirm: file and accept Twilio’s fees. Twilio bills your account about $19.50 once (business registration and campaign review) and $1.50 to $10 a month while texting is on.
  4. Your business is reviewed first. Come back to Add Twilio number and press Check: once the business is approved, Check files the texting campaign. When the campaign is approved the dialog reads Registered and your Guru replies to texts.

The console files a registered business with an EIN. Without an EIN, register as a Sole Proprietor in the Twilio console yourself (see Sole Proprietor vs Standard Path).

Approval Timing

Real-world experience for most customers: campaign approval typically lands in 2 to 3 days, sometimes faster, occasionally up to a week. Business (brand) approval comes first, usually within 1 to 3 days.

  • Voice is live as soon as the line is added. You can answer calls immediately.
  • SMS accepts inbound messages, but replies are not delivered until the campaign is approved, so register as early as you can.

Entering Twilio Credentials Instead

Accounts set up before Twilio Connect, or that prefer to manage the number in Twilio themselves, can still enter credentials by hand: click Add Twilio number, then Enter Twilio credentials instead. You then buy the number, point its webhooks at InstantAIguru and register for texting in your Twilio console.

  1. Buy a number with SMS and Voice in the Twilio Console (Phone Numbers → Manage → Buy a number). Reference: Twilio: How to Buy a Phone Number.
  2. Open the number’s Configure tab and set its webhooks (both HTTP POST), then save:
    Twilio SectionFieldValue
    Voice and emergency callingA CALL COMES INWebhook: https://api.instantaiguru.com/v1/twilioVoice
    MessagingA MESSAGE COMES INWebhook: https://api.instantaiguru.com/v1/twilioSMS
  3. For texting, register in Messaging → Regulatory Compliance: a Customer Profile, a Brand, a Campaign (use case, sample messages, opt-in and opt-out, privacy and terms URLs), then attach the number to the campaign. References: A2P 10DLC Quickstart · Campaign Approval Requirements.
  4. From the Twilio Console homepage’s Account Info, copy your Account SID and Auth Token. Enter the phone number with its country code (e.g. +15551234567), the Account SID and the Auth Token, keep SMS and Voice checked, and click Add Channel.

Sole Proprietor vs Standard Path

When you register in the Twilio console yourself, Twilio routes the registration by one question on the Brand form: “Does your company have a business registration number?” (EIN in the US, Business Number in Canada).

AnswerPathEligibilityBrand ApprovalLimits
Yes, with Tax ID Standard (or Low-Volume Standard if <6,000 segments/day) US with EIN, Canada with CBN, or business HQ outside US/CA/EU/UK/AU 1–3 days (TCR vets the brand) Multiple numbers per campaign; throughput scales with TCR Trust Score
No, no Tax ID Sole Proprietor US or Canadian address; taxes filed under SSN/SIN Minutes (SMS code, answer within 24 hours) One phone number per campaign. Lower throughput cap.
Sole Proprietor code
The Sole Proprietor path texts a code to the mobile number on the brand form. Answer within 24 hours or the brand is not approved.
One number, two channels
A number added for both calls and texts creates separate SMS and Voice channel cards, each with its own deployment context and language settings. Each card is a separate channel on your subscription.

SMS Channels

Prerequisite: complete Twilio Setup first. An SMS channel is added with Add Twilio number at the top of Channels, with Answer text messages checked.

FieldTypeDescription
SMS Phone Numberread-onlyThe Twilio phone number for SMS.
Channel NametextA friendly name for this channel.
Twilio Account SIDtextYour Twilio Account SID.
Twilio Auth TokenpasswordYour Twilio Auth Token. Use the Show button beneath the field to reveal the stored value so you can verify or copy it.
SMS Deployment ContexttextareaContext for SMS deployment (e.g., "Keep responses brief, avoid markdown").
SMS LanguageselectLanguage for this channel: English, Spanish, French, German, Italian, or Portuguese.

Acknowledge before answering works here exactly as it does for WhatsApp. See Acknowledge before answering.

SMS channels also accept MMS: customers can send photos and audio clips, which the Guru reads and transcribes. Nothing needs enabling. See Sending Media on the Other Channels.

Voice Channels

Prerequisite: complete Twilio Setup first. Voice channels are also added with Add Twilio number, with Answer phone calls checked. Besides Voice Phone Number (read-only), Channel Name, Twilio Account SID, Twilio Auth Token, Voice Custom Greeting and Voice Deployment Context, a Voice card has:

FieldTypeDescription
Live Agent Phone NumbertextThe phone number to transfer callers to when they request a live agent.
Intercept Live Agent MessagetextareaA message played before transferring to a live agent (e.g., "Hello, I'm the Virtual Operator. I see you've requested a live agent. Before I transfer you, our Virtual Agent is available right now, and It can instantly guide you through most issues. Would you like to return to our Virtual Agent? To return back to the virtual agent for immediate assistance just say yes If you still prefer to speak with a live agent, just say no, and I will route you to the queue.").
Agents Unavailable Message (optional)textareaSpoken when a caller asks for a live agent and none is available (outside the Live Agent Service Hours, or no Live Agent Phone Number). The Guru first says the team isn't available and states the service hours, then speaks this message. Write it in this line's language and say what the virtual agent can do instead, e.g. "I can still help you right now: I can take a payment, text you a secure payment link, or answer questions about your balance and account. Just tell me what you need." Leave it blank for the default: "I can still help with many questions. Just tell me what you need." The call continues, and contact details are given only if the caller asks.
Detect answering machine on live agent transferscheckboxOff by default. When on, each transfer to your live agent line records whether a person or a machine (a queue or recorded message) answered it; the result shows on the transfer in the Chat Dashboard. Detection can add a few seconds of silence before the caller is connected, so test the number with a call after turning it on.
Live Agent Service HoursscheduleA weekly schedule defining when the live agent is available to receive transfers. See details below. Only appears once a Live Agent Phone Number is set.
Voice LanguageselectThe language used by the virtual agent on this channel: English, Spanish, French, German, Italian, or Portuguese.
Voice Websocket VendorselectThe text-to-speech provider: Amazon, Google, or ElevenLabs.
Voice NametextThe specific voice identifier for the selected vendor (e.g., Pedro-Neural for an Amazon Polly voice, or an ElevenLabs voice ID).
Voice SpeedselectHow fast the voice speaks on this number, from 0.7× (slower) to 1.2× (faster); Normal (1.0×) by default. Lower it if callers find the voice hard to follow. With ElevenLabs it applies to the greeting and every answer; with Amazon and Google it applies to every answer, and the greeting plays at normal speed. Takes effect on the next call.
CSAT Survey (optional)textOverrides which post-call survey is sent for calls on this phone number. Accepts a survey name or id; leave it blank to use the survey set on the CSAT card (or, if that is also blank, the default survey). Requires CSAT to be enabled.
CSAT Invitation (optional, use {{link}})textareaOverrides the survey invitation text for calls on this phone number, sent verbatim — write it in this number's language and include {{link}} where the survey URL should appear. A <br> sends the rest as a separate text. Leave it blank to use the CSAT card's Invitation message for the call language.

Like the SMS card, the Voice card’s Twilio Auth Token field has a Show button to reveal the stored value. The card also includes the Channel Name, Twilio Account SID, Twilio Auth Token, and Voice Deployment Context fields shared with SMS, plus a Voice Custom Greeting.

An expanded Voice channel card showing the phone number, Twilio credentials with a Show button, Voice Custom Greeting, Live Agent Phone Number, the Intercept Live Agent and Agents Unavailable messages, the Detect answering machine on live agent transfers checkbox, the Live Agent Service Hours weekly editor, Voice Language/Vendor/Name, Voice Speed at Normal (1.0×), and the optional CSAT Survey and CSAT Invitation override fields at the bottom.
An expanded Voice channel card — including the Agents Unavailable Message, the Live Agent Service Hours editor, Voice Speed, and at the bottom the optional per-number CSAT Survey and CSAT Invitation overrides.

Live Agent Service Hours

The Live Agent Service Hours editor lets you define when the live agent is available to receive transferred calls. It appears in the Voice channel card as soon as you enter a Live Agent Phone Number and is hidden when the phone number is cleared.

The schedule also sets what callers are told: when someone asks for an agent outside these hours, the Guru states the hours exactly as configured here (for example, "Our agents are available Monday through Friday 9 AM to 7 PM, and Saturday 9 AM to 3 PM, Pacific time."), followed by the Agents Unavailable Message.

ControlDescription
TimezoneThe timezone used to interpret the schedule. Defaults to the browser’s detected timezone. All available IANA timezones are listed.
Days (Mon–Sun)Each day has its own row. Once any day has hours, a day with no ranges is closed — no calls are transferred to the live agent on that day. If no day has hours, the live agent is reachable at all times.
+ add hoursAdds a new time range to that day. Select an open and close time from 30-minute slots spanning 00:00–23:30.
× (remove)Removes a specific time range from the day.
Tip
You can add multiple ranges per day to represent splits such as morning and afternoon shifts with a lunch break in between (e.g., 09:00–12:00 and 13:00–17:00).
Note
Once hours are set, outside them — or on days with no ranges — callers who request a live agent will not be transferred. Configure your Intercept Live Agent Message and any off-hours handling accordingly.

Email Channels

Email channels let your end-users email questions to your Guru at a dedicated address. The AI generates a contextual reply with proper RFC threading headers (so it lands in the original email thread in their inbox) and an automatic AI-disclosure footer (required for compliance with California's BOT law and the EU AI Act).

Add an email channel with the Add email button at the top of Channels. Unlike Twilio channels, no external account is needed — the address is provisioned instantly. You may add multiple email channels per Guru (e.g., one for general support, one for sales, one for billing) by giving each its own Department: click Add email again and you are asked for one (lowercase letters, digits and hyphens, e.g. sales), which gives the new channel its own address.

FieldTypeDescription
DepartmenttextOptional namespace for multi-channel customers. Leave empty for the default channel. Examples: sales, support, billing. The full slug becomes [department.]your-domain (e.g., sales.acmewidgets.com).
Inbound Addressread-onlyThe dedicated email address for this channel, auto-computed as <slug>@inbox.instantaiguru.com. Updates live as you edit the Department field. End-users either email this address directly, or you set up a forwarder from your real address (e.g., [email protected]) to this address.
Channel NametextA friendly label for this channel (shown in the card header for your own reference). Example: "Customer Support".
PausedcheckboxWhile ticked, the Guru answers no email on this channel. Mail that arrives meanwhile is not answered later. Save to apply either way.
Reply From NametextThe display name used in the From: header on outbound replies. Defaults to your domain name (e.g., acmewidgets.com). Customize to something like "Acme Support" for a polished customer-facing identity.
From AddresstextOptional branded sender (e.g. [email protected]), with a Verify Domain button and a status line below it. Replies use it only once the domain is verified; see Branded From Address. A new channel pre-fills support@<your domain>.
Email Deployment ContexttextareaOptional channel-specific instructions for the AI when handling email. The default text reminds the AI that emails are asynchronous and to use clear paragraphs and explicit URLs (avoiding "click here" phrasing).
Forwarding SourcetextThe address you forward from (e.g., [email protected]); the forwarding itself is set up in your email provider. Mail sent from this address is never answered, which stops reply loops. Pre-filled with support@<your domain>.
AI DisclaimertextOptional. Your own wording of the AI notice at the foot of every reply. It must say “AI”. Left empty, replies use “This is an AI-assisted reply from <Reply From Name>.”
SignaturetextareaOptional text appended to every reply after the AI disclaimer: a sign-off, support hours, or links to documentation.
Opt-out linecheckboxOn by default. Adds “Reply STOP to opt out of automated replies.” to the foot of every reply, with the unsubscribe header some mail apps show as “from a mailing list”. Untick it for plain one-to-one support replies. A customer who replies STOP is still honoured either way.
BCC Support TeamtextOptional. One or more addresses (comma-separated) that receive a silent blind copy of every reply the Guru sends on this channel — so your human team keeps an eye on the conversation. Hidden from the customer (true BCC, never shown in the message headers). Leave blank to disable.
Stop when a person repliescheckboxOnce someone on your team answers in a thread, the Guru stays out of that thread for good. See below.
Log emails the Guru does not answercheckboxOff by default. When on, every email this channel receives and does not answer appears in the Chat Dashboard with its sender, subject and the reason: newsletters and auto-replies, your do-not-reply list, a thread your team took over, the channel paused, a reply the Guru could not produce, or mail from the Guru's own addresses (loop protection). The email itself is not stored.
Never Reply TotextareaOptional. Senders the Guru ignores on this channel: mail from them gets no reply. Each entry is one address ([email protected]) or a whole domain (*@yourdomain.com). Separate entries with commas, semicolons or new lines. Leave blank to answer every sender.
How the support BCC behaves
The BCC copy is sent only on genuine replies to customers — never on the STOP/unsubscribe acknowledgments. It is not affected by the suppression list (it's your own internal team, not outreach). It may list your own branded From address: a copy that loops back through your forwarder is recognised and never answered. The customer is never blind-copied a second time. On a busy channel this means one internal copy per reply, so point it at a shared/distribution mailbox rather than a single person if volume is high.
How Stop when a person replies behaves
The Guru notices that a person on your team answered in either of two ways: from the customer’s next email in that thread, whose headers or quoted text name a person on your company’s domain, or from a teammate’s Reply-All that copies this channel. From then on that thread is left to your team. A reply into a conversation the Guru was never part of is also left to your team.
How Never Reply To behaves
Its main use is keeping the Guru out of your team's own replies. If a teammate answers a customer from the BCC copy, listing *@yourdomain.com means the Guru ignores that reply instead of answering it. Matching reads only the message's sender address, so customer mail that reaches you through a forwarder is still answered. A domain entry matches that domain exactly: *@yourdomain.com does not cover mail.yourdomain.com, so list subdomains separately. A bare yourdomain.com or @yourdomain.com is read as the whole domain. Other wildcard forms (such as sales-*@yourdomain.com) are not supported and are ignored.
The Email channel card expanded: Department, auto-computed Inbound Address, Channel Name, an unticked Paused switch, Reply From Name, a verified From Address with Verify Domain, Email Deployment Context, Forwarding Source, an AI Disclaimer reading This reply was written by Acme Widgets' AI assistant, a Signature, a ticked Opt-out line, BCC Support Team, Stop when a person replies, Log emails the Guru does not answer, and Never Reply To.
An expanded Email channel card. Paused sits under the channel name; the AI Disclaimer and Signature close every reply; Stop when a person replies and Never Reply To keep the Guru out of your team’s conversations.

Setup Pattern

Most customers don't change their public-facing email address. The recommended pattern is to forward mail from your existing support address to the channel's inbound address:

  1. End-users continue to email [email protected] as usual.
  2. You configure your email provider (Google Workspace, Microsoft 365, etc.) to forward all support@ mail to [email protected] (the Inbound Address shown on the card).
  3. The AI receives the forwarded copy and replies on your behalf, with the original sender as the recipient.
Tip
Replies show your Reply From Name, threaded under the original conversation. To hide the inbox.instantaiguru.com address as well, verify a Branded From Address.

Built-In Features

FeatureBehavior
RFC threadingReplies include In-Reply-To and References headers, so they thread under the original conversation in Gmail, Outlook, Apple Mail, etc.
AI disclosure footerEvery reply ends with a short disclosure for compliance: your AI Disclaimer (by default “This is an AI-assisted reply from …”), your live-support contact if set, and, unless you untick Opt-out line, “Reply STOP to opt out of automated replies.” Your Signature follows it. The wording is yours to change, but the AI disclosure cannot be removed.
STOP keyword detectionIf a message’s first line is STOP, UNSUBSCRIBE, REMOVE or a similar opt-out (or the message asks not to be emailed), the Guru does not answer it. It sends a brief acknowledgment and records the opt-out. The Guru only ever replies to mail the person sends, so writing again resumes replies.
List-Unsubscribe headerUnless you untick Opt-out line, every reply includes the RFC 2369 List-Unsubscribe header pointing to mailto:[email protected]. Mail providers may show this as an Unsubscribe link next to the sender name.
Reply to sender onlyThe reply goes only to the person who wrote. Addresses in the original’s To and Cc are not copied, which prevents loops through forwarders and mailing lists. To keep your team informed, use BCC Support Team.
Attachment handlingAttachments on inbound mail are read where possible and always accounted for, so the Guru never tells a sender they attached nothing when they did. See Sending Media on the Other Channels.
Note
Email replies do not use multi-step interactive flows (the JSFE engine). Email's asynchronous nature is a poor fit for OTP verification, payment collection, or any form-style interaction. For those features, direct users to the web chat where flows work in real time. The AI naturally responds in the language of the user's email; no language setting is needed.

Branded From Address (optional)

Until a domain is verified, replies are sent From: the channel's inbound address (<slug>@inbox.instantaiguru.com). To send them from your own domain (e.g., [email protected]), use the channel's From Address field: a new channel pre-fills support@<your domain>. Change it if needed and click Verify Domain. The status line below the field shows ⏳ Not yet verified, ✓ Verified or ✗ Verification failed, and updates as you type.

If verification failed (Amazon SES stops checking about 72 hours after it starts), click Verify Domain again to restart it. DNS records you already added keep counting.

The verify modal shows four DNS records you must add to your domain's DNS host (Cloudflare, Route 53, GoDaddy, etc.):

  • Three CNAME records — DKIM signing keys. These prove that mail signed with the matching private key really came from us, on your behalf. Each is a separate, additive record. Cloudflare users: set proxy status to DNS only (gray cloud) on all three.
  • One TXT record — the SPF record (see the warning below).
SPF: one record per hostname — merge, don't duplicate

SPF allows exactly one TXT record per hostname (RFC 7208). If a receiver finds two TXT records on the same name that both begin with v=spf1, SPF authentication fails with a PermError and your mail is rejected or sent to spam — for every sender, not just the new one. Different subdomains can each have their own SPF; it's only multiple records on the same name that break things.

The verify dialog (Verify Sending Domain) asks you to add an SPF record on the domain of your From address — normally your apex domain (e.g., yourdomain.com). If you already have an apex SPF (likely — Google Workspace, Microsoft 365, MXroute, Mailchimp, etc. all add one), do not add the SES record as a second TXT. Instead, edit the existing apex SPF and append include:amazonses.com before the closing -all or ~all.

Example merge:

Existing apex SPFAfter merge
v=spf1 include:_spf.google.com -allv=spf1 include:_spf.google.com include:amazonses.com -all
v=spf1 include:mxroute.com -allv=spf1 include:mxroute.com include:amazonses.com -all
(no existing record on apex)v=spf1 include:amazonses.com -all

To check what you have, run dig +short TXT yourdomain.com and look for the line starting with v=spf1. Whatever's there is your existing apex record — merge into it; never create a second.

Note on -all vs ~all: Keep whichever your existing record uses. -all is a hard fail (reject non-listed senders), ~all is a soft fail (mark as suspicious but still deliver). What matters is that the merged result stays a single SPF record per hostname.

SPF and DKIM are independent layers of authentication, and they don't share the "one record only" constraint. SPF is a single TXT record on the apex domain authorizing approved senders. DKIM uses one CNAME per signing key, so multiple email services on the same domain coexist cleanly — SES adds three CNAMEs without affecting any DKIM records your other services have already created.

After the records propagate (typically 5–30 minutes), click Check Status in the verify modal. Once verification succeeds, save the channel configuration to activate sending from the branded address. If you skip the verification or it fails, the channel falls back to the default inbox.instantaiguru.com From address — you do not lose service.

Knowledge Files

Documents your Guru learns from in addition to your website: price lists, manuals, policies, product catalogs, or anything not on your public site.

The Knowledge Files section: under References, Never use uploaded files as references is ticked and, indented under it, Only if a folder or file starts with ! is ticked; below, an upload box with Choose files and Choose a folder, a line reading 2 files ready, 28 KB in all, the two files price-list-2026.pdf and returns-policy.docx each with its size and a remove button, and an Upload 2 files button; below it, Your files with Refresh and Delete selected and an empty file table.
References set to hide only files marked with “!”, and two files chosen and ready to upload. Each can be removed before you upload.
ActionDescription
Never use uploaded files as referencesThe Guru still answers from your uploaded files but never links to them in its references.
Only if a folder or file starts with “!”Offered under the option above, and narrows it to marked files. A file counts as marked when its own name or any folder on its path starts with “!” (for example !Internal/escalation-matrix.pdf). Unmarked files are linked as usual.
Choose files / Choose a folderPick one or more files, or a whole folder. You can also drag files onto the box.
The ready listLists each chosen file with its size, and the total. Click × to drop a file before uploading.
Upload N filesUploads the listed files to secure cloud storage, with a progress bar.
RefreshReloads Your files from the server.
Delete selectedRemoves the checked files after you confirm.

The Your files table lists every uploaded file with its Name, Size (KB) and Last modified. Tick files (or the header box to select them all) to delete them.

Note
After uploading or deleting knowledge files, Re-index (see Re-index) so the Guru incorporates the changes into its knowledge base.

Users

People who can sign in to this console, and what each may do. Only users with the Admin permission can open this section.

Managing Users

The cards edit your user list directly. Click a card to select it, click a field or the permission grid to edit, and type — every keystroke goes straight into the configuration. There is no per-card Save or Cancel: Save in the top bar commits the section, and checks every user you touched just before it writes.

ActionWhat it does
Add userAdds a new card and opens it for editing. Enter the person’s name, email and permissions — you do not set a password (see Invitations).
Remove selectedDeletes the selected user after a confirmation. This is also how you discard a card you added by mistake. You cannot delete your own account.
Edit a userClick the card to select it, then click a field or the permission grid.
Discard your editsLeave the console without saving. You are warned first, and can review the changes before deciding.
The Users section with Add user and Remove selected buttons and three users. Jordan Rivera is marked Accepted and You, with every permission but Read Only ticked; Priya Nair is selected, marked Invited, with a Resend invite button and the Knowledge Files, Reindex, Chat Logs, CSAT and Outbound permissions ticked; Sam Taylor is marked Accepted and has Read Only and Chat Logs ticked.
The Users section. Each card shows where its invitation stands; your own card carries a You badge and is edited in General instead.
Admin and Read Only cancel each other
Ticking Admin grants every other permission (except Config) and clears Read Only; ticking Read Only clears Admin. An account holding both would be shown every control and refused by all of them, so the card will not let you create one.

User Card Fields

FieldTypeDescription
First NametextRequired. 2 to 100 characters.
Last NametextOptional. Up to 100 characters.
EmailemailRequired, a valid address, and unique across all users — this is the login identifier.
Passwordauto-generatedFor a new user this is filled with a random value and shown masked and greyed-out. You never set it and it is not yours to hand out: the new user chooses their own from the invitation. Existing users show masked dots; to let someone set a new password, resend the invitation or have them use Forgot password on the sign-in page.

These rules are checked when you click Save. Names and addresses are trimmed of stray spaces, and only the users you actually touched are checked — an older record that was already incomplete will not block an unrelated change. Duplicate addresses are the exception: uniqueness is checked across the whole list every time. If a check fails, the save stops and names the user and the field.

A newly added user card marked Not saved yet, open for editing: First Name Sam, Last Name Taylor, Email sam@acmewidgets.com, a masked auto-generated password shown greyed out, and the permission grid, Admin through Outbound, with every box unticked.
A newly added user, Not saved yet. The password is generated for you and locked, every permission starts off, and the invitation goes out when you Save.

Invitations

You never hand out a password. When you Save a new user, they are emailed an invitation automatically: a secure link to set their own password. The email names your account’s domain, the link works once and is valid for 72 hours, and opening it shows the Set Password dialog straight away. A toast confirms “Invitation emailed to {email}”, or says the invitation could not be sent.

Each card shows where its invitation stands:

StatusMeaning
Not saved yetThe user is not on the server yet. The invitation goes out when you Save.
Invited + Resend inviteInvited, and has not set a password yet. Resend invite mails a fresh link (after you confirm) — an invitation that landed in a spam folder is a normal thing to send again.
AcceptedThe person has set their password.
Send inviteA user added before invitations were recorded. Click it to send one.
An expired link
If the link expires before it is used, click Resend invite, or the user can request a fresh one from Forgot password on the sign-in page, with no admin action needed.

Permission Checkboxes

Each permission opens a section or a feature:

PermissionGrants Access To
AdminFull administrative access — every section and user management. Ticking it also ticks every permission below except Config.
Read OnlyThe whole console stays readable and every write control is switched off — forms, buttons, Upload Flows / Upload Tools / Design Flows, and Save. The top bar shows a Read-only badge rather than leaving a page of dead controls to be read as a bug. Two exceptions: Re-index still works (it writes no configuration), and the user can still change their own password, so an invited account can be activated. The server enforces this independently of the page.
InstructionsThe Instructions section (who your Guru is, and the advanced notes).
SettingsThe Settings section (conversations, session expiry, answers and references, search, and the Twilio account).
Knowledge FilesThe Knowledge Files section (upload and delete documents).
ReindexThe Re-index button in the top bar.
Chat LogsThe Chat Dashboard link in the menu. The server enforces it: a user without Chat Logs cannot read conversations at all.
ChannelsThe Channels section (WhatsApp, SMS, Voice, Email).
IntegrationsThe Integrations section (Shopify, ShipStation, CSAT and more).
SubscriptionThe Subscription section (plan, usage and billing).
AppearanceThe Appearance section — the widget’s words, colors, icon, effect and position.
ConnectThe Live Support link in the menu (opens the live-agent dashboard). Without it the button is greyed-out with a “You do not have permission for this” tooltip. The link appears only when Live Support is enabled. See Live Support.
CSATThe CSAT Dashboard link in the menu (opens post-call survey results). Without it the button is greyed-out with a “You do not have permission for this” tooltip. The link appears only when CSAT is enabled. See CSAT.
OutboundThe Chat Dashboard’s outbound conversations, its Direction selector and its Campaigns view (see Outbound calls and campaigns). The server enforces it: a user without Outbound never receives outbound-call conversations. Admin grants it automatically.
ConfigUnlocks the Upload Flows, Upload Tools, and Design Flows top-bar buttons (interactive flow/tool editing) and the Model set panel in Settings. (This checkbox is drawn only for an InstantAIguru platform administrator, on the card of a user who already holds Admin — a tenant admin will not see it.)
Tip
Your own user card is marked with a You badge and cannot be edited here, so you cannot accidentally lock yourself out. Use General to change your own name, email, or password.

Integrations

Connect your Guru to third-party platforms to extend its capabilities.

JSFE Workflows

JSFE is the workflow engine that runs the flows you build in the Flow Designer. The card's toggle controls whether JSFE is billed as a channel on your subscription:

  • Base integration flows are free. The bundled system and Shopify integration flows run without enabling this card — you are never billed for them.
  • Custom flows auto-enable it. As soon as your Guru has one or more custom flows defined, the card locks on (custom flows require the engine) and the status line shows how many flows are driving it.
  • No custom flows? The toggle is manual — enable it only if you want the engine billed and available ahead of building flows.

Like any channel change, the toggle is a draft: billing reconciles when you Save, through the same confirmation prompt described under Channels.

API call log (optional)

If your flows call your own API and that API keeps a request log, the card can connect it to the Chat Dashboard. With the URL and token both saved, each conversation in the dashboard shows the API calls it made, in an API Calls column.

The JSFE Workflows card in Integrations, with its billing toggle, the API call log fields (Logs URL, Logs Token masked, Logs Timezone) and, below a second divider, Action safety: Action persistence set to Session only (default) and the Durable action journal checkbox greyed out.
The JSFE Workflows card as a platform administrator sees it, with the API call log filled in and Action persistence set to Session only.
FieldTypeDescription
Logs URLtextThe log API’s base address, over https.
Logs TokenpasswordThe bearer token that API issued. A URL saved without a token counts as not configured.
Logs TimezonetextThe timezone the log server writes its timestamps in, as an IANA name such as America/Los_Angeles. Leave it blank, or enter a name that is not a valid IANA zone, and the platform default (America/Los_Angeles) is used. If it names the wrong zone, every call is placed hours away from its conversation and none of them attach.
The token never reaches the browser
The platform reads the log on the server. The dashboard page asks the platform for the calls and never sees the URL or the token. Like the rest of the card, these fields need the Integrations permission and are locked for a Read Only user.

Action safety

Some flow steps act on a customer’s account: they charge a card, cancel a service, change contact details. These settings decide how the engine guards those actions against running twice when a reply is lost or a caller repeats themselves. Only a platform administrator sees and changes them; for everyone else the card keeps them as they are.

FieldTypeDescription
Action persistencechoiceSession only (default): each action is guarded within the conversation alone, with no journal. Durable: actions rely on the journal below. Choosing Session only turns the journal off. A Guru that had the journal on before Session only became the default stays Durable.
Durable action journalcheckboxRecords each action outside the conversation, so a reply lost in the middle of a charge does not lead to the charge running again. With Durable selected and the journal off, actions in flows that require the journal are refused; other flows are unaffected. Off until ticked. Unavailable with Session only.
Change it between conversations, not during them
A conversation keeps the mode it started with. If you change the setting while a conversation is in the middle of an action, that conversation’s next action is refused; new conversations use the new setting. In both modes every action still needs the customer’s explicit confirmation, and an action whose outcome is unknown is never retried automatically.

Shopify Integration

Add the Instant AI Guru app to your store from the Shopify App Store — open the listing at apps.shopify.com/instant-ai-guru and click Install, or search Instant AI Guru under Apps in your Shopify admin. Installing from the App Store connects your store automatically (no API credentials required) and is billed through Shopify.

Note
Billing for App Store installs is handled by Shopify (App subscription) — you manage your plan and channels from the Guru's Shopify billing panel, not Stripe.

Activating the Chat Widget on Your Storefront

If you installed the Instant AI Guru app from the Shopify App Store, the storefront chat widget is delivered as a theme app extension. After installation, you must enable the extension in your active theme before the widget appears on your storefront.

The easiest way: the Shopify card in the admin console shows an “Activate your chat widget on your storefront” banner while the widget is pending — its Activate Widget button opens your theme editor with the widget preselected, so all that's left is toggling it on and clicking Save. Or do it manually:

  1. In your Shopify admin, go to Online Store → Themes.
  2. Click Customize on your active (published) theme.
  3. In the theme editor's left sidebar, click the App embeds icon.
  4. Locate InstantAIGuru Chat Widget in the list and toggle it on.
  5. Click Save in the top-right corner.

The chat widget will now appear on every storefront page. To disable the widget, repeat these steps and toggle the embed off — no code changes required.

The Shopify card also holds an optional MCP Endpoint (empty uses https://<your store>/api/mcp) and the Admin API Version (default 2025-01); leave both as they are unless we ask you to change them. A collapsed Legacy Token section is only for custom apps created before January 2026.

Note
Shopify requires theme app extensions (rather than legacy script tags) for storefront UI injection. Enabling the embed puts widget delivery under your theme's full control and keeps the integration compliant with Shopify's theme guidelines.

ShipStation — Live Carrier Tracking

Your store already tells the Guru where an order stands. ShipStation adds the carrier’s own scan history on top of that — where the parcel physically is, when it last moved, and any delivery exception — so a customer asking “where is my order?” gets the same detail an agent would read off the carrier site.

The ShipStation card in Integrations, switched on: a truck icon, a Setup Guide button, an enable toggle, a note that shipments labelled elsewhere fall back to the store's own tracking, an optional Base URL field, and an API Key password field with a Show button.
The ShipStation card, in Integrations below Shopify. Its Setup Guide button opens this page.
FieldTypeDescription
On/off switchtoggleThe switch at the top right of the card. Turns the integration on and reveals the fields below.
Base URLtextOptional. Leave it blank and the standard ShipStation V2 endpoint is used. Fill it in only if ShipStation has given you a different one.
API KeypasswordYour ShipStation V2 API key, from ShipStation → Settings → Account → API Settings. Has a Show button. Required whenever the integration is enabled — saving without one is refused, because the card would otherwise look configured while every lookup failed.
A shipment that isn't found is normal, not a fault
Labels bought outside ShipStation simply won’t be there. The Guru treats that as expected and falls back to your store’s own tracking information, so enabling this can only add detail — it never takes away an answer the Guru could already give.
Verification is required first
Tracking detail is released only after the customer passes a one-time code, exactly like order lookup. Shipment history reveals a delivery address and a movement pattern, so it is never handed to an unverified caller.

CSAT — Post-call Surveys

Automatically text or email a short customer-satisfaction survey link to the customer after a call. By default the survey runs on our managed CSAT — nothing to deploy: create an admin login and choose how the link is delivered. Prefer to run your own? Tick I self-host CSAT and point the card at your own deployment instead.

Managed (default). Leave I self-host CSAT unticked and click Create CSAT Admin Login: we provision a private CSAT space for this Guru and return a one-time invite link. Open it, set a username + password, and you are the admin. Once CSAT is switched on and saved, a CSAT Dashboard link appears in the lower part of the left menu to open your results. It is greyed out while the service is offline, and for users without the CSAT permission or with Read Only.

Self-host. Tick I self-host CSAT to reveal the CSAT Site URL and CSAT Secret fields (below) and connect the card to your own deployment.

The CSAT card in Integrations: self-host toggle, CSAT Survey, English and Spanish invitation messages whose label notes that a br tag sends the rest as a separate text, and a collapsible SMS delivery section with an existing-number picker, From number, Account SID, and Auth Token.
The CSAT card in Integrations. The survey and invitation messages sit with the general settings; picking an existing SMS number in the SMS delivery section copies its credentials (read-only). Invitations use a {{link}} placeholder for the survey URL, and a <br> to send the rest as a separate text.
Self-hosting CSAT
Only if you tick I self-host CSAT. On any Linux server, run the one-line installer, then open the app's Settings page to copy its URL and secret:
curl -fsSL https://raw.githubusercontent.com/ronpinkas/csat/main/install.sh | sudo sh
Full instructions and source: github.com/ronpinkas/csat.

Toggle CSAT — Post-call Survey on to reveal the configuration panel. The survey choice and invitation messages sit at the top with the general settings; the Twilio plumbing lives in a collapsible SMS delivery section that stays expanded until a From number is saved and collapses (click to expand) once delivery is configured:

FieldTypeDescription
CSAT Site URL (self-host)textYour CSAT deployment's public URL (e.g. https://csat.yourdomain.com). The survey link is built from this. Hidden in managed mode.
CSAT Secret (self-host)passwordThe token secret shown on the CSAT Settings page. It signs each survey link so your CSAT app accepts it. Hidden in managed mode.
CSAT SurveytextOptional. The survey (name or id) sent for all channels. Leave blank to use the default survey. A Voice card's per-number CSAT Survey overrides this for calls on that number.
Invitation message, EnglishtextareaThe invitation text sent with the survey link. Use {{link}} where the survey URL should appear, and <br> to split the invitation into separate texts (see below). An invitation without {{link}} is not used; the built-in invitation is sent instead.
Invitation message, SpanishtextareaThe invitation used when the call was handled in Spanish. Leave blank to fall back to the English message. Use {{link}} for the survey URL and <br> to split it into separate texts.
Use an existing SMS numberselectPick an A2P-approved number you already use on an SMS channel to auto-copy its credentials, or choose New dedicated number to enter one manually.
From number / Twilio Account SID / Twilio Auth TokentextThe Twilio number and credentials used to send the survey text. When you pick an existing number these are auto-filled and read-only (the values are copied from that SMS channel); choose New dedicated number to re-enable the fields and enter them manually. The Auth Token has a Show button to reveal the stored value.
Send CSAT EmailcheckboxAlso (or instead) deliver the survey by email.
Email subject / Email bodytext / textareaThe email subject and body. Use {{link}} in the body for the survey URL.
Splitting an invitation into two texts
Put <br> in an invitation message and everything after it is sent as a separate text, which is how you pair the survey link with a second message the customer can act on independently — a WhatsApp chat invite, say, or your support number. <br/>, <br /> and <BR> all work. This is not for length: a single text already carries up to 1,600 characters, which the handset reassembles on its own, so a long invitation needs no marker. At most 5 messages are sent; anything beyond that is folded into the last one rather than dropped. The same marker works in a Voice card's per-number CSAT Invitation.
A2P 10DLC — this is an unsolicited follow-up
A post-call survey text is a proactive, unsolicited outbound message — a different regulatory class than conversational replies. The sending number must be registered to an A2P 10DLC outbound campaign. Numbers you already use on an SMS channel are already approved — reuse one with the picker, or register a dedicated number before enabling SMS delivery.

In self-host mode the portal requires the CSAT URL + Secret and at least one delivery method — an SMS number (with its credentials) or the email option — before it will save. In managed mode delivery is handled for you; configure SMS/email here only if you want to customise it.

Multiple named surveys & the override cascade
The CSAT app can hold several named question sets, with one pinned as the default (“Set as default”). Which set (and which invitation text) a call sends resolves in three steps: the Voice card’s per-number CSAT Survey / CSAT Invitation overrides win when set; otherwise this card’s CSAT Survey and language-matched Invitation message apply; and when those are blank, or contain no {{link}}, the default survey and a built-in invitation (English or Spanish, matching the call) are used.

Live Support — Live Agent Calls

Let visitors talk to a live human agent over audio, video, and chat straight from your site or chatbot. Like CSAT, it runs on our managed Live Support by default, or on your own deployment if you self-host. Toggle Live Support — Live Agent Calls on to configure it.

Managed (default) — two ways in for your team:

ControlWhat it does
Live Support button (SSO)Appears in the lower part of the left menu once Live Support is switched on and saved. It is greyed out while the service is offline, and for users without the Connect permission or with Read Only. Signs the current, already-authenticated user straight into the agent dashboard — no second login.
Create Live Support Admin LoginFor a standalone, password-based admin (manage agents without going through this portal). Returns a one-time invite link; open it and set a username + password.
The Live Support card in Integrations, toggled on in managed mode: an 'I self-host Live Support' checkbox, a note that agents sign in via the left-menu Live Support link (SSO), and a Create Live Support Admin Login button.
The Live Support card (managed mode). Agents sign in via Live Support in the left menu (SSO); Create Live Support Admin Login provisions a standalone password-based admin.

Self-host — tick I self-host Live Support to reveal the connection fields:

FieldTypeDescription
Connect Site URL (self-host)textYour Live Support deployment's public URL (e.g. https://connect.yourdomain.com).
Connect Secret (self-host)passwordThe CONNECT_SECRET from your deployment's .env / startup log. It signs the sign-in links so your server accepts them.
Self-hosting Live Support
Only if you tick I self-host Live Support. Full instructions and source: github.com/anthonyicuracao/live-support.
WebRTC & TURN
Audio/video is peer-to-peer (WebRTC); on restrictive networks it relays through a TURN server, which the managed service includes. Your visitors need no inbound ports or installs.

Outbound Call Agent

Your Guru calls a list of contacts from your own voice lines, at the pace and hours you set, and retries anyone who did not answer. When a person picks up, the Guru speaks your greeting and then carries the conversation like any inbound call, with your flows (payments, look-ups, live agent hand-off) available as usual.

The Outbound Call Agent card in Integrations, switched on: an Outbound lines list showing each voice line's number, description and language, the English line ticked and the Spanish one unticked, and a Campaigns table listing a stopped daily campaign with Contacts and Start buttons, a running campaign with Contacts, Pause and Stop, and a completed campaign with Contacts, each with its Reached, Gave up and Total counts.
The Outbound Call Agent card. Each line shows its description and the language it speaks. Tick the lines it may call from, then manage campaigns below.

Outbound lines and billing

Switch the card on, tick the voice lines the agent may call from, and Save. That subscription is billed at Save like any other channel: one channel for the Outbound Call Agent, plus one channel for each ticked line (on top of that line’s own voice channel). It appears under Billed Channels as Outbound Call Agent and Outbound lines.

  • At least one ticked line is required. With the agent on and no line ticked, Save is refused before anything is billed, and the card says so.
  • Campaigns call only from ticked lines. A campaign is saved with the lines it calls from, so Save refuses a campaign whose line is not ticked. A line used by a saved campaign cannot be unticked, or removed from Channels, until that campaign is moved to another line or deleted; Save refuses it. (If a line ever does lose its subscription, the campaign is paused before its next call.)
  • Switching the agent off pauses every running campaign. Switching it back on does not restart them; press Start on each one you want running.

Creating a campaign

Click New campaign and fill in sections 1 to 4, then Save the page: a campaign’s settings are saved with Save, like every other setting. Section 5 loads its contact list with Load list, which acts right away and does not need a Save. Nothing is called until you press Start, which runs the saved campaign and so waits while the page has unsaved changes. The card lists your campaigns with their status (no list yet until a list is loaded), languages and their Reached, Gave up and Total counts; Refresh updates them. Click a campaign’s name to edit it, or Delete campaign to remove it when you Save (a running campaign must be paused or stopped first). A campaign added with New campaign and left empty (no name, call context, language or list) is dropped when you close it. In an empty name, greeting or context field, press → to start from the example shown in it (see Admin Console shortcuts).

A campaign open for editing, with Delete campaign and Close buttons: its name; section 1 Lines with the English line chosen and Spanish left on Don't call in Spanish; section 2 Outbound greeting with an English greeting that announces Acme Widgets and then places {{disclaimer}}, the required AI and call-recording disclosure, and a preview from the first CSV row in which the disclosure is spoken after the company name; section 3 the outbound call context; section 4 Pace with seconds between calls, max attempts and daily hours with a time zone; section 5 Contact list with a chosen CSV, the Phone column set to CELL, the Name column set to customername, a column table where Cust_id is set Cargo as accountNumber, Start and End, the status No list loaded yet, and a Load list button.
A campaign with a new list chosen from a CSV with Cust_id, customername, CELL and language columns. The greeting places the disclosure after the company name with {{disclaimer}}, and the preview, merged from the first row, shows the result.
SectionWhat it sets
1. LinesPick the line to call from in each language, or leave it on Don’t call in …. A line speaks only the language its own phone settings use, so a language offers only ticked lines that speak it. One line per language. With two languages, choose which one a contact with no language is called in.
2. Outbound greetingOne greeting and one AI and call-recording disclosure for each language that has a line, spoken when a person answers. Each language starts with a ready-made disclosure (“This call is made by an AI assistant and is being recorded.” and its Spanish equivalent), which you can reword. The disclosure is required and must contain the words AI and recorded in English, or IA (or “inteligencia artificial”) and grabada in Spanish; Save refuses it otherwise. Put {{disclaimer}} in the greeting where the disclosure should be spoken, for example after announcing your company name; without it, the disclosure is spoken first. The preview below the fields shows the result for the first row of your list. Use {{Column}} in the greeting to speak a value from the contact’s row, e.g. {{customername}} or {{balance}}; an empty value is left out rather than read aloud. Name the action in the greeting (“to get your payment link, say payment link”): a yes/no question cannot start a flow.
3. Outbound call context and instructionsWhy you are calling. The Guru receives this on every turn of the call, so state that you placed the call and what it is for. Required, like the campaign’s name and each language’s greeting; Save refuses a campaign without them.
4. PaceSeconds between calls sets the pace (5 to 3,600; a new campaign starts at 30), Max attempts per contact the retries (1 to 10; starts at 3). Tick Only during daily hours to call only between From and To in the given time zone (09:00 to 19:00 in your browser’s time zone until you change them; From must be before To).
5. Contact listChoose a CSV (up to 10,000 rows), check its columns, set Start and End (they belong to this list, and start as now and a week from now each time you open the campaign), and click Load list. A new list replaces any contacts still waiting from the previous one; it cannot be loaded while the campaign is running. The Phone, Name and, for more than one language, Language columns are matched by name; change any that are wrong. US and Canada numbers are accepted, with or without the leading 1. Language values such as en, English, E, es, Spanish or S are understood; a blank uses the campaign’s default language. Rows with an unusable phone or an unknown language are skipped and counted; a contact whose language the saved campaign has no line for is marked gave up (no line for its language) and not called.
Cargo asOptional, per column. Give a column a cargo name and every call starts with that contact’s value in its cargo, where your flows read it. An account-number column (e.g. Cust_id) is preset as accountNumber automatically, so a payment flow that reads it can confirm the account (“account ending with 5, 2, 1, 4?”) instead of asking for it. Names the platform uses itself, such as callerId, are refused.
Who counts as reached
A contact is reached when a person answers, and is never called again in that list. Voicemail, no answer, busy and failed calls go back to the end of the list until Max attempts, then the contact is marked gave up.

Running a campaign and daily lists

ButtonDescription
StartBegins calling the saved campaign (within the list’s start and end and the daily hours). Waits while the page has unsaved changes; refused when nothing is left to call or the end time has passed, so load a new list in either case. A change you Save while it runs applies from the next call.
PauseStops placing new calls; a call already in progress finishes. Start resumes where it left off.
StopStops the campaign. It is not final: you can load a new list and start it again.
Load listIn the campaign’s section 5, whenever it is not running. The new list replaces whoever was still waiting from the previous one (you are asked first); contacts already called keep their results. Then press Start.

Daily campaigns: keep one campaign with daily hours. Each morning, Stop it (if it is still running), open it, choose the day’s file, check Start and End, load it with Load list, and Start. Anyone from yesterday you still want to reach simply goes back into today’s file.

A campaign's detail view: its name with Refresh and Export CSV buttons, a summary line showing it is stopped on list 6, its start and end, and the calls in progress, and a contact table with each contact's number, name, phone, language, state, attempts, outcome (reached or gave up) and last result.
Click a campaign’s Contacts button to see its current list, contact by contact. Export CSV downloads the outcomes. For progress, attempts and each call’s conversation, use the dashboard’s Campaigns view.

Subscription

Your plan, the channels you are billed for, and what your Guru knows.

The Subscription section for an account without a subscription: Your plan with Plan, Status and Free trial ends tiles; the channels that will be billed when you subscribe, grouped Web, Sms, Voice, Email and Jsfe; a Monthly / Annual save 25% switch; a Subscribe and double your FREE Trial button; and Your Guru's knowledge with Indexed pages, Index size and Last indexed tiles.
Subscription, before subscribing: the channels listed are what you would be billed for.

Your plan and your Guru’s knowledge

FieldTypeDescription
Indexed pagesread-onlyThe number of indexed units in your knowledge base — the searchable pieces the Guru retrieves from. This is the only figure that drives your plan tier. It is not a count of pages on your site, and it is not meant to match the coverage counters below; see the note under that table.
Index sizeread-onlyThe total size of your search index (e.g., "2.4 MB").
Last indexedread-onlyThe date and time your knowledge base was last re-indexed. Shown in red when the index is stale (more than 30 days old) — a reminder to Re-index so the Guru reflects current content.
Planread-onlyYour current tier: Starter, Mini, Pro or Scale, with “(Annual)” on annual billing; “Custom (…)” when a custom price is set.
Statusread-onlyCurrent subscription status (e.g., Active, Trial, Past Due, Canceling, Canceled, Payment Pending, Payment Failed, Unpaid, Paused, No Active Subscription; on AWS Marketplace also Pending AWS Confirmation and Ended).
Datesread-onlyThe labels follow your status: Free Trial Ends / Trial Ends while on trial, Next Renewal when active, Cancels On when cancelling, Access Ends after cancellation, Grace Period Ends and Next Retry when a payment is past due. On AWS Marketplace, AWS Activation reads Awaiting AWS Marketplace until AWS confirms the contract, and Contract Ended gives the end date once it has ended.

Coverage Counters

Under Your Guru’s knowledge, a second group records what the last build actually reached. These appear only once a build has recorded them, so a Guru indexed before this was added shows nothing here rather than a misleading zero. Re-index to populate them.

FieldTypeDescription
Crawled Pagesread-onlySite URLs fetched by the last web crawl.
Knowledge Filesread-onlyHow many Knowledge Files were included in the last build.
Knowledge Pagesread-onlyDocument pages produced by those files — a PDF contributes one per page, so a single 40-page PDF counts as 40 here.
Total Pagesread-onlyCrawled Pages plus Knowledge Pages — the full corpus behind your Guru.
These will not add up to Indexed Pages, and are not supposed to
The coverage counters describe what we reached: three distinct phases of one build, each separately valid. Indexed Pages counts indexed units, which is a different thing entirely — one page can yield several units, and some crawled pages yield none. Only Indexed Pages affects billing. If the two disagree, nothing is wrong.

Billed Channels

Lists every channel you are billed for, each at your plan’s per-channel rate: your website (Web), each WhatsApp, SMS and Voice number, each Email slug, JSFE when enabled, and the Outbound Call Agent with its outbound lines. Phone-based channels are listed by number; Email channels by their slug (e.g. sales.acmewidgets.com). While you have no live subscription it is titled Channels (billed when you subscribe) and shows your configured channels — what you would be billed for when you subscribe.

Subscription Actions

Note
Merchants who installed via the Shopify App Store are billed through Shopify (App subscription) and manage billing from the Guru's Shopify billing panel, which includes a Cancel Subscription button while a subscription is active. Accounts bought through AWS Marketplace are billed by AWS; see AWS Marketplace billing. The Stripe actions below apply to neither.
ButtonDescription
Subscribe & double your FREE TrialShown when you have no active subscription. Opens the Stripe checkout form directly within the page. Choose Monthly or Annual with the switch above it first. With a custom price it reads Subscribe and there is no Monthly/Annual switch.
Manage subscriptionShown when you have a subscription to manage (active, on trial, past due, paused, or cancelling). Opens the Stripe Customer Portal where you can update payment methods, view invoices, or cancel.
Switch to annual & save 25%Shown when you are on a monthly plan. After you confirm, switches your plan to its annual version; you are billed the prorated difference immediately and save 25% from then on.
Note
Admin-only fields: Platform administrators also see Sync from Stripe / Sync to Stripe (for Shopify-billed accounts only Sync from Shopify; none for AWS Marketplace), a Billing exempt switch (never require a subscription, never expire), and a Manual Price Override field ($/month, or $/year on annual billing) for overriding plan-based pricing.

AWS Marketplace billing

If you bought instantAIguru through AWS Marketplace, AWS bills you and holds the contract. Subscription shows what AWS reports and replaces the Stripe buttons with an AWS panel. There is no checkout, plan picker or cancel button here; those are all in AWS Marketplace.

The Subscription section for an AWS Marketplace account: Plan Pro, Status Active, Next Renewal 2027-10-01, five Billed Channels (web, SMS, voice, email, JSFE), then the AWS panel reading Billing is managed through AWS Marketplace, Current plan Pro, Channels on your contract 6, configured here 5, contract ends 2027-10-01, a How AWS Marketplace billing differs list, and Manage in AWS Marketplace and Refresh from AWS buttons.
An AWS Marketplace account. The contract covers 6 channels and 5 are configured, so one more can be added.

After you buy in AWS Marketplace, AWS sends you to our Activate your AWS purchase page. Sign in to an existing Guru, or create a new one. Linking does not buy a second AWS contract.

Once you are signed in, the admin asks you to confirm which Guru the purchase belongs to:

  • Link Purchase moves this Guru’s billing to AWS Marketplace. This cannot be undone from the admin.
  • Not This Account leaves it unlinked. Sign in to the correct Guru in the same browser tab and you will be asked again.

Complete the link in the same tab within 24 hours. After that, start again from the setup link in AWS Marketplace. If AWS has not confirmed the purchase yet, the link still succeeds and the status reads Pending AWS Confirmation until it does, usually within a few minutes.

The AWS panel

ItemDescription
Current planThe plan tier on your AWS contract, and (free trial) during an AWS free trial.
Channels on your contractHow many channels the contract covers, next to how many are configured here, and the date the contract ends.
Manage in AWS MarketplaceOpens your subscriptions in the AWS Marketplace console. Upgrades, extra channels, renewal and cancellation are all handled there.
Refresh from AWSAsks the platform to re-read the contract from AWS now, for example right after an upgrade. Only the account owner or an admin gets a fresh read; anyone else is shown the last status AWS reported.

If AWS reports a problem with the contract (it has ended, has not started, combines more than one plan tier, and so on), a red box in the panel says what is wrong and what to do.

Channels on an AWS contract

  • Adding a channel needs room on the contract. If Save would take you past your contracted number of channels, it tells you to upgrade in AWS Marketplace first and saves your other changes without the new channel; add it again once the upgrade appears here. Only a net increase needs room: swapping one channel for another, or removing one, does not. Channels cannot be added while the contract is not active (Save drops the addition the same way).
  • Removing a channel frees a slot but does not lower your AWS charge. Save says so and asks you to Continue. A smaller contract takes effect at renewal, in AWS Marketplace.
  • A smaller contract at renewal. If you renew for fewer channels than you have configured, the panel shows Action required: choose which channels to remove, then Save. Your Guru stays active in the meantime, and the panel shows the deadline. If you have not chosen by then, we keep the web channel and your other channels in their saved order up to the new limit; JSFE custom flows keep a slot only if one is left.
Custom pricing
A negotiated price on AWS Marketplace comes as a private offer that you accept in AWS. When one is in place, the panel shows the Accepted AWS contract price. A custom rate requested on our side is shown separately and does not change what AWS charges until you accept a private offer for it.

Settings

Fine-tune how your Guru finds information and talks to people. Settings is in the lower part of the menu.

The Settings section: Conversations with the generic visitor name, Session expiry with three fields, Answers and references with the reference-URL controls, matching documents and keyword search, the Twilio account panel open because no number is saved yet, and the collapsed Model set panel.
The Settings section. Twilio account and Model set are collapsible panels (Twilio account opens by itself while no number is saved); Model set is shown only to platform administrators and users with the Config permission.
FieldTypeDescription
Generic visitor name text How end-users are referred to when their name is not known (e.g., Site Visitor, Customer, Guest). Used in greetings and conversation context.

Session expiry (SMS and WhatsApp)

A phone number is an assumption, not an identity — US carriers reassign roughly 100,000 numbers a day. These three fields decide how long a customer who passed a one-time code stays verified, and how long a conversation survives at all before it is discarded. Leave any of them blank to use the platform default shown in the field.

Session expiry on the Settings section: an explanatory paragraph about carriers reassigning numbers, then three number fields: Re-verify after idle (minutes), Re-verify after (hours) however active, and Discard the conversation after idle (hours).
Session expiry, in Settings between Generic visitor name and Answers and references. The fields are empty until you set your own; empty means the platform defaults (480 minutes, 12 hours and 24 hours).
Applies to SMS and WhatsApp only
Voice is unaffected: a phone call is already its own session, and it ends when the caller hangs up. Web chat is governed by the visitor’s browser session, not by these fields.
FieldTypeDescription
Re-verify after idle (minutes) number How long a verified customer may go quiet before the next message asks them to verify again. Default: 480 (8 hours).
Re-verify after (hours), however active number A ceiling that ignores activity — even a continuously busy conversation re-verifies once this many hours have passed since the customer first verified. Default: 12.
Discard the conversation after idle (hours) number How long an idle conversation is kept before it is thrown away entirely — history, context and all. The next message starts a fresh conversation. Default: 24.
This is a risk decision, not a convenience setting
A clinic and a retail store do not share one appetite here. Shorter windows mean more one-time codes and more friction; longer ones mean a reassigned number could reach a previous owner’s conversation. The two Re-verify fields work together — whichever comes first wins — so a long idle window is still capped by the absolute one.

Answers and references

FieldTypeDescription
Enforce reference URLs checkbox When checked, the AI is required to include source URLs in its responses. This increases transparency but may make answers more verbose.
Forbid reference URLs checkbox When checked, the AI is prevented from including any source URLs in responses. Useful when you want cleaner, more conversational answers.
URLs allowed in answers even when not in the reference textarea A comma-separated list of URLs the AI may reference even when they are not found in the retrieved documents. Useful for linking to your pricing page, contact form, or other important pages.
Important
Enforce and Forbid reference URLs are mutually exclusive: if both are ticked, Save is refused and takes you to them. Enforce is on by default. If neither is checked, the AI uses its judgment on when to include references.
FieldTypeDescription
Matching documents to evaluate number (1–10) How many documents are retrieved from your knowledge base for each query. Recommended: 3–5. Higher values may improve accuracy for complex questions but increase response time. This field is required: if it is empty or outside 1–10, Save is blocked and the form jumps to this field for correction.
Hybrid keyword search type select Only relevant when keyword search is enabled. should = keyword matches boost relevance (recommended). must = results must contain the keywords (more restrictive).
Enable keyword search checkbox Enables hybrid search that combines semantic (meaning-based) search with traditional keyword matching. Can improve results when users search for specific terms, product names, or codes.

Frequent questions (chat starters) are set in Appearance → Words.

Twilio account

The default Twilio number and credentials for platform features that send SMS outside a specific channel — most importantly Flow (JSFE) SMS steps, which require the Twilio Number to be set. Channel cards keep their own per-channel credentials; this card is the account-level fallback. The panel is open while it still needs a number and closed once one is saved (click its title to open it).

FieldTypeDescription
Use an existing SMS numberselectPick a number you already use on an SMS channel to auto-copy its credentials (fields become read-only), or choose New dedicated number to enter one manually.
Twilio numbertextThe sending number used by Flow SMS steps and other non-channel texting. Required for flows that send SMS.
Account SID / Auth tokentext / passwordYour own Twilio credentials for that number. The Auth Token has a Show button.

Model set

The Model Set editor lets administrators override which AI model is used for each processing role. By default, all roles use Default (system) — centrally managed defaults that are optimized and updated automatically for best results. The panel is closed by default — click its title to open it. Its 18 roles are listed in six numbered steps, in the order a message meets them.

The Model set panel opened, listing eighteen roles in six numbered steps from Before the engine to Recovery, each with a one-line description and a model dropdown set to Default (system), and a Reset to defaults button below.
The Model set panel. The roles are grouped in pipeline order, and each carries a one-line description of what it decides.
RoleTypeDescription
1. Before the engine — Every message, in this order.
Auto-reply gate select SMS and WhatsApp only: decides whether an incoming message was sent by software rather than a person, within 1.5 seconds.
Preprocess select Recognises a greeting, thanks or goodbye, a request to wait, or an unclear message, within 1 second.
2. Intent detection — Which flow the message starts, then the values the flow needs.
Intent Detection select Picks the flow and its fixed-choice values. It starts together with Intent Hedge; the first complete pick wins and cancels the other.
Intent Hedge select The second picker: the flow and its fixed-choice values in one call.
Intent Parameters select Reads the chosen flow’s free-text values (an email, an account number, an amount) after the pick. It starts together with its alternate; the first good answer wins.
Intent Parameters — alternate select The same extraction on a second host, at the same moment.
AI Callback select The flows’ other AI calls, and Intent Detection’s fallback if it has not picked within 1 second.
3. Qualifier — Does the question need documents? Three legs run at once.
Qualifier — classify select Decides whether the question needs documents.
Qualifier — classify alternate select A second opinion for the classify leg. It starts if a decision model has given no verdict within 1 second, or races a text model. Default picks a model from a different vendor.
Qualifier — answer select Writes the proposed answer when no documents are needed.
Qualifier — rephrase select Writes the query used to search your knowledge base. Default uses the answer model.
Qualifier — text-leg alternate select A second opinion for the answer and rephrase legs. It starts if a leg has not answered within 2 seconds, and each leg stops waiting at 3.5 seconds.
4. Ranker — Which retrieved documents the answer uses.
Ranker select Judges each retrieved document.
Ranker — alternate select Starts if a decision-model Ranker has given no verdict within 1 second. Default picks a model from a different vendor.
5. Guru — The answer.
Guru select Writes the answer from the documents.
Guru — alternate select A second opinion for the Guru. It starts if the Guru has not begun answering within 3 seconds, and whichever answers first is shown.
6. Recovery — Only when a step above fails.
JSON Intervention select Repairs a reply that should be JSON and is not.
Guru Intervention select Retries an answer that failed.

Each dropdown lists the available models, by their model ID, grouped by provider — OpenAI, OpenAI (reasoning), Bedrock (Anthropic), Bedrock (Meta), Google, Meta Model API, Meta Model API — TRAINS ON YOUR DATA, DeepSeek (PRC-hosted), Bedrock (Anthropic, global routing), Bedrock (Z.ai), Bedrock (Qwen), Bedrock (DeepSeek), Bedrock (OpenAI open-weight), Groq (OpenAI open-weight), Bedrock (Google weights) and TypeSafe (decisions only — no text). The first option is always Default (system), which delegates the choice to the platform’s centrally managed defaults.

Greyed-out options
Some models cannot do some jobs, so a dropdown shows them but will not let you pick them there. The suffix says why:
  • — not schema-native: Qualifier — classify, its classify alternate and the text-leg alternate need a model that is guaranteed to return structured data. A model that might answer in prose instead would break the Qualifier. This applies to us.anthropic.claude-opus-5-5, global.anthropic.claude-sonnet-5-5 (global routing only), us.anthropic.claude-opus-5, us.anthropic.claude-opus-4-8, us.anthropic.claude-sonnet-5, us.meta.llama4-scout-17b-instruct-v1:0, deepseek-v4-flash and the three gpt-oss models (openai.gpt-oss-20b-1:0, openai.gpt-oss-120b-1:0 and Groq’s openai/gpt-oss-120b).
  • — decision seats only: TypeSafe Jev (jev-1.13.0) answers typed yes/no questions and writes no text. It can be picked only for Qualifier — classify, its classify alternate, Ranker, Intent Detection, Auto-reply gate and Preprocess roles. Preprocess also takes a text model.
  • — not a decision model: Intent Detection and the Auto-reply gate are answered only by a decision model, so every text model is greyed out there. Leave them on Default (system) or pick TypeSafe Jev.
Read the group label before you pick
Two groups are labelled with what they cost you beyond price, because the model you choose here sees your visitors’ questions and your retrieved content:
  • Meta Model API — TRAINS ON YOUR DATA — the contributor tier of Muse Spark. It is cheaper because the discount is a training grant. The full-price Meta Model API group is the same model under no-training terms.
  • DeepSeek (PRC-hosted) — served from the People’s Republic of China, so your traffic leaves your jurisdiction.

Click Reset to defaults beneath the model selects to return all roles to Default (system).

Important
Overriding system defaults may affect performance and reliability. The system defaults are tuned centrally for optimal results — only override them if you have a specific reason to do so.
Note
Who can edit the Model Set: the card is shown to platform administrators and to users with the Config permission. Only a platform administrator can change it; for a Config user the selectors and Reset to defaults are read-only. Everyone else does not see the card at all.

Re-index

Re-indexing re-reads your website and rebuilds the knowledge base that your Guru uses to answer questions. You should re-index when:

  • Your website content has changed significantly.
  • You have uploaded or deleted Knowledge Files.
  • You want the Guru to learn about new pages or products.

Click Re-index in the top bar and confirm with Reindex. If you have unsaved changes you are asked to save or discard them first, and your first and last name (General) must be filled in. A popup then shows 4 progress stages:

  1. Launching Worker — Starting the indexing job.
  2. Crawling — Scanning your website pages.
  3. Indexing — Processing and embedding content.
  4. Deploying — Activating the updated knowledge base.

A progress bar and status tiles show real-time updates via a live streaming connection. Click Show Logs to view detailed log output during the process.

When indexing finishes, the popup shows a Reindex Completed Successfully! message with a Done — Refresh Index Info button. Clicking it — or closing the popup with the × — reloads the page so the updated Indexed pages, Index size, and Last indexed values appear.

Note
Re-indexing may take several minutes depending on the size of your website. You can close the popup and the job will continue in the background; you are emailed when it finishes. Without the Re-index permission the button is greyed out.

Deploying Your Guru to Your Site

To make your Guru visible to visitors, embed a single <script> tag on your website. The widget loads asynchronously, displays a chat icon in the corner of every page, and opens the chat interface when clicked.

Universal Embed Snippet

This single line is all you need:

<script src="https://widget.instantaiguru.com/chat-widget.min.js?v=1.67" defer></script>

Place it in your site's HTML — ideally just before the closing </body> tag, or in the <head> if your platform requires it. The widget auto-configures itself from the settings you saved in this Admin panel: colors, chat icon, welcome message, frequent questions and placement flow through automatically. No per-site configuration needed.

Advanced (optional)
Inline parameters (window.instantAIguru) can override what you configured in the console, but the console does not generate them; use them only if support asks you to. For every other deployment the line above is the right choice: change appearance and behavior in the console and click Save, and every site that carries the snippet picks it up on its next page load, with no new code.

Widget Updates

The ?v= in the snippet does not pin a version. widget.instantaiguru.com always serves the current widget, and browsers check for a newer copy on every page load, so updates reach your site without any change to your embed. Keep the snippet exactly as copied from Appearance → Install.

Platform-Specific Installation

Steps for each are typical — your specific theme or version may vary slightly, but the general pattern (head/footer custom-code injection) holds across all of them.

Shopify

Install the Instant AI Guru app from the Shopify App Store — the widget ships as a theme app extension. Activate it: Online Store → Themes → Customize → App embeds → toggle InstantAIGuru Chat Widget on → Save. The Shopify card’s Activate Widget button opens your theme editor with the widget ready to turn on. No code editing is required.

WordPress

Two paths, in order of preference:

  1. Instant AI Guru Chat Widget plugin (recommended) — Plugins → Add New, search “Instant AI Guru Chat Widget”, install and activate. The widget then appears on every page; no code editing is needed.
  2. Code-injection plugin — If not using our plugin, add the snippet to the site footer with a plugin such as WPCode. In a classic theme you can instead paste it into footer.php just before <?php wp_footer(); ?> (block themes have no footer.php, and many hosts disable the Theme File Editor).
Note
Theme-file edits are lost when the theme updates. The plugin or a code-injection plugin is strongly preferred for long-term maintenance.

WooCommerce

WooCommerce runs on top of WordPress, so the WordPress instructions apply directly. Use the Instant AI Guru Chat Widget plugin (recommended) or a code-injection plugin. The widget appears on shop pages, product pages, cart, checkout, and account pages alike.

Squarespace

  1. Settings → Advanced → Code Injection.
  2. Paste the snippet into the Footer field.
  3. Save. The widget loads on every page of the site. Code Injection needs a Squarespace plan that includes it (not the entry plan).

Adobe Commerce (Magento 2)

Two paths:

  1. Admin panel (no theme edit) — Content → Design → Configuration → Edit your store view (or Global) → HTML Head → Scripts and Style Sheets → paste the snippet → Save Configuration → flush the cache (System → Cache Management).
  2. Theme XML — In your custom theme, edit app/design/frontend/<Vendor>/<theme>/Magento_Theme/layout/default_head_blocks.xml and add <script src="https://widget.instantaiguru.com/chat-widget.min.js?v=1.67" src_type="url" defer="true"/> inside <head>. Requires deploying static content and clearing cache.

Wix

  1. Site Dashboard → Settings → Custom Code → Add Custom Code.
  2. Paste the snippet, give it a name (e.g., "InstantAIguru Widget"), set placement to Body — end, apply to All pages, and toggle on for Load code on each new page.
  3. Apply & Save.
Note
Custom Code on Wix requires a Premium plan and a connected domain. Free Wix sites cannot embed third-party scripts.

Joomla

Two paths:

  1. Custom module — Content → Site Modules → New → Custom. Switch the editor to Toggle Editor (or set it to None) so the <script> is not stripped, paste the snippet, assign it to your template’s footer position (Cassiopeia: footer), set Menu Assignment to all pages, save.
  2. Template index.php — Edit your active template's index.php and add the snippet before </body>. Lost on template updates — the module approach is preferred.

Drupal

Two paths:

  1. Block (recommended) — Structure → Block layout → Place block → Add custom block. Body: paste the snippet in a text format that does not filter HTML (Drupal’s default Full HTML with CKEditor 5 may still strip <script>; the library route below avoids this). Place in a footer region with visibility = All pages.
  2. Theme info file / preprocess hook — For developers: add the asset library via your theme's .libraries.yml or use hook_page_attachments() to inject the script.

PrestaShop

  1. Install a code-injection module from PrestaShop Addons.
  2. Configure the module to add the snippet to the displayFooter or displayBeforeBodyClosingTag hook position.
  3. Save. Alternatively, edit themes/<your-theme>/templates/_partials/javascript.tpl directly — lost on theme updates.

WHMCS

  1. FTP / file-manager into your WHMCS installation.
  2. Edit your active template's header.tpl at /templates/<your-template>/header.tpl, OR footer.tpl for footer placement.
  3. Paste the snippet inside the appropriate location and save. The widget appears on the client area pages. (A ClientAreaFooterOutput hook does the same and survives template updates.)
Note
Admin-area pages (/admin) use a separate template; embed the snippet only in the client-facing template unless you specifically want the widget on the admin side.

Webflow

  1. Site settings → Custom code.
  2. Paste the snippet into the Footer code field (code injected before the </body> tag).
  3. Save → Publish your site. Custom code needs a paid plan, and runs only on the published site.

Verifying Installation

After deploying, open your site in an incognito/private browser window. You should see the chat icon appear in the corner you chose once the page has loaded. Click it to open the chat — the Welcome message you set in Appearance → Words should appear.

If the icon doesn't appear:

  • Open the browser developer tools (F12 / Cmd+Opt+I) → Console tab. Look for any error messages mentioning chat-widget or instantaiguru.
  • Check the Network tab for the chat-widget.min.js request — it should return HTTP 200. If 404, the snippet URL is wrong; if blocked, a content-blocker or CSP is preventing the load.
  • If your site has a strict Content Security Policy (CSP), allow https://widget.instantaiguru.com in script-src; https://api.instantaiguru.com and https://stream.instantaiguru.com (plus https://connect.instantaiguru.com if you use Live Support) in connect-src; 'unsafe-inline' in style-src; and blob: in img-src.
  • If you have a cookie-consent banner that blocks scripts until consent: ensure the InstantAIguru widget is allowed in the "necessary" or "functional" category, or grant consent to test.

The Chat Widget: What Your Visitors See

Everything above covers how you configure and deploy the widget. This section covers the other side of it: what a visitor can actually do once the widget is on your site. Nothing here needs to be switched on, with the single exception of Talk to a live agent, which appears only when Live Support is configured and an agent is currently reachable.

The open chat widget: header with the caption and five controls, a welcome message, four chat-starter buttons, thumbs up and thumbs down icons, and an input row with paperclip, microphone and Send.
The widget as a visitor first meets it: your Welcome message and Frequent questions, with the header controls above and the input row below.

Header Controls

Left to right, after the header caption:

ControlWhat it does
Talk to a live agentOpens your Live Support page in a new tab, where the visitor can talk to an agent over audio or video. Shown only while Live Support is configured for the Guru and an agent is reachable; it appears and disappears on its own as agents come on and off duty, so visitors are never offered a handoff that would go unanswered.
Download Chat HistorySaves the conversation to the visitor's device as a JSON file.
Delete Chat HistoryAfter a Keep / Remove confirmation, clears the conversation and starts fresh.
Expand / ShrinkToggles a taller panel for long answers, then back again.
CloseCollapses the panel back to the chat icon. The conversation is kept for the rest of the visit in that browser tab, so reopening resumes it.

The Input Row

ControlWhat it does
Attach (paperclip)Attaches images, audio files or PDFs to the message. See Attachments below.
Voice mode (microphone)Turns on hands-free voice mode: the visitor speaks, the words appear in the message box and are sent after a short pause, and replies are read aloud. Shown only in browsers that support speech recognition.
SendSends the message. Enter works too.

Each answer carries a thumbs-up / thumbs-down pair, so visitors can rate replies. A thumbs-up marks that reply Correct in the Chat Dashboard; a thumbs-down asks the visitor why, marks it Incorrect, and stores their reason in the Revised Answer column. Clicking the same thumb again clears the rating. A fixed line under the input row reads “Note: The Guru can make mistakes. Check important info.”; it is standard practice for AI assistants and is not configurable.

Attachments

Visitors can send the Guru things to look at rather than describe. Attached files appear as chips above the message box, each with its own remove button, and are sent along with whatever the visitor types:

The chat widget with two attachment chips above the input row: an image chip showing a thumbnail and the filename receipt.png, and a document chip showing a page icon and warranty.pdf. Each chip has a remove button.
An image and a PDF attached and ready to send. Images show a thumbnail, other files show their name.
RuleDetail
Accepted typesImages, audio files, and PDFs. Anything else is refused with an explanation rather than accepted and silently ignored.
How manyUp to 3 files per message.
SizeAudio files and PDFs up to 8 MB. Images have no stated limit because they are resized in the browser before upload, to 1280px on the longest edge.
What the Guru does with themImages are described and read, so text inside a screenshot or a photographed receipt is available to the answer. Audio is transcribed. PDFs are read as documents.

Moving the Widget

When Let visitors drag the widget is on (see Widget Placement), a visitor has two ways to move it out of their way, which matters when your own page has a button under it:

  • Drag it. Dragging by the icon or the header moves the widget. It stays where it is dropped, measured from the nearest corner, so it holds that place when the window is resized.
  • Right-click the icon. A menu lists all four corners, with the current one marked and greyed out, so the widget's possible positions are visible rather than something to be discovered by accident.
The widget's right-click menu listing Move to top left, Move to top right, Move to bottom left, and a greyed-out Move to bottom right marked as current.
The right-click corner menu. The corner the widget already occupies is shown as (current) and cannot be picked.

Wherever a visitor leaves it, the choice is remembered on that visitor's device only. It never affects other visitors, and it is dropped as soon as you change and save placement yourself. Turning the checkbox off removes both the drag and the menu.

Sending Media on the Other Channels

Attachments are not limited to the web widget. Each channel accepts what it can carry:

ChannelWhat a customer can send
WhatsAppPhotos, voice notes, and PDFs. Photos are described and any text in them is read; voice notes are transcribed. Message types that cannot be handled, such as video, stickers, contacts or location, get a short reply saying so and listing what is supported, rather than silence.
SMS / MMSThe first 3 images or audio clips in a message (any beyond that are ignored). Images are described and read, with the text of the message treated as the caption for the first one; audio is transcribed. If nothing can be processed and no text was sent, the customer gets a reply explaining that, in English or Spanish.
EmailAttachments on inbound mail. Every part is acknowledged: those that can be read are described or transcribed, and the rest are reported to the Guru with the reason they were not, so it can tell the sender their attachment arrived but could not be read.
Why email behaves differently
Email routinely carries parts nobody consciously attached: signature logos, tracking pixels, inline images from a template. Rather than filter those out, which would risk the Guru telling a sender they attached nothing when they did, every part is accounted for. Two limits keep the cost sane and are reported rather than hidden: images of 5 KB or less are not described, and at most 10 attachments per message are.

Flow Designer

The Flow Designer is a visual, IDE-style editor for building JSFE conversation flows and the custom tools they call — the deterministic, scripted logic that lets your Guru run multi-step tasks (OTP verification, payments, account lookups, Shopify actions) reliably instead of relying on the AI to improvise. Open it from the Design Flows button in the admin console’s top bar (visible to a platform administrator, or to a user with the Config permission); it launches in a separate window.

JSFE is the engine — this is the editor
JSFE (JavaScript Flow Engine) is open source. The engine, the flow language, the step semantics, and the {{ }} expression system are documented in the repository at github.com/ronpinkas/jsfe (also on npm) — treat the repository as the source of truth for what each step does. This guide documents the Designer tool: how to author, test, and save flows visually.
The Flow Designer: a palette of ten step types ending with DISPATCH, and the Flow Properties editor with a parameter's allowed values, on the left; a branching Make a Payment flow on the canvas (greet, ask_amount, a CASE splitting into charge and invalid, then confirm and done); and the Inspector on the right showing the selected SAY step's id, type, value, and its Outcome and Reason fields.
The Flow Designer editing a sample “Make a Payment” flow — the step palette and flow properties (left), the flow drawn as a branching node graph (center), and the Inspector for the selected step (right).

Opening it & how changes are saved

When you click Design Flows, the admin hands the Designer your current flows, tools, global variables, and a short-lived auth token (used by the Test runner and the AI Guru). Nothing is saved automatically — persistence is a deliberate two-step flow:

  1. In the Designer, click Save → review the changes → Send to Admin. This hands your edited flows, tools and global variables back to the admin window.
  2. Switch to the admin and click its Save button to persist them (written via the Config permission).

All three travel in both directions, so global variables can now be created and edited here rather than only in the stored configuration.

Open it from the admin, not directly
Opening flow-designer.html on its own (“standalone”) lets you load/download .flows files, but the Test runner and AI Guru will not work — they need the auth token that only the Design Flows button provides. If the browser blocks the pop-up, allow it and click Design Flows again.

The workspace

AreaWhat it holds
Top toolbarFlow & tool selectors, item actions (New / Duplicate / Delete), Undo/Redo, zoom controls, and the ✨ AI, Test and Save buttons (Load File instead when the Designer is opened on its own), and Close.
Left paletteA legend of the ten step types, plus the Flow Properties editor (name, id, version, prompt, prompt (ES), primary, description, parameters, variables).
Center canvasThe flow drawn as a vertical trunk of steps, with branches fanning out and sub-flows expandable inline.
Right inspectorTwo tabs — Inspector (fields for the selected step) and JSON (the live {flows, tools} model).
Bottom test panelThe Flow Test Runner, hidden until you click Test. It also holds the Global Variables editor.

The palette, inspector, and test panels are all drag-resizable, and your layout is remembered between sessions.

Working with flows

The flow selector lists every flow (primary flows are marked ★); the ALL / ★ PRI button filters to primary flows only. Use New, Duplicate, and Delete to manage flows — built-in system flows are read-only and cannot be deleted. The palette’s Flow Properties section edits the selected flow’s name, id, version, description, prompt and prompt (ES) (the natural-language description the AI uses to decide when to run a primary flow), the primary flag, and its parameters and variables.

Parameters and allowed values

Each parameter has a name, a type (string, number, boolean, object or array) and a description. A string parameter can also list its allowed values, one per line. When a parameter has allowed values, intent detection accepts only those: any other value is dropped, and the flow asks for it. Values are trimmed, matching ignores case, and clearing the list removes the restriction.

The Flow Properties parameters editor. A string parameter named plan lists three allowed values, Starter, Professional and Enterprise, one per line. A second parameter, cycle, lists Monthly, Annual and monthly, and shows the red error
Allowed values on a string parameter. A problem shows in red under the parameter as you type.

The editor flags the same problems the engine would reject when it loads the flow, so you see them while editing:

  • A parameter name declared twice.
  • Allowed values on a parameter that is not a string (for example, left behind after changing its type).
  • The same value listed twice, ignoring case.

Building on the canvas

  • Add a step: hover the trunk and click a green + insertion point, then pick a step type (or Paste).
  • Select: click a step (single), Cmd/Ctrl-click to multi-select, Shift-click to range-select, or drag a marquee on empty canvas.
  • Edit structure: Cmd/Ctrl+C / V to copy/paste, Delete/Backspace to remove (with confirmation).
  • Navigate: two-finger scroll to pan, Ctrl/pinch or the + / − buttons to zoom, Fit to frame everything. Steps auto-arrange — you reorder by inserting/deleting and by moving branches up/down, not by dragging nodes freely.
  • Sub-flows: a FLOW step can expand inline (chevron) to preview the called flow; a reboot call shows a jump arrow that navigates to the target flow.

The ten step types

Each insertion offers these step types. The table is a quick reference — for exactly what each does and how conditions and expressions evaluate, see the JSFE repository.

StepPurposeKey fields
SAYSend a message to the user.Value, Value (ES), optional Digits, Outcome, Reason
SAY-GETSend a prompt and capture the reply.Value, Value (ES), Variable, optional Digits
SETAssign or compute a variable.Variable, Value (expression)
CASEConditional branching (if / else-if).Branches (condition → step) + default
SWITCHMatch a variable’s exact value.Variable, Branches (value → step) + default
FLOWCall a sub-flow.Target Flow, Call Type (call / replace / reboot), Parameters
CALL-TOOLInvoke a registered tool.Tool, Variable (result), Args, onFail
RETURNReturn a value / end the (sub)flow.Value, Outcome, Reason
ENDReturn to the calling flow without a value.Outcome, Reason
DISPATCHEnd every active flow and handle this message as if no flow were running: intent detection picks a flow, and if none matches the AI answers.Outcome, Reason

Outcome and Reason

The steps that can end a flow (RETURN, END, DISPATCH, and a SAY that is a flow’s last step) can declare how the conversation ended. The engine records it when the flow finishes.

FieldDescription
Outcomeunresolved (the user was not helped), deflected (a decoy flow), resolved, or empty.
ReasonFree text explaining the outcome.

Both fields accept {{…}} variables. Leave Outcome empty to declare nothing; clearing a field removes it from the step rather than saving an empty value. On DISPATCH the outcome is kept only when no flow matches the message.

The Inspector for a RETURN step named done: Value {{receipt}}, Outcome resolved, Reason Payment taken, and a hint listing unresolved, deflected and resolved.
A RETURN step declaring a resolved outcome.

Select any step to edit it in the Inspector. CASE and SWITCH get a branch editor (add, reorder, and delete branches; the default branch always stays last). Object and array values — parameters, tool args, and tool schemas — use a recursive tree editor with add/rename/delete and type selection.

Tools

Tools are the actions your flows can call (an HTTP API call, or a platform-approved local function). The tool selector lists them; built-in system tools are marked 🔒 and are read-only. Selecting a tool opens the full-canvas Tool Editor:

SectionContents
Basic InfoID, Name, Description.
ImplementationType = HTTP (url, method, content-type, headers, timeout, response mapping) or Local (a platform-approved function, its args, timeout).
ParametersA JSON-schema tree (type, properties, required) describing the tool’s inputs.
Response Mapping(HTTP only) how the response maps back into flow variables.
SecurityrequiresAuth, auditLevel, and dataClassification.

Flows invoke tools through CALL-TOOL steps. Create a new tool with New while a tool is selected (or via the AI Guru).

Global Variables

Global variables are values shared by every flow in your account — opening hours, a standard disclaimer, a return window — referenced from flow expressions as {{global_business_hours}} and so on. They belong to the account, not to any one flow.

The editor is the Global Variables tree at the bottom of the Test panel, under Session Variables. Click Test to open the panel. The Global Variables editor works there whether or not the test session starts, and a tenant with no globals yet still gets an editor to add the first one.

The Global Variables tree in the Flow Designer's test panel, labelled EDITABLE, showing three entries: global_business_hours set to Mon-Fri 9-5 ET, global_live_agents_comment set to An agent can take over at any time, and global_return_window_days set to 30, with a plus property control below to add another.
The Global Variables editor. Click a name or a value to edit it in place, + property adds one, and the × on a row removes it.

Globals sit outside the flow undo stack, so they are tracked separately: editing one turns the Save button blue on its own, is included by Ctrl/Cmd + S, and counts as unsaved work when you close the window. They ride back to the admin with your flows and tools on Send to Admin, and reach the account when you click Save there.

The JSON tab

The Inspector’s JSON tab shows the live {flows, tools} model and doubles as an import/export surface: edit it and click Update, or drag and drop a .flows / .json file onto it and click Update. Either way it accepts a bare flows array or a {flows, tools} object. Invalid JSON is flagged and not applied. System flows and tools are merged in for context but are never saved back as your own.

AI Guru (✨)

The ✨ AI button opens The Flows / Tools Guru — describe a flow or tool in plain language and it drafts one for you. Choose New Flow or Modify Current Flow (and the equivalents for tools), pick a model (Claude Sonnet 4.6 is recommended, with Muse Spark 1.3, GPT-6.1 Sol, GPT-6 Sol, GPT-5.6 Luna, Claude Opus 5.5, Claude Sonnet 5.5, Claude Sonnet 5, Claude Haiku 4.5, GPT-4.1 Mini and two Gemini Flash options also offered, ordered by how reliably they produce a well-formed flow), and watch it stream a live preview with an AI Response notes panel; click Done to apply. When modifying, it computes the flow’s dependency set and marks any flow that is also used elsewhere as read-only, so a change can’t silently break another flow. The AI Guru needs the auth token, so open the Designer from Design Flows.

Why the model list is short
To author or change a tool, the co-pilot has to be given your real tool definitions — including their authorization headers. Only models whose providers operate under no-training terms are offered here. A cheaper tier of the same model that trades a training grant for its price is deliberately left out.

Testing a flow

Click Test to open the bottom panel and start a live session: the Designer loads the real JSFE engine and runs your flows merged with the system (and Shopify, if enabled) libraries against the backend.

PartWhat it shows
ConversationThe simulated exchange, with You / JSFE / SYS / HOST roles. Type in the input box and Send when a SAY-GET prompt is waiting; each Send advances the engine one step.
VariablesLive Session Variables, cargo, and the editable Global Variables tree (available whether or not a session is running).
Debug logColor-coded step / say / set / flow / tool / error entries, with an Info / Warn / Error level filter.
It uses the real AI
Free-text input is matched by the actual AI flow-selector, so you can verify which primary flow a given message activates. Click Test again to restart a session. (Testing requires the auth token, so it only works when opened from the admin.)

Saving your work

The Save button turns blue when you have unsaved edits. Clicking it opens Review Changes: a diff of the added, removed and changed flows, steps and tools, plus a Global Variables section for any globals you edited. Flows are listed by name; each changed step is a drillable row you can open to see the individual fields.

The Flow Designer's Review Changes modal, headed 1 flow. A Global Variables (tenant config) section shows global_business_hours changing from Mon-Fri 9-5 ET to Mon-Sat 8-6 ET. Below it, the make_payment flow lists an expanded step group greet [SAY] with one change: value going from Happy to take a payment for you to Happy to take that payment for you. Cancel and Send to Admin buttons sit at the bottom.
Review Changes in the Designer. Steps are matched by id, so deleting or inserting a step reports that one step rather than everything below it, and moving a step is reported as a move.

Send to Admin hands the work back to the admin window and a toast reminds you to click Save in the admin to persist it. The admin only stages what actually differs: if you open the Designer and send without editing anything, it says “nothing changed — nothing to apply” and leaves the admin’s Save button dark.

There is no autosave; edits live in memory until you send or download them. (In standalone mode, Save downloads a .flows file instead.)

Keyboard shortcuts

ShortcutAction
Delete / BackspaceDelete the selected step(s) (with confirmation).
Cmd/Ctrl + C / VCopy / paste steps.
Cmd/Ctrl + Z / Shift + ZUndo / redo.
Cmd/Ctrl + SSave (opens Review Changes).
EnterIn a single-line field, commit the value instead of inserting a newline.

Troubleshooting

SymptomFix
Designer won’t open / blank windowA pop-up blocker stopped it. Allow pop-ups for the admin and click Design Flows again.
Test says “No auth token”, or the AI Guru fails with an authorization errorYou opened flow-designer.html standalone. Open it from the admin’s Design Flows button so it receives a token.
AI Guru is slow or times outLarge flow sets take longer to generate. Retry, or pick a model marked (fast).
A field or the JSON tab shows a red borderThe JSON is invalid and was not applied. Fix the syntax (in the JSON tab, then click Update).
My changes didn’t stickRemember the two-step save: Send to Admin in the Designer, then Save in the admin.
The admin says “nothing changed”The Designer sends its whole registry every time, and the admin applies only what differs. If nothing you sent differs from what is already saved, that message is correct — check that your edit was committed (fields commit when you click away from them).
A global variable I edited isn’t liveGlobals follow the same two-step save as flows. Confirm the Global Variables section appeared in Review Changes, then click Save in the admin.

Chat Dashboard

The Chat Dashboard provides a comprehensive view of all conversations your Guru has had with visitors. Open it from Chat Dashboard in the admin console’s left menu; it opens in a new tab.

Controls & Filters

Date Range

ControlDescription
Start DateThe beginning of the log search range. Format: YY-MM-DD HH:MM:SS. Click the calendar icon to use a date picker. Default: today at 00:00 (local time).
End DateThe end of the log search range. Default: tomorrow at 00:00 (local time).
TimezoneToggle between UTC and Local Time for all displayed timestamps. A live clock shows the current time in the selected timezone.

View Mode

Toggle between two display modes:

  • Normal (default) — Shows 20 essential columns for faster loading and easier scanning.
  • Advanced — Shows 30 columns including technical details like Log ID, version, token counts, model info, RAG timing, and chat context.

If CSAT or an API call log is connected, CSAT, CSAT Note and API Calls columns are added at the end in both modes. Switching modes resets hidden columns and sorting and reloads the logs. Beside the mode switch, the CSAT and API switches (both on by default) decide whether this Guru’s CSAT surveys and API call log are pulled in with the logs; turn one off if its source is slow.

Loading Controls

ButtonDescription
Load LogsFetches logs for the specified date range. Logs load automatically when the page opens.
RefreshIncrementally fetches only new logs since the last load. The dashboard also auto-refreshes every 60 seconds when viewing a live time range.

While a load is running, the Load Logs button shows a spinner; hover it and it turns into a pause control. Click to pause; the button then reads Resume and continues where it stopped. Clicking into a date field also pauses the load. A red Cancel button appears while a load is running or paused: it abandons the load and clears the results, and the 60-second auto-refresh stays off until you load again.

Theme Toggle

Click the moon/sun icon to switch between light and dark themes. The preference is saved to your browser.

Outbound calls and campaigns

Shown only to users with the Outbound permission. A Direction selector (All, Inbound or Outbound) filters the conversations; choosing Outbound adds a Campaign picker to narrow them to one campaign. The Campaigns button opens the Campaigns view.

The dashboard's button row: CSV, JSON, XLSX and Analytics Dashboard, then Direction set to Outbound, a Campaign picker reading All campaigns, and a Campaigns button.
Direction set to Outbound, with the Campaign picker beside it.

The Campaigns view first lists your campaign runs, one row each. Click a run to open it; Close Campaigns returns to the logs.

ColumnShows
CampaignThe campaign’s name.
Statusdraft (a list is loaded, not yet started), running, paused, stopped, completed (every contact done) or ended (the list’s end time passed). A running campaign is paused on its own when the Outbound Call Agent is switched off or the campaign is deleted.
ListThe number of its current daily list.
Call windowThe list’s start and end.
Contacts / Reached / Exhausted / In flightContacts in the list, those who reached a person, those the campaign gave up on, and calls in progress.
The Outbound Campaigns view listing two runs: Plan renewals, running on list 2 with 6 contacts, 2 reached, 1 exhausted and 1 in flight, and Post-delivery survey, completed on list 1 with 40 contacts, 27 reached and 13 exhausted.
Your campaign runs, one row each.

An open run shows its Status, when it last placed a call and when its window ends, with Refresh, Export CSV and a List picker for its earlier daily lists. ← All campaigns returns to the runs. Tiles sum it up:

TileShows
ContactsAll contacts in the list, split into queued, in flight and done.
Reached a personContacts a person answered for, with the contact rate among those dialled.
ExhaustedContacts the campaign gave up on, counted by reason (see below).
AttemptsCalls placed, and attempts per contact dialled.
Last hourCalls placed in the past hour, and when the queue drains at that pace.
SupersededShown only when some are: contacts still waiting when the next list was loaded, so never called from this one.

Below the tiles is one row per contact: Name, Phone, Lang, Outcome, Attempts, Last attempt, Talk time (for a reached contact) and Conversation.

OutcomeMeaning
queuedWaiting to be called, first or again.
dialingA call is in progress.
Reached a personA person answered. The contact is not called again in this list.
Exhausted (reason)Every attempt was used without reaching a person. The reason is the last attempt’s: machine or fax (an answering machine or fax answered), no-answer, busy, failed, canceled, or error (the call could not be placed). no_line means the contact’s language has no line in the saved campaign, so it was never called.
supersededStill waiting when the next list was loaded.

Conversation says how a reached contact’s call ended, and how many turns it took: Transferred to an agent, Goodbye, Caller hung up, or Conversation for a call that ended any other way. Click it to open the transcript. It reads not in the loaded dates until the dashboard’s loaded dates (see Date Range) cover that call. Click a contact to see each attempt: when, the call status, who answered (human, or the answering-machine verdict), how long, and its result. Export CSV downloads the list with every contact’s state, outcome, reason, attempts, last attempt, talk time, conversation and the list’s own columns.

An open campaign, Plan renewals, running on list 2: tiles for 6 contacts (2 queued, 1 in flight, 3 done), 2 reached a person (contact rate 40% of 5 dialled), 1 exhausted by machine, 8 attempts and 4 calls in the last hour; below, the contact table with two contacts reached, one ending in Goodbye and one Transferred to an agent, one Exhausted (machine) with its three attempts expanded, one dialing and two queued.
One run, with a contact’s attempts opened. Each reached contact’s Conversation links to its transcript.

Statistics Summary Bar

The colored badges below the controls show counts for different interaction categories. They serve a dual purpose — information display and interactive filters:

Non-Clickable Statistics

BadgeShows
LogsTotal number of currently displayed (filtered) log entries.
UsersCount of unique visitors (identified by IP, user ID, or thread).
ConversationsCount of unique conversation threads.

Clickable Filter Badges

Click a badge to include or leave out its category. A row stays visible while it matches any included category, so switching off one badge often hides little; to isolate a category, Ctrl+Click (Cmd+Click on Mac) it, and Ctrl+Click again to bring every category back.

BadgeColorMeaning
Unmarked— (no colour)Interactions not yet rated for quality.
CorrectGreenInteractions marked as correct/accurate.
IncorrectRedInteractions marked as incorrect.
IncompleteOrangeInteractions where the AI apologized or gave a partial answer.
Rejected RepliesLight BlueResponses that were rejected before being sent to the user.
Rejected URLsBrownResponses rejected due to invalid URL references.
TruncatedRoyal BlueResponses that were cut short due to length limits.
Live AgentPurpleCalls transferred to your live agent line, as transfers (connected): the number in parentheses counts the transfers your agent line answered.
Handoff connected— (no colour)Transfers your agent line answered. Recorded for transfers from October 21, 2026 on.
Caller ended— (no colour)Answered transfers the caller hung up.
Agent ended— (no colour)Answered transfers ended from your side: by an agent, or by your contact center’s own system (a queue or message that hangs up).
L/A InterceptionsDark OrangeTurns where a live-agent request was intercepted — the Virtual Agent offered to keep helping instead of transferring immediately. The badge shows total (returned-to-AI); turns where the caller accepted and returned to the AI are tinted Sea Green.
GoodbyeDark Sea GreenConversations that ended with a goodbye.
Call EndedGoldVoice calls that ended.
Switched to SMSLime GreenVoice calls that switched to SMS continuation.
WhatsAppDark GreenWhatsApp chats (one row per chat, its last interaction).
SMSSteel BlueSMS chats (one row per chat, its last interaction).
EmailTealEmail chats (one row per chat, its last interaction).
Not answered— (no colour)Emails the Guru did not answer, on channels with Log emails the Guru does not answer on. Opening one shows the reason and the subject.
ReconnectedCrimsonMid-call dropouts the caller was reconnected through.
StoppedSlate GrayTurns the caller stopped; not counted as a failure.
CSATSea GreenShown when CSAT is connected. Conversations with a CSAT survey; the number shows the count and average rating. Click to hide them, Ctrl/Cmd+Click to show only them.
Stars—Shown with the CSAT badge. Which ratings (1–5) count as CSAT; click a star to drop or restore it, Ctrl/Cmd+Click to keep only it.
API CallsPurpleShown when an API call log is connected. Conversations whose flows called your API: attached / pulled (conversations). Click hides them, Ctrl/Cmd+Click shows only them.
Failed CallsRedAs API Calls, for failed calls.

The JSFE Badge — Who Wrote the Reply

Every reply is authored by the AI, answering from your knowledge base; by the JSFE workflow engine, reading out a line you scripted in the Flow Designer; or — shown as PP — by the pre-processing step that answers some messages before the AI runs. The purple JSFE badge at the end of the badge row counts the scripted ones, in the format total (conversations involved) — so 2 (1) means two scripted replies, inside a single conversation.

This badge is not a category filter — it cuts across all of them
The badges above are alternatives: turning several on shows rows in any of those categories. JSFE is a different question entirely (who wrote this?) and applies on top of whatever categories are active, in three states:
StateHow you get thereWhat you see
Default—Everything. The badge is only counting.
ExcludeClickScripted replies are hidden — what the AI itself produced, with the flows taken out. Click again to restore.
OnlyCtrl/Cmd+ClickOnly scripted replies, marked by a gold ring on the badge. Your category filters still apply within them — so Only + Incorrect answers “which of my flows said the wrong thing?”. Repeat to restore.
The dashboard statistics bar with a purple JSFE badge reading 2 (1) at the end of the row, above a log table whose Src column shows AI on model-written rows and JSFE on the two scripted rows of a voice conversation.
The purple JSFE badge and the Src column, which answers the same question one row at a time. Several columns are hidden here (right-click a header → Hide Column) so the narrative columns fit; the full table carries 20.

Log Table

The main table displays all log entries matching your date range and active filters. Each row represents a single interaction (one user question and one AI response).

Normal Mode Columns (20)

ColumnDescription
#Row number.
IPClient IP address.
BrowserUser agent / browser information.
CountryGeographic country of the visitor.
PostalPostal/ZIP code.
OrgOrganization/channel indicator. Shows the channel source: TwilioVoice, TwilioSMS, app., WhatsApp, Email, or the visitor's ISP/org for web traffic.
Thread IDUnique conversation thread identifier.
Date TimeTimestamp of the interaction (in your selected timezone).
User IDVisitor's identifier (email if known).
Full ChatA clickable button showing the turn count. Click to open the full conversation in a modal — it leads with the session’s greeting (the AI’s opening line) and shows a timestamp beside every message.
PromptThe visitor's question or message.
ReplyThe response that was sent — from the AI or from a flow; see Src. For an email the Guru did not answer, it reads Not answered: and the reason, and Src is empty.
SrcWho authored the reply: AI for a model-written answer, JSFE for a line scripted in a flow. Present in both view modes, and filterable like any other column. Interactions old enough to predate this column show AI whether or not a flow wrote them, so don't read a scripted-reply count from a date range that reaches back before it.
Rejected UrlsURLs that were removed from the response by the URL validator.
Rejected AnswersResponse attempts that were rejected before the final answer.
Total TimeEnd-to-end response time in milliseconds.
DocumentsSource documents retrieved from the knowledge base (with relevance scores and URLs).
Pertinent DocsDocuments deemed most relevant to the query.
CorrectQuality rating. Color-coded to match the filter badges.
Revised AnswerThe correction recorded with an Incorrect rating, including the reason a visitor typed after a thumbs-down.

Additional Advanced Mode Columns

When Advanced view mode is enabled, these additional columns appear:

ColumnDescription
Log IDUnique identifier for this log entry.
VersionSoftware version that processed this interaction.
Chat ContextThe conversation history sent with this prompt. Right-click to view as formatted chat bubbles.
Prompt TokensToken count for the prompt.
AnalysisThe AI's analysis of the prompt, including any rephrased question.
ModelsWhich AI model(s) processed this interaction.
RAG TimeTime spent on document retrieval (Retrieval-Augmented Generation).
AttemptsNumber of response generation attempts.
Completion TimeTime spent generating the final response.
Completion TokensToken count for the generated response.

Table Interactions

  • Click a column header to sort: ascending → descending → natural order (3-state cycle).
  • Right-click a column header for a menu: Hide Column, Filter… (see Per-Column Filtering below), or Clear Filters.
  • Hover over a truncated cell to see a tooltip with the full text.
  • Right-click a truncated cell to open the full text in a modal. For Chat Context columns, this shows formatted chat bubbles.
  • Click a Full Chat button to view the entire conversation thread — including the opening greeting bubble and a timestamp on every message.
  • Rows are color-coded to match their category (green for correct, red for incorrect, orange for incomplete, etc.).

Reading a conversation: which turns were scripted

Inside the Full Chat modal, a reply written by a flow rather than by the AI is labelled FLOW instead of ASSISTANT and carries a purple stripe down its left edge. The interaction you opened the modal from keeps its green current outline at the same time, so a scripted current turn shows both marks — purple stripe, green outline.

This is the same fact as the JSFE badge and the Src column, read at conversation level: it shows where a scripted flow took over and where it handed back, which is usually what you want when a conversation went wrong and you need to know whether to fix a flow or the knowledge base.

The Full Chat modal for a voice conversation: a leading GREETING bubble with the AI's opening line, then USER and ASSISTANT messages, then two purple-striped FLOW replies from a scripted order-lookup, the last of which is also the current interaction and carries a green outline. Every message shows a timestamp beside its role label.
The Full Chat modal opens with the session’s greeting bubble and shows a timestamp next to every message; the interaction you opened it from is highlighted. Here the caller’s order lookup was handled by a scripted flow — the two purple FLOW replies — while the store-hours question was answered by the AI.

Reading a conversation: what happened after a transfer

A call transferred to your live agent line ends with one line saying how the transfer went: whether your agent line answered, how long it took to answer, how long the caller stayed on it, and who hung up: the caller, or your side (an agent, or your contact center’s own queue or message). A transfer your line never answered says so, with the reason: no answer, busy or failed. Transfers before October 21, 2026 show no such line.

The Full Chat modal for a transferred call: the caller asks to talk to someone about a bill, the assistant says it will transfer them, and a final line reads Handoff connected to …1472, answered in 2 s, 5 min 4 s, ended by the caller.
The outcome line at the end of a transferred call.
A stray [flow] on an old interaction
Scripted replies were briefly marked with a literal [flow] prefix inside the stored transcript before the Src field replaced it. You may still see that text on conversations from that period when you right-click a Chat Context cell. It is a leftover label, not part of what the customer was sent, and it disappears as those logs age out.

Per-Column Filtering

Beyond the quick category badges, you can build precise filters on any column. Right-click a column header and choose Filter… to open the Filter Logs dialog. Each condition is a column, an operator, and a value; click + Add Condition to add more, and choose whether a row must match ALL or ANY of them. Right-clicking another header adds a condition for that column to the existing set — filters accumulate, they are not replaced.

OperatorKeeps rows where the cell…
Equalsequals the value — compared as numbers when both sides are numeric, otherwise case-insensitive text.
Not Equaldoes not equal the value.
From (≥)is greater than or equal to the value (inclusive lower bound; numeric-aware).
To (≤)is less than or equal to the value (inclusive upper bound; numeric-aware).
Starts withbegins with the value.
Ends withends with the value.
Includescontains the value anywhere.
RegExmatches the value as a regular expression (case-insensitive).

Conditions are matched against the value shown in each cell, so From/To on Total Time filter by milliseconds — pairing them (e.g. Total Time From 100 To 500) builds an inclusive range. Click Apply to filter the table. Active conditions appear as removable chips above the table, and each filtered column shows a 🔎 cue in its header. Filtering also flows through to the Analytics Dashboard charts and every export. To clear filters, delete individual chips, click Clear all on the chip bar, or right-click any header and choose Clear Filters.

The Filter Logs dialog with Match ALL selected and two conditions: Country Equals US, and Total Time From greater-or-equal 3000, plus Add Condition, Clear All, Cancel, and Apply buttons.
The Filter Logs dialog: build multi-condition filters with eight operators and Match ALL/ANY. Filtered columns then show a 🔎 cue in their header.

Export

Three export formats are available, each respecting your current filters and visible columns:

FormatDescription
CSVComma-separated values. Opens in any spreadsheet application.
JSONPretty-printed JSON array of objects. Useful for programmatic analysis.
XLSXExcel workbook with a frozen header row, auto-sized columns, and styled headers. Best for sharing and analysis.

Analytics Dashboard

Click Analytics Dashboard to open a full-screen overlay with charts and statistics based on your currently loaded and filtered logs.

Statistics Cards

At the top, 12 summary cards show key metrics:

  • Total Interactions — Total number of log entries.
  • Unique Users — Distinct visitor count.
  • Total Conversations — Unique thread count.
  • Multi-turn Conversations — Threads with more than one exchange.
  • Multi-turn Rate — Percentage of multi-turn conversations.
  • Avg Conversation Length — Average exchanges per thread.
  • Longest Conversation — Maximum exchanges in a single thread.
  • Accuracy Rate — Percentage of interactions not marked as incorrect.
  • Avg Response Time — Average end-to-end response time.
  • Countries — Number of distinct countries.
  • Avg Prompt Tokens — Average input token usage.
  • Avg Completion Tokens — Average output token usage.

Charts

The analytics dashboard includes up to 14 interactive charts. Some charts have a toggle to switch between "By Interactions" and "By Conversations" views:

  1. Usage by Hour of Day — Bar chart showing when visitors are most active.
  2. Answer Quality Distribution — Doughnut/bar chart of correct vs. incorrect vs. other categories. Toggle: by interactions or by conversations.
  3. Countries Analysis — Horizontal bar chart of top 10 countries. Toggle: by interactions or by conversations.
  4. Usage Trends — Line chart of daily interaction volume (last 7 days).
  5. Response Time Distribution — Bar chart with time buckets (0–1s, 2–5s, 6–10s, etc.).
  6. Conversation Length Distribution — Pie chart showing how many conversations are 1 turn, 2 turns, 3–4, etc.
  7. Conversation Quality by Length — Bar chart of accuracy rate by conversation length category.
  8. Model Usage — Stacked bar showing, for each pipeline role (qualifier, ranker, guru, and the JSON/guru intervention and fallback roles), which AI model(s) handled it — so you can see the model mix per role.
  9. Domain Activity — Doughnut chart showing activity per domain (hidden for single-domain accounts). Toggle: by interactions or by conversations.
  10. Channel Distribution — Pie chart of Web, WhatsApp, SMS, Email, Phone, and App channels. Toggle: by interactions or by conversations; by conversations, phone calls are split by how they ended: Live Agent, Goodbye, Call Ended, Switched to SMS or Other.
  11. RAG vs Google Sources — Pie chart showing the mix of RAG-only, Google-only, both, or no sources.
  12. Token Usage Trends — Line chart of average prompt and completion tokens per day.
  13. Accuracy Trends — Line chart of accuracy rate, correct %, and incorrect % over time.
  14. User Engagement Patterns — Bar chart of sessions bucketed by depth — Casual (1–2), Regular (3–5), Active (6–10), or Power (11+) interactions per session — plus a Repeat Users bar counting users with 2+ sessions.

Click Close Analytics to return to the log table view.

Saved Views

Save your current filter and display configuration for quick access later:

  • Save View — Saves the view mode, hidden columns, sort, and the badge filter states under a name, in this browser only (column filters, the JSFE badge and the date range are not saved).
  • Load View — Pick a view in the dropdown and click Load View.
  • Reset to Default — Pick it in the dropdown and click Load View to show all columns, clear sorting and turn every badge back on.

Keyboard & Mouse Shortcuts

Chat Dashboard

ActionHow
Sort a columnClick the column header. Cycles: ascending → descending → natural order.
Hide a columnRight-click the column header, then select "Hide Column".
Filter a columnRight-click the column header, select "Filter…", then build one or more conditions. Right-click and choose "Clear Filters" to remove them.
View full textRight-click a truncated cell and select "Show Full Text".
View chat contextRight-click a Chat Context cell and select "Show Chat".
View full conversationClick the numbered button in the "Full Chat" column.
Toggle a filterClick a colored badge in the statistics bar.
Show only one categoryCtrl+Click (or Cmd+Click) a badge.
Show all categoriesCtrl+Click any badge when not all are active.

Admin Console

ActionHow
Open a sectionClick it in the left menu. The address keeps the section, so a reload or a bookmark opens it again.
Collapse the menuClick ⇤ beside the logo. Remembered in this browser.
Select / edit a userClick a user card in Users, then click a field or the permission grid.
Expand/collapse a channel or integrationClick its card header.
Close the account menuEsc.
Use a field’s exampleIn an empty field whose placeholder shows an example, press → (Right Arrow) to fill it in. Placeholders that are instructions, credential names or stand-in values such as [email protected] are never filled.

Chat Widget

ActionHow
Open or close the chatCtrl+Shift+C
New line in a messageShift+Enter

Frequently Asked Questions

How do I connect Twilio for SMS and Voice?

In Channels, click Add Twilio number, then Connect your Twilio account. Approve InstantAIguru in Twilio, pick or buy a number, and calls are answered right away. For texting, fill in the Texting registration in the same dialog and we file it with US carriers for you. See Twilio Setup.

Why isn’t my chat widget appearing on my site?

Open your site in a private window and confirm the embed snippet is present before the closing </body> tag. Check the browser console for errors, that the script URL loads, and that a Content-Security-Policy or cookie-consent gate isn’t blocking it. The widget should appear once the page has loaded. See Verifying Installation.

How do I send post-call CSAT surveys, and what do I need?

In Integrations, turn on the CSAT — Post-call Survey card. By default we host CSAT for you (use Create CSAT Admin Login to view results); if you self-host, tick I self-host CSAT and paste your CSAT Site URL and CSAT Secret. Then set delivery: an A2P-registered Twilio number under SMS delivery (you can copy credentials from an existing SMS number) and/or Send CSAT Email. After a voice call the Guru then texts and/or emails the customer a survey link. See CSAT — Post-call Surveys.

How do I reveal a hidden Auth Token or secret so I can copy it?

Masked secrets — the Twilio Auth Token on SMS, Voice and CSAT and in Settings › Twilio account, the CSAT Secret, the Live Support secret, and the Shopify and ShipStation keys — have a Show button beside or beneath them. The WhatsApp Business Token is shown shortened (first and last ten characters); hover it to see the full value.

Why won’t my changes save?

Saving is blocked by field validation before anything is written: Matching documents to evaluate (Settings) must be 1–10; a self-hosted CSAT needs its Site URL, Secret and at least one delivery method (an SMS number with its SID and Auth Token, or Send CSAT Email); an enabled integration needs its required key or URL; Enforce and Forbid references cannot both be ticked; every user you edited in Users needs a first name, a valid email, and an email nobody else already uses; and the Outbound Call Agent needs at least one ticked line, and each campaign a name, call context, and a greeting and disclosure for each language. The form jumps to the offending field. Saving also fetches the latest server config first and offers a conflict-resolution dialog if another user changed the same fields. If Save is not purple, the console sees nothing to write. When it is purple, Exit or Re-index offers Review Changes, which shows exactly what Save would write. See Saving Changes.

What does “Read linked pages on other sites” do?

In General, turning on Read linked pages on other sites follows links that leave your domain while your site is read — useful when your knowledge spans linked external pages. Leave it off to read only your own domain. It takes effect on the next Re-index.

Why does a channel card say “Configuration Required”?

That banner means the channel was added from your subscription but is still missing credentials. Fill in the highlighted fields (for example, the Twilio Account SID and Auth Token) to activate it. See Channels.

How do I reply to customers from my own domain by email?

On an Email channel, type your address (e.g., [email protected]) into the From Address field and click Verify Domain. Add the three DKIM CNAME records and merge the Amazon SES include into your existing SPF record (do not add a second SPF). A status badge shows when the domain is verified. See Branded From Address.

Who can change the AI Model Set?

Only a platform administrator. The Model set panel in Settings is also shown, read-only, to users with the Config permission; everyone else does not see it. See Model Set.

How do I set live-agent transfer hours for phone calls?

Enter a Live Agent Phone Number on the Voice channel and the Live Agent Service Hours editor appears. Set a timezone and add one or more time ranges per day; once any day has hours, days with no ranges are treated as closed and won’t transfer calls; with no hours set on any day, transfers are not time-limited. See Live Agent Service Hours.

What are the Upload Flows, Upload Tools, and Design Flows buttons?

These top-bar buttons (shown to a platform administrator or to a user with the Config permission) manage the Guru’s interactive conversation flows and custom tools: Upload Flows and Upload Tools import JSON definitions, and Design Flows opens the visual Flow Designer to build them interactively — along with your global variables. All three routes stage the result as an unsaved change; nothing is written until you click Save, and an import identical to what is already stored applies nothing. See Flow Designer.

A new user never got their invitation. How do I resend it?

Open Users and click Resend invite on the user’s card (it is marked Invited). You can send it as many times as you need; nothing else about the account changes. A card marked Not saved yet has no account yet: click Save, and the invitation goes out by itself. (An older user shown with neither mark has a Send invite button instead.)

What does the Read Only permission actually allow?

Everything on the console stays visible and readable, and every control that would write something is switched off — forms, buttons, the flow and tool uploads, the Flow Designer, and Save. The top bar shows a Read-only badge so the disabled controls read as intentional. Two things still work: Re-index, which writes no configuration, and changing your own password, so an invited read-only account can still be activated. The server enforces the same restriction independently, so it holds even if the page is tampered with. See Permission Checkboxes.

What’s the difference between the Sole Proprietor and Standard A2P 10DLC paths?

Twilio routes your SMS registration by whether your company has a business/tax registration number. The Sole Proprietor path (no EIN) is limited to one campaign and one number, with low throughput, and the owner must confirm a code sent to their mobile; the Standard path requires a registered business and full Brand vetting but unlocks higher limits. See Sole Proprietor vs Standard Path.