Skip to content

Guia para webhooks

Sobre os webhooks

Webhooks permitem a você programar notificações da Leads2b sobre eventos realizados em seus dados quando eles acontecem.

Quando um desses eventos é acionado (por exemplo um novo cliente é criado), a Leads2b vai enviar essa notificação como uma requisição HTTP POST, com um corpo/payload JSON para o endereço que você especificou.

Você pode criar um novo webhook no sistema Leads2b através do Menu Configurações > Apps e Conexões > Webhooks.

WARNING

Essa funcionalidade está disponível para alguns planos. Verifique seu plano atual e garanta que isso esteja disponível para você!

Eventos na Leads2b

Com um evento, você pode filtrar quais tipos de notificações você quer receber.

ParâmetroDescrição
Ação do eventoA ação realizada em uma entidade/objeto.
Objeto do eventoA entidade/objeto que a ação foi realizada.

TIP

Eventos na Leads2b são disparados tanto pela utilização do sistema web quanto por chamadas externas da API.

Endereço externo à Leads2b

ParâmetroDescrição
Endereço URLUm endereço HTTP onde seus eventos selecionados são enviados. Nós podemos enviá-los somente à uma URL completa, válida e publicamente acessível.

Formato do webhook

json
{
  "meta": {
    "id": xxx,
    "company_id": xxxxx,
    "object": "customer",
    "action": "created",
    "user_id": xxx,
    "date": "YYYY-MM-DD HH:mm:ss"
  },
  "data": (os dados do objeto a partir desta atualização)
}

TIP

O schema de dados atual dos Webhooks Leads2b é o v1. Portando, ao configurar seu webhook, a configuração registrado é algo como v1.customer.created, v1.order.updated, etc.

Bloco meta do webhook

ParâmetroExemplos e explicações
"id"ID do objeto
"company_id"ID da empresa da qual o webhook foi acionado
"object"Veja tipos de objetos suportados
"action"Veja ações de evento suportadas
"user_id"ID do usuário
"date"Data de criação do evento

Bloco data do webhook

Os dados do objeto/entidade enviados na atualização.

Dados de Cliente

json
{
  "fk_id": "(string)",
  "name": "(string)",
  "fantasy_name": "(string)",
  "email": "(string)",
  "ddd": "(string)",
  "cel_phone": "(string)",
  "credit_limit": (float),
  "comercial_phone": "(string)",
  "cnpj": "(string)",
  "cpf": "(string)",
  "observations": "(string)",
  "ie": "(string)",
  "restriction": "(string)",
  "tags": ["(string)"],
  "responsibles": [
    {
      "id_user": (int),
      "user_fk_id": "(string)"
    }
    ...
  ],
  "contacts": [
    {
      "name": "(string)",
      "email": "(string)",
      "phone": "(string)",
      "department_name": "(string)",
      "fk_id": "(string)"
    }
    ...
  ],
  "addresses": [
    {
      "type": "(string)",
      "name": "(string)",
      "address": "(string)",
      "address_number": "(string)",
      "address_type": "(string)",
      "neighborhood": "(string)",
      "address_complement": "(string)",
      "city": "(string)",
      "uf": "(string)",
      "zipcode": "(string)",
      "fk_id": "(string)"
    }
    ...
  ]
}

Dados de Item (produtos)

json
{
  "fk_id": "(string)",
  "name": "(string)",
  "description": "(string)",
  "quantity": (int),
  "unit_price": (int),
  "unit": "(string)",
  "type": "(string)"
}

Dados de Pedido

json
{
  "fk_id": "(string)",
  "customer_id": (int),
  "customer_name": "(string)",
  "contact_name": "(string)",
  "customer_fk_id": "(string)",
  "customer_id_order": "(string)",
  "fk_id_freight": "(string)",
  "fk_id_redispatch_freight": "(string)",
  "freight_value": "(string)",
  "fk_id_shipping": "(string)",
  "fk_id_redispatch_company": "(string)",
  "fk_id_billing_location": "(string)",
  "fk_id_payment_term": "(string)",
  "fk_id_payment_type": "(string)",
  "date": "(string)",
  "due_date": "(string)",
  "nf": "(string)",
  "num_itens": (int),
  "discount": (float),
  "approved": (int),
  "status": "(string)",
  "total_price": (float),
  "user_id": (int),
  "user_fk_id": "(string)",
  "user_email": "(string)",
  "observations": "(string)",
  "further_information": "(string)",
  "quotation_approval_message": "(string)",
  "estimated_delivery_date": "(string)",
  "estimated_billing_date": "(string)",
  "id_order_category": (int),
  "fk_id_order_category": "(string)",
  "id_contract": "(string)",
  "customer_type": (int),
  "customer_city": "(string)",
  "items": [
    {
      "id": (int),
      "fk_id": "(string)",
      "name": "(string)",
      "description": "(string)",
      "type": "(string)",
      "quantity": (float),
      "item_fk_id": "(string)",
      "line_num": "(string)",
      "due_date": "(string)",
      "price": (float),
      "original_price": (float),
      "perc_desc": (float),
      "vlr_desc": (float),
      "icms": (float),
      "base_icms": (float),
      "value_icms": (float),
      "icms_st": (float),
      "base_icms_st": (float),
      "value_icms_st": (float),
      "ipi": (float),
      "base_ipi": (float),
      "value_ipi": (float)
    }
  ],
  "address": {
    "address": "(string)",
    "address_number": "(string)",
    "neighborhood": "(string)",
    "address_complement": "(string)",
    "city": "(string)",
    "uf": "(string)",
    "zipcode": "(string)",
    "fk_id": "(string)"
  }
}

