Um webhook envia uma requisição HTTP para uma URL que você escolhe sempre que algo acontece no seu salão, por exemplo quando um agendamento é criado ou um cliente é atualizado. Use-o para manter outro sistema sincronizado com o Softalon.
Antes de começar
- Seu salão está no plano Ultimate.
- Você tem a função Super Administrador ou Proprietário.
- Você tem uma URL que aceita requisições
POSTcom corpo JSON, começando comhttps://ouhttp://.
Crie um webhook
- 1
Etapa 1 de 4
Abra Webhooks
Acesse Configurações › Desenvolvedores › Webhooks e clique em Criar Webhook.
- 2
Etapa 2 de 4
Informe o destino
Preencha a URL de Destino, por exemplo
https://example.com/webhook, e, se quiser, uma Descrição para reconhecê-lo depois. - 3
Etapa 3 de 4
Escolha os tópicos
Em Tópicos, selecione os eventos que você quer. A aba Todos os Tópicos lista todos os tópicos disponíveis, e Tópicos Selecionados mostra o que você escolheu. Sua URL recebe apenas os tópicos que você selecionar.
- 4
Etapa 4 de 4
Salve
Clique em Criar Webhook.
Você verá:Webhook Criado, e o webhook aparece na tabela com a chave de status ativada.
Tópicos
Os tópicos seguem o formato resource.action. Estes estão disponíveis:
Para saber o que cada gatilho significa, consulte Como funcionam os gatilhos de automação.
O que o Softalon envia
Cada evento é uma requisição POST com corpo JSON:
{
"topic": "booking/appointment.created",
"event": {
"id": "...",
"type": "booking/appointment.created",
"resource": "booking/appointment",
"resourceId": "...",
"salonId": "...",
"data": {
"object": { "...": "the full object" },
"previousAttributes": { "...": "changed fields, for updates" }
}
}
}
A requisição tem estes cabeçalhos:
Verifique a assinatura
Todo webhook tem um segredo. O Softalon assina o corpo da requisição com ele usando HMAC-SHA256 e envia o resultado em hexadecimal em X-Webhook-Signature. Calcule o mesmo valor a partir do corpo bruto da requisição e compare. Se não coincidirem, ignore a requisição.
const crypto = require("crypto");
function isValid(rawBody, header, secret) {
const expected = "sha256=" + crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(header));
}
Para gerenciar o segredo, use os botões da coluna Segredo:
- O botão de olho mostra o segredo completo, e o botão de copiar o copia.
- O botão de gerar novamente cria um novo segredo na hora. O segredo antigo deixa de funcionar imediatamente, então atualize seu sistema ao mesmo tempo.
Entregas e novas tentativas
- Sua URL precisa responder com um código de status
2xxem até 10 segundos. Qualquer outra coisa conta como falha. - Uma entrega que falhou é repetida, até 5 tentativas no total. A espera entre as tentativas aumenta: cerca de 30 segundos, 1 minuto, 2 minutos e 4 minutos.
- Use
X-Webhook-Delivery-Idpara ignorar uma entrega que você já processou.
Cada entrega tem um destes status:
O app ainda não mostra um registro de entregas. Você pode ler as entregas pela API em GET /v1/salons/:salonId/webhook-endpoints/:webhookEndpointId/deliveries. Consulte Crie um app de API.
Se as últimas 5 entregas de um webhook estiverem todas esgotadas (exhausted), o Softalon desativa o webhook. Corrija seu endpoint e ative a chave de status novamente. Os eventos que acontecem enquanto um webhook está desativado não são enviados depois.
Edite, pause ou exclua um webhook
- Pausar: desative a chave na coluna Status.
- Editar: abra o menu da linha e escolha Atualizar.
- Excluir: abra o menu da linha e escolha Excluir.
Os webhooks só enviam enquanto seu salão tem uma assinatura ativa, em teste ou em atraso, em um plano que inclui webhooks.
Perguntas frequentes
Cada entrega é enviada separadamente e repetida no próprio cronograma, então não conte com a ordem em que as requisições chegam. Use os registros de data e hora do próprio objeto.