As integrações enviam os eventos da empresa para outro serviço assim que acontecem: uma nova conversa, uma reserva, o pedido de um membro da equipa, um pedido de apoio. Com o Zapier ou o Make pode, por exemplo, adicionar uma linha a uma folha de cálculo, enviar uma mensagem para um chat ou criar uma ficha num CRM sem copiar os dados à mão.
Onde encontrar
Abra «Módulos» no menu superior, ligue o módulo «Integrações» (por predefinição está desativado) e clique em «Abrir integrações» no respetivo cartão. Abre-se o separador «Webhooks», com o separador «Registo de eventos» ao lado. Só Proprietário e Administrador podem abrir a secção: o endereço de um destino pode conter um token privado. Enquanto o módulo estiver desativado, nada é entregue e os eventos ocorridos entretanto não são reenviados depois. Os destinatários continuam configurados e o registo de eventos continua a ser mantido.
Como adicionar um destino
- No Zapier, crie um Zap com o acionador «Webhooks by Zapier» e o evento «Catch Hook» e copie o endereço fornecido. No Make, adicione o módulo «Custom webhook» e copie o respetivo endereço.
- Na página de integrações, preencha «Nome» (por exemplo, o nome do Zap) e «Endereço do destino» (o endereço copiado).
- Em «Eventos a enviar», assinale o que deve ser enviado.
- Clique em «Adicionar destino».
- O segredo de assinatura aparece uma única vez. Copie-o e guarde-o em segurança. O Zapier e o Make não precisam dele; o seu próprio servidor usa-o para verificar a assinatura. Se o perder, crie um novo com «Alterar o segredo».
- Na ficha do destino, clique em «Enviar teste». O resultado é Entregue ou Não entregue, com o motivo.
O endereço tem de ser público e começar por https. São recusados, com o motivo indicado: endereços http, endereços IP em vez de um domínio, portas personalizadas, endereços com utilizador e palavra-passe, endereços internos e endereços de domínios do ReceptionWorks. A página mostra apenas o domínio e o caminho: a parte depois do ponto de interrogação pode conter o token do seu destino.
Que eventos são enviados
- «Nova conversa» (
conversation.started): um cliente iniciou uma nova conversa em qualquer canal. As conversas de teste e os clientes bloqueados não são enviados. - «Membro da equipa solicitado» (
conversation.handoff_requested): o funcionário de IA ou o sistema pediu um membro da equipa. O evento indica o motivo: pedido do próprio funcionário de IA, respostas automáticas paradas, modo manual, funcionário de IA indisponível, limite de respostas esgotado ou plano inativo. - «Conversa encaminhada para um membro da equipa» (
conversation.handed_off): um membro da equipa assumiu a conversa. É enviado sempre que acontece. - «Nova marcação», «Marcação alterada» e «Marcação cancelada» (
booking.created,booking.changed,booking.cancelled): uma reserva foi criada, alterada ou cancelada por um funcionário de IA, por si no calendário ou pelo assistente do negócio. - «Novo pedido de apoio» (
support_case.created) e «Pedido de apoio alterado» (support_case.updated): um pedido de apoio foi criado ou o seu estado, prioridade ou descrição mudou. As notas internas da equipa não são enviadas. - «Nova mensagem» (
message.created): cada mensagem que o cliente vê, enviada assim que é escrita: do cliente, do funcionário de IA, de um membro da equipa ou do sistema (um aviso na conversa). O texto da mensagem está incluído. - «Conversa completa» (
conversation.transcript): toda a conversa, enviada quando passam 30 minutos sem mensagens. Se a conversa continuar, é enviada de novo após cada pausa seguinte.
Os eventos do chat de teste não são enviados. Um destino recebe apenas os eventos ocorridos depois de adicionado e enquanto está ativo: o que acontece durante uma pausa ou desativação não é enviado mais tarde.
«Nova mensagem» e «Conversa completa» levam o texto integral das conversas, incluindo o que os clientes escrevem. O texto sai da ReceptionWorks e chega ao destino que escolher, por isso assinale-os apenas para destinos em que confia. Um destino novo começa com estes dois desmarcados. Só são enviados enquanto algum destino os tiver marcados e não aparecem no registo de eventos nem na sua exportação: a própria conversa está na caixa de entrada. As conversas de teste e os clientes bloqueados não são enviados.
O que o destino recebe
Cada evento é um pedido POST com um corpo JSON. Exemplo de um pedido de um membro da equipa feito por um funcionário de IA:
{
"schema_version": "business-webhook.v1",
"id": "5b0c5e2e-0000-4000-8000-000000000001",
"type": "conversation.handoff_requested",
"occurred_at": "2026-10-07T09:30:00.000Z",
"business": { "name": "Example Studio" },
"actor": { "kind": "ai_employee" },
"channel": "telegram",
"employee": { "name": "Anna" },
"conversation": { "url": "https://app.example.com/businesses/studio/inbox?conversation=example" },
"customer": { "name": "Maria", "email": "maria@example.com", "phone": "+1 555 0100" },
"booking": null,
"handoff": { "reason": "ai_request", "reason_text": "The customer wants to discuss a discount" },
"support_case": null
}
id: o identificador do evento. Mantém-se igual em cada nova tentativa, por isso ignore um id que já tenha processado.type: o tipo de evento da lista acima;occurred_at: a hora em UTC.business: o nome da sua empresa.actor: quem causou o evento.kindécustomer,ai_employee,team_member(um membro da equipa ou o assistente do negócio) ousystem.channel:web,telegram,instagram,whatsappoumessenger, ounullse o evento não tiver conversa.employee: o nome do funcionário de IA, ounullse atuou a equipa ou o assistente do negócio.conversation.url: uma ligação para a conversa; abre para os membros da equipa com sessão iniciada.nullse não houver conversa.customer: nome, email e telefone no momento do envio, ounull. Os contactos são enviados na íntegra, por isso adicione apenas destinos de confiança.booking: apenas nos eventos de reserva:service,starts_at,ends_at,statuselocation.handoff: apenas em «Membro da equipa solicitado»:reason(ai_request,automation_stopped,manual_mode,ai_unavailable,quota_exhaustedouplan_inactive) ereason_text, a explicação do próprio funcionário de IA ounull.support_case: apenas nos eventos de pedidos de apoio:subject,status(open,in_progress,waiting_customer,resolvedouclosed) epriority(low,normal,highouurgent).message: apenas para «Nova mensagem»:id,sequence(a posição da mensagem na conversa),author(customer,ai_employee,team_memberousystem),text,created_ateattachments: uma lista comkind(sempreimage),nameemedia_type. Só são enviados o nome e o tipo do anexo, não o ficheiro.transcript: apenas para «Conversa completa»:message_count(mensagens da conversa),truncatedemessages: mensagens com a mesma forma demessage. Uma transcrição contém no máximo as 500 mensagens mais recentes e 512 KiB de texto;truncatedétruese mensagens mais antigas foram omitidas.
As secções que não se aplicam ao evento são null. O evento de «Enviar teste» tem o tipo webhook.test e todas as secções exceto business são null. Os dados não têm texto traduzido: os nomes são como foram guardados, os códigos são palavras inglesas fixas e as horas estão em UTC.
"message": {
"id": "6c1d0f52-0000-4000-8000-000000000002",
"sequence": 12,
"author": "customer",
"text": "Hello, can I book for Friday?",
"created_at": "2026-10-07T09:29:41.000Z",
"attachments": [{ "kind": "image", "name": "photo.jpg", "media_type": "image/jpeg" }]
}
As mensagens e as transcrições podem chegar fora de ordem e repetir-se, por isso não conte com a ordem de chegada. Use sequence para repor a ordem das mensagens de uma conversa e descarte a entrega cujo webhook-id já processou. A transcrição repete mensagens que talvez já tenha recebido uma a uma: use-a para verificar ou reconstruir toda a conversa.
Como verificar a assinatura
Cada pedido traz três cabeçalhos do padrão Standard Webhooks: webhook-id, webhook-timestamp e webhook-signature.
O Zapier e o Make não os verificam. No seu servidor, use a biblioteca oficial Standard Webhooks para a sua linguagem:
passe-lhe o segredo tal como é mostrado (começa por whsec_), o corpo original sem alterações e os três cabeçalhos.
Verificação manual:
signed_content = webhook-id + "." + webhook-timestamp + "." + raw request body
signature = "v1," + base64( HMAC-SHA256( key, signed_content ) )
key = base64-decoded part of the secret after "whsec_"
O cabeçalho webhook-signature contém v1, e a assinatura. Depois de «Alterar o segredo» contém duas assinaturas separadas
por um espaço: aceite o pedido se uma delas coincidir. Rejeite pedidos cuja marca de tempo difira do seu relógio mais
de cinco minutos.
Novas tentativas e desativação automática
O destino tem de responder com um código 2xx em 10 segundos. Os redirecionamentos não são seguidos: um endereço que
redireciona conta como erro. Caso contrário, o ReceptionWorks tenta de novo: logo, depois após 1 minuto, 5 minutos,
30 minutos, 2 horas, 6 horas e 12 horas. São 7 tentativas em cerca de 21 horas. Se todas falharem, o envio fica como
Não entregue em «Registo de envios» e pode clicar em «Enviar novamente». As novas tentativas levam o mesmo webhook-id, pelo que o destino
pode descartar duplicados.
Um destino é desativado automaticamente se responder que o endereço já não existe (código 410) ou se cinco eventos seguidos não forem entregues. A ficha mostra então «Desativado automaticamente» com o motivo e a sua equipa recebe uma notificação. Corrija o endereço e clique em «Ativar»: os eventos perdidos entretanto não são enviados.
Pausa, novo segredo, eliminação
- «Pausar» interrompe o envio sem eliminar o destino; clique em «Ativar» para continuar.
- «Alterar o segredo» e depois «Criar novo segredo»: um novo segredo é mostrado uma única vez. O antigo continua válido durante 24 horas, para atualizar o destino sem perder eventos.
- «Eliminar» e depois «Eliminar destino» eliminam o destino em definitivo.
Bom saber
- Só Proprietário e Administrador gerem as integrações. Uma empresa pode ter até 5 destinos.
- O registo de envios mostra evento, destino, hora, estado, tentativas e a próxima tentativa. Não guarda o texto dos pedidos.
- O teste com «Enviar teste» não cria uma entrada no registo e não precisa de um evento real.