Lär dig hur du konfigurerar webhooks för att få automatiska notifikationer om transkriberingshändelser på VoxScriber.
Konfigurera realtidsnotifikationer om dina transkriberingar. Lär dig hur du sätter upp webhooks, implementerar säkerhet och integrerar med dina system.
Få omedelbara uppdateringar om transkriberingsstatus.
Automatisera arbetsflöden baserat på händelser.
| Händelse | Beskrivning | Nyttolast |
|---|---|---|
| transcription.started | Transkribering påbörjad | Uppladdnings-ID, motor, tidsstämpel |
| transcription.progress | Förlopp uppdaterat | Uppladdnings-ID, procentandel, uppskattning |
| transcription.completed | Transkribering slutförd | Uppladdnings-ID, text, varaktighet, krediter |
| transcription.failed | Transkribering misslyckades | Uppladdnings-ID, fel, feltyp |
| transcription.retry | Försök att göra om påbörjat | Uppladdnings-ID, försök, motor |
| upload.completed | Filuppladdning slutförd | Uppladdnings-ID, storlek, format |
| credits.low | Krediter under inställt tröskelvärde | Nuvarande saldo, tröskelvärde |
const express = require('express');
const crypto = require('crypto');
const app = express();
const WEBHOOK_SECRET = process.env.WEBHOOK_SECRET;
app.post('/webhook/voxscriber', express.raw({ type: 'application/json' }), (req, res) => {
// Verify signature
const signature = req.headers['x-webhook-signature'];
const hash = crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(req.body)
.digest('hex');
if (signature !== hash) {
return res.status(401).send('Invalid signature');
}
const event = JSON.parse(req.body);
switch (event.type) {
case 'transcription.completed':
console.log('Transcription completed:', event.data.uploadId);
// Process result
break;
case 'transcription.failed':
console.log('Transcription failed:', event.data.error);
// Handle error
break;
}
res.status(200).json({ received: true });
});
import hmac
import hashlib
from flask import Flask, request, jsonify
app = Flask(__name__)
WEBHOOK_SECRET = os.environ['WEBHOOK_SECRET']
@app.route('/webhook/voxscriber', methods=['POST'])
def handle_webhook():
# Verify signature
signature = request.headers.get('X-Webhook-Signature')
expected = hmac.new(
WEBHOOK_SECRET.encode(),
request.data,
hashlib.sha256
).hexdigest()
if not hmac.compare_digest(signature, expected):
return jsonify({'error': 'Invalid signature'}), 401
event = request.json
if event['type'] == 'transcription.completed':
process_transcription(event['data'])
elif event['type'] == 'transcription.failed':
handle_failure(event['data'])
return jsonify({'received': True}), 200
Verifiera alltid HMAC-signaturen för varje mottagen webhook innan du bearbetar händelsen. Lita aldrig på webhooks utan signaturverifiering.
När din slutpunkt inte svarar framgångsrikt (2xx) gör VoxScriber flera återförsök:
| Försök | Intervall | Beskrivning | |---|---|---| | 1 | Omedelbart | Första försöket | | 2 | 1 minut | Efter initialt misslyckande | | 3 | 5 minuter | Andra återförsöket | | 4 | 30 minuter | Tredje återförsöket | | 5 | 2 timmar | Sista försöket |
Efter 5 på varandra följande misslyckanden inaktiveras webhooken automatiskt och du får en e-postnotifikation.
Möjliga orsaker: Felaktig URL, brandvägg blockerar, ogiltigt SSL-certifikat.
Lösningar: Kontrollera URL:en i dashboarden, tillåt VoxScriber IP i din brandvägg, validera ditt SSL-certifikat.
Möjliga orsaker: Felaktig hemlighet, annan kroppskodning, mellanprogram som ändrar kroppen.
Lösningar: Bekräfta hemligheten i dashboarden, använd rå kropp för verifiering, inaktivera tolkningsmellanprogram före verifiering.
Möjliga orsaker: Återförsök efter timeout, långsam serversvar.
Lösningar: Implementera idempotens med event.id, svara snabbt med 200 OK, bearbeta asynkront.
Använd webhook-övervakningspanelen i Dashboard för att kontrollera leveranser, misslyckanden och nyttolaster. Det förenklar felsökning under integrationen avsevärt.