Skip to content
Support widget

Support right inside the screen your customer already uses

Ten lines on your site and that is it: the customer opens a ticket, follows its progress, talks to your team and to the AI agent without leaving your product — with your company color, logo and name.

  • Installed in minutes
  • Identity verified by signature
  • Portuguese, English and Spanish
On the customer side

Everything they need, without opening another system

No new password, no separate portal, no "open a ticket on our website".

Open a ticket

A short form: type, priority, department, title and description, with attachments up to 10 MB.

Follow up and reply

With the identity signed by your server, their whole list, with an unread badge and the conversation kept intact. Without a signature, what they opened in that browser.

Chat in real time

When someone is available, the conversation happens right away; outside business hours it becomes a ticket without the customer noticing the difference.

Talk to the AI agent

The AI answers citing the article from your knowledge base and hands over to a human when it has no source.

See what is new

The version badge lights up inside the same widget when you publish a release note.

Rate the service

A score from 1 to 5 on closing, feeding CSAT and customer health.

Identity

It looks like you, not like us

The widget is an extension of your product. Everything the customer sees there follows the identity you set up — and it changes per product, if your company sells more than one.

  • Product color and logo, applied to the header and the buttons
  • Editable greeting and title, in each of the three languages
  • Bubble in any of the four corners of the screen
  • Text color calculated by contrast, so your brand color never hurts readability
  • The greeting opens the conversation with the avatar and the name of whoever will answer

One widget per product

If you sell three systems, each one has its own logo, color, knowledge base and AI agent — and the same snippet serves all three, changing one parameter.

Installation

Four steps, ten minutes

  1. 1

    Paste the snippet

    One tag before the closing body tag, with the public key the dashboard generates. It can stay visible in the browser.

  2. 2

    Identify who is there

    Send the user and their company using the IDs from YOUR system — and, if you want, the product and their role in it (role). No new sign-up for the customer.

  3. 3

    Sign it on your server

    An HMAC signature calculated in your backend proves that the user really is who they claim to be.

  4. 4

    Publish

    The file is served by our CDN. Every update arrives without you touching your site again.

In native apps the path is the same, using the package for the platform — iOS, Android, Flutter, React Native, .NET, Delphi, Lazarus, Java and Python. And the same widget switches on the Monitoring add-on with no second script: a monitor parameter on init, with the agent’s ingest key, and the errors on that screen become tasks in Projects.

The role of whoever is there

Say who is on the other side, and the support changes its tone

Your page declares role: { key, label } on init and bFocus knows it is the admin, the billing person or the counter clerk of that product. The AI agent then talks to each one the right way, and internal release notes only reach the people they concern.

  • The key is required — lowercase, digits, hyphen and underscore; the label is optional
  • It requires the product declared on the same instance: a role always belongs to a product, and with no product the role is ignored
  • An existing role is only linked; a new one is created and linked on its own — you call no API beforehand
  • The label is only written on creation: renaming it later happens in the bFocus screen, so an outdated page cannot undo the name on every session
  • A person has one role per product; declaring another one replaces it
  • Switching it mid-session is bFocus.identify({ role })
  • On the Product roles tab you write two instructions per role: how to treat the people in it and what it does not get to access
  • To sync without waiting for someone to open the page, the SDKs have products.roles — list, upsert and delete

A statement, not a permission

The role is declared by your page and travels OUTSIDE the signature (userHash covers user and customer). The access limits are conversation instructions for the agent; what the person gets to see is still decided by bFocus.

See the three operations
Security

Each customer sees only what is theirs

Verified identity

With verified identity switched on, bFocus turns away anyone without a valid signature from your server. The signature lasts 7 days, and a widget created today starts with the requirement already on.

No tracking cookies

The widget session lives in the browser local storage, and only serves to keep the conversation open.

Public key and server key

The browser one only opens the widget, and only on the authorized domains you register — the root domain already covers the subdomains, so https://customer.com allows app.customer.com and shop.customer.com. The one that reads and writes data stays on your server, with scopes and an IP list.

Only files uploaded here

A ticket accepts the file the widget itself uploaded, from the same company and the same user.

A ceiling per IP and per company

Opening a ticket, commenting, chatting, uploading and getting an AI answer are capped per user, per IP and per company.

Data export

Your company exports a widget user's data from the dashboard, and the export is logged.

Questions about the widget

Does my customer need a bFocus account?

No. They are identified by the IDs from your own system, and they never enter the bFocus dashboard. As far as they can tell, the support is yours.

Does the widget slow my site down?

The script loads asynchronously from the CDN and the panel is only mounted when someone clicks the bubble.

Does it work on a site without login?

It does. The widget always receives a user code and a company code. On a site without login, your server generates those codes — and, without your server’s signature, each browser sees only the tickets it opened itself.

And inside my app?

There is a native package for iOS, Android, Flutter, React Native, .NET, Delphi, Lazarus, Java and Python, with an unread badge and release alerts. Push on mobile and on .NET MAUI; on desktop, system notifications from periodic checks.

Put support inside your product

Create the account, generate the key and paste the snippet. You can see it running today.