Você pode ativar webhooks em seu Configurações do desenvolvedor da conta Interakt.

• Você precisará fornecer um URL do Webhook e uma chave secreta para configurar os webhooks da sua conta do Interakt.

Observe que você pode consumir webhooks para:

Status de entrega (enviado/entregue/lido/com falha) e status de clique (botão de resposta rápida/botão de call to action) de modelos (HSMs) enviados por meio das APIs de envio de modelos da Interakt (disponível apenas nos planos Growth/Advanced/Enterprise)

Status de entrega (Enviado/Entregue/Leitura/Falha) de Templates (HSMs) enviados configurando Campanhas no Interakt (disponível apenas em Growth/Advanced)/Empreendimento planos)

Mensagens recebidas de clientes em seu número API do WhatsApp, conectado à sua conta Interakt (disponível apenas no Advanced/Empreendimento plano)

Que tipo de webhooks o Interakt oferece?

O Interakt fornece webhooks para o status de entrega (enviado, entregue, lido, com falha) de mensagens enviadas por meio da API do Interakt ou por meio de campanhas do Interakt. O Interakt também fornece status de clique de botão para modelos enviados usando a API de envio de modelo do Interakt. Além disso, o Interakt também fornece webhooks para mensagens recebidas de clientes.

 

Quais são alguns pontos importantes a serem observados ao integrar com webhooks?

-> Verifique o tipo do webhook

Para webhooks de templates enviados via APIs, os tipos serão os seguintes:

“mensagem_api_enviada”

“mensagem_api_delivered”

“mensagem_api_read”

“message_api_failed”

“message_api_clicked”

-> Para webhooks de status de entrega de templates enviados via Interakt Campaigns, os tipos serão os seguintes:

“mensagem_campanha_enviada”

“mensagem_campanha_entregue”

“mensagem_campanha_leitura”

“message_campaign_failed”

-> Para webhooks de mensagens recebidas de clientes, o tipo será o seguinte:

"mensagem recebida"

-> Leia o artigo dados.cliente objeto para ver o número de telefone do cliente e os valores de todos os atributos do cliente armazenados no Interakt para esse cliente específico

-> Leia o artigo dados.mensagem objeto para identificar qual mensagem está sendo referida

-> Processe a carga útil e retorne um sucesso 200 em 3 segundos

(i) Qualquer status diferente de 200 será considerado como falha

(ii) Nenhuma resposta dentro do tempo limite esperado será considerada uma falha

-> Para webhooks de Alertas e Eventos de Conta, os tipos serão os seguintes:

“alertas_de_conta”

“atualização_da conta”

“account_review_update”

“atualização_de_capacidade_de_negócio”

“telefone_número_qualidade_atualização”

 

-> Para webhooks de alertas e eventos de modelo, os tipos serão os seguintes:

“template_performance_metrics”

“message_template_status_update”

“mensagens”

Corpo do webhook – message_api_sent:

(nota – os dados enviados no objeto “traits” dependem das características do cliente presentes em sua conta Interakt. As características fornecidas no exemplo abaixo correspondem a uma conta de teste)

{
  "versão": "1.0",
  "timestamp": "2022-06-03T05:43:33.237499",
  "tipo": "mensagem_api_sent",
  "dados": {
    "cliente": {
      "id": "52918eb3-bd00-4331-a51d-c4dcffee48d6",
      "canal_telefone_número": "917003705584",
      "características": {
        "nome": "SKGG",
        "quantia": 7000,
        "total_orders_count": 0,
        "último_pedido_id": nulo,
        "último_nome_pedido": nulo,
        "total_gasto": "0.00",
        "whatsapp_opted_in": falso,
        "created_at": "2021-06-23T06:46:11",
        "ID do usuário": "111",
        "o email": "[email protected]",
      }
    },
    "mensagem": {
      "id": "dfc668a2-c06c-4e9a-a4fd-7b65bc1fdc84",
      "chat_message_type": "PublicApiMessage",
      "channel_failure_reason": nulo,
      "message_status": "Enviado",
      "received_at_utc": "2022-06-03T05:43:33.133000",
      "entregue_at_utc": nulo,
      "visto_at_utc": nulo,
      "campaign_id": nulo,
      "is_template_message": verdadeiro,
      "raw_template": "{\"id\": \"281a5a78-f2b2-46c9-b9bb-d620d3b2894c\", \"created_at_utc\": \"2022-03-30T07:04:04.078\", \"modified_at_utc\ ": \"2022-03-31T05:41:09.61\", \"created_by_user_id\": \"37088e03-3633-4aa4-b4d8-99edbc56d4fc\", \"is_deleted\": false, \"nome\": \"test_template_lp\", \"idioma\": \"en\", \"category\": \"ALERT_UPDATE\", \"header_format\": null, \"header\": null, \"header_handle\ ": null, \"header_handle_file_url\": null, \"header_handle_file_name\": null, \"header_text\": null, \"body\": \"Olá {{1}} \\nBem-vindo ao Interakt, meu nome é {{2}} . Espero que seu teste gratuito de 14 dias tenha sido útil. Para qualquer dúvida, entre em contato conosco.\", \"body_text\": \"[\\\"Clients\\\", \\\"Sender\\\"]\", \"footer\": \ "Team interakt\", \"botões\": \"[{\\\"type\\\": \\\"QUICK_REPLY\\\", \\\"text\\\": \\\" Obrigado\\\"}, {\\\"type\\\": \\\"QUICK_REPLY\\\", \\\"text\\\": \\\"O que é qralink?\\\ "}, {\\\"type\\\": \\\"QUICK_REPLY\\\", \\\"text\\\": \\\"Fale com um agente\\\"}]\" , \"button_text\": null, \"display_name\": \"Modelo de teste\", \"organization_id\": \"ba4308f1-a506-44d2-a8c3-17380216cf91\", \"approval_status\": \" APROVADO\", \"wa_template_id\": \"3224400424546364\", \"is_archived\": false}",
      "canal_error_code": nulo,
      "message_content_type": "Modelo",
      "media_url": nulo,
      "mensagem": "[{\"tipo\": \"corpo\", \"parâmetros\": [{\"tipo\": \"texto\", \"texto\": \"Saandhy\" }, {\"type\": \"texto\", \"texto\": \"Varun\"}]}]",
      "meta_dados": {
        "fonte": "PublicInterakt",
        "dados_fonte": {
          "callback_data": "algum texto aqui"
        }
      }
    }
  }
}

