Pular para o conteúdo principal

Eventos Disponíveis na Integração

O Webhook pode enviar diferentes tipos de eventos, cobrindo desde mensagens até dados de configuração. Entre os principais, estão:
  • Mensagens enviadas e atualização de status de entrega;
  • Mensagens recebidas e atualização de status de recebimento;
  • KPI Eventos inseridos no ambiente (manualmente ou pelo sistema);
  • Campanhas, incluindo atualizações de status;
  • Carteiras, com informações de edição e atualizações de configuração;
  • Templates HSM, com status, qualidade e alterações;
  • Linhas WhatsApp, com status, qualidade e alterações;
  • Relação de usuários, incluindo logs e mudanças;
  • Protocolos, com estatísticas e dados associados

Funcionamento da Integração

A comunicação ocorre por meio do envio de blocos JSON para o endpoint configurado. Entre os objetos enviados estão: [contact] · [event] · [messageincoming] · [messageoutgoing] · [campaign] · [template] · [protocol] · [wallet] · [whatsapp numbers] · [status]
Esses blocos são entregues em lotes de até 30 arquivos JSON, com intervalo médio de 2 segundos, garantindo um fluxo constante de informações.

Em qual linguagem utilizar a integração com o webhook da Invenio?

Não há uma restrição a uma linguagem específica. Os webhooks do Invenio são baseados no protocolo HTTP, o que significa que podem ser implementados em qualquer linguagem capaz de:
  • Receber requisições HTTP (ter um endpoint/rota exposta);
  • Processar os dados recebidos (geralmente em JSON ou XML).
Exemplos de uso por linguagem
  • JavaScript / Node.js → frameworks como Express;
  • Python → Flask, Django ou FastAPI;
  • C# (.NET) → ASP.NET Core;
  • Java → Spring Boot;
  • PHP → Laravel, Symfony ou mesmo nativo via $_POST;
  • Go, Ruby, Rust, Elixir, entre outras → qualquer linguagem que ofereça suporte a HTTP.
Em resumo: a integração via webhook da Invenio é flexível e universal. Se a linguagem escolhida suporta servidor web/HTTP, você poderá utilizá-la sem restrições.

Requisitos de Infraestrutura

Para ambientes de produção, recomenda-se a seguinte configuração mínima para o servidor endpoint:
  • SSD de 250 GB
  • 16 GB de RAM
  • CPU com 4 núcleos
⚠️ Importante
O uso de HD não é recomendado, pois pode gerar gargalos devido ao alto volume de mensagens e eventos. A infraestrutura deve ser monitorada continuamente pela área de TI, com possibilidade de escala futura.

Configuração Final no Invenio Center

Após preparar servidor, banco de dados, firewall e publicar o serviço, acesse: Invenio Center > Configurações > Webhook > Gerenciar
Acesse a página de configurações
Adicione a URL final gerada pela IDE ou ambiente de publicação e salve.
Observação
Em até 60 minutos, as requisições começarão a ser enviadas para o endpoint configurado.

Fila paralela ⚠️

Por padrão, o Invenio Center disponibiliza dois campos para inclusão de URLs de webhook.
A fila paralela permite adicionar URLs adicionais de webhook, sujeita a custo extra na fatura.
Para mais informações, entre em contato com o gerente comercial responsável pela sua conta.

Mapeamento de Campos

Além dos exemplos de JSONs retornados pelo Webhook, é fundamental compreender a estrutura de campos utilizada.
Abaixo, apresentamos a organização desses dados, que servirá de base para a manipulação e integração adequada dentro do ambiente do cliente.

Message (Mensagem)

