Webhooks

Receba resultados da IA em tempo real via callback HTTP — sem polling.

Em vez de fazer polling pra saber se a IA terminou, configure um webhook e o BuildShip te chama quando o resultado fica pronto. ## Configurar webhook No painel **API B2B → Webhooks**, adicione um endpoint: - **URL**: seu endpoint HTTPS (ex: `https://seu-servidor.com/buildship/callback`) - **Eventos**: escolha quais (completion, error, etc) - **Secret**: gerado automaticamente — use pra validar assinatura Ou via API: ```bash curl -X POST https://api.buildship.com.br/b2b/partners/SEU_ID/webhooks \ -H "X-API-Key: bld_sua_chave" \ -H "Content-Type: application/json" \ -d '{ "url": "https://seu-servidor.com/buildship/callback", "events": ["completion", "error"], "active": true }' ``` ## Payload A IA chama seu endpoint com este JSON: ```json { "type": "completion", "sessionId": "session_abc123", "endUserId": "user-456", "templateId": "tmpl_xyz", "output": "Resposta final da IA", "status": "completed", "creditsUsed": 12, "tokensIn": 450, "tokensOut": 320, "timestamp": "2026-04-28T10:05:00Z" } ``` ## Headers | Header | Descricao | |---|---| | `X-Buildship-Signature` | HMAC-SHA256 do body com seu secret | | `X-Buildship-Event` | Tipo do evento (`completion`, `error`, etc) | | `X-Buildship-Delivery` | UUID unico da entrega — use pra dedupe | | `User-Agent` | `BuildShip-Webhooks/1.0` | ## Validar assinatura (HMAC-SHA256) CRITICO pra seguranca — sem isso qualquer um pode forjar callbacks. ### Node.js ```ts import crypto from 'crypto'; import express from 'express'; const app = express(); app.post('/buildship/callback', express.raw({ type: 'application/json' }), (req, res) => { const signature = req.header('X-Buildship-Signature'); const expected = crypto .createHmac('sha256', process.env.BUILDSHIP_WEBHOOK_SECRET!) .update(req.body) .digest('hex'); if (signature !== expected) { return res.status(401).send('Invalid signature'); } const event = JSON.parse(req.body.toString()); console.log(`[buildship] ${event.type} session=${event.sessionId}`); // Processa o resultado if (event.type === 'completion') { // event.output tem a resposta } res.status(200).send('ok'); } ); ``` ### Python (Flask) ```python import hmac, hashlib, os from flask import Flask, request app = Flask(__name__) SECRET = os.environ['BUILDSHIP_WEBHOOK_SECRET'] @app.route('/buildship/callback', methods=['POST']) def callback(): signature = request.headers.get('X-Buildship-Signature') expected = hmac.new( SECRET.encode(), request.data, hashlib.sha256 ).hexdigest() if not hmac.compare_digest(signature, expected): return 'Invalid signature', 401 event = request.json print(f"[buildship] {event['type']} session={event['sessionId']}") return 'ok', 200 ``` ## Eventos disponiveis | Evento | Quando | |---|---| | `completion` | IA terminou de processar — `output` tem resposta final | | `error` | Falhou — `error` tem mensagem | | `session.started` | Nova sessao criada | | `session.timeout` | Sessao expirou (2h sem atividade) | | `tokens.exceeded` | Limite de tokens do plano atingido | ## Retentativas Se seu endpoint retornar nao-2xx, o BuildShip tenta novamente: - Tentativa 1: imediata - Tentativa 2: 30s depois - Tentativa 3: 5min depois - Tentativa 4: 30min depois - Tentativa 5: 2h depois Apos 5 falhas, o webhook e marcado como `failed` e voce recebe alerta no painel. ## Testar webhook No painel **API B2B → Webhooks → Seu webhook → Testar**, voce pode disparar um evento mock pra validar a integracao. Ou via API: ```bash curl -X POST https://api.buildship.com.br/b2b/webhooks/WEBHOOK_ID/test \ -H "X-API-Key: bld_sua_chave" ``` ## Boas praticas - **Sempre valide a assinatura** — caso contrario qualquer um pode forjar callbacks - **Use `X-Buildship-Delivery` pra dedupe** — em retries voce vai receber o mesmo delivery ID - **Responda rapido** (< 5s) — processe async se precisar de mais tempo - **HTTPS obrigatorio** — webhooks HTTP nao sao aceitos - **Idempotencia** — assuma que pode receber o mesmo evento mais de uma vez ## Polling vs Webhooks | Polling | Webhooks | |---|---| | Voce chama `GET /chat/:sessionId` ate `status=completed` | BuildShip chama seu endpoint | | Custa requests (rate limit) | Sem custo de requests | | Pode demorar (intervalo de poll) | Em tempo real | | Funciona em qualquer ambiente | Precisa endpoint HTTPS publico | **Recomendacao**: webhooks pra producao, polling pra dev/scripts.

Quer integrar com ajuda da IA?

Copia esta pagina como .md e cola no ChatGPT/Claude — ela vai te guiar na integracao