telkit

Guider

Ring ut og styr samtalen

POST /v1/calls starter en samtale. Hvem som er med, bestemmer du: et telefonnummer, en eller flere brukere i appen din, eller begge. Mens samtalen pågår, kan du legge til og ta ut deltakere, lese opp tekst og lytte etter tastetrykk.

Ring og les opp en tekst

Den enkleste samtalen ringer et nummer og leser opp en tekst når noen svarer. from må være et av profilens aktive numre.

Ring og les opp en tekst

I stedet for text kan du spille et lydklipp med audioClipId. repeat: true spiller meldingen to ganger. Svaret er samtalen med id, state og deltakerne.

Koble en selger i nettleseren til kunden

Et CRM som ringer mange kunder om dagen, vil at selgeren snakker fra nettleseren. Legg selgeren til som en app-deltaker med din egen id i externalRef:

Ring en kunde og koble inn selgeren i nettleseren
  • Hver app-deltaker i svaret har connection med url og token. Gi dem til selgerens nettleser, som kobler seg til samtalen med en LiveKit-klient, for eksempel livekit-client. Lyden går gjennom LiveKit.
  • Trenger nettleseren en ny nøkkel, etter en omlasting eller et brudd, henter du den slik:
Hent en ny innloggingsnøkkel for en app-deltaker

Opptak, tekst og telefonsvarer

  • recording: true tar opp samtalen. Du får call.recording.ready når opptaket er lagret.
  • transcription: true gjør opptaket om til tekst etter samtalen. Du får call.transcript.ready, og teksten ligger på GET /v1/calls/:id/transcript.
  • amd gjetter om et menneske eller en telefonsvarer tok telefonen, og sender call.machineDetected. Med hangup_on_machine legger vi på hos en telefonsvarer. Med voicemail_drop venter vi til hilsenen er ferdig og legger igjen et lydklipp (clipId) eller en opplest tekst (text). Dette virker bare på en samtale uten automatisk melding.
Hent teksten fra samtalen

Dine egne referanser

externalRef og metadata kommer tilbake i alle hendelser om samtalen, så CRM-et vet hvilken kunde og kampanje den gjelder. Når samtalen er over, kan selgeren sette resultatet:

Sett resultatet av samtalen på dine egne etiketter

Har nummeret en selgerreferanse (assignedTo), står den i call.ended.

Konferanse: flere i samme samtale

En samtale kan ha flere deltakere: telefoner, app-brukere og medarbeidere. Ring opp en kollega inn i samtalen:

Ring opp en kollega inn i samtalen

Du kan dempe en deltaker, sette den på vent (held) eller endre hva den hører og sier (audioMode: talk, listen eller whisper):

Demp en deltaker

Å ta ut én deltaker avslutter ikke samtalen for de andre:

Ta en deltaker ut av samtalen

Hver endring gir call.participant.joined, call.participant.left eller call.participant.updated.

Samtaler mellom app-brukere

Uten to og med bare app-deltakere er samtalen en samtale mellom brukerne i plattformen din. Ingen telefon blir ringt. conference: true holder samtalen åpen så lenge noen er i den.

Start en samtale mellom to app-brukere

Prisen er per deltaker og minutt.

Din egen bot i samtalen

Har du din egen bot, for eksempel en stemmeassistent, kan den være deltaker i samtalen. Legg den til med kind satt til bot:

Sett din egen bot inn i samtalen
  • Svaret har connection med url og token. Boten kobler seg til samtalen fra serveren din med en LiveKit-klient, for eksempel @livekit/rtc-node. Lyden går direkte mellom boten og LiveKit, ikke gjennom oss.
  • Boten kan snakke med mikrofonlyd og høre alle som snakker i samtalen. Den kan ikke sende datameldinger, så den kan aldri utgi seg for å være telkit overfor brukerne i appen din.
  • Nøkkelen virker så lenge boten har betalt tid, pluss 5 minutter til å koble seg til, og aldri mer enn 2 timer. En ny nøkkel til samme bot henter du med POST /v1/calls/:id/participants/:participantId/token.
  • Boten er med til den kobler seg fra, til du tar den ut, eller til den betalte tiden er brukt opp. Da blir den koblet fra, og nøkkelen slutter å virke.
  • I en konferanse eller en samtale mellom app-brukere holder en bot ikke samtalen åpen alene: når den siste personen går, er samtalen over. Det samme gjelder en AI-agent.
  • Du får call.participant.joined og call.participant.left med kind bot.

Eksempel med @livekit/rtc-node

bot.jsjavascript
import {	AudioFrame,	AudioSource,	AudioStream,	LocalAudioTrack,	Room,	RoomEvent,	TrackKind,	TrackPublishOptions,	TrackSource,} from "@livekit/rtc-node"; const sampleRate = 16000; /** `connection` is the bot's { url, token } from POST /v1/calls/:id/participants. */export async function runBot(connection) {	const room = new Room();	await room.connect(connection.url, connection.token, { autoSubscribe: true, dynacast: false }); 	// Hear: every voice in the call, as 16-bit samples at 16 kHz.	room.on(RoomEvent.TrackSubscribed, async (track, _publication, participant) => {		if (track.kind !== TrackKind.KIND_AUDIO) return;		for await (const frame of new AudioStream(track, sampleRate, 1)) {			// frame.data is an Int16Array from participant.identity: hand it to your recognizer.		}	}); 	// Speak: one microphone track. The token allows nothing else (no camera, no data).	const source = new AudioSource(sampleRate, 1);	const track = LocalAudioTrack.createAudioTrack("bot-voice", source);	const options = new TrackPublishOptions({ source: TrackSource.SOURCE_MICROPHONE });	await room.localParticipant?.publishTrack(track, options); 	// Send audio in 20 ms frames (here: silence); your speech synthesis fills them.	const samples = sampleRate / 50;	await source.captureFrame(new AudioFrame(new Int16Array(samples), sampleRate, 1, samples)); 	room.on(RoomEvent.Disconnected, () => {		// The call ended, you removed the bot, or its paid time ran out.	});} 

Pris og grenser

  • Boten koster per påbegynte minutt den er i samtalen, i tillegg til samtalens egne minutter. Minuttene reserveres når du legger den til: inntil maxMinutes, høyst 60 minutter og aldri lenger enn samtalens betalte tid.
  • Opptak og transkripsjon av alle stemmer tar med det boten sier.
  • Med en testnøkkel er boten gratis og med i høyst ett minutt. Da finnes det ikke noe ekte rom, så connection er null.

Styr samtalen mens den pågår

KallBetyr
POST /v1/calls/:id/sayLes opp en tekst for alle eller én deltaker.
POST /v1/calls/:id/playSpill et lydklipp, eventuelt om og om igjen.
POST /v1/calls/:id/gatherSpør og lytt etter tastetrykk eller tale. Se menyer.
POST /v1/calls/:id/dtmfSend tastetoner inn i samtalen. Ikke åpnet ennå: til vi har bekreftet at tonene høres på en ekte telefon, svarer API-et capability_unavailable.
POST /v1/calls/:id/media/stopStopp lyden som spilles.
POST /v1/calls/:id/recording/startStart et opptak midt i samtalen.
POST /v1/calls/:id/transcription/startSkriv ned samtalen mens den pågår.
POST /v1/calls/:id/hangupLegg på for alle.
Les opp en tekst i en samtale som pågår

Handlinger som går til telefonnettet eller lydsystemet, blir utført etter at svaret er sendt. Utfallet kommer som call.command.completed, call.command.failed eller call.command.uncertain (vi fikk ikke vite om den ble utført). Du kan også spørre:

Se hvordan en handling gikk

Når en opplesning eller et lydklipp er ferdig, får du call.playback.ended.

Pris og slutt

Alt du ber om i POST /v1/calls prises og reserveres samlet når samtalen starter, for inntil maxMinutes minutter eller så lenge saldoen rekker. Når samtalen er over, får du call.ended med varighet, tellede minutter og pris, og ubrukt reservasjon går tilbake til saldoen. Hent samtalen når som helst:

Hent samtalen med deltakere, varighet og pris

Kom i gang med telkit

Registrer bedriften med organisasjonsnummeret.