CampoDescriçãoTipo
MessageSentToProviderAtData e hora do envio da mensagem ao provedorDatetime
MessageDeliveredAtData e hora da entrega da mensagemDatetime
MessageReadAtData e hora da leitura da mensagemDatetime
MessageFailedAtData e hora da falha na entrega da mensagemDatetime
MessagemSentAtData e hora do envio da mensagemDatetime
MessageReceivedAtData e hora do recebimento da mensagemDatetime
MessageCampaignidID da campanhaInt
MessageTypeTipo do envio da mensagemString
MessageDirectionDireção da mensagem: Outcoming (saída) ou Incoming (entrada)String
MessageIdID da mensagemLong
MessageChannelCanal da mensagem (ver enumeração abaixo)Int
MessageTextTexto da mensagemString
MessageSourceCountryCodeCódigo do país do remetenteInt
MessageSourcePhoneNumberNúmero de telefone do remetenteLong
MessageSourceEmailE-mail do remetenteString
MessageDestinationCountryCodeCódigo do país do destinatárioInt
MessageDestinationPhoneNumberNúmero de telefone do destinatárioLong
MessageDestinationEmailE-mail do destinatárioString
ContactRobbuIdID do contato na RobbuLong
ContactNameNome do contatoString
ContactIDID do contatoString
ContactCustomCodeCódigo do cliente do contatoString
ContactMainEmailE-mail principal do contatoString
ContactMainWhatsAppCountryCodeCódigo do país da linha principal de WhatsAppInt
ContactMainWhatsAppPhoneNumberNúmero de WhatsApp principal do contatoLong
ContactMainSmsCountryCodeCódigo do país da linha principal de SMSInt
ContactMainSmsPhoneNumberNúmero de SMS principal do contatoLong
QueueWaitingSinceInício da espera do contato na fila da operaçãoDatetime
QueueFirstAnswerAtPrimeira resposta ao contatoDatetime
ContactLastWalletCodeCódigo do último segmento do contatoString
ContactLastWalletNameNome do último segmento do contatoString
ContactLastChannelDescriptonDescrição do último canal do contatoString
ContactCreatedAtData e hora de inclusão do contatoDatetime
ContactLastAnswearAtData e hora da última mensagem enviada ao contato pela operaçãoDatetime
ContactLastIncomingMessageAtData e hora da última mensagem recebida do contatoDatetime
DigitalPostmanIndica se o envio é via Carteiro DigitalBool
LocationLatitudeLatitude de localizaçãoDouble
LocationLongitudeLongitude de localizaçãoDouble
FileUrlURL do arquivoString
FileNameNome do arquivoString
FileExtensionExtensão do arquivoString
ProtocolMessageIdID do protocoloLong
ProtocolMessageNumberNúmero do protocoloString
MessageErrorCodeCódigo da falha na entrega da mensagemString
ErrorMessageDescrição do erro de entregaString
MessageChannelDescriptionDescrição do canalString
MessageTemplateNameNome do templateString
MessageTemplateIdID do templateLong
Enumeração – MessageChannel
1 E-mail · 2 SMS · 3 WhatsApp · 4 Chat · 5 Facebook · 6 Telegram · 7 Voz · 8 Instagram · 9 Viber
"message": {
 	"receivedAt": "2020-01-31T02:01:03",
 	"direction": "incoming",
 	"id": 13232322244444,
 	"channel": 3,
 	"text": "Olá, teste whats!",
 	"source": {
 		"countryCode": 55,
 		"phoneNumber": 11999999992
 	},
 	"destination": {
 		"countryCode": 55,
 		"phoneNumber": 11944497777
 	},
 	"location": {
 		"latitude": -23.5535317,
 		"longitude": -46.6631181
 	},
 	"file": {
 		"url": "http://s.robbu.com.br/arquivo?hash=ROBBU",
 		"name": "robbu",
 		"extension": "pdf"
 	},
 	"contact": {
 		"robbuid": 11111111111,
 		"name": "TESTE ROBBU",
 		"customCode": "1372511",
 		"id": "00000000000",
 		"mainWhatsapp": {
 			"countryCode": 55,
 			"phoneNumber": 11999999992
 		},
 		"mainSMS": {
 			"countryCode": 55,
 			"phoneNumber": 11999999992
 		},
 		"mainEmail": "[email protected]"
 	}
 }
