Ser avisado quando ganho ou perco uma venda
Crie um webhook no GS Engage para receber os eventos prospection.won e prospection.lost em tempo real, sem precisar ficar consultando a API.
Ser avisado quando ganho ou perco uma venda
Crie um webhook e deixe o GS Engage avisar seu sistema no exato momento em que uma prospecção é ganha ou perdida.
Imagine que toda vez que um vendedor marca uma prospecção como Ganha ou Perdida, você quer disparar uma comemoração no canal do time, atualizar seu CRM ou registrar a venda numa planilha. Você poderia ficar perguntando à API de tempos em tempos "e agora, mudou?" — mas isso é trabalhoso e desperdiça requisições.
Existe um jeito melhor: o webhook. Um webhook é um aviso automático — em vez de você perguntar, o GS Engage é quem te avisa. Você diz "quando acontecer X, me mande um recado nesta URL", e a partir daí cada evento chega sozinho no seu sistema.
Este guia é para quem quer reagir em tempo real ao resultado de uma venda: prospection.won (ganhou) e prospection.lost (perdeu).
Informação
Uma prospecção é o trabalho de um vendedor em cima de um lead dentro de uma Cadência. Quando ela termina, recebe um status: WON (Ganha) ou LOST (Perdida). É exatamente esse momento que os eventos deste guia capturam.
Ao terminar este guia, você terá
0/4sequenceDiagram participant V as Vendedor (no app) participant GS as GS Engage participant U as Sua URL V->>GS: Marca a prospecção como Ganha GS->>U: POST com o evento prospection.won U-->>GS: Responde 200 OK Note over GS,U: Se sua URL falhar, o GS reenvia (retries)
Antes de criar o webhook, decida o que você quer ouvir. Para "ganhei ou perdi uma venda", os eventos são:
| Evento | Quando dispara | Rótulo no app |
|---|---|---|
prospection.won | O vendedor finaliza a prospecção como ganha | Ganha (WON) |
prospection.lost | O vendedor finaliza a prospecção como perdida | Perdida (LOST) |
Existem outros eventos disponíveis, caso você queira acompanhar mais coisas depois:
| Evento | O que sinaliza |
|---|---|
prospection.started | Uma prospecção começou |
activity.finished | Uma atividade da cadência foi concluída |
call.started | Uma ligação começou |
call.finished | Uma ligação terminou |
call.transcribed | A transcrição de uma ligação ficou pronta |
Dica
Assine só os eventos que você realmente vai usar. Menos eventos = menos ruído chegando na sua URL e menos código para tratar.
Agora é hora de registrar o webhook. Você faz isso chamando o endpoint (um endereço da API que executa uma ação) POST /api/v1/webhooks.
Você precisa informar três coisas:
Lembre-se: a autenticação do GS Engage vai na URL, como um parâmetro ?apiKey=SUA_CHAVE. A chave (com cerca de 40 caracteres) é criada na plataforma em Configurações › Configurações de API.
Sua apiKey é uma senha
Como a chave vai na URL, ela aparece em logs de servidor, histórico do navegador e links compartilhados. Trate como senha: guarde em variável de ambiente e nunca cole em canais públicos.
Veja a criação, com curl e com JSON puro:
curl -X POST "https://api.gsengage.com/api/v1/webhooks?apiKey=$GS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Avisos de venda",
"url": "https://seu-sistema.com.br/webhooks/gsengage",
"events": ["prospection.won", "prospection.lost"]
}'{
"name": "Avisos de venda",
"url": "https://seu-sistema.com.br/webhooks/gsengage",
"events": ["prospection.won", "prospection.lost"]
}A resposta traz os dados do webhook criado — e, junto, o campo secret:
{
"id": "6650f1a2b3c4d5e6f7a8b9c0",
"name": "Avisos de venda",
"url": "https://seu-sistema.com.br/webhooks/gsengage",
"events": ["prospection.won", "prospection.lost"],
"secret": "whsec_9f8e7d6c5b4a3210fedcba9876543210"
}O secret é o segredo usado para confirmar que o aviso veio mesmo do GS Engage (e não de um impostor). Você vai precisar dele para validar a assinatura de cada entrega.
O secret aparece uma única vez
O campo secret é retornado apenas nesta resposta de criação. Ele não aparece de novo em nenhuma outra chamada. Se você fechar o terminal sem copiá-lo, não tem como recuperá-lo — só criando um novo webhook.
- Copie o
secrete guarde-o em uma variável de ambiente ou cofre de segredos assim que a resposta chegar. - Use o
secretpara validar a assinatura de cada entrega recebida.
- Não deixe o
secretsó rolando no histórico do terminal ou colado num chat. - Não confie em um evento recebido sem antes conferir a assinatura.
Atenção
Não existe ambiente de teste (sandbox) separado no GS Engage: toda chamada é real e afeta dados de produção. Criar um webhook é seguro, mas tenha atenção redobrada com endpoints de escrita ao experimentar.
Quando um evento acontece, o GS Engage faz um POST para a sua URL. O corpo sempre vem no mesmo formato — chamamos isso de envelope:
true se for um disparo de teste; false para eventos reais.prospection.won.Exemplo de um evento prospection.won chegando na sua URL:
{
"id": "del_7a1b2c3d4e5f6a7b8c9d0e1f",
"test": false,
"event": "prospection.won",
"data": {
"prospection": {
"id": "6650a1b2c3d4e5f6a7b8c9d0",
"status": "WON",
"lead": {
"id": "6650000011112222aaaabbbb",
"name": "Marina Souza - Padaria Pão Quente"
}
}
},
"retries": 0,
"manualRetries": 0,
"createdAt": "2026-07-17T14:32:10.000Z"
}O que isso significa para o negócio: a prospecção com status WON (Ganha) fechou. É o gatilho perfeito para comemorar no time, marcar a venda no seu CRM ou atualizar um painel de metas. Para uma perda, o mesmo envelope chega com "event": "prospection.lost" e o status LOST.
Responda rápido
Ao receber um aviso, responda 200 OK o mais rápido possível. Se a sua URL demorar ou falhar, o GS Engage entende que a entrega não chegou e vai reenviar — por isso o campo retries existe.
Você não precisa ter um sistema pronto para ver os avisos chegando. Use um coletor de webhooks — uma URL temporária que mostra na tela tudo o que recebe.
Pegue uma URL de teste
Abra um coletor como o webhook.site e copie a URL única que ele gera para você.
Crie o webhook apontando para ela
Use o POST /api/v1/webhooks do Passo 2, colocando essa URL de teste no campo url.
Provoque um evento no app
Peça a um vendedor para finalizar uma prospecção como Ganha (ou finalize você mesmo). Em segundos, o envelope aparece na tela do coletor.
Inspecione o corpo
Confira os campos event, data e o cabeçalho de assinatura. Assim você entende o formato antes de escrever qualquer linha de código.
Atenção
Coletores públicos mostram tudo que recebem para qualquer um com o link. Use-os só para entender o formato — nunca deixe dados sensíveis de produção fluindo para uma URL pública em definitivo.
Como a sua URL é pública, qualquer um poderia tentar enviar um POST fingindo ser o GS Engage. Para garantir que o aviso é legítimo, cada entrega vem assinada.
A assinatura usa HMAC SHA-256 — uma técnica que combina o corpo da mensagem com o seu secret para gerar um código. Você recalcula esse código do seu lado e compara com o que veio no cabeçalho. Se baterem, o aviso é autêntico.
Informação
A assinatura migrou de SHA-1 para SHA-256. Certifique-se de usar SHA-256 ao validar.
O passo a passo completo, com código de exemplo, está no guia dedicado:
Depois de criar, você vai querer conferir o que está ativo e, eventualmente, desligar o que não usa mais.
Ver os webhooks que existem
Use GET /api/v1/webhooks. Atenção: essa rota devolve os itens em data, mas sem meta (retorna todos, sem paginação): { "data": [ ... ] }.
curl "https://api.gsengage.com/api/v1/webhooks?apiKey=$GS_API_KEY"[
{
"id": "6650f1a2b3c4d5e6f7a8b9c0",
"name": "Avisos de venda",
"url": "https://seu-sistema.com.br/webhooks/gsengage",
"events": ["prospection.won", "prospection.lost"]
}
]O secret não volta aqui — ele só existiu na resposta de criação.
Remover um webhook
Use DELETE /api/v1/webhooks/{webhookId}, colocando o id do webhook. Uma remoção bem-sucedida responde com HTTP 204 (sucesso, sem conteúdo no corpo).
curl -X DELETE "https://api.gsengage.com/api/v1/webhooks/6650f1a2b3c4d5e6f7a8b9c0?apiKey=$GS_API_KEY"Dica
Remover um webhook para os avisos imediatamente. Se você só quer trocar a URL ou os eventos, o caminho é remover o antigo e criar um novo — lembrando de guardar o novo secret.
A API tem um rate limit (limite de requisições em um intervalo): janela fixa de 60 segundos, com 200 leituras/min e 100 escritas/min. Ao exceder, você recebe HTTP 429 com o cabeçalho Retry-After (em segundos).
Isso vale para as suas chamadas de gerenciamento dos webhooks (criar, listar, remover) — não para os avisos que você recebe. A boa prática é usar backoff exponencial, respeitando o Retry-After.
Dá para reagir a esses eventos sem programar. O GS Engage expõe gatilhos nativos no Zapier, e ferramentas como Make e n8n também conseguem receber webhooks e consumir a API REST.
Use os gatilhos de webhook do GS Engage para acionar milhares de apps sem escrever código.
Perdi o secret. E agora?
O secret só aparece na resposta de criação e não pode ser recuperado. Remova o webhook antigo com DELETE e crie um novo com POST — desta vez, guarde o secret na hora.
Preciso ter um servidor pronto para criar o webhook?
Não. Para testar, use um coletor como o webhook.site e aponte a url para ele. Assim você vê os eventos chegando antes de construir qualquer coisa.
Como sei se é uma venda ganha ou perdida?
Pelo campo event do envelope: prospection.won é ganha (WON) e prospection.lost é perdida (LOST). O status também aparece dentro de data.
Um mesmo webhook pode ouvir vários eventos?
Sim. Basta listar todos no array events na criação, por exemplo ["prospection.won", "prospection.lost"].
O que faço se minha URL ficar fora do ar na hora do evento?
O GS Engage tenta reenviar automaticamente — é o que o campo retries acompanha. Ainda assim, responda 200 OK rápido para evitar reenvios desnecessários.
Este artigo foi útil?
Enviar leads do CRM ou planilha para o GS Engage
Sincronize leads vindos de formulário, CRM ou planilha criando cada um via API, sem gerar duplicados e respeitando o limite de requisições.
Validar a assinatura do webhook (HMAC SHA-256)
Confirme que cada entrega de webhook veio mesmo do GS Engage recalculando a assinatura HMAC SHA-256 a partir do corpo cru e do seu secret.