Listen to Events

React to conversation and avatar activity in your app.

Basic pattern

import { Experience } from '@liforma/client';

const experience = await Experience.startSession({
  experienceId: 'exp_T0I7ACMQLBMPG6K'
});

experience.on('message', (evt) => {
  // ExperienceEventEnvelope<data: ConversationMessage>
  console.log(evt.data.role, evt.data.text, evt.data.status);
});

experience.on('activityChange', (evt) => {
  // evt.data: 'idle' | 'listening' | 'thinking' | 'speaking'
  console.log('activity:', evt.data);
});

const player = await experience.attach({
  container: '#avatar',
  onPlayerStatusChange: (status) => console.log('Player status', status)
});

player.on('close', ({ reason }) => {
  console.log('Player closed', reason);
});

Common use cases

GoalAPI
Show transcript / chat logmessage (check status === 'final')
Mic / speaker indicatoractivityChange (envelope .data: 'idle' | 'listening' | 'speaking' | 'thinking')
Partial live captionsuserTranscript
Sync UI with speechcharacterSpeechStarted / characterSpeechEnded
Player embed lifecycleattach({ onPlayerStatusChange })
Handle user closing the playerplayer.on('close') or component onClose

Full payload shapes: Events reference.