mirror of
https://github.com/dograh-hq/dograh.git
synced 2026-06-07 07:55:16 +02:00
feat: add agent lifecycle events in widget (#226)
* feat: add agent lifecycle events in widget * fix: remove container id
This commit is contained in:
parent
be04fa0d1b
commit
f5fa9ce717
1 changed files with 26 additions and 0 deletions
|
|
@ -29,6 +29,7 @@
|
|||
connectionStatus: 'idle', // idle, connecting, connected, failed
|
||||
audioElement: null,
|
||||
turnCredentials: null, // TURN server credentials
|
||||
callStartedAt: null, // Timestamp when call connected (for duration tracking)
|
||||
callbacks: {
|
||||
onReady: null,
|
||||
onCallStart: null,
|
||||
|
|
@ -761,6 +762,8 @@
|
|||
|
||||
if (state.pc.iceConnectionState === 'connected' || state.pc.iceConnectionState === 'completed') {
|
||||
updateStatus('connected', 'Connected', 'Your voice call is now active');
|
||||
state.callStartedAt = Date.now();
|
||||
emitMessage('dograh:call_started', {});
|
||||
} else if (state.pc.iceConnectionState === 'failed' || state.pc.iceConnectionState === 'disconnected') {
|
||||
updateStatus('failed', 'Connection lost', 'The call has been disconnected');
|
||||
stopCall();
|
||||
|
|
@ -893,6 +896,13 @@
|
|||
* Stop voice call
|
||||
*/
|
||||
function stopCall() {
|
||||
// Emit end message before clearing state so identifiers are still available
|
||||
const durationSeconds = state.callStartedAt
|
||||
? Math.round((Date.now() - state.callStartedAt) / 1000)
|
||||
: 0;
|
||||
emitMessage('dograh:call_ended', { durationSeconds });
|
||||
state.callStartedAt = null;
|
||||
|
||||
updateStatus('idle', 'Call ended', 'Click below to start a new call');
|
||||
|
||||
// Trigger call end callback
|
||||
|
|
@ -932,6 +942,22 @@
|
|||
setTimeout(() => startCall(), 500);
|
||||
}
|
||||
|
||||
/**
|
||||
* Emit a postMessage event to the host window
|
||||
* Allows the embedding website to listen for agent lifecycle events via:
|
||||
* window.addEventListener('message', (event) => { ... })
|
||||
*/
|
||||
function emitMessage(eventType, detail) {
|
||||
const message = {
|
||||
type: eventType,
|
||||
agentId: state.config.workflowId || null,
|
||||
token: state.config.token || null,
|
||||
workflowRunId: state.workflowRunId || null,
|
||||
...detail
|
||||
};
|
||||
window.postMessage(message, '*');
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate unique peer ID
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue