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) of1(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
wavofflac. 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).
