Embedded Assist
Add live visual support inside your own customer experience.
Beam Assist lets an agent invite a customer from Intercom, Help Scout, Zendesk, a custom console, a website, or a device companion. The invite carries the customer/account/device context, support-ticket context, and a share policy that controls which sources can be shared.
Create an invite from your backend
curl -X POST https://beam.be-online.ro/api/v1/assist/invites \
-H "Authorization: Bearer $BEAM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"subject": "Help Maria connect her Kobo Libra Colour",
"customer": {
"id": "kobo_user_123",
"name": "Maria Popescu",
"email": "[email protected]",
"account_id": "acct_family_library",
"device_model": "Kobo Libra Colour",
"app_version": "Kobo Desktop 4.38",
"firmware_version": "4.39.22861"
},
"support_tool": {
"provider": "intercom",
"conversation_id": "intercom_conv_456",
"ticket_id": "INT-456",
"thread_url": "https://app.intercom.com/a/inbox/conversation/456"
},
"share_policy": {
"allowed_source_types": ["window"],
"default_source_type": "window",
"allow_entire_screen": false,
"capture_hint": "Share only the Kobo Desktop app window."
}
}'
Choose what can be shared
Use share_policy.allowed_source_types to decide what Beam shows to the customer. Supported values are browser_tab, window, screen, camera, microphone, and native_device.
Browser security still requires the customer to confirm the final browser picker. For exact app-only/device-only capture, use native_device and publish from the product app or Beam companion.
{
"share_policy": {
"allowed_source_types": ["native_device"],
"default_source_type": "native_device",
"native_source_id": "kobo-reader-setup-panel",
"capture_hint": "Open the invite from the Kobo app."
}
}
Push customer and support-tool data
Use customer for account, user, device, app, and firmware data. Use support_tool for the external conversation, ticket, inbox, agent, workspace, and thread URL. Beam returns both objects in invite, session, and join responses so your UI and webhooks do not have to parse loose metadata.
Embed the customer side
<script src="https://beam.be-online.ro/sdk/beam-stream.js"></script>
<script src="https://beam.be-online.ro/sdk/beam-assist.js"></script>
<div id="beam-assist"></div>
<script>
BeamAssist.mountCustomer("#beam-assist", {
apiBase: "https://beam.be-online.ro/api",
joinToken: "jt_xxx"
});
</script>
Embed the agent console
<iframe
src="https://beam.be-online.ro/assist/agent/?session=sess_xxx&agent_token=at_xxx"
style="width:100%;height:760px;border:0;border-radius:18px"
allow="camera; microphone; display-capture; autoplay; fullscreen">
</iframe>
AI assistant and ticket summary
const result = await BeamAssist.observe({
apiBase: "https://beam.be-online.ro/api",
sessionId: "sess_xxx",
agentToken: "at_xxx",
user_goal: "Help customer connect Wi-Fi",
visible_text: "Wi-Fi password failed"
});
const summary = await BeamAssist.summary({
apiBase: "https://beam.be-online.ro/api",
sessionId: "sess_xxx",
agentToken: "at_xxx",
notes: "Customer confirmed the reader is online"
});
Write summary.ticket_body back to Intercom, Help Scout, Zendesk, Salesforce, or the customer record.