The AI support widgetfor your SaaS

An AI website chat widget that knows your product and who is asking.

It answers from your docs, recognizes the signed-in customer, reads the account data your backend allows, and brings in your team when it should. Voice is built in. From $19 a month, with unlimited teammates.

14-day free trial · 50 AI conversations · no card

One widget, from first question to your team.

This is the real widget, running a scripted conversation. Scroll through what it does.

Reconnect StripeHelp Center · Integrations
  1. Knowledge
  2. Signed in
  3. Account
  4. Fresh check
  5. Team
  6. Voice

Knowledge

Answers from your product

Anyone on your site or in your app gets answers from your help center, docs, website and files, in the language they write in.

Signed in

Knows who is asking

When a customer is signed in to your app, your page calls OneTwoAgent.identify() with a token your server issues. From then on the agent knows who is asking and which workspace they are in.

Account

Answers from their account

A signed snapshot of the facts you choose — subscription, access, usage, jobs and integrations — lets the agent answer about this customer, not customers in general.

Fresh check

Checks now, when it matters

When the answer depends on current state, the agent makes a scoped read-only lookup to your backend — including up to 8 support views you define — and your backend rechecks the session every time.

Team

Brings in your team

When the evidence or the authority isn’t there, the agent stops instead of guessing and the conversation goes to your inbox. Any teammate can take it, and the customer sees who joined.

Voice

Talks, too

Customers can switch to Voice inside the same widget, with the same knowledge and account context. Speech is detected automatically, with spoken answers in 40+ languages.

What happens when a customer needs a person?

The AI stops, your team takes over the same conversation, and the AI answers again only after someone hands it back.

  • The customer asks for a person

    The agent passes the conversation to your team instead of trying another answer.

  • The evidence isn’t there

    When your docs or the customer’s account don’t back an answer, it stops instead of guessing.

  • It needs someone’s authority

    Refunds, plan changes and other decisions the AI isn’t authorized to make go to a person. Account reads are read-only.

The handoff is silent: the AI sends no “someone will reply shortly”. The widget shows the handoff itself with “Passed to the team”. The AI can also answer and still mark a conversation for your team.

Who answers

8 / 8

The AI answers the next message

When Alex writes again, the AI replies, and the widget marks it “Assistant resumed”.

Customer’s widget

Why did my CSV import fail?
Your CSV import (imp_8421) failed: some dates aren’t in a supported format. Export them as YYYY-MM-DD and run it again.
From: signed-in customer · account data
I tried that twice. It still fails.
Passed to the team
Maya joined the conversation
Maya
Hi Alex, Maya here. I’m looking at your import now.
Maya
Fixed: two rows had a stray time zone. The import is running again.
Is it running now?
Assistant resumed
Your import imp_8421 is running now. Anything else I can help with?

Your inbox

Alex Rivera

Website widget · Verified customer

Assigned toMayaAI handlingTake over
  1. AlexWhy did my CSV import fail?
  2. AIYour CSV import (imp_8421) failed: some dates aren’t in a supported format. Export them as YYYY-MM-DD and run it again.
  3. AlexI tried that twice. It still fails.
  4. Handed to team
  5. MayaHi Alex, Maya here. I’m looking at your import now.
  6. MayaFixed: two rows had a stray time zone. The import is running again.
  7. AlexIs it running now?
  8. AIYour import imp_8421 is running now. Anything else I can help with?
Illustration built from the widget in a demo workspace; the widget and inbox labels are the product’s own. The recorded walkthrough below shows a real handoff.

Handoff, step by step

  1. Alex is signed in to the app and asks why an import failed.

  2. It finds the failed import in the customer’s account data and explains the fix.

  3. It doesn’t guess again. The widget shows “Passed to the team” and “Waiting for a teammate”; the AI sends no promise that someone will reply.

  4. Waiting on team and Needs reply, with every message above it. Waiting describes the conversation, not whether anyone is online.

  5. Take over assigns it to her and turns the AI off for this conversation. The customer sees “Maya joined the conversation”.

  6. Her messages land in the same widget conversation, with her name. The AI stays off while she holds it.

  7. The conversation goes back to the AI. Resuming sends nothing by itself.

  8. When Alex writes again, the AI replies, and the widget marks it “Assistant resumed”.

Take over, or just reply

Take over
Assigns the conversation to you if nobody has it and turns the AI off for it. The inbox shows “AI is off for this conversation” until someone clicks Resume AI.
Reply without taking over
The AI pauses for a while after your reply; the inbox shows “AI paused until … after your reply”. Take over when the conversation should stay with your team.

Before anyone on your team replies

  • The customer sees “Waiting for a teammate”. Waiting on team describes the conversation, not who is online.
  • The AI doesn’t answer over a conversation that waits for your team or that a teammate holds.
  • Alerts go where you set them up: email to the recipients in Dashboard → Agent → Notifications, and Telegram if you connect a bot. The inbox keeps the conversation either way.
  • With email capture on, a visitor whose email you don’t have is asked “Where should the team contact you?”.
  • Your reply lands in the same thread. A visitor sees it when they open the widget again; a signed-in customer gets the conversation back on any device.
  • How quickly someone replies is up to your team. OneTwoAgent doesn’t promise a reply time.

