Scopri come configurare i webhook per ricevere notifiche automatiche sugli eventi di trascrizione su VoxScriber.
Configura notifiche automatiche in tempo reale per le tue trascrizioni. Scopri come impostare i webhook, implementare la sicurezza e integrarli con i tuoi sistemi.
Ricevi aggiornamenti istantanei sullo stato delle trascrizioni.
Automatizza i flussi di lavoro basati sugli eventi.
| Evento | Descrizione | Payload |
|---|---|---|
| transcription.started | Trascrizione avviata in elaborazione | ID upload, motore, timestamp |
| transcription.progress | Progresso aggiornato | ID upload, percentuale, stima |
| transcription.completed | Trascrizione completata con successo | ID upload, testo, durata, crediti |
| transcription.failed | Trascrizione fallita | ID upload, errore, tipo di errore |
| transcription.retry | Tentativo di riprova avviato | ID upload, tentativo, motore |
| upload.completed | Caricamento file completato | ID upload, dimensione, formato |
| credits.low | Crediti al di sotto della soglia configurata | Saldo attuale, soglia |
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
Verifica sempre la firma HMAC di ogni webhook ricevuto prima di elaborare l'evento. Non fidarti mai dei webhook senza verifica della firma.
Quando il tuo endpoint non risponde con successo (2xx), VoxScriber riprova la consegna:
| Tentativo | Intervallo | Descrizione | |---|---|---| | 1 | Immediato | Primo tentativo | | 2 | 1 minuto | Dopo il fallimento iniziale | | 3 | 5 minuti | Secondo tentativo | | 4 | 30 minuti | Terzo tentativo | | 5 | 2 ore | Tentativo finale |
Dopo 5 fallimenti consecutivi, il webhook viene automaticamente disabilitato e ricevi una notifica via email.
Possibili cause: URL errato, blocco del firewall, certificato SSL non valido.
Soluzioni: Verifica l'URL nella dashboard, autorizza l'IP di VoxScriber nel tuo firewall, convalida il tuo certificato SSL.
Possibili cause: Segreto errato, codifica del corpo diversa, middleware che altera il corpo.
Soluzioni: Conferma il segreto nella dashboard, usa il corpo grezzo per la verifica, disabilita il middleware di parsing prima della verifica.
Possibili cause: Riprova dopo timeout, risposta lenta del server.
Soluzioni: Implementa l'idempotenza usando event.id, rispondi con 200 OK rapidamente, elabora in modo asincrono.
Usa il pannello di monitoraggio dei webhook nella Dashboard per controllare consegne, fallimenti e payload. Questo semplifica notevolmente il debug durante l'integrazione.