Webhook API

BSPLAY - Manual de Integração

Endpoint

POST /api/webhook_video.php Content-Type: multipart/form-data ou application/json

Autenticação

Atualmente o webhook está aberto (sem autenticação). CORS está habilitado para todas as origens para facilitar a integração.

Métodos de Envio

1. Upload Direto

Envio do arquivo via multipart/form-data.

2. URL do Vídeo

O sistema realiza o download via link informado.

Parâmetros

Parâmetro Tipo Obrigatório Descrição
arenastringSimEx: "Arena Central"
courtstringSimEx: "Quadra 1"
typestringNãoPadrão: "general"
datetimestringNãoPadrão: hora atual
videofileSim*Arquivo MP4
video_urlstringSim*URL para download

* Obrigatório enviar video OU video_url.

Limites e Restrições

Tamanho Máximo

500 MB

Formato

MP4

Timeout URL

300 seg

Exemplos de Uso

Upload de Arquivo (cURL)

curl -X POST "https://seu-dominio.com/api/webhook_video.php" \
  -F "arena=Arena Central" \
  -F "court=Quadra 1" \
  -F "type=partida" \
  -F "datetime=2024-01-15 14:30:00" \
  -F "video=@/caminho/para/video.mp4"

Upload de Arquivo (JavaScript/Fetch)

const formData = new FormData();
formData.append('arena', 'Arena Central');
formData.append('court', 'Quadra 1');
formData.append('video', arquivoVideo); // File object

const response = await fetch('/api/webhook_video.php', {
  method: 'POST',
  body: formData
});
const result = await response.json();

Python (requests) - Via URL

import requests

response = requests.post(
    'https://seu-dominio.com/api/webhook_video.php',
    json={
        'arena': 'Arena Central',
        'court': 'Quadra 1',
        'video_url': 'https://exemplo.com/videos/partida123.mp4'
    }
)
print(response.json())

Respostas da API

Sucesso (HTTP 201)

{
  "status": "success",
  "message": "Video uploaded successfully",
  "data": {
    "video_id": 123,
    "arena": { "id": 1, "name": "Arena Central", "created": false },
    "court": { "id": 5, "name": "Quadra 1", "created": true },
    "filename": "2024-01-15_14-30-00_abc12345.mp4"
  }
}

Erro de Validação (HTTP 400)

{
  "status": "error",
  "message": "Validation failed",
  "errors": {
    "arena": "Arena name is required"
  }
}

Códigos de Erro de Upload

ErroDescrição
File exceeds PHP ini max sizeArquivo maior que o limite do PHP
No file was uploadedNenhum arquivo enviado
Failed to write file to diskErro ao gravar arquivo

Comportamento Automático

Criação de Arenas e Quadras

Se enviar nomes de arena ou quadra que não existam, o sistema os criará instantaneamente. A resposta JSON trará o campo created: true nestes casos.

Estrutura de Armazenamento

storage/
└── videos/
    └── {arena_id}/
        └── {court_id}/
            ├── YYYY-MM-DD_HH-ii-ss_hash.mp4

Suporte e Dicas

  • Sempre valide o campo status
  • Use YYYY-MM-DD HH:ii:ss
  • Limite de 500MB p/ arquivo
  • Verifique logs do servidor