Check it on your own widget

  1. 1Ask for a person

    You should see “Passed to the team”, and the conversation in your inbox as Waiting on team and Needs reply.

  2. 2Ask for a change the AI can’t make

    For example, “refund my last invoice”. It shouldn’t claim to make the change; unless your docs answer it, the conversation should go to your team.

  3. 3Write again during a takeover

    Take over, then send another customer message. Only your teammate should answer; no AI reply should appear.

Two ways to set it up, by what customers ask.

Same widget, same agent. Product answers need your Knowledge and the installed widget. Answers about a customer’s own account also need your server to say who is asking.

1Answers about your product

For every visitor, signed in or not, in the language they write in, with files, handoff to your team and Voice on paid plans. No account endpoint needed.

You set up
  • Knowledge: onboarding starts it from your website; add your help center, docs or files.
  • The widget on your site or in your app: one script tag from Channels → Widget → Install code.
Ask it
How do I reconnect Stripe?
Ready when
The installed widget on your live site, not the onboarding preview, answers a question your docs cover, and the conversation is in your inbox.

2Answers about the customer’s own account

Everything in the first path, plus the facts your backend allows for the customer who is signed in. Read-only.

You set up
  • Server-confirmed identity: your server issues a short-lived token and your page calls OneTwoAgent.identify().
  • Account facts your server shares: a signed snapshot, and optionally a read-only endpoint for fresh reads that an owner or admin approves.
  • Your coding agent does the wiring with the OneTwoAgent CLI and skill, below.
Ask it, signed in
What happened to my latest import?
Ready when
Snapshot answers: A signed-in test customer on your live app gets an answer from the account facts your server shares.
With fresh reads: OneTwoAgent doctor verifies your production app, including the account endpoint and a live account read.

The second path, in your repo: one command, then one prompt to your coding agent.

$
Your coding agent

Integrate OneTwoAgent fully into this app and deploy it. Use the installed OneTwoAgent skill and finish by verifying production

  • Reads the OneTwoAgent skill
  • Adds the widget
  • Connects your existing sign-in
  • Builds a read-only account endpoint
  • Deploys

$ npx -y @onetwoagent/cli@latest doctor --json

Verified on production

Paste into Claude Code, Codex, Cursor or another coding agent

Run `npx -y @onetwoagent/cli@latest init --browser`, then: Integrate OneTwoAgent fully into this app and deploy it. Use the installed OneTwoAgent skill and finish by verifying production.

Looks like your product, not ours.

Light or dark, your colors, 45 Google Fonts per element, 6 bubble shapes, 15 launcher icons with 13 animations, and a Home screen with up to 3 links and 16 backgrounds. No CSS.

Customers can attach images, PDF, DOC, DOCX and TXT files up to 8 MB; images are read with vision. You can turn uploads off.

Every plan includes the whole team.

Plans differ by AI conversations and Voice minutes. One AI conversation covers up to 10 AI replies.

See pricing
Starter
$19/ month
100 AI conversations a month
50 Voice minutes
Unlimited teammates
Core
$49/ month
500 AI conversations a month
200 Voice minutes
Unlimited teammates
Growth
$99/ month
1,500 AI conversations a month
500 Voice minutes
Unlimited teammates
Scale
$249/ month
5,000 AI conversations a month
1,500 Voice minutes
Unlimited teammates

What it does, and what it doesn’t

Reads, never writes
Account access is read-only: snapshots and lookups your backend answers. The agent doesn’t change subscriptions, data or settings in your app.
Your backend decides
You choose which facts go into the snapshot and which lookups exist. There is no direct database access.
Account context lives in the widget
The AI also answers on WhatsApp, Instagram and Telegram from the same Knowledge; signed-in identity and account data apply to the website widget.

What is an AI customer support widget for SaaS?

A chat widget on your website and inside your product where an AI agent answers customers. For SaaS it matters that the agent knows your product and the signed-in customer: OneTwoAgent answers from your Knowledge and from the account data your backend authorizes, and hands the conversation to your team when it should.

Can the widget answer questions about a customer’s own account?

Yes, for signed-in customers. Your server vouches for the customer, OneTwoAgent receives a signed account snapshot that expires within 5 minutes, and for current state it makes scoped read-only lookups — subscription, access, usage, jobs, integrations plus up to 8 support views you define. Your backend rechecks the session each time.

What happens when the AI can’t answer?

It stops instead of guessing and the conversation goes to your shared inbox. Any teammate can take it over and reply, and the customer sees who joined. The AI stays quiet while a person holds the conversation.

How do I install it?

The widget alone is a single script tag. For signed-in customers and account data, run `npx -y @onetwoagent/cli@latest init --browser` in your app, approve it in the browser and give your coding agent the prompt; it uses the installed OneTwoAgent skill and finishes with OneTwoAgent doctor.

Does it support Voice and other languages?

Yes. Chat answers each customer in any language the customer writes in. Voice runs inside the same widget, detects the spoken language and answers out loud in 40+ languages; paid plans include Voice minutes.

How much does it cost?

Starter $19, Core $49, Growth $99, Scale $249 a month, with 100 / 500 / 1,500 / 5,000 AI conversations and unlimited teammates on every plan. There is a 14-day free trial with 50 AI conversations, no card required.

Put it in front of a signed-in customer.

Add your docs, connect a signed-in test customer and see the answer — and how your team takes over. 14-day free trial with 50 AI conversations, no card required.