Documentação

Webhooks

Seja avisado quando uma transcrição termina, sem ficar consultando.

Passe webhook_url ao criar

curl -sS "$NOUS_API_BASE_URL/transcriptions?webhook_url=https://seusistema.com.br/nous" \
  -H "Authorization: Bearer $NOUS_API_KEY" \
  -H "Content-Type: audio/mpeg" \
  --data-binary "@aula-longa.mp3"

O endereço precisa ser https e público.

Receba o aviso

A Nous faz um POST no seu endereço com um destes eventos:

  • transcription.completed
  • transcription.failed
{ "event": "transcription.completed", "data": { "id": "tr_8f2k9d7c", "status": "completed", "text": "..." } }

data é o mesmo objeto de consultar transcrição.

Confira a assinatura

Todo aviso vem com o cabeçalho:

Nous-Signature: t=1757770000,v1=5158a312be6bb5deec8b1cac7033264e34825fcd722c39f66699f843d7091d9f

v1 é o HMAC-SHA256, em hexadecimal, de t.corpo com o segredo de webhook da sua conta. Recuse avisos com t a mais de 5 minutos do relógio e compare em tempo constante.

import hashlib
import hmac
import re
import time

def assinatura_valida(segredo: str, corpo: str, cabecalho: str) -> bool:
    achado = re.fullmatch(r"t=(\d+),v1=([0-9a-f]+)", cabecalho or "")
    if not achado:
        return False
    momento, recebido = achado.group(1), achado.group(2)
    if abs(time.time() - int(momento)) > 300:
        return False
    esperado = hmac.new(segredo.encode(), f"{momento}.{corpo}".encode(), hashlib.sha256).hexdigest()
    return hmac.compare_digest(esperado, recebido)

Use o corpo exatamente como chegou, antes de converter o JSON.

Responda 2xx

Se o seu servidor não responder 2xx, a Nous tenta de novo depois de 1 s, 10 s e 60 s.

Nesta página