You can put any content in here, including other components, like code:
"message": {
 	"sentAt": "2020-01-31T02:05:21.2900000",
 	"direction": "outgoing",
 	"id": 1323232224455555,
 	"channel": 3,
 	"type": "",
 	"text": "Teste envio whats!",
 	"campaignId": 1234,
 	"source": {
 		"countryCode": 55,
 		"phoneNumber": 11944497777,
 		"sender": ""
 	},
 	"destination": {
 		"countryCode": 55,
 		"phoneNumber": 11999999992
 	},
 	"file": {
 		"url": "http://s.robbu.com.br/arquivo?hash=ROBBU",
 		"name": "robbu",
 		"extension": "pdf"
 	},
 	"contact": {
 		"robbuid": 11111111111,
 		"name": "TESTE ROBBU",
 		"customCode": "1372511",
 		"id": "00000000000",
 		"mainWhatsapp": {
 			"countryCode": 55,
 			"phoneNumber": 11999999992
 		},
 		"mainSMS": {
 			"countryCode": 55,
 			"phoneNumber": 11999999992
 		},
 		"mainEmail": "[email protected]",
 		"queue": {
 			"waitingSince": "2021-03-08 12:00:00",
 			"firstAnswerAt": "2021-03-08 11:30:00"
 		}
 	}
 }

Status

CampoDescriçãoTipo
MessageStatusIdID do status da mensagemLong
SourceStatusSenderRemetente do status de origemString
MessageStatusSentToProviderAtEnvio do status ao provedorDatetime
MessageStatusDeliveredAtEntrega do statusDatetime
MessageStatusReadAtLeitura do statusDatetime
MessageStatusSentAtEnvio da mensagemDatetime
MessageStatusFailedAtFalha no envio da mensagemDatetime
MessageStatusDigitalPostmanIndica envio via Carteiro DigitalBool
MessageStatusErrorCodeCódigo de erro da mensagemString
MessageStatusErrorMessageDescrição do erro da mensagemString
ContactStatusRobbuIdID do status do contato na RobbuLong
"status": {
 	"message": {
 		"id": 1323232224455555,
 		"source": {
 			"sender": "User1"
 		},
 		"sentToProviderAt": "2020-01-31T15:50:39.9312405",
 		"deliveredAt": "2020-01-31T15:51:52.9707831",
 		"readAt": "2020-01-31T15:53:14.6399299"
 	}
 }

Event (KPI Evento)

CampoDescriçãoTipo
IDID do eventoLong
DescriptionDescrição do eventoString
NoteObservação do eventoString
CustomCodeCódigo customizado do eventoString
SenderUsuário responsável pelo eventoString
FinalizedIndica se é um evento finalizadorBool
TypeTipo do evento: negativo, neutro ou positivoString
ProtocolNumberNúmero do protocoloString
ProtocolIDID do protocoloLong
ContactRobbuIdID único do contato na RobbuLong
ContactNameNome do contatoString
ContactIDID do contatoString
ContactCustomCodeCódigo do cliente do contatoString
ContactMainEmailE-mail principal do contatoString
ContactMainWhatsAppCountryCodeCódigo do país da linha principal de WhatsAppInt
ContactMainWhatsAppPhoneNumberNúmero de WhatsApp principal do contatoLong
ContactMainSmsCountryCodeCódigo do país da linha principal de SMSInt
ContactMainSmsPhoneNumberNúmero de SMS principal do contatoLong
QueueWaitingSinceInício da espera na fila da operaçãoDatetime
QueueFirstAnswerAtPrimeira resposta ao contatoDatetime
ContactLastWalletCodeCódigo do último segmento do contatoString
ContactLastWalletNameNome do último segmento do contatoString
ContactLastChannelDescriptonDescrição do último canal do contatoString
ContactCreatedAtData e hora de inclusão do contatoDatetime
ContactLastAnswearAtÚltima mensagem enviada ao contato pela operaçãoDatetime
ContactLastIncomingMessageAtÚltima mensagem recebida do contatoDatetime
"event": {
 	"createdAt": "2020-01-31T02:05:21.0566667",
 	"id": 13232322244599998,
 	"description": "[CR] Saudacao Final",
 	"note": "Saudacao Final",
 	"customCode": "298",
 	"finalized": false,
 	"sender": "",
 	"type": "Neutro",
 	"contact": {
 		"robbuid": 11111111111,
 		"name": "TESTE ROBBU",
 		"customCode": "1372511",
 		"id": "00000000000",
 		"mainWhatsapp": {
 			"countryCode": 55,
 			"phoneNumber": 11999999992
 		},
 		"mainSMS": {
 			"countryCode": 55,
 			"phoneNumber": 11999999992
 		},
 		"mainEmail": "[email protected]"
 	}
 }