Corpo do webhook – message_api_delivered:

(nota – os dados enviados no objeto “traits” dependem das características do cliente presentes em sua conta Interakt. As características fornecidas no exemplo abaixo correspondem a uma conta de teste)

{
  "versão": "1.0",
  "timestamp": "2022-06-03T05:43:33.930227",
  "tipo": "mensagem_api_delivered",
  "dados": {
 "cliente": {
      "id": "52918eb3-bd00-4331-a51d-c4dcffee48d6",
      "canal_telefone_número": "917003705584",
      "características": {
        "nome": "SKGG",
        "quantia": 7000,
        "total_orders_count": 0,
        "último_pedido_id": nulo,
        "último_nome_pedido": nulo,
        "total_gasto": "0.00",
        "whatsapp_opted_in": falso,
        "created_at": "2021-06-23T06:46:11",
        "ID do usuário": "111",
        "o email": "[email protected]",
      }
    },
    "mensagem": {
      "id": "dfc668a2-c06c-4e9a-a4fd-7b65bc1fdc84",
      "chat_message_type": "PublicApiMessage",
      "channel_failure_reason": nulo,
      "message_status": "Entregue",
      "received_at_utc": "2022-06-03T05:43:33.133000",
      "delivered_at_utc": "2022-06-03T05:43:33.848000",
      "visto_at_utc": nulo,
      "campaign_id": nulo,
      "is_template_message": verdadeiro,
      "raw_template": "{\"id\": \"281a5a78-f2b2-46c9-b9bb-d620d3b2894c\", \"created_at_utc\": \"2022-03-30T07:04:04.078\", \"modified_at_utc\ ": \"2022-03-31T05:41:09.61\", \"created_by_user_id\": \"37088e03-3633-4aa4-b4d8-99edbc56d4fc\", \"is_deleted\": false, \"nome\": \"test_template_lp\", \"idioma\": \"en\", \"category\": \"ALERT_UPDATE\", \"header_format\": null, \"header\": null, \"header_handle\ ": null, \"header_handle_file_url\": null, \"header_handle_file_name\": null, \"header_text\": null, \"body\": \"Olá {{1}} \\nBem-vindo ao Interakt, meu nome é {{2}} . Espero que seu teste gratuito de 14 dias tenha sido útil. Para qualquer dúvida, entre em contato conosco.\", \"body_text\": \"[\\\"Clients\\\", \\\"Sender\\\"]\", \"footer\": \ "Team interakt\", \"botões\": \"[{\\\"type\\\": \\\"QUICK_REPLY\\\", \\\"text\\\": \\\" Obrigado\\\"}, {\\\"type\\\": \\\"QUICK_REPLY\\\", \\\"text\\\": \\\"O que é qralink?\\\ "}, {\\\"type\\\": \\\"QUICK_REPLY\\\", \\\"text\\\": \\\"Fale com um agente\\\"}]\" , \"button_text\": null, \"display_name\": \"Modelo de teste\", \"organization_id\": \"ba4308f1-a506-44d2-a8c3-17380216cf91\", \"approval_status\": \" APROVADO\", \"wa_template_id\": \"3224400424546364\", \"is_archived\": false}",
      "canal_error_code": nulo,
      "message_content_type": "Modelo",
      "media_url": nulo,
      "mensagem": "[{\"tipo\": \"corpo\", \"parâmetros\": [{\"tipo\": \"texto\", \"texto\": \"Saandhy\" }, {\"type\": \"texto\", \"texto\": \"Varun\"}]}]",
      "meta_dados": {
        "fonte": "PublicInterakt",
        "dados_fonte": {
          "callback_data": "algum texto aqui"
        }
      }
    }
  }
}

Corpo do webhook – message_api_read:

