Help Centerโ€บVoiceโ€บVoIP Widget

VoIP Widget

Let customers speak to your AI agent directly from your website โ€” no phone number needed.

What is the VoIP Widget?

The VoIP Widget is a small embeddable call button you add to your website with a single line of code. When a visitor clicks it, a floating call panel appears. They click "Call Now," allow microphone access, and are instantly connected to your BLEUM AI agent through their browser โ€” no phone call, no app download.

After the call ends, the panel shows a post-call summary including the call duration, number of turns, sentiment trajectory, average response time, and an AI-generated summary of what was discussed. It's a complete support experience without the customer ever leaving your page.

What the Widget Includes

๐Ÿ“ž

One-Click Calling

Visitors click "Call Now" and connect instantly. No phone number, no hold music, no queue.

๐Ÿ“

Live Transcript

Caller and agent speech appears in real time as conversation bubbles during the call.

๐Ÿ”‡

Mute Button

Callers can mute and unmute their microphone mid-call without ending the conversation.

๐Ÿ“Š

Post-Call Summary

After every call, the panel shows duration, turns, sentiment, avg response time, and an AI summary.

Setting Up the Widget

Step 1 โ€” Create a widget in your admin

Navigate to Phone Numbers โ†’ Call Widgets in your admin (create a VoIP endpoint first with Create VoIP Endpoint). Click Create Widget and configure:

  • Name โ€” What the widget header shows to visitors (e.g. "BLEUM Support").
  • VoIP Endpoint โ€” Which of your VoIP lines the widget calls. This determines which Welcome flow and procedures handle the call.
  • Allowed Domains โ€” The website domains where this widget is permitted to load. Requests from unlisted domains are blocked for security.

Step 2 โ€” Copy the embed code

After saving, click Copy Snippet on the widget's card. It looks like this:

<script src="https://api.bleum.ai/public/widget/bleum-widget.js"
  data-publishable-key="bleum_pk_YOUR_KEY_HERE"
  defer></script>

Step 3 โ€” Add it to your website

Paste the snippet before the closing </body> tag on any page where you want the widget to appear. No other configuration is needed โ€” the widget loads automatically and floats in the corner set by its Button Position (bottom-right by default).

๐Ÿ’ก Tip Add the widget to your highest-traffic support pages first โ€” contact pages, pricing pages, or help centers. These are where visitors are most likely to have questions and benefit from immediate AI assistance.

How It Works for Visitors

Widget appears

A floating "Call us now" button appears in the corner of your page. Clicking it opens the call panel.

Visitor clicks "Call Now"

Their browser requests microphone permission. Once granted, the call connects to your AI agent within seconds.

Live conversation

The AI greets the caller and handles the conversation. The visitor sees a live transcript of both sides of the call. They can mute themselves or end the call at any time.

Post-call summary

When the call ends, the panel transitions to a call summary showing duration, turns, sentiment, avg response time, and an AI-generated summary of what was discussed.

Post-Call Summary Details

After every widget call, visitors see a summary panel with four metrics and an AI-written summary:

MetricWhat It Shows
DurationTotal call length from connect to disconnect.
TurnsHow many times the caller spoke during the call.
SentimentWhether the caller's mood improved, declined, or stayed stable over the call.
Avg ResponseAverage time from the end of the caller's turn to the end of the AI's reply.

The AI summary is a two-to-three-sentence recap of the conversation. Hover over any metric label to see a tooltip explaining what it measures.

Domain Security

Each widget has an Allowed Domains list. The button shows wherever the snippet is pasted, but a browser on a domain outside that list cannot place a call. This prevents your widget from being used on unauthorized sites. Always add the exact domains where you plan to embed the widget โ€” including subdomains if needed (e.g. both yoursite.com and www.yoursite.com). A request that names no website at all is refused too: browsers always name the page a call comes from, so only scripts outside a browser are affected.

โ„น๏ธ Good to know The BLEUM Help Center itself uses a VoIP widget. The "Call us now" button in the corner of the Help Center home page is the same widget you can embed on your own site.

Secure widgets (JWT)

For a widget only signed-in visitors should use, set its Security Tier to Secure (JWT required). Before each call the widget asks your own server for a short-lived token, signed with a key only you hold, and BLEUM opens the call only with a valid one, used once.

Step 1 โ€” Create a signing key

In Phone Numbers โ†’ Call Widgets โ†’ Signing keys (admins only), click Create key. The private key is shown once: copy it to your server's secrets. BLEUM keeps only the public half. A widget cannot be set to JWT until a key exists.

Step 2 โ€” Sign a token on your server

An endpoint on your site checks your own sign-in and answers { "token": "โ€ฆ" }. The token is an ES256 JWT with the key's id as kid, the widget's publishable key as aud, a unique jti, and at most five minutes of life. In Node, with the jsonwebtoken package:

jwt.sign({ aud: 'bleum_pk_YOUR_KEY_HERE', jti: crypto.randomUUID(), sub: user.id },
         privateKeyPem, { algorithm: 'ES256', keyid: 'wk_YOUR_KEY_ID', expiresIn: 120 });

sub is optional (your own reference for the visitor; BLEUM checks it and does not store it).

Step 3 โ€” Point the widget at it

<script src="https://api.bleum.ai/public/widget/bleum-widget.js"
  data-publishable-key="bleum_pk_YOUR_KEY_HERE"
  data-auth-url="/your/token/endpoint"
  defer></script>

The widget calls that path with a POST that carries the visitor's cookies. A single-page app can instead set window.BleumWidget = { getAuthToken: async () => token } before the widget loads. With neither, a secure widget shows no button.

Your own message When a call is refused for its token, the widget shows its usual "Call failed" state and sends your page a bleum-widget:error event with a code (widget-auth-required, widget-auth-invalid, or auth-provider-failed when your endpoint failed), so your site can show its own words, such as asking the visitor to sign in.

Rotating a key: create a second key, put it on your server, then retire the first. You can hold two active keys; the last one cannot be retired while a widget is set to JWT.

Browser Requirements

The widget uses WebRTC for the call connection and the browser's microphone API. It works best on:

  • Chrome (recommended)
  • Edge
  • Firefox

Safari has partial support but may have microphone permission issues on some versions. The widget will not work on browsers that block WebRTC or on managed corporate devices with restrictive network policies.

Common Questions

Yes. You can create multiple widgets, each with a different name, VoIP endpoint, and allowed domain list. For example, you could have one widget for your main support site and another for a specific product's help pages, each routing to a different set of procedures.

Yes. Every widget call appears in Call History with a full transcript, duration, and sentiment data. The caller identifier shows as a widget session ID rather than a phone number.

Yes. Widget calls go through the same AI pipeline as phone calls and are billed the same way.

Yes. If your procedures include an escalation action and a phone number is configured in your Escalation Flow, the AI can transfer the caller to a human agent. The widget caller will be connected to the configured phone number via a standard outbound call.

Each widget has its own Theme Color for the header and buttons, plus a Button Label and Button Position, all set in the widget editor. The name displayed in the panel header comes from the widget's Name field. Further visual customization is available on higher-tier plans.