Dados de Orçamento

json
{
  "fk_id": "(string)",
  "date": "(string)",
  "customer_id": (int),
  "customer_name": "(string)",
  "contact_name": "(string)",
  "customer_fk_id": "(string)",
  "fk_id_payment_term": "(string)",
  "fk_id_payment_type": "(string)",
  "id_opportunity": (int),
  "client_status": (int),
  "approved": (int),
  "user_id": (int),
  "user_email": "(string)",
  "observations": "(string)",
  "scope": "(string)",
  "estimated_billing_date": "(string)",
  "customer_id_order": "(string)",
  "id_contract": "(string)",
  "customer_tags": ["(string)"],
  "customer_type": (int),
  "customer_city": "(string)",
  "deleted_at": "(string)",
  "items": [
    {
      "id": (int),
      "id_item": (int),
      "fk_id": "(string)",
      "name": "(string)",
      "description": "(string)",
      "type": "(string)",
      "quantity": (float),
      "price": (float),
      "original_price": (float),
      "cost": (float),
      "icms": (float),
      "base_icms": (float),
      "value_icms": (float),
      "icms_st": (float),
      "base_icms_st": (float),
      "value_icms_st": (float),
      "ipi": (float),
      "base_ipi": (float),
      "value_ipi": (float),
      "recurrency_period": (int),
      "financial_cost": (float),
      "shipping_cost": (float)
    }
  ],
  "address": {
      "address": "(string)",
      "address_number": "(string)",
      "neighborhood": "(string)",
      "address_complement": "(string)",
      "city": "(string)",
      "uf": "(string)",
      "zipcode": "(string)",
      "fk_id": "(string)"
  }
}

Dados de Lead

json
{
  "company_name": "(string)",
  "social_reason": "(string)",
  "email": "(string)",
  "addresses": [
    {
      "address": "(string)",
      "city": "(string)",
      "state": "(string)",
      "zipcode": "(string)"
    }
  ],
  "phone": "(string)",
  "main_email": "(string)",
  "main_phone": "(string)",
  "main_contact": "(string)",
  "vendor": "(string)",
  "group": "(string)",
  "id_pipeline": (int),
  "pipeline_name": "(string)",
  "id_pipeline_item": (int),
  "pipeline_item_name": "(string)",
  "origin_name": "(string)",
  "status": "(string)",
  "loss_reason": "(string)",
  "lost_at": "(string)",
  "won_at": "(string)",
  "created_at": "(string)",
  "updated_at": "(string)",
  "deleted_at": "(string)"
}

Dados de Oportunidade e Pós-venda

json
{
  "name": "(string)",
  "description": "(string)",
  "company_name": "(string)",
  "social_reason": "(string)",
  "id_customer": (int),
  "customer_name": "(string)",
  "customer_phone": "(string)",
  "customer_email": "(string)",
  "id_contact": (int),
  "contact_name": "(string)",
  "id_responsible": (int),
  "responsible": "(string)",
  "id_pipeline": (int),
  "pipeline_name": "(string)",
  "id_pipeline_item": (int),
  "pipeline_item_name": "(string)",
  "id_origin": (int),
  "origin_name": "(string)",
  "items": [
    {
      "id": (int),
      "name": "(string)",
      "description": "(string)",
      "unit": "(string)",
      "fk_id": "(string)",
      "amount": (int),
      "unit_price": (float),
      "price": (float)
    }
  ],
  "loss_reason": "(string)",
  "lost_at": "(string)",
  "won_at": "(string)",
  "created_at": "(string)",
  "updated_at": "(string)",
  "deleted_at": "(string)"
}

Ações de evento suportadas

  • Created
  • Updated
  • Deleted
  • Won (disponível apenas para leads, oportunidades e pós-vendas)
  • Lost (disponível apenas para leads, oportunidades e pós-vendas)

Tipos de objetos suportados

  • Customer
  • Item
  • Order
  • Quotation
  • Lead
  • Opportunity
  • After_Sale

TIP

Acesse lista de webhooks para ver todas as combinações de objetos e ações para criação de webhooks.

Exemplos e explicações

É possível configurar notificações para eventos como customer.created, order.updated, item.deleted. Por exemplo, se você deseja receber webhook para notificá-lo quando um cliente for alterado, escolha customer como o objeto do evento e updated como a ação do evento.

Você pode ver todos os webhooks que podem ser criados na Leads2b aqui

Lógica de Retentativa

Política de retentativa de webhooks é a seguinte:

  • No caso da tentativa original de notificação falhar (recebendo um código de resposta diferente de 2xx ou excedendo o tempo limite de 10 segundos), nós iremos tentar mais 5 vezes:

  • 1ª tentativa: instantânea (logo após falhar)

  • 2ª tentativa: depois de 6 segundos

  • 3ª tentativa: depois de 18 segundos

  • 4ª tentativa: depois de 54 segundos

  • 5ª tentativa: depois de 162 segundos ≃ 2.7 minutos

INFO

O tempo total para o pior cenário (5 retentativas) é de 4 minutos.

Se a tentativa de entrega falhar em todas essas tentativas, iremos considerar como uma entrega mal sucedida.