(nota – os dados enviados no objeto “traits” dependem das características do cliente presentes em sua conta Interakt. As características fornecidas no exemplo abaixo correspondem a uma conta de teste)

{
  "versão": "1.0",
  "timestamp": "2022-06-03T05:43:33.930227",
  "tipo": "message_api_read",
  "dados": {
 "cliente": {
      "id": "52918eb3-bd00-4331-a51d-c4dcffee48d6",
      "canal_telefone_número": "917003705584",
      "características": {
        "nome": "SKGG",
        "quantia": 7000,
        "total_orders_count": 0,
        "último_pedido_id": nulo,
        "último_nome_pedido": nulo,
        "total_gasto": "0.00",
        "whatsapp_opted_in": falso,
        "created_at": "2021-06-23T06:46:11",
        "ID do usuário": "111",
        "o email": "[email protected]",
      }
    },
"mensagem": {
    "id": "dfc668a2-c06c-4e9a-a4fd-7b65bc1fdc84",
    "chat_message_type": "PublicApiMessage",
    "channel_failure_reason": nulo,
    "message_status": "Ler",
    "received_at_utc": "2022-06-03T05:43:33.133000",
    "delivered_at_utc": "2022-06-03T05:43:33.848000",
    "seen_at_utc": "2022-06-03T05:43:34.257000",
    "campaign_id": nulo,
    "is_template_message": verdadeiro,
    "raw_template": "{\"id\": \"281a5a78-f2b2-46c9-b9bb-d620d3b2894c\", \"created_at_utc\": \"2022-03-30T07:04:04.078\", \"modified_at_utc\ ": \"2022-03-31T05:41:09.61\", \"created_by_user_id\": \"37088e03-3633-4aa4-b4d8-99edbc56d4fc\", \"is_deleted\": false, \"nome\": \"test_template_lp\", \"idioma\": \"en\", \"category\": \"ALERT_UPDATE\", \"header_format\": null, \"header\": null, \"header_handle\ ": null, \"header_handle_file_url\": null, \"header_handle_file_name\": null, \"header_text\": null, \"body\": \"Olá {{1}} \\nBem-vindo ao Interakt, meu nome é {{2}} . Espero que seu teste gratuito de 14 dias tenha sido útil. Para qualquer dúvida, entre em contato conosco.\", \"body_text\": \"[\\\"Clients\\\", \\\"Sender\\\"]\", \"footer\": \ "Team interakt\", \"botões\": \"[{\\\"type\\\": \\\"QUICK_REPLY\\\", \\\"text\\\": \\\" Obrigado\\\"}, {\\\"type\\\": \\\"QUICK_REPLY\\\", \\\"text\\\": \\\"O que é qralink?\\\ "}, {\\\"type\\\": \\\"QUICK_REPLY\\\", \\\"text\\\": \\\"Fale com um agente\\\"}]\" , \"button_text\": null, \"display_name\": \"Modelo de teste\", \"organization_id\": \"ba4308f1-a506-44d2-a8c3-17380216cf91\", \"approval_status\": \" APROVADO\", \"wa_template_id\": \"3224400424546364\", \"is_archived\": false}",
    "canal_error_code": nulo,
    "message_content_type": "Modelo",
    "media_url": nulo,
    "mensagem": "[{\"tipo\": \"corpo\", \"parâmetros\": [{\"tipo\": \"texto\", \"texto\": \"Saandhy\" }, {\"type\": \"texto\", \"texto\": \"Varun\"}]}]",
    "meta_dados": {
      "fonte": "PublicInterakt",
      "dados_fonte": {
        "callback_data": "algum texto aqui"
      }
    }
  }
}

Corpo do webhook – message_api_failed:

(nota – os dados enviados no objeto “traits” dependem das características do cliente presentes em sua conta Interakt. As características fornecidas no exemplo abaixo correspondem a uma conta de teste)

{
  "versão": "1.0",
  "timestamp": "2022-06-03T05:56:10.699936",
  "tipo": "message_api_failed",
  "dados": {
    "cliente": {
      "id": "82a5b5bc-5509-4225-a9e9-bbe4c150516b",
      "canal_telefone_número": "919831",
      "características": {
        "nome": "",
        "whatsapp_opted_in": verdadeiro
      }
    },
    "mensagem": {
      "id": "80b4b1f1-dc39-46dc-a133-bf09a12c3d4e",
      "chat_message_type": "PublicApiMessage",
      "channel_failure_reason": "O destinatário não é um usuário válido do WhatsApp",
      "message_status": "Falha",
      "received_at_utc": "2022-06-03T05:56:10.502000",
      "entregue_at_utc": nulo,
      "visto_at_utc": nulo,
      "campaign_id": nulo,
      "is_template_message": verdadeiro,
      "raw_template": "{\"id\": \"281a5a78-f2b2-46c9-b9bb-d620d3b2894c\", \"created_at_utc\": \"2022-03-30T07:04:04.078\", \"modified_at_utc\ ": \"2022-03-31T05:41:09.61\", \"created_by_user_id\": \"37088e03-3633-4aa4-b4d8-99edbc56d4fc\", \"is_deleted\": false, \"nome\": \"test_template_lp\", \"idioma\": \"en\", \"category\": \"ALERT_UPDATE\", \"header_format\": null, \"header\": null, \"header_handle\ ": null, \"header_handle_file_url\": null, \"header_handle_file_name\": null, \"header_text\": null, \"body\": \"Olá {{1}} \\nBem-vindo ao Interakt, meu nome é {{2}} . Espero que seu teste gratuito de 14 dias tenha sido útil. Para qualquer dúvida, entre em contato conosco.\", \"body_text\": \"[\\\"Clients\\\", \\\"Sender\\\"]\", \"footer\": \ "Team interakt\", \"botões\": \"[{\\\"type\\\": \\\"QUICK_REPLY\\\", \\\"text\\\": \\\" Obrigado\\\"}, {\\\"type\\\": \\\"QUICK_REPLY\\\", \\\"text\\\": \\\"O que é qralink?\\\ "}, {\\\"type\\\": \\\"QUICK_REPLY\\\", \\\"text\\\": \\\"Fale com um agente\\\"}]\" , \"button_text\": null, \"display_name\": \"Modelo de teste\", \"organization_id\": \"ba4308f1-a506-44d2-a8c3-17380216cf91\", \"approval_status\": \" APROVADO\", \"wa_template_id\": \"3224400424546364\", \"is_archived\": false}",
      "canal_error_code": "1013",
      "message_content_type": "Modelo",
      "media_url": nulo,
      "mensagem": "[{\"tipo\": \"corpo\", \"parâmetros\": [{\"tipo\": \"texto\", \"texto\": \"Saandhy\" }, {\"type\": \"texto\", \"texto\": \"Varun\"}]}]",
      "meta_dados": {
        "fonte": "PublicInterakt",
        "dados_fonte": {
          "callback_data": "algum texto aqui"
        }
      }
    }
  }
}

Corpo do webhook – message_api_clicked (botões de resposta rápida):

{

  "versão": "1.0",

  "timestamp": "2024-06-10T08:38:08.837610",

  "tipo": "message_api_clicked",

  "dados": {

    "cliente": {

      "id": "fe366bc2-14df-40f3-ab56-20f67f5c6694",

      "canal_telefone_número": "917003705584",

      "número_telefone": "7003705584",

      "código_país": "+91",

      "características": {

   "nome": "Saandhy Ganeriwala",

        "whatsapp_opted_in": verdadeiro}

 },

 "mensagem": {

   "id": "f6f22110-9eab-4282-9b2c-673c3bbaa0fa",

   "chat_message_type": "PublicApiMessage",

 "channel_failure_reason": nulo,

      "message_status": "Ler",

  "received_at_utc": "2024-06-10T08:37:46.309000",

"delivered_at_utc": "2024-06-10T08:37:48.149000",

 "seen_at_utc": "2024-06-10T08:38:05.643000",

      "campaign_id": nulo,

    "is_template_message": verdadeiro,

   "raw_template": "{\"id\": \"8472d21c-7d9d-40d4-9d36-2616c67a39bd\", \"created_at_utc\": \"2024-02-22T11:46:07.328\", \"modified_at_utc\ ": \"2024-06-06T15:40:29.987\", \"created_by_user_id\": \"Nenhum\", \"is_deleted\": false, \"nome\": \"procurando_for_feedback_23\", \" idioma\": \"en\", \"category\": \"UTILITY\", \"sub_category\": null, \"template_category_label\": null, \"header_format\": null, \"header\ ": null, \"header_handle\": null, \"header_handle_file_url\": null, \"header_handle_file_name\": null, \"header_text\": null, \"body\": \"Ei {{1}} \\n\\nEste é {{2}} da equipe de produto da Interakt. Queremos melhorar nosso produto para que empresas como a sua possam usar e obter mais valor do Interakt.\\n\\nPortanto, temos uma pergunta muito simples para você: *O que podemos fazer para tornar o Interakt mais útil para você?* \\n\\nVocê pode preencher o formulário de feedback ou agendar uma reunião de 30 minutos comigo.\", \"body_text\": \"[\\n \\\"John\\\",\\n \\\"Marca\\\"\\n]\", \"rodapé\": null, \"botões\": \"[{\\\"type\\\": \\\"QUICK_REPLY\ \\", \\\"text\\\": \\\"Preencher formulário de feedback\\\"}, {\\\"type\\\": \\\"QUICK_REPLY\\\", \\ \"text\\\": \\\"Agendar reunião\\\"}]\", \"button_text\": null, \"allow_category_change\": true, \"limited_time_offer\": null, \"autosubmitted_for \": null, \"display_name\": \"procurando_for_feedback_23\", \"organization_id\": \"80a1681a-3fbd-4580-beff-eb93478211a5\", \"approval_status\": \"APROVADO\", \ "wa_template_id\": \"1586626795428976\", \"is_archived\": falso, \"channel_type\": \"Whatsapp\", \"is_click_tracking_enabled\": falso, \"allow_delete\": verdadeiro, \"rejection_reason \": null, \"carousel_cards\": \"[]\", \"is_carousel\": false, \"is_mpm\": false}",

   "canal_error_code": nulo,

      "message_content_type": "Modelo",

"media_url": nulo,

 "mensagem": "[{\"tipo\": \"corpo\", \"parâmetros\": [{\"tipo\": \"texto\", \"texto\": \"body_variable_value_1\" }, {\"type\": \"texto\", \"texto\": \"body_variable_value_2\"}]}]",

 "meta_dados": {

   "fonte": "PublicInterakt",

        "dados_fonte": {

          "callback_data": "algum texto aqui123"

        },

        "custo_da_mensagem": {

          "custo_whatsapp": "0.03",

          "interakt_markup": "0.3",

          "actual_message_cost": "0.33"

     }

      "click_type": "QR",

      "button_text": "Preencher formulário de feedback",

      "Botão de link": "",

      "click_timestamp": "2024-06-10 08:38:08.635664",

      "button_payload": {

        "carga útil": {

          "tipo": "QUICK_REPLY",

          "text": "Preencher formulário de feedback"

        }

    }

  }

}

Corpo do webhook – message_api_clicked (botões de call to action):

{

"cliente": { "id": "fe366bc2-14df-40f3-ab56-20f67f5c6694", "channel_phone_number": "917003705584", "phone_number": "7003705584", "country_code": "+91", "traits": { "nome": "Saandhy Ganeriwala", "e-mail": "[email protected]", "whatsapp_opted_in": true } }, "message": { "id": "c2e35816-f6cb-4893-8cd5-99d2f6060535", "chat_message_type": "PublicApiMessage", "channel_failure_reason": null, "message_status": " Ler", "received_at_utc": "2024-06-10T08:47:19.352000", "delivered_at_utc": "2024-06-10T08:47:21.123000", "seen_at_utc": "2024-06-10T08:47:21.723000" , "campaign_id": null, "is_template_message": true, "raw_template": "{\"id\": \"fe9066ad-57a2-4137-ad5d-292b08be1551\", \"created_at_utc\": \"2022-06 -09T08:00:26.058\", \"modified_at_utc\": \"2024-06-10T08:46:06.076\", \"criado_por_user_id\": \"2f0a1016-0886-4dfb-8681-4c3aed78df8e\", \ "is_deleted\": false, \"nome\": \"order_shipped_1010123\", \"idioma\": \"en\", \"category\": \"UTILITY\", \"header_format\": null , \"header\": null, \"header_handle\": null, \"header_handle_file_url\": null, \"header_handle_file_name\": null, \"header_text\": null, \"body\": \"Olá {{1}}, seu pedido foi enviado. Por favor, clique abaixo para rastrear o pedido.\", \"body_text\": \"[\\n \\\"John\\\"\\n]\", \"footer\": null, \"buttons\": \"[{\\\"type\\\":\\\"URL\\\",\\\"text\\\":\\\"Rastrear Pedido\\\",\\\"url\\\":\\\"https://www.interakt.shop/\\\"}]\", \"button_text\": \"[]\", \"display_name\": \"Pedido Enviado em 1010123\", \"organization_id\": \"80a1681a-3fbd-4580-beff-eb93478211a5\", \"approval_status\": \"APROVADO\", \"wa_template_id\": "8276292472397006", "is_archived": false, "template_category_label": null, "channel_type": "Whatsapp", "allow_delete": true, "allow_category_change": true, "autosubmitted_for": null, "rejection_reason": null, "is_click_tracking_enabled": true, "limited_time_offer": null, "sub_category": null, "carousel_cards": "[]", "is_carousel": false, "is_mpm": false}", "channel_error_code": null, "message_content_type": "Template", "media_url": null, "message": "[{"type": \"body\", \"parameters\": [{\"type\": \"text\", \"text\": \"body_variable_value_1\"}]}, {\"type\": \"button\", \"sub_type\": \"url\", \"index\": 0, \"parameters\": [{\"type\": \"text\", \"text\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..GJTt0CXc9BeYOHhXJvk9XSy9Pk5bK36q9jVMeeVeBCM\"}]}]", "meta_data": { "source": "PublicInterakt", "source_data": { "callback_data": "algum texto aqui123" }, "message_cost": { "whatsapp_cost": "0.03", "interakt_markup": "0.3", "actual_message_cost": "0.33" } } }, "event": { "callbackData": "algum texto aqui123", "click_type": "CTA", "button_text": "Rastrear Pedido", "button_link": "https://www.interakt.shop/", "click_timestamp": "2024-06-10 08:47:26.948896" } }

Corpo do Webhook – mensagem_recebida:

(nota – os dados enviados no objeto “traits” dependem das características do cliente presentes em sua conta Interakt. As características fornecidas no exemplo abaixo correspondem a uma conta de teste)

{
  "versão": "1.0",
  "timestamp": "2022-06-03T05:57:57.496889",
  "tipo": "mensagem_recebida",
  "dados": {
"cliente": {
      "id": "52918eb3-bd00-4331-a51d-c4dcffee48d6",
      "canal_telefone_número": "917003705584",
      "características": {
        "nome": "SKGG",
        "quantia": 7000,
        "total_orders_count": 0,
        "último_pedido_id": nulo,
        "último_nome_pedido": nulo,
        "total_gasto": "0.00",
        "whatsapp_opted_in": falso,
        "created_at": "2021-06-23T06:46:11",
        "ID do usuário": "111",
        "o email": "[email protected]",
      }
    },
    "mensagem": {
      "id": "60076f05-da52-4dd1-b813-36223c1eded7",
      "chat_message_type": "Mensagem do Cliente",
      "channel_failure_reason": nulo,
      "message_status": "Enviado",
      "received_at_utc": "2022-06-03T05:57:57.359000",
      "entregue_at_utc": nulo,
      "visto_at_utc": nulo,
      "campaign_id": nulo,
      "is_template_message": falso,
      "raw_template": nulo,
      "canal_error_code": nulo,
      "message_content_type": "Texto",
      "media_url": nulo,
      "mensagem": "Obrigado",
      "meta_dados": {}
    }
  }
}

Corpo do webhook – alertas_de_conta:

    
  “versão”: “1.0”,
                  “timestamp”: “2022-06-03T05:43:33.930227”,
      "tipo": "alertas_de_conta",
               }

Corpo do webhook – atualização_da_conta:

               {
       “versão”: “1.0”,
                   “timestamp”: “2022-06-03T05:43:33.930227”,
                   "campo": "account_update",
                   "dados": {
                       "número_telefone": "16505551111",
                       "evento": "VERIFIED_ACCOUNT"
                   }
    }

 

Corpo do webhook – conta_review_update:

{
       “versão”: “1.0”,
                   “timestamp”: “2022-06-03T05:43:33.930227”,
                   "tipo": "account_review_update",
                   "dados": {
                       "decisão": "APROVADO"
                   }
          }

Corpo do webhook – atualização_de_capacidade_de_negócio:

{
 “versão”: “1.0”,
  “timestamp”: “2022-06-03T05:43:33.930227”,
"tipo": "business_capability_update",
"dados": {
     "max_daily_conversation_per_phone": 123,
      "max_phone_numbers_per_waba": 23,
                       "max_phone_numbers_per_business": 120
                   }
}

Corpo do webhook – telefone_número_qualidade_atualização:

               {
        “versão”: “1.0”,
                   “timestamp”: “2022-06-03T05:43:33.930227”,
                   "tipo": "phone_number_quality_update",
                   "dados": {
                       "display_phone_number": "16505551111",
                       "evento": "SINALIZADO",
                       "limite_atual": "TIER_10K"
                   }
   }

       

Corpo do webhook – modelo_desempenho_métricas:

               {
        “versão”: “1.0”,
                   “timestamp”: “2022-06-03T05:43:33.930227”,
                   "tipo": "modelo_desempenho_métricas",
                   "dados": {
                       "templates_performance_metrics": {
“template_id”: “”,
“nome_modelo”: “”,
     “template_linguagem”: “”,
}                   
                  }
   }

       

Corpo do webhook – mensagem_template_status_update:

               {
        “versão”: “1.0”,
                   “timestamp”: “2022-06-03T05:43:33.930227”,
                   "tipo": "message_template_status_update",
                   "dados": {
                       "evento": "APROVADO",
                       "message_template_id": 12345678,
                       "message_template_name": "meu_message_template",
                       "message_template_idioma": "pt-BR",
                       "razão": nulo
                   }
               }

          

Corpo do webhook – mensagens:

               {
                  “versão”: “1.0”,
                  “timestamp”: “2022-06-03T05:43:33.930227”,
                   "tipo": "mensagens",
               }

Corpo do webhook – workflow_response_update:

(Observação – O webhook do fluxo de trabalho não segue o mesmo padrão de outros webhooks com objetos de cliente e mensagem, ele apenas envia o objeto de dados com o identificador do cliente e as respostas do fluxo de trabalho)

O webhook do fluxo de trabalho será acionado em cada etapa. Porém, se o cliente responder ao 1º passo, será acionado um webhook com apenas 1 pergunta e resposta no campo de dados. Em seguida o cliente responde ao 2º passo, será acionado outro webhook que possui 2 perguntas e 2 respostas no campo de dados. O que significa 1º e 2º também. O desenvolvedor terá que garantir que não duplique as mensagens.

Para webhooks de atualização de fluxo de trabalho de entrada, o tipo será o seguinte:

  • “workflow_response_update”
{
  "versão": "1.0",
  "timestamp": "2023-08-25T04:35:59.841972",
  "tipo": "workflow_response_update",
  "dados": {
    "id": "66044dd4-d0b8-4efd-9c55-a970347f90f1",
    "created_at_utc": "2023-08-25T04:35:27.341000",
    "modified_at_utc": "2023-08-25T04:35:59.462000",
    "workflow_id": "d2a02d35-6cba-4873-a1fd-060de0342cdd",
    "customer_id": "13212830-0a1b-473f-b05a-ddd6872d367b",
    "customer_name": "Nome do cliente",
    "número_cliente": "+919999999999",
    "dados": [
      {
        "pergunta": {
          "id": "95a68fb7-0d52-4597-a5ef-0494f0c49509",
          "created_at_utc": "2023-08-25T04:35:27.949000",
          "número_passo": 1,
          "message": "Qual é o tamanho da sua empresa?",
          "message_type": "Listar mensagem",
          "botões": [],
          "list_message_name": "lista_interativa",
          "user_trait_name": "tamanho_da_empresa",
          "variáveis_fallback_valores": []
        },
        "responder": {
          "id": "f37b61e7-065e-413f-bc36-bf0ba183e605",
          "created_at_utc": "2023-08-25T04:35:38.351000",
          "mensagem": "500+",
          "media_id": nulo,
          "media_url": nulo,
          "media_file_name": nulo,
          "received_at_utc": "2023-08-25T04:35:36.776000",
          "message_content_type": "InteractiveListReply"
        }
      },
      {
        "pergunta": {
          "id": "e3375b79-86ea-454d-a9eb-9b4154020f56",
          "created_at_utc": "2023-08-25T04:35:39.478000",
          "número_passo": 2,
          "message": "Ótimo, gostaria de continuar?",
          "message_type": "Mensagem Normal",
          "botões": [],
          "list_message_name": "",
          "user_trait_name": nulo,
          "valores_variáveis_fallback": [
          ]
        },
        "responder": {
          "id": "d9afabb4-1411-4010-b21b-4f51c311850b",
          "created_at_utc": "2023-08-25T04:35:59.222000",
          "mensagem": "Sim",
          "media_id": nulo,
          "media_url": nulo,
          "media_file_name": nulo,
          "received_at_utc": "2023-08-25T04:35:57.611000",
          "message_content_type": "Texto"
        }
      }
    ],
    "triggered_from": "Mensagem de perguntas frequentes"
  }
}
Campo Descrição
tipo
O valor mudará dependendo do tipo de webhooks
Valores possíveis:

Para status de entrega de modelos (HSMs) enviados por meio das APIs de envio de modelos acima:
“mensagem_api_enviada”
“mensagem_api_delivered”
“mensagem_api_read”
“message_api_failed”

Para status de entrega de modelos (HSMs) enviados por meio de campanhas no Interakt:
“mensagem_campanha_enviada”
“mensagem_campanha_entregue”
“mensagem_campanha_leitura”
“message_campaign_failed”

Para mensagens recebidas de clientes:
"mensagem recebida"
dados.cliente
As informações do cliente.

channel_phone_number é o número de telefone completo do usuário com código ISD.

traits são atributos de usuário do cliente que podem ser definidos por meio da API User Track. Você pode usar isso para registrar quaisquer dados específicos do cliente.
dados.mensagem
Esta é a carga útil da mensagem.

id corresponde ao identificador exclusivo da mensagem.

message_status indica o status atual da mensagem

recebeu_at_utc = Carimbo de data e hora para tick único (ou seja, mensagem sendo enviada)

entregue_at_utc = carimbo de data/hora para tick duplo

visto_at_utc = carimbo de data / hora para marca azul em WA

raw_template é um JSON stringificado de detalhes do modelo.

channel_error_code e channel_failure_reason conterão detalhes em caso de mensagem com falha

media_url conterá um link público para o arquivo de mídia

a mensagem conterá dados brutos da mensagem em strings

Meta_data conterá qualquer callbackData que possa ter sido enviado na chamada da API de envio de modelo

Requisitos de webhook

Seu webhook deve atender aos seguintes requisitos mínimos de desempenho

    • Deve ser um endpoint HTTPS
    • Responda a todos os eventos de webhook com 200 OK
    • Responda a todos os eventos de webhook em 3 segundos ou menos

 

Requisitos de segurança do Interakt

A solicitação HTTP conterá um “Assinatura Interakt”cabeçalho que contém o Codificado hexadecimal SHA256 assinatura da carga útil da solicitação calculada usando o algoritmo HMAC e o chave secreta compartilhado antecipadamente e prefixado com sha256 =.

Seu endpoint de retorno de chamada deve verificar essa assinatura para validar a integridade e a origem da carga útil.

Por exemplo: exemplos de cabeçalhos recebidos no Webhook:

Interakt-Signature:sha256=b84783d10ede5bd6ed771e8b16fbe5a7093340159d6e49ec4248350b6ec2c7b4

Se sua carga útil for:

'{“foo”:1,”barra”:2}'

E sua chave secreta é = chave de exemplo

Exemplo de código fornecido em Python e Node JS para sua referência para verificar webhooks

 

Exemplo de código para verificação de webhooks

Pitão:

importar hmac

de importação hashlib sha256

ao digitar import Union

def generate_signature(secret_key: str, carga útil: Union[bytes, str]):

“””Gera assinatura SHA256 anexada com sha256=

Argumentos:

secret_key [String] -> segredo compartilhado, conhecido pelo seu serviço

carga útil [String ou bytes] -> recebido no corpo da solicitação (JSON stringificado)

"" "

se não for carga útil:

carga útil = Nenhum

elif isinstance(carga útil, str):

carga útil = carga útil.encode (“utf-8”)

hash_value = hmac.new(secret_key.encode(“utf-8”), carga útil, sha256).hexdigest()

retornar “sha256 =” + str (hash_value)

def verify_signature(secret_key: str, carga útil: Union[bytes, str], assinatura: str):

“””Verifica a assinatura SHA256 anexada com sha256=

Argumentos:

secret_key [String] -> segredo compartilhado, conhecido pelo seu serviço

carga útil [String ou bytes] -> recebido no corpo da solicitação (JSON stringificado)

assinatura [Assinatura] -> recebida no cabeçalho da solicitação Interakt-Signature

"" "

sha256_signature = generate_signature(secret_key=secret_key, carga útil=carga útil)

retornar sha256_signature == assinatura

#teste a função

received_hmac = “sha256=b84783d10ede5bd6ed771e8b16fbe5a7093340159d6e49ec4248350b6ec2c7b4”

data_string = '{“foo”:1,”barra”:2}'

chave = “chaveexemplo”

if verify_signature(secret_key=key, payload=data_string, assinatura=received_hmac):

print(“Assinatura válida”)

outro:

print(“Assinatura inválida”)

 

Nó JS:

Podemos usar o pacote NPM crypto-js

Ref: https://www.npmjs.com/package/crypto-js

 

const CryptoJS = require('crypto-js');

função verificarHmac(

recebidoHmac, // recebido no cabeçalho da solicitação Interakt-Signature

dataString, // recebido no corpo da solicitação (JSON stringificado)

chave // ​​segredo compartilhado, conhecido pelo seu serviço

) {

const geradoHmac = CryptoJS.HmacSHA256(dataString, chave);

const geradoHmacBase64 = “sha256=” + CryptoJS.enc.Hex.stringify(generatedHmac);

retornar geradoHmacBase64 === recebidoHmac;

}

//testa a função

const receivedHmac = “sha256=b84783d10ede5bd6ed771e8b16fbe5a7093340159d6e49ec4248350b6ec2c7b4”;

const dataString = '{“foo”:1,”bar”:2}';

chave const = “chave de exemplo”;

if (verifyHmac(receivedHmac, dataString, chave)) {

console.log(“Assinatura Válida”);

Else {}

console.log(“Assinatura Inválida”);

}

 

C #:

using System;

usando System.Text;

usando System.Security.Cryptography;

programa de aula

{

string estática pública ComputeHash (segredo de string, carga útil de string)

{

byte[] bytes = Encoding.UTF8.GetBytes(secret);

HMAC hmac = novo HMACSHA256(bytes);

bytes = Encoding.UTF8.GetBytes(carga útil);

retornar “sha256=” + BitConverter.ToString(hmac.ComputeHash(bytes)).Replace(“-“, “”).ToLower();

}

public static bool HashIsValid (segredo de string, carga útil de string, verificação de string)

{

string hashString = ComputeHash(segredo, carga útil);

return verificar == hashString;

}

static void Main (string [] args)

{

       // Testando nosso código

string receivedHmac = “sha256=b84783d10ede5bd6ed771e8b16fbe5a7093340159d6e49ec4248350b6ec2c7b4”;

string dataString = “{\”foo\”:1,\”bar\”:2}”;

string chave = “exemplochave”;

Console.WriteLine(HashIsValid(chave, dataString, recebidoHmac));

}

}

 

PHP:

$secret = “examplekey”;// sua chave secreta

if (isset($_POST)) {

$payload = file_get_contents('php://input');

$headers = getallheaders();

if (array_key_exists(“Assinatura Interativa”, $headers)) {

$assinatura = $headers[“Assinatura Interativa”];

$resultado = hash_is_valid($secret, $payload, $signature);

// se $resultado for verdadeiro

// Hash é válido A chamada da API vem do Interak

}

cabeçalho(“HTTP/1.1 200 OK”);

}

função computar_hash($secreto, $carga útil)

{

$prefixo = “sha256=”;

$hexHash = hash_hmac('sha256', $carga útil, utf8_encode($secret));

retornar $prefixo.$hexHash;

}

função hash_is_valid($secret, $payload, $verify)

{

$hash_computado = hash_de_computação($secreto, $carga útil);

return hash_equals($verificar,$computado_hash);

}

?>

 

Você pode testar seu Endpoint usando Postman com um script de pré-solicitação:

var CryptoJS = require(“cripto-js”);

var keyString = 'examplekey';

função criptografar (dados,) {

var val = CryptoJS.HmacSHA256(dados, keyString);

retornar “sha256=” + CryptoJS.enc.Hex.stringify(val);

}

// Define variáveis ​​de ambiente para carteiro

pm.ambiente.set(

“hmac_sign”, criptografar(request.data)

);


Este código pegará o corpo da sua solicitação, criará uma assinatura HMAC usando a chave “examplekey” (mencionado na linha 2 do código) e defina o ambiente hmac_sign

Aqui está um exemplo de curl que está enviando “Interakt-Signature” nos cabeçalhos

curl –local –request POST ' '\

–header 'Assinatura interativa: {{hmac_sign}}' \

–header 'Tipo de conteúdo: aplicativo/json' \

–data-raw '{“foo”:1,”barra”:2}'


Em vez de '{“foo”:1,”bar”:2}' teste com qualquer corpo da solicitação.

 

Consulte capturas de tela: