import { GenericAgoraSDK } from 'akool-streaming-avatar-sdk';
// Initialize the SDK
const agoraSDK = new GenericAgoraSDK({ mode: "rtc", codec: "vp8" });
// Set up event handlers
agoraSDK.on({
onStreamMessage: (uid, message) => {
console.log("Received message from", uid, ":", message);
},
onException: (error) => {
console.error("An exception occurred:", error);
},
onMessageReceived: (message) => {
console.log("New message:", message);
// Update UI with new message
updateMessageDisplay(message);
},
onMessageUpdated: (message) => {
console.log("Message updated:", message);
// Update existing message in UI
updateExistingMessage(message);
},
onNetworkStatsUpdated: (stats) => {
console.log("Network stats:", stats);
// Update network quality indicator
updateNetworkQuality(stats);
},
onTokenWillExpire: () => {
console.log("Token will expire in 30s");
// Refresh token from backend
refreshToken();
},
onTokenDidExpire: () => {
console.log("Token expired");
// Handle token expiration
handleTokenExpiry();
},
onUserPublished: async (user, mediaType) => {
if (mediaType === 'video') {
const remoteTrack = await agoraSDK.getClient().subscribe(user, mediaType);
remoteTrack?.play('remote-video-container');
} else if (mediaType === 'audio') {
const remoteTrack = await agoraSDK.getClient().subscribe(user, mediaType);
remoteTrack?.play();
}
}
});
// Function to initialize session
async function initializeSession() {
try {
// Get session credentials from your backend
const response = await fetch('/api/get-agora-credentials');
const credentials = await response.json();
// Join the Agora channel
await agoraSDK.joinChannel({
agora_app_id: credentials.agora_app_id,
agora_channel: credentials.agora_channel,
agora_token: credentials.agora_token,
agora_uid: credentials.agora_uid
});
// Initialize avatar chat
await agoraSDK.joinChat({
vid: "your-voice-id",
lang: "en",
mode: 2
});
console.log("Session initialized successfully");
} catch (error) {
console.error("Failed to initialize session:", error);
}
}
// Function to send a message
async function sendMessage(content) {
try {
await agoraSDK.sendMessage(content);
console.log("Message sent successfully");
} catch (error) {
console.error("Failed to send message:", error);
}
}
// Function to toggle microphone
async function toggleMicrophone() {
try {
await agoraSDK.toggleMic();
const isEnabled = agoraSDK.isMicEnabled();
console.log("Microphone is now:", isEnabled ? "enabled" : "disabled");
updateMicButton(isEnabled);
} catch (error) {
console.error("Failed to toggle microphone:", error);
}
}
// Function to clean up when leaving
async function cleanup() {
try {
await agoraSDK.closeStreaming();
console.log("Session ended successfully");
} catch (error) {
console.error("Error during cleanup:", error);
}
}
// Initialize the session
initializeSession();