Webhooks
Um webhook é uma URL ligada a um canal. Quando ela recebe um POST com um JSON, a mensagem aparece no canal, como se fosse de um "bot" que só sabe enviar. Não precisa de token, conta nem conexão, só do endereço. É o jeito mais rápido de mandar alertas, resultados de CI e avisos de scripts.
Ele envia e cuida das mensagens que ele mesmo enviou (listar, ler, editar e apagar). Para ler o resto do canal, reagir ou receber o que acontece no servidor, use um bot.
Criar um webhook
- No SquadCall, abra o menu do servidor e vá em Integrações (só o dono e os administradores veem).
- Abra Webhooks e crie um: escolha o canal e dê um nome.
- Copie a URL. Ela aparece uma vez só; se perder, gere outra.
A URL tem este formato:
https://squadcall.gg/chat-api/v1/webhooks/ID/TOKENEnviar uma mensagem
curl -X POST "https://squadcall.gg/chat-api/v1/webhooks/ID/TOKEN" \
-H "Content-Type: application/json" \
-d '{
"username": "Monitor",
"content": "API **lenta** em produção",
"embeds": [{ "title": "p95 = 2,4 s", "color": 15548997, "fields": [{ "name": "Região", "value": "sa-east-1", "inline": true }] }]
}'| Campo ou parâmetro | O que faz |
|---|---|
content | texto com Markdown |
username, avatar_url | nome e foto desta mensagem |
embeds | até 10 embeds |
components | botões (linhas de botões, como na lib) |
thread_name | cria um tópico com esse nome e posta dentro |
?thread_id=... | posta num tópico que já existe |
?wait=true | responde com a mensagem criada (sem ele, 204) |
Markdown, embeds e botões estão em Formatação. O JSON é o mesmo dos webhooks do Discord: troque a URL do Discord pela do SquadCall e pronto.
Acentos no Windows
O corpo precisa ir em UTF-8. No CMD e no PowerShell, um curl -d '...' com acentos pode sair numa codificação do Windows e chegar como "voc� est�". Guarde o JSON num arquivo salvo em UTF-8 e envie o arquivo:
curl -X POST "https://squadcall.gg/chat-api/v1/webhooks/ID/TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
--data-binary @mensagem.jsonPela lib, em Node, isso já vem certo.
Ver, editar e apagar as próprias mensagens
A mesma URL serve para as mensagens que o webhook enviou. Use o id que vem na resposta de ?wait=true. As rotas só enxergam as mensagens da própria integração no canal do webhook; qualquer outra dá 404.
| Método e rota | O que faz |
|---|---|
GET .../webhooks/ID/TOKEN/messages?limit=&before= | lista as mensagens que ele enviou, das mais antigas para as mais novas (até 100) |
GET .../webhooks/ID/TOKEN/messages/MENSAGEM | uma mensagem |
PATCH .../webhooks/ID/TOKEN/messages/MENSAGEM | edita (content, embeds, components) e responde com a mensagem |
DELETE .../webhooks/ID/TOKEN/messages/MENSAGEM | apaga (204) |
# editar
curl -X PATCH "https://squadcall.gg/chat-api/v1/webhooks/ID/TOKEN/messages/MENSAGEM" \
-H "Content-Type: application/json; charset=utf-8" \
--data-binary @nova.json
# apagar
curl -X DELETE "https://squadcall.gg/chat-api/v1/webhooks/ID/TOKEN/messages/MENSAGEM"Uma mensagem editada mostra "editada", como no resto do chat. Apagar remove também os anexos e avisa quem escuta eventos. Ainda não há métodos para isso na lib: use a API direto.
Pela lib
import { WebhookClient, EmbedBuilder } from 'nonseqchat-bot';
const hook = new WebhookClient(process.env.NONSEQ_WEBHOOK_URL);
await hook.send({ content: 'Backup concluído', embeds: [new EmbedBuilder().setTitle('12,4 GB').setColor('blue')] });
await hook.send({ content: 'Primeira mensagem do tópico', threadName: 'Backups de outubro' });Instale com npm install nonseqchat-bot (Node 18 ou mais novo). Um exemplo completo, webhook.mjs, está na pasta examples/ da lib.
Limites e erros
- 30 mensagens por minuto em cada URL.
204sem corpo quando der certo; com?wait=true,200com a mensagem criada.- Os erros vêm como
{ "message": "..." }em português, com o status HTTP.404: a URL não existe ou foi trocada.429: rápido demais.
Segurança
- Quem tem a URL publica no canal, então trate como senha: variável de ambiente, nunca no código nem no git.
- Se vazar, gere outra em Integrações > Webhooks; a antiga para na hora.
- Apagar a integração invalida a URL. As mensagens já enviadas continuam.