telkit

Guider

Strøm lyden fra en samtale til din egen server

En mediestrøm sender lyden fra en samtale til serveren din mens samtalen pågår, og spiller av lyden serveren sender tilbake. Vi bruker meldingsformatet til Twilio Media Streams, så verktøy som allerede kan Twilio, virker også her.

Slik virker det

  • Du registrerer adressen til serveren din som en webhook-endepunkt. Vi kobler bare til registrerte endepunkt, og bare med https på port 443 (vi ringer opp som wss://).
  • Strømmen er en deltaker i samtalen av typen stream. Du får call.participant.joined når den er inne, og call.participant.left med 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

Startbash
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}'
FeltBetyr
endpointIdEt registrert endepunkt for firmaet eller profilen til samtalen.
audiotalk (standard): lyd begge veier. listen: bare lytte.
listen.modesingle hører samtalens egen telefon (eller én deltaker med listen.participantId). mixed hører alle personene blandet.
customParametersInntil 20 par. Kommer i start-meldingen, med from_number og to_number.
maxMinutesHøyst 60 minutter, aldri lenger enn samtalen er betalt for.
reconnectRing 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:

Fra serveren dinjson
{ "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å.

server.tstypescript
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.

bot.pypython
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.

Kom i gang med telkit

Registrer bedriften med organisasjonsnummeret.