Campaign (Campanha)

CampoDescriçãoTipo
CreatedAtData e hora de criação da campanhaDatetime
CreatedByUsuário responsável pela campanhaString
IdID da campanhaInt
ChannelCanal da campanha (ver enumeração abaixo)Int
ChannelDescriptionDescrição do canalString
StartAtInício da campanhaDatetime
SizeQuantidade de mensagens a enviarInt
MessageTemplate enviado na campanhaString
HoursToDiscardHoras para descartar quando o contato já está em atendimento por outro canalInt
TypeCampaignCodeCódigo interno do tipo de campanhaString
TypeCampaignDescriptionDescrição do tipo de campanha [1-SMS; 2-WhatsApp; 3-E-mail; 4-Voz]String
SplitSendPercentagePercentual para fracionar o envioDouble
SplitSendMinutesIntervalo (min) entre enviosInt
MailingDescriptionDescrição do mailingString
MailingImportedAtImportação do mailing (data/hora)Datetime
MailingImportedByUsuário que importou o mailingString
MailingSizeQuantidade de registros no mailingInt
MailingWalletClientCodeCódigo da carteira do mailingString
TotalSentTotal de mensagens enviadasInt
CampaignLastSentAtData e hora da última mensagem enviadaDatetime
CampaignStatusCodeCódigo de status da campanhaString
CampaignDescriptionDescrição do tipo de campanhaString
Enumeração – Channel
1 E-mail · 2 SMS · 3 WhatsApp · 4 Chat · 5 Facebook · 6 Telegram · 7 Voz · 8 Instagram · 9 Viber
TypeCampaignCode
EM E-mail · SL SMS Long · SS SMS Short · VW Voz Way · WB WhatsApp Broadcast · WE WhatsApp Oficial Exclusivo · WP WhatsApp Prospect Convencional · WO/WC WhatsApp Oficial Compartilhado
CampaignStatusCode
C Cancelada · E Não enviada · F Finalizada · I Iniciada · P Aguardando processamento
"campaign": {
 	"createdAt": "2020-01-27T22:01:12.2766667",
 	"createdBy": "User Robbu",
 	"id": 994545,
 	"channel": 1,
 	"startAt": "2020-01-27T21:59:00",
 	"size": 3102,
 	"message": "<html><body>Envio campanha email!<\/body><\/html>",
 	"hoursToDiscard": 0,
 	"type": {
 		"code": "EM",
 		"description": "EMAIL"
 	},
 	"splitSend": {
 		"percentage": 100.00,
 		"minutes": 0
 	},
 	"mailing": {
 		"description": "disparo_email",
 		"importedAt": "2020-01-27T21:54:16.5500000",
 		"importedBy": "User Robbu",
 		"size": 3102,
 		"walletClientCode": "1000"
 	}
 }
"status": {
 	"campaign": {
 		"id": 994545,
 		"totalSent": 91,
 		"lastSentAt": "2020-01-31T16:10:12.0633333",
 		"statusCode": "F"
 	}
 }


Template

CampoDescriçãoTipo
IdID do templateLong
NameNome do templateString
EventStatus da ação (Updated, Created)String
EventAtData e hora de inclusão/alteraçãoDatetime
StatusStatus na Meta [Approved; Reject; Deleted; Disabled]String
QualityQualidade na Meta [Green; Yellow; Red; Deleted; Disabled]String
CategoryCategoria na Meta [Utility; Marketing; Service; Authentication]String
LanguageIdioma do templateString
 "template": {
   "id": 53129216,
   "name": "bv_atualizar_informacoes_020",
   "event": "updated",
   "eventAt": "2025-02-28T12:10:24.2981975Z",
   "status": "APPROVED",
   "quality": "UNKNOWN",
   "category": "MARKETING",
   "language": "pt_BR"
}

