BelbreinDevelopersNaar belbrein.ai

Audio-opnames

Jullie sturen de opname, Belbrein transcribeert en analyseert.

Eén verzoek per gesprek, met één audiobestand: de opname en de gegevens over het gesprek in één keer.

Wat je nodig hebt

  • Een integratiesleutel.
  • Eén stereobestand per gesprek, met de agent op het ene kanaal en de klant op het andere. De meeste telefoniesystemen kunnen zo opnemen; het heet vaak "stereo-opname" of "dual-channel recording". Dit is de belangrijkste eis, zie Eisen aan de opname.
  • Weten op welk kanaal de agent staat: 0 (links) of 1 (rechts). Dat staat in de instellingen of de metadata van jullie telefoniesysteem.

Stuur het gesprek

curl -X POST https://app-callinsightswl-prod.azurewebsites.net/v1/ingestion/recordings \
  -H "Authorization: Bearer <integratiesleutel>" \
  -F audio=@gesprek.wav \
  -F agent_channel=0 \
  -F external_conversation_id=CM-2026-08-31-00412 \
  -F agent_external_id=agent-1187 \
  -F call_agent_name="Sanne de Vries" \
  -F campaign="Najaarsactie 2026" \
  -F outcome_code=callback \
  -F conversation_date=2026-08-31T10:14:22+02:00

Hetzelfde in Python:

import requests

with open("gesprek.wav", "rb") as audio:
    response = requests.post(
        "https://app-callinsightswl-prod.azurewebsites.net/v1/ingestion/recordings",
        headers={"Authorization": "Bearer <integratiesleutel>"},
        files={"audio": audio},
        data={
            "agent_channel": "0",
            "external_conversation_id": "CM-2026-08-31-00412",
            "agent_external_id": "agent-1187",
            "call_agent_name": "Sanne de Vries",
            "campaign": "Najaarsactie 2026",
            "outcome_code": "callback",
            "conversation_date": "2026-08-31T10:14:22+02:00",
        },
    )
response.raise_for_status()
Veld Toelichting
audio Het audiobestand: wav, mp3, flac, ogg of m4a, maximaal 500 MB. Het formaat wordt herkend aan de bestandsnaam
agent_channel Op welk kanaal de agent staat: 0 of 1. De klant staat op het andere kanaal
Overige velden De gespreksmetadata, elk als los formulierveld

Welke agent_channel je meestuurt, hangt af van hoe jullie telefoniesysteem opneemt:

Kanaal 0 (links) Kanaal 1 (rechts) Stuur mee
Agent Klant (de gebelde persoon) agent_channel=0
Klant (de gebelde persoon) Agent agent_channel=1

Twijfel je? Luister een opname met een koptelefoon: wie hoor je links? Dat is kanaal 0.

Je krijgt 202 Accepted terug. Dat is alles: de opname staat in de wachtrij en het geanalyseerde gesprek verschijnt vanzelf in Belbrein.

{
  "status": "queued",
  "job_id": "5f7d2c1a-8e3b-4d6f-9a2c-1b7e4f8d3a6c",
  "external_conversation_id": "CM-2026-08-31-00412"
}

Is de agent in Belbrein nog aan geen medewerker gekoppeld, dan wordt de opname niet verwerkt en direct verwijderd. Je krijgt dan ook 202 Accepted terug, met "status": "skipped":

{
  "status": "skipped",
  "reason": "agent_not_linked",
  "external_conversation_id": "CM-2026-08-31-00412"
}

Dat is geen fout: het agent-id is nu bekend bij Belbrein en de beheerder kan het koppelen. Wil je die gesprekken alsnog laten analyseren, stuur ze dan na het koppelen opnieuw in.

Staat automatisch analyseren voor jullie organisatie uit, dan wordt de opname ook niet verwerkt: je krijgt 202 Accepted met "status": "skipped" en "reason": "analysis_disabled". Stuur de opname opnieuw in nadat de beheerder analyse heeft aangezet. De testopname wordt altijd verwerkt.

De testopname

De eerste opname die jullie insturen, wordt de testopname, ook als de agent nog niet gekoppeld is. De beheerder van jullie organisatie kan hem onder Connector → Test de verbinding terugluisteren en het transcript lezen, met per zin of die bij de agent of bij de klant staat. Klopt dat, dan bevestigt de beheerder de verbinding. Staan agent en klant omgedraaid, dan klopt agent_channel niet: pas dat aan en stuur een nieuwe opname, die wordt dan de nieuwe testopname.

Status volgen (optioneel)

Wil je weten of een opname goed is verwerkt, bijvoorbeeld om afgewezen opnames te signaleren? Vraag de status op met de job_id:

curl https://app-callinsightswl-prod.azurewebsites.net/v1/ingestion/recordings/<job_id> \
  -H "Authorization: Bearer <integratiesleutel>"
status Betekenis
queued Wacht op transcriptie
processing Wordt nu getranscribeerd
transcribed Getranscribeerd, wordt nu geanalyseerd
ingested Klaar: geanalyseerd en zichtbaar in Belbrein
rejected Afgewezen, de reden staat in reject_reason (zie hieronder). Opnieuw sturen helpt niet
failed Er ging iets mis aan onze kant, zie last_error

Eisen aan de opname

Eén bestand, twee kanalen: de agent op het ene, de klant op het andere. Staan beide stemmen door elkaar op één kanaal (mono), dan kan Belbrein niet betrouwbaar bepalen wie wat zei, en dat is waar de hele beoordeling op rust.

Let op: een bestand dat stereo heet, is dat niet altijd écht. Een mono-opname die als stereo is opgeslagen heeft ook twee kanalen, maar op beide staat hetzelfde geluid. Belbrein controleert dit vóór het transcriberen en wijst zo'n opname af, in plaats van er een onbruikbaar gesprek van te maken.

reject_reason Betekenis
not_stereo Het bestand heeft geen 2 kanalen
too_short Korter dan 5 seconden
undecodable Het bestand kon niet worden gelezen (beschadigd, of niet het formaat dat de naam zegt)
channel_silent Op één kanaal wordt vrijwel niet gesproken
channel_bleed Eén kanaal is veel luider dan het andere
channels_identical Op beide kanalen staat hetzelfde geluid (mono opgeslagen als stereo)
channels_correlated De kanalen lekken sterk in elkaar over
channels_not_separated Beide kanalen bevatten het hele gesprek (een mixdown)

Voor de beste transcriptie:

  • Gebruik bij voorkeur wav of flac. Gecomprimeerde formaten met een lage bitrate kosten nauwkeurigheid.
  • 16 kHz of hoger. 8 kHz telefonie-audio werkt, maar wordt merkbaar minder goed getranscribeerd.
  • Bewerk de opname niet vooraf (geen ruisonderdrukking, volumecorrectie of normalisatie).