AI ses asistanınızı web sitenize birkaç dakika içinde entegre edin
Web Embedding, Wespoke AI ses asistanlarınızı web sitenize veya uygulamanıza entegre etmenizi sağlayan bir özelliktir. Kullanıcılarınız telefon aramalarına ek olarak, doğrudan tarayıcılarından ses asistanınızla konuşabilir.
LiveKit WebRTC altyapısı kullanarak düşük gecikmeli, yüksek kaliteli ses bağlantıları sağlar. Tıpkı telefon aramaları gibi, web aramaları da kayıt edilir ve fiyatlandırma modelinize göre ücretlendirilir.
Kontrol panelinden bir API anahtarı oluşturun ve sitenizin domain adresini izin verilenler listesine ekleyin.
API Anahtarları Sayfasına Gitpk_abc123def456ghi789...Backend'inizden /api/v1/embed/token endpoint'ine istek göndererek LiveKit bağlantı bilgilerini alın.
// Tip tanımları
interface TokenRequest {
assistantId: string;
metadata?: {
userId?: string;
sessionId?: string;
customData?: Record<string, any>;
};
}
interface TokenResponse {
success: boolean;
data: {
callId: string;
token: string;
url: string;
roomName: string;
assistant: {
id: string;
name: string;
version: number;
};
};
}
// Token alma fonksiyonu
async function getWebCallToken(
apiKey: string,
assistantId: string,
metadata?: TokenRequest['metadata']
): Promise<TokenResponse> {
const response = await fetch('https://api.wespoke.ai/api/v1/embed/token', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
},
body: JSON.stringify({
assistantId,
metadata
})
});
if (!response.ok) {
throw new Error(`Token alma başarısız: ${response.statusText}`);
}
return response.json();
}
// Kullanım
const tokenData = await getWebCallToken(
'pk_live_abc123...',
'asst_xyz789',
{
userId: 'user-123',
sessionId: 'session-456',
customData: { source: 'website' }
}
);LiveKit Client SDK kullanarak token ile WebRTC bağlantısı kurun.
npm install livekit-client
# veya
yarn add livekit-clientimport { Room, RoomEvent } from 'livekit-client';
async function connectToAssistant(
url: string,
token: string
): Promise<Room> {
const room = new Room({
// Ses ayarları
audioCaptureDefaults: {
echoCancellation: true,
noiseSuppression: true,
autoGainControl: true,
}
});
// Bağlantı olaylarını dinle
room.on(RoomEvent.Connected, () => {
console.log('Asistana bağlanıldı');
});
room.on(RoomEvent.Disconnected, () => {
console.log('Bağlantı kesildi');
});
room.on(RoomEvent.TrackSubscribed, (track) => {
if (track.kind === 'audio') {
// Asistan sesini çal
const audioElement = track.attach();
document.body.appendChild(audioElement);
}
});
// Odaya bağlan
await room.connect(url, token);
// Mikrofonu etkinleştir
await room.localParticipant.setMicrophoneEnabled(true);
return room;
}
// Kullanım
const room = await connectToAssistant(
tokenData.data.url,
tokenData.data.token
);
// Aramayı sonlandırmak için
await room.disconnect();Tüm adımları birleştiren basit bir örnek:
import { Room, RoomEvent } from 'livekit-client';
const API_KEY = 'pk_live_abc123...';
const ASSISTANT_ID = 'asst_xyz789';
const API_URL = 'https://api.wespoke.ai';
async function startVoiceCall() {
try {
// 1. Token al
const response = await fetch(`${API_URL}/api/v1/embed/token`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`
},
body: JSON.stringify({
assistantId: ASSISTANT_ID,
metadata: {
userId: 'user-123',
source: 'website'
}
})
});
if (!response.ok) {
throw new Error(`API hatası: ${response.statusText}`);
}
const { data } = await response.json();
console.log('Arama başlatıldı:', data.callId);
// 2. LiveKit odası oluştur
const room = new Room({
audioCaptureDefaults: {
echoCancellation: true,
noiseSuppression: true,
autoGainControl: true,
}
});
// 3. Olayları dinle
room.on(RoomEvent.Connected, () => {
console.log('✅ Asistana bağlandı');
});
room.on(RoomEvent.TrackSubscribed, (track) => {
if (track.kind === 'audio') {
const audioElement = track.attach();
document.body.appendChild(audioElement);
console.log('🔊 Asistan sesi alınıyor');
}
});
room.on(RoomEvent.Disconnected, () => {
console.log('❌ Bağlantı kesildi');
});
// 4. Bağlan
await room.connect(data.url, data.token);
// 5. Mikrofonu aç (hata yönetimi ile)
try {
await room.localParticipant.setMicrophoneEnabled(true);
console.log('🎤 Mikrofon açık - Konuşabilirsiniz');
} catch (error) {
console.error('Mikrofon erişimi reddedildi:', error);
throw new Error('Mikrofon erişimi gerekli. Lütfen tarayıcı ayarlarından izin verin.');
}
return room;
} catch (error) {
console.error('Arama başlatılamadı:', error);
throw error;
}
}
// Kullanım
const room = await startVoiceCall();
// Aramayı sonlandırmak için
// await room.disconnect();