Configurando webhooks e obtendo payloads reais
Este guia tem os seguintes objetivos:
- Explicar como configurar um webhook associado a um dos eventos gatilho disponíveis na API Gupy;
- Explicar como validar o funcionamento de um webhook criado utilizando uma ferramenta de uso público e obter um exemplo real de payload;
- Exemplificar quais são os principais cenários de erro envolvendo webhooks e o troubleshooting para cada um deles;
Habilitando Endpoints
Primeiramente, você deve gerar um token de autenticação, acesse nossa seção de autenticação clicando aqui.
Após gerar o token é necessário atribuir as permissões dos endpoints abaixo, é com ele que você conseguirá autenticar nos endpoints da API Gupy responsáveis pela criação e manutenção de cada webhook.
- Configuring Webhooks
- Listing webhooks configurations
- Deleting webhooks configurations
- Updating webhooks configurations
Caso você não esteja visualizando a opção de criar um token dentro do setup da sua empresa, contate o nosso suporte pelo e-mail: [email protected].
Configurando Webhook
Com o token em mãos, dirija-se ao link do endpoint POST Webhooks para iniciar sua configuração e preencha os campos conforme as instruções abaixo:
CAMPO | Atribuição |
---|---|
action | Evento-gatilho do webhook que você deseja acompanhar. Para saber quais são os eventos-gatilho disponíveis, acesse este artigo: <https://developers.gupy.io/reference/webhooks#available-notifications](https://developers.gupy.io/reference/webhooks#available-notifications) |
status | Estado do webhook: se estará Ativo ou Inativo |
techOwnerName | Nome da pessoa técnica responsável por configurar o webhook |
techOwnerEmail | E-mail da pessoa responsável por configurar o webhook (para facilitar futuros contatos) |
postbackUrl | URL de destino (callback) para qual o POST do webhook será disparado |
clientHeaders | Parâmetro(s) de "Header" que o cliente deseja receber a cada POST (ex. chave de autenticação, identificador da origem ou empresa, etc..). |
Atenção ao definir valores no clientHeaders
Quando setamos algum valor no clientHeaders, o header padrão 'Content-type: application/json;charset=utf-8' não é mais enviado, pois o valor dos headers passa a ser o que foi definido.
Se for necessário que o Content-type tenha sempre o valor padrão, recomendamos passá-lo junto no clientHeaders.
Exemplo de requisição de criação de um webhook:
curl --request POST \
--url https://api.gupy.io/api/v1/webhooks \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"action": "application.completed",
"status": "active",
"techOwnerEmail": "[email protected]",
"techOwnerName": "Nome Sobrenome",
"postbackUrl": "https://urlDoIntegrador.net",
"clientHeaders": {
"apiKey": "apiToken",
"content-type": "application/json"
},
}
'
Exemplo de resposta dado pelo endpoint de configuração de webhook
{
"id": "d5b2eca6-09c5-4014-9eb8-1d729dd2e3d6",
"action": "application.completed",
"postbackUrl": "https://370c0c61b68af08c6f622202011f1e1d.m.pipedream.net",
"status": "active"
}
O campo "id" retornado quando ocorre a ativação com sucesso de um webhook é a chave da instância, que deverá ser utilizado posteriormente como mesma chave para alterar qualquer configuração deste webhook ou mesmo inativá-lo.
Validando um webhook configurado
Sugerimos aqui a plataforma Pipedream como exemplo, mas você pode utilizar o agente integrador de sua preferência ou mesmo a API oficial do cliente para validar o funcionamento de um webhhok configurado.
Note que o parâmetro "postbackUrl" definido no webhook é para onde será direcionado os POSTs . Após se cadastrar ou entrar no Pipedream, vá no menu lateral esquerdo e escolha a opção Sources.
Em seguida, clique em New+ no canto superior direito da tela.
Selecione a opção HTTP / Webhook
Nessa tela, escolha a primeira opção: New Requests
Crie um nome para o seu endereço e depois clique em Create source
Pronto! Copie o endereço gerado clicando no botão de link ao final da URL e a coloque como o parâmetro "postbackUrl" de cadastro do webhook.
Importante!
Não deixe de consultar nosso artigo sobre informações técnicas envolvendo o uso de webhooks da API Gupy. Este artigo detalha as regras de persistência automática na entrega das requisições, inativação automática do webhook perante falhas na entrega, e IPs de saída dos webhooks que devem ser configurados nas regras de segurança do ambiente do cliente (URL destino).
Atraso no recebimento de dados
Os webhooks application.created e application.completed possuem uma configuração de fila na AWS, com isso pode ocorrer atraso na entrega dos dados no endpoint de destino a partir da ocorrência do evento gatilho. Esse tempo é variável, podendo ser um pouco superior a 1hora após o evento.
Atualizando um webhook
Pode ser necessário alterar algum dado de configuração de um webhook configurado (adicionar ou alterar alguma informação nos headers por exemplo), para isso siga os passos abaixo:
- Acesse o endpoint Listing webhook para obter o id do webhook, para isso utilize o token e clique em Try It
- Com o id retorno no response do passo anterior, acesse o endpoint Updating webhook e coloque no parâmetro webhookId o id retornado no passo 1, no parâmetro action coloque o evento que já está configurado para esse webhook e preencha os outros campos com as informações que deseja atualizar, lembrando que é obrigatório informar o
postbackUrl
mesmo que você não deseje alterá-lo.
Exemplo de requisição de atualização, onde foi acrescentada a informação de techOwnerEmail que não existia:
curl --request PUT \
--url https://api.gupy.io/api/v1/webhooks/33333333-0000-6666-1111-3951b9df7bc3 \
--header 'accept: application/json' \
--header 'authorization: Bearer xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx' \
--header 'content-type: application/json' \
--data '
{
"action": "pre-employee.moved",
"clientHeaders": {
"token": "64645634353645rgfxhtt67wsefse"
},
"status": "active",
"techOwnerEmail": "[email protected]",
"postbackUrl": "https://urldeteste.com"
}
'
Deletar um webhook configurado
Pode ser necessário deletar um webhook previamente cadastrado, para isso siga os passos abaixo:
- Acesse o endpoint Listing webhook para obter o id do webhook, para isso utilize o token e clique em Try It
- Com o id retorno no response do passo anterior, acesse o endpoint Deleting webhook e coloque no parâmetro webhookId o id retornado no passo 1.
Exemplo de requisição:
curl --request DELETE \ --url https://api.gupy.io/api/v1/webhooks/33333333-0000-6666-1111-3951b9df7bc3 \ --header 'accept: application/json' \ --header 'authorization: Bearer xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx'
Exemplo de retorno:OK
Meu webhook não está enviando, o que fazer?
- Confira se o webhook configurado permanece ativo. Para isso, utilize o endpoint listing webhook configurations passando o parâmetro fields = all para consultar o status do webhook (active ou inactive).
- O Webhook pode ser inativado pela Gupy devido a alta taxa de erros nas tentativas de entrega dos dados (100% de erro durante 7 dias seguidos). O que se espera por padrão é um retorno 200 do endpoint que entregamos os dados. As implementações devem seguir o padrão de retornar para a Gupy o status referente ao recebimento dos dados e não o status do processo de integração, ou seja, se a entrega dos dados ocorreu com sucesso o status 200 deve ser retornado prontamente para a Gupy. Caso a sua implementação valide o payload recebido e o mesmo não estiver em conformidade com as regras esperadas o retorno de erro é válido.
- O Webhook espera uma resposta em 30.000 ms. Caso a resposta não tenha ocorrido antes deste tempo, consideramos um timeout, consequentemente, um erro. Caso na sua implementação você esteja recebendo os dados e realizando todo o processo de integração para somente depois retornar o status para a Gupy, frequentemente cairá nesse cenário e poderá ter seu webhook inativado.
- Verifique se não há bloqueios de firewall e utilize a ferramenta pipedream (ou outra similiar) para simular a entrega dos dados em um endpoint diferente, descartando assim problemas relacionados ao endpoint que foi configurado para recebimento dos dados.
- Valide as configurações do webhook, caso tenha inserido valores no clientHeaders verifique que os mesmos estejam corretos, pois ao inserir valores o content-type: application/json" se altera
- O endpoint está público ou habilitado para receber o webhook dos IPs listados aqui? https://developers.gupy.io/reference/webhooks#sender-ip-addresses
- Existe alguma interação com o certificado SSL? Se houver, vá em https://api.gupy.io/api#/ > clica no cadeado ao lado da URL > A conexão é segura > O certificado é válido. E atualize o certificado SSL do lado de vocês.
Meu webhook está inativo como ativá-lo novamente?
- Acesse o endpoint Listing webhook para obter o id do webhook, para isso utilize o token e clique em Try It
- Com o id retorno no response do passo anterior, acesse o endpoint Updating webhook e coloque no parâmetro webhookId o id retornado no passo 1, no parâmetro action coloque o evento que já está configurado para esse webhook e no parâmetro status o valor active.
- Preencha todas as outras informações conforme estão no webhook inativo, como
postbackUrl
eclientHeaders
- Clique em Try It e o webhook estará ativado novamente.
Exemplo de requisição para obter id:
curl --request GET \
--url 'https://api.gupy.io/api/v1/webhooks?fields=all&perPage=10&page=1' \
--header 'accept: application/json' \
--header 'authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
Exemplo de requisição para ativar webhook:
curl --request PUT \
--url https://api.gupy.io/api/v1/webhooks/daf3d7e4-81c6-497e-b04e-e02e07a2ef8f \
--header 'accept: application/json' \
--header 'authorization: Bearer xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx' \
--header 'content-type: application/json' \
--data '
{
"action": "application.created",
"clientHeaders": {
"Authorization": "xxxxxxxxxxxxxxxxxxxxxxxxxx",
"content-type": "application/json"
},
"status": "active",
"techOwnerName": "Teste reativar",
"techOwnerEmail": "[email protected]",
"postbackUrl": "https://url.testewebhook.net"
}
'
Updated 6 months ago