Open a ticket
A short form: type, priority, department, title and description, with attachments up to 10 MB.
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.
No new password, no separate portal, no "open a ticket on our website".
A short form: type, priority, department, title and description, with attachments up to 10 MB.
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.
When someone is available, the conversation happens right away; outside business hours it becomes a ticket without the customer noticing the difference.
The AI answers citing the article from your knowledge base and hands over to a human when it has no source.
The version badge lights up inside the same widget when you publish a release note.
A score from 1 to 5 on closing, feeding CSAT and customer health.
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.
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.
One tag before the closing body tag, with the public key the dashboard generates. It can stay visible in the browser.
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.
An HMAC signature calculated in your backend proves that the user really is who they claim to be.
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.
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 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 operationsWith 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.
The widget session lives in the browser local storage, and only serves to keep the conversation open.
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.
A ticket accepts the file the widget itself uploaded, from the same company and the same user.
Opening a ticket, commenting, chatting, uploading and getting an AI answer are capped per user, per IP and per company.
Your company exports a widget user's data from the dashboard, and the export is logged.
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.
The script loads asynchronously from the CDN and the panel is only mounted when someone clicks the bubble.
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.
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.
Create the account, generate the key and paste the snippet. You can see it running today.