Protocol (Protocolo)

CampoDescriçãoTipo
EventStatus da ação realizada ao protocolo [Updated; Created]String
EventAtData e hora de inclusão do protocoloDatetime
IdID do protocoloLong
NumberNúmero do protocoloString
GeneratedAtData e hora de geração do protocoloDatetime
GenerationChannelDescriptionDescrição do canal do protocolo geradoString
GenerationWalletNameNome do segmento onde o protocolo foi geradoString
GenerationWalletCodeCódigo do segmento onde o protocolo foi geradoString
GenerationWalletIdID do segmento geradoLong
SegmentIdID do segmentoLong
SegmentNameNome do segmentoString
ContactProtocolIdID do protocolo do contatoString
ContactProtocolRobbuIdID do protocolo na RobbuLong
FirstMessageIdrAtPrimeira mensagem na IDRDatetime
LastMessageIdrAtÚltima mensagem na IDRDatetime
IdrClosedAtEncerramento do atendimento na IDRDatetime
LastMessageContactIdrAtÚltima mensagem do contato para a IDRDatetime
FirstMessageFromHumanAttendanceAtPrimeira mensagem da operaçãoDatetime
IdrMessagesCountTotal de mensagens da IDRLong
HumanAttendanceMessagesCountTotal de mensagens de atendentesLong
IncomingMessagesCountTotal de mensagens recebidasLong
HumanAttendanceAnswersCountTotal de respostas de atendentesLong
ContactAnswersCountTotal de respostas do contatoLong
HumanAttendanceAnswersTotalTimeInSecondsSoma total (seg) das respostas da operaçãoLong
ContactAnswersTotalTimeInSecondsSoma total (seg) das respostas do contatoLong
IdrAnswersTotalTimeInSecondsSoma total (seg) das respostas da IDRLong
IdrAnswersCountTotal de respostas da IDRLong
ClosedAtEncerramento do protocoloDatetime
ClosingUserInfoNome do usuário que encerrouString
ClosingEventIdID do evento de encerramentoLong
ClosingEventNameNome do evento de encerramentoString
ClosingEventCodeCódigo do evento de encerramentoString
AbandonedAtAbandono do protocoloDatetime

User (Usuário)

CampoDescriçãoTipo
IdID do usuárioLong
NameNome do usuárioString
EventStatus da ação [Updated; Created]String
EventAtData e hora de criação/ediçãoDatetime
CompletenameNome completo do usuárioString
AcessGroupGrupo de acessoString
AcessGroupDescriptionDescrição do grupo de acessoString
EmailAddressEndereço de e-mail do usuárioString
LastLoginAtÚltimo loginDatetime
IsActiveUsuário ativo/inativoBool
LastQueueUpdateAtÚltima atualização da fila de atendimentoDatetime
LastPasswordChangeATÚltima troca de senhaDatetime
IsLoggedIndica se está logadoBool

Wallet (Carteira)

CampoDescriçãoTipo
IdID do segmentoLong
NameNome do segmentoString
CodeCódigo do segmentoString
EventStatus da ação [Updated; Created; Deleted]String
EventAtData e hora da criação/ediçãoDatetime
DistributionMethodMétodo de distribuição de contatosString
DistributionMethodDescriptionDescrição do método de distribuiçãoString

WhatsApp Numbers (Números WhatsApp)

CampoDescriçãoTipo
EventStatus da ação na linha WhatsApp [Created; Updated]String
EventAtData e hora de inclusão/alteraçãoDatetime
IdID da linha WhatsAppLong
WalletIdID do segmentoLong
StatusQualidade da linha na Meta [Green; Yellow; Red; Unknown]String
CountryCodeCódigo do paísString
AreaCodeCódigo de áreaString
PhoneNumberNúmero de telefone da linha WhatsAppString
IsActiveLinha ativaBool
BroadCastLimitPerDayLimite diário de envios (Meta)Int
CanSendHsmLinha habilitada para envio de HSMBool
"whatsappNumber": {
 "event": "updated",
 "eventAt": "2025-02-26T19:18:48.5888674+00:00",
 "id": 1234567,
 "walletId": 7654321,
 "status": "YELLOW",
 "countryCode": "55",
 "areaCode": "11",
 "phoneNumber": "11111111",
 "isActive": true,
 "broadcastLimitPerDay": 1000,
 "canSendHsm": true
}

