3.6 KiB
3.6 KiB
Widget Integration Guide
Quick Start
1. Include the Widget Script
Add the widget loader script to your HTML page:
<script src="https://cdn.example.com/virtual-banker/widget.js"
data-tenant-id="your-tenant-id"
data-user-id="user-123"
data-auth-token="jwt-token"
data-api-url="https://api.example.com"
data-avatar-enabled="true"></script>
<div id="virtual-banker-widget"></div>
2. Configuration Options
| Attribute | Required | Description |
|---|---|---|
data-tenant-id |
Yes | Tenant identifier |
data-user-id |
No | User identifier (for authenticated sessions) |
data-auth-token |
No | JWT token for authentication |
data-api-url |
No | API base URL (default: http://localhost:8081) |
data-avatar-enabled |
No | Enable/disable avatar (default: true) |
Programmatic API
Methods
// Open widget
window.VirtualBankerWidgetAPI.open();
// Close widget
window.VirtualBankerWidgetAPI.close();
// Minimize widget
window.VirtualBankerWidgetAPI.minimize();
// Set context (page/route information)
window.VirtualBankerWidgetAPI.setContext({
route: '/account',
accountId: 'acc-123',
productId: 'prod-456'
});
// Update authentication token
window.VirtualBankerWidgetAPI.setAuthToken('new-jwt-token');
PostMessage Events
Listen for widget events from the parent window:
window.addEventListener('message', (event) => {
if (event.data.source === 'virtual-banker-widget') {
switch (event.data.type) {
case 'ready':
console.log('Widget is ready');
break;
case 'session_started':
console.log('Session ID:', event.data.payload.sessionId);
break;
case 'action_requested':
console.log('Action:', event.data.payload.action);
console.log('Params:', event.data.payload.params);
// Handle action (e.g., open ticket, schedule appointment)
break;
case 'action_completed':
console.log('Action completed:', event.data.payload);
break;
case 'handoff_to_human':
console.log('Handoff reason:', event.data.payload.reason);
// Show human agent interface
break;
}
}
});
Sending Messages to Widget
Send commands to the widget from the parent window:
const widget = document.getElementById('virtual-banker-widget');
if (widget && widget.contentWindow) {
widget.contentWindow.postMessage({
type: 'open',
source: 'virtual-banker-host'
}, '*');
}
Available commands:
open- Open the widgetclose- Close the widgetminimize- Minimize the widgetsetContext- Update contextsetAuthToken- Update auth token
Styling
The widget can be styled via CSS:
#virtual-banker-widget {
position: fixed;
bottom: 20px;
right: 20px;
width: 400px;
height: 600px;
z-index: 9999;
border-radius: 8px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
}
#virtual-banker-widget.minimized {
height: 60px;
width: 200px;
}
Theming
Theme can be configured per tenant via the backend API. The widget will automatically apply the theme from the session configuration.
Accessibility
The widget is built with accessibility in mind:
- Full keyboard navigation
- Screen reader support
- ARIA labels
- Captions always available
- Reduced motion support (respects OS preference)
Browser Support
- Chrome/Edge 90+
- Firefox 88+
- Safari 14+
- Mobile browsers (iOS Safari, Chrome Mobile)
Security
- Content Security Policy (CSP) compatible
- No direct secrets in browser
- Ephemeral session tokens only
- CORS configured for embedding