Aprenda como configurar webhooks para receber notificações automáticas sobre transcrições.
Configure notificações automáticas em tempo real sobre suas transcrições. Aprenda como configurar webhooks, implementar segurança e integrar com seus sistemas.
Receba atualizações instantâneas sobre o status das transcrições.
Automatize fluxos de trabalho baseados em eventos.
| Evento | Descrição | Payload |
|---|---|---|
| transcription.started | Transcrição iniciou processamento | Upload ID, engine, timestamp |
| transcription.progress | Progresso atualizado | Upload ID, porcentagem, estimativa |
| transcription.completed | Transcrição concluída com sucesso | Upload ID, texto, duração, créditos |
| transcription.failed | Transcrição falhou | Upload ID, erro, tipo do erro |
| transcription.retry | Tentativa de retry iniciada | Upload ID, tentativa, engine |
| upload.completed | Upload de arquivo concluído | Upload ID, tamanho, formato |
| credits.low | Créditos abaixo do limite configurado | Saldo atual, limite |
const express = require('express');
const crypto = require('crypto');
const app = express();
const WEBHOOK_SECRET = process.env.WEBHOOK_SECRET;
app.post('/webhook/vozparatexto', express.raw({ type: 'application/json' }), (req, res) => {
// Verificar assinatura
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('Assinatura inválida');
}
const event = JSON.parse(req.body);
switch (event.type) {
case 'transcription.completed':
console.log('Transcrição concluída:', event.data.uploadId);
// Processar resultado
break;
case 'transcription.failed':
console.log('Transcrição falhou:', event.data.error);
// Tratar erro
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/vozparatexto', methods=['POST'])
def handle_webhook():
# Verificar assinatura
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': 'Assinatura inválida'}), 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
Sempre verifique a assinatura HMAC de cada webhook recebido antes de processar o evento. Nunca confie em webhooks sem verificação de assinatura.
Quando seu endpoint não responde com sucesso (2xx), o VozParaTexto tenta reenviar:
| Tentativa | Intervalo | Descrição | |---|---|---| | 1 | Imediato | Primeira tentativa | | 2 | 1 minuto | Após falha inicial | | 3 | 5 minutos | Segunda retentativa | | 4 | 30 minutos | Terceira retentativa | | 5 | 2 horas | Última tentativa |
Após 5 falhas consecutivas, o webhook é automaticamente desativado e você recebe uma notificação por email.
Possíveis causas: URL incorreta, firewall bloqueando, certificado SSL inválido.
Soluções: Verifique a URL no dashboard, libere o IP do VozParaTexto no firewall, valide seu certificado SSL.
Possíveis causas: Secret incorreto, encoding do body diferente, middleware alterando o body.
Soluções: Confirme o secret no dashboard, use raw body para verificação, desative middleware de parsing antes da verificação.
Possíveis causas: Retry após timeout, resposta lenta do seu servidor.
Soluções: Implemente idempotência usando o event.id, responda 200 OK rapidamente, processe assincronamente.
Use o painel de monitoramento de webhooks no Dashboard para verificar entregas, falhas e payloads. Isso facilita muito o debug durante a integração.