Exemplo Prático de Funcionamento da Integração com Webhook

  1. Mensagens enviadas: Assim que o Invenio envia uma mensagem (por exemplo, um WhatsApp para um cliente), ele avisa seu sistema se a mensagem foi entregue com sucesso ou se houve algum problema.
Exemplo:
Mensagem para o João entregue às 15h.
  1. Mensagens recebidas: Quando alguém responde ou envia uma mensagem para você, o Invenio imediatamente notifica o seu sistema.
Exemplo:
Mensagem recebida do João: "Preciso de ajuda com o pedido."
  1. Eventos de KPI: Sempre que um indicador importante é registrado (como número de atendimentos concluídos), seu sistema recebe os dados.
Exemplo:
5 novos atendimentos registrados hoje.
  1. Campanhas: Se você criou uma campanha de mensagens, o Invenio avisa sobre o andamento, como o número de mensagens enviadas ou se a campanha terminou.
Exemplo:
Campanha "Promoção de Verão" está 75% concluída.
  1. Carteiras: Quando você atualiza as configurações das carteiras (listas de clientes ou grupos), o Invenio avisa sobre qualquer alteração feita.
Exemplo:
A carteira "Clientes VIP" foi atualizada com 20 novos contatos.
  1. Templates HSM: Se você utiliza mensagens pré-aprovadas (templates HSM) para enviar comunicações, o Webhook informa mudanças de status, qualidade ou edições.
Exemplo:
Template "Promoção 10%" aprovado com sucesso.
  1. Linhas WhatsApp: Caso sua linha do WhatsApp mude de status (ativa, inativa ou com problemas), o Webhook te avisa.
Exemplo:
Linha WhatsApp "Suporte" está ativa e funcionando normalmente.
  1. Usuários: Sempre que um usuário da sua equipe faz alterações no sistema, o Webhook registra e envia essas informações.
Exemplo:
Usuário "Maria" atualizou o perfil dela.
  1. Protocolos: Se você utiliza protocolos para monitorar atendimentos ou processos, o Webhook envia os dados detalhados.
Exemplo:
Protocolo #12345 foi finalizado com sucesso.
Obs.: Os eventos enviados pelo Webhook são estruturados no formato JSON, garantindo que seu sistema possa processar as informações de maneira organizada e confiável. Os exemplos apresentados acima são apenas ilustrativos para facilitar o entendimento e não representam o formato real das notificações enviadas.

⁉️ Perguntas Frequentes (FAQ)

São enviados blocos JSON dos seguintes objetos: contact, event, messageincoming, messageoutgoing, campaign, template, protocol, wallet, whatsapp numbers e status.
Sim. As entregas ocorrem em lotes de até 30 arquivos JSON com intervalo médio de 2 segundos entre os lotes, garantindo fluxo constante e organizado.
As requisições passam a ser disparadas em até 60 minutos após o salvamento da URL do endpoint no Invenio Center.
É altamente recomendado utilizar HTTPS para garantir segurança no transporte dos dados. Além disso, é necessário liberar os IPs oficiais no firewall para assegurar a conectividade.
Recomendamos SSD de 250 GB, 16 GB de RAM e CPU com 4 núcleos. O uso de HD não é indicado devido ao volume de mensagens e eventos.
Sim. A solução é compatível com infraestrutura cloud ou on-premises, mas a tecnologia do banco fica a critério do cliente, desde que a TI garanta operação e manutenção.
A fila paralela permite configurar URLs adicionais para recebimento dos JSONs. Essa configuração pode gerar cobrança adicional; consulte o gerente comercial da sua conta para mais detalhes.
Em Invenio Center > Configurações > Webhook > Gerenciar. Após publicar seu serviço e liberar o firewall, informe a URL e salve.