Guider
Strøm lyden fra en samtale til din egen server
Slik virker det
- Du registrerer adressen til serveren din som en webhook-endepunkt. Vi kobler bare til registrerte endepunkt, og bare med
httpspå port 443 (vi ringer opp somwss://). - Strømmen er en deltaker i samtalen av typen
stream. Du fårcall.participant.joinednår den er inne, ogcall.participant.leftmed en grunn når den slutter. - Lyd er G.711 μ-law, 8 000 Hz, mono, i biter på 20 ms.
- Alle i samtalen hører det serveren din sier.
Start en strøm
curl https://api.telkit.no/v1/calls/$CALL_ID/streams \ -H "Authorization: Bearer $TELKIT_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "endpointId": "whe_…", "audio": "talk", "listen": { "mode": "single" }, "customParameters": { "customer": "4471" }, "maxMinutes": 30}'| Felt | Betyr |
|---|---|
endpointId | Et registrert endepunkt for firmaet eller profilen til samtalen. |
audio | talk (standard): lyd begge veier. listen: bare lytte. |
listen.mode | single hører samtalens egen telefon (eller én deltaker med listen.participantId). mixed hører alle personene blandet. |
customParameters | Inntil 20 par. Kommer i start-meldingen, med from_number og to_number. |
maxMinutes | Høyst 60 minutter, aldri lenger enn samtalen er betalt for. |
reconnect | Ring opp igjen hvis forbindelsen brytes uten lukking (standard: ja). |
Du kan også sende stream med samme felt når du lager samtalen med POST /v1/calls. Da starter strømmen når samtalen blir besvart. Les strømmen med GET /v1/calls/:id/streams/:streamId, og stopp den med POST /v1/calls/:id/streams/:streamId/stop.
Meldingene
Vi sender connected, så start, så media hvert 20. millisekund, dtmf når en telefon trykker en tast, mark når lyden før et merke er spilt, og stop før vi lukker. start.telkit har samtalens id, numre og resumed når vi har koblet til på nytt etter et brudd.
Serveren din kan sende lyd, merker og clear:
{ "event": "media", "streamSid": "…", "media": { "payload": "<base64 μ-law, 8 kHz>" } }{ "event": "mark", "streamSid": "…", "mark": { "name": "sentence-1" } }{ "event": "clear", "streamSid": "…" }Sjekk at det er oss
Vi signerer oppkoblingen med nøklene til endepunktet, som en webhook. Sjekk signaturen i headeren telkit-stream med et hvilket som helst Standard Webhooks-bibliotek, slik som for webhooks. Eksempelet under bruker TypeScript-SDK-en vår, som ikke er publisert ennå.
import { verifyStreamConnection } from "@telkit/sdk"; // In your WebSocket server's upgrade handler, before you accept the socket:const claim = await verifyStreamConnection({ headers: request.headers, url: "wss://bot.example.no/stream", // your endpoint's URL with https: changed to wss: secret: process.env.TELKIT_ENDPOINT_SECRET, // the endpoint's whsec_… secret});// Later, check that the start message's streamSid equals claim.streamId.Pipecat og OpenAI realtime
Pipecat sin TwilioFrameSerializer virker uendret, men lag den selv med auto_hang_up=False: ellers prøver den å legge på gjennom Twilio sitt API. Legg på med POST /v1/calls/:id/hangup.
from fastapi import FastAPI, WebSocketfrom pipecat.serializers.twilio import TwilioFrameSerializer app = FastAPI() @app.websocket("/stream")async def stream(websocket: WebSocket): await websocket.accept() # after you verified the signed upgrade await websocket.receive_json() # the connected message start = await websocket.receive_json() # the start message serializer = TwilioFrameSerializer( stream_sid=start["start"]["streamSid"], params=TwilioFrameSerializer.InputParams(auto_hang_up=False), ) # Hand the websocket and the serializer to your Pipecat pipeline as for a Twilio call. # Hang up through telkit's API (POST /v1/calls/:id/hangup), not through Twilio.OpenAI realtime tar μ-law direkte (g711_ulaw), så du kan sende media.payload videre uten å gjøre om lyden, og sende svaret tilbake som media.
Pris og grenser
- Strømmen koster per påbegynte minutt den er i samtalen, i tillegg til samtalens egne minutter. Minuttene reserveres når du starter den og trekkes én gang når den slutter.
- 1 strøm per samtale og 5 samtidig per firma.
- Med en testnøkkel kobler vi til serveren din, men du hører en testtone i stedet for en samtale, i høyst 60 sekunder, uten kostnad.
- Lyden fra boten er med i opptaket av samtalen, og i sanntidstranskripsjon når den skriver ned alle.