WhatsApp Hub (NooviConnect)
Endpoints do motor WhatsApp embutido (NooviConnect): gestão de sessões, grupos, canais e relatórios agregados. O {inbox_id} é o id da inbox NooviConnect. Requer a feature Hub WhatsApp ativa na conta e api_access_token.
Capability por provider
422; inbox de outra conta retorna 404 (isolamento multi-tenant).Visão Geral
Todos os caminhos abaixo são prefixados por /api/v1/accounts/{account_id}/noovi_connect/{inbox_id}.
Sessões
/api/v1/accounts/{account_id}/noovi_connectLista as sessões NooviConnect da conta (status, telefone, inbox, device).
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/statusStatus da sessão (stopped | starting | scan_qr_code | working | failed).
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/qrQR code atual da sessão (para parear o WhatsApp).
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/refresh_qrGera um novo QR code.
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/request_pairing_codeSolicita código de pareamento por telefone (alternativa ao QR).
Body
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
phone | string | Sim | Telefone E.164 (ex.: 5511999999999) |
Validação e Presença
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/check_numberVerifica se um número possui WhatsApp ativo (retorna o resultado do motor).
Query
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
phone(query) | string | Sim | Telefone E.164 (ex.: 5511999999999). Não-dígitos são removidos. |
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/chat_presenceEnvia presença (digitando / parou de digitar) para um contato.
Body
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
phone | string | Sim | Telefone E.164 do contato |
presence_action | string | Sim | typing | composing iniciam 'digitando'; qualquer outro valor para a digitação |
{ "message": "Presence sent" }Mensagens ricas
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/send_pollEnvia uma enquete para um contato.
Body
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
phone | string | Sim | Telefone do contato (ou JID completo com @) |
question | string | Sim | Pergunta da enquete |
options | string[] | Sim | Opções da enquete (mínimo 2) |
max_answer | integer | Nao | Máximo de respostas; > 1 habilita seleção múltipla (limitado ao número de opções). Padrão 1. |
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/send_locationEnvia uma localização para um contato.
Body
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
phone | string | Sim | Telefone do contato (ou JID completo com @) |
latitude | string | Sim | Latitude |
longitude | string | Sim | Longitude |
title | string | Nao | Título/rótulo da localização |
Perfil
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/profileRetorna o perfil da conta de WhatsApp conectada (id, nome e URL da foto).
{ "id": "5511999999999@c.us", "name": "Atendimento Noovi", "picture": "https://..." }/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/set_pushnameAltera o nome de exibição (push name) do perfil da sessão.
Body
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
push_name | string | Sim | Novo nome de exibição |
{ "message": "Profile name updated" }/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/set_profile_statusAltera o recado/status (about) do perfil da sessão.
Body
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
status | string | Sim | Novo recado (about) |
{ "message": "Profile status updated" }Foto e privacidade
set_avatar) e ler configurações de privacidade (privacy_settings) não são suportados pelo motor atual — ver Não suportados (501).Chamadas
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/reject_callRejeita uma chamada de WhatsApp recebida. call_id e from vêm dos metadados da atividade de chamada.
Body
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
call_id | string | Sim | ID da chamada recebida |
from | string | Sim | JID/telefone de origem da chamada |
{ "message": "Call rejected" }Grupos
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/groupsLista os grupos do WhatsApp da sessão (jid, nome, participants_count).
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/create_groupCria um grupo.
Body
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
title | string | Sim | Nome do grupo |
participants | string[] | Sim | Telefones dos participantes |
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/group_participantsLista participantes de um grupo (shape normalizado).
Query
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
group_jid(query) | string | Sim | JID do grupo (...@g.us) |
[
{
"jid": "5511999999999@s.whatsapp.net",
"phone_number": "5511999999999",
"display_name": "Fulano",
"is_admin": true,
"is_super_admin": false
}
]/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/group_pictureObtém a URL da foto de um grupo (null quando não houver).
Query
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
group_jid(query) | string | Sim | JID do grupo (...@g.us) |
{ "url": "https://..." }/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/group_invite_linkObtém o link de convite do grupo (shape normalizado).
Query
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
group_jid(query) | string | Sim | JID do grupo |
{
"invite_link": "https://chat.whatsapp.com/ABCDEF123456",
"invite_code": "ABCDEF123456"
}/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/group_info_from_linkObtém informações de um grupo a partir de um link de convite (sem entrar).
Query
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
link(query) | string | Sim | Link de convite do grupo (https://chat.whatsapp.com/...) |
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/join_group_with_linkEntra em um grupo a partir de um link de convite.
Body
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
link | string | Sim | Link de convite do grupo |
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/set_group_nameAltera o nome do grupo. Body: group_jid, name.
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/set_group_topicAltera o tópico/descrição. Body: group_jid, topic.
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/set_group_photoAltera/remove a foto (multipart). Body: group_jid, image.
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/set_group_lockedBloqueia/desbloqueia a edição das infos do grupo (apenas admins). Body: group_jid, locked (boolean).
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/set_group_announceAtiva/desativa o modo somente-admins-enviam-mensagens. Body: group_jid, announce (boolean).
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/leave_groupSai do grupo. Body: group_jid.
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/add_participantsAdiciona participantes. Body: group_jid, phones[].
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/remove_participantsRemove participantes. Body: group_jid, phones[].
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/promote_participantsPromove a admin. Body: group_jid, phones[].
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/demote_participantsRebaixa de admin. Body: group_jid, phones[].
Solicitações de entrada não suportadas
participant_requests, approve_participant_requests e reject_participant_requests existem, mas o motor atual retorna 501 Not Implemented. Ver Não suportados (501).Etiquetas (WhatsApp Business)
Etiquetas do WhatsApp Business da conta conectada — distintas das etiquetas de conversa nativas do NooviChat. Existem apenas em contas WhatsApp Business; contas pessoais retornam lista vazia.
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/labelsLista as etiquetas do WhatsApp Business (id, nome, cor).
[
{ "id": "1", "name": "Clientes", "color": 0, "colorHex": "#ff9485" }
]/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/label_chatsLista os chats marcados com uma etiqueta.
Query
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
label_id(query) | string | Sim | Identificador da etiqueta |
Canais (Newsletters)
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/newslettersLista os canais (newsletters) seguidos pela sessão.
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/unfollow_newsletterDeixa de seguir um canal. Body: newsletter_id.
Criação de canal
Relatórios
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/hub_reportResumo agregado da sessão (grupos, canais, participantes, transmissões e atividade dos últimos 30 dias).
{
"summary": {
"groups": 29,
"communities": 0,
"channels": 4,
"participants": 2471,
"messages": 1840,
"active_broadcasts": 0,
"total_broadcasts": 12,
"events": 35
},
"activity": { "messages": 1840, "replies": 720, "reactions": 96 },
"top_participants": []
}Estrutura da resposta
data: os campos de topo são summary, activity e top_participants. As métricas de activity (messages/replies/reactions) e o campo summary.messages/summary.events são apurados a partir dos eventos nativos (ReportingEvent) dos últimos 30 dias no fuso da conta — degradam para 0 quando não há motor disponível. top_participants é sempre uma lista vazia no momento.Não suportados (501)
As rotas abaixo existem por compatibilidade, mas o motor WhatsApp atual (GOWS) não as implementa: respondem 501 Not Implemented com { "error": "Operation not supported by the WhatsApp engine (GOWS)" }. Não dependa delas em integrações.
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/privacy_settingsConfigurações de privacidade — não suportado (501).
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/set_avatarDefinir foto de perfil — não suportado (501).
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/pin_chatFixar conversa — não suportado (501).
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/archive_chatArquivar conversa — não suportado (501).
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/set_disappearing_timerTimer de mensagens temporárias — não suportado (501).
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/participant_requestsListar solicitações de entrada em grupo — não suportado (501).
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/approve_participant_requestsAprovar solicitações de entrada — não suportado (501).
/api/v1/accounts/{account_id}/noovi_connect/{inbox_id}/reject_participant_requestsRejeitar solicitações de entrada — não suportado (501).
Transmissão para grupos
Para disparar para grupos, crie um broadcast com source_type: "whatsapp_group" e broadcast_targets (ver API de Disparos):
{
"broadcast": {
"name": "Aviso grupos",
"source_type": "whatsapp_group",
"inbox_ids": [123],
"broadcast_targets": [
{ "target_kind": "group", "provider_jid": "12345@g.us", "metadata": { "name": "Meu Grupo" } }
],
"message_payload": { "messages": [{ "type": "text", "content": "Olá!" }] }
}
}