Pular para o conteúdo principal

Endpoints de Mensagens

O módulo de Mensagens gerencia conversas em tempo real, mensagens de chat, notificações push, entrega de SMS/email, conexões WebSocket, mensagens privadas, registro de dispositivo e provedores de envio de mensagens. Fornece a camada de comunicação usada em todos os aplicativos ChurchApps para chat de transmissão ao vivo e notificações assíncronas.

Caminho base: /messaging

Conversas

Caminho base: /messaging/conversations

MétodoCaminhoAuthPermissãoDescrição
GET/timeline/ids?ids=JWTCarregue conversas por IDs separados por vírgula com primeira/última mensagem
GET/messages/:contentType/:contentIdJWTCarregue conversas para conteúdo com mensagens paginadas (?page=&limit=)
GET/postsJWTObtenha conversas do tipo post para os grupos do usuário atual
GET/posts/group/:groupIdJWTObtenha conversas do tipo post para um grupo específico
GET/current/:churchId/:contentType/:contentIdPúblicoObtenha ou crie a conversa atual para conteúdo (descriptografa automaticamente contentId)
GET/:churchId/:contentType/:contentIdPúblicoCarregue conversas por tipo de conteúdo e ID
GET/:churchId/:idPúblicoCarregue uma única conversa por ID
POST/JWTCrie ou atualize conversas (lote)
POST/startJWTInicie uma nova conversa com uma mensagem de comentário inicial
DELETE/:churchId/:idJWTDeletar uma conversa

Controle de acesso de notas de pessoa

Conversas com contentType: "person" (aba Notas em um registro de pessoa) ou contentType: "personConfidential" (seção de Notas Confidenciais) são barradas em cada caminho de leitura e escrita, incluindo as rotas públicas acima, que retornam 401 para esses tipos de conteúdo. person requer a permissão Pessoas / Editar da MembershipApi; personConfidential requer Pessoas / Visualizar Notas Confidenciais. Para chaves de API escopo, people:write carrega ambas as ações (o usuário da chave ainda deve manter a permissão de função subjacente).

Exemplo: Iniciar uma Conversa

POST /messaging/conversations/start
Authorization: Bearer <token>

{
"groupId": "group-123",
"contentType": "group",
"contentId": "group-123",
"title": "Weekly Discussion",
"comment": "Welcome to this week's discussion thread!"
}
{
"id": "conv-456",
"churchId": "church-789",
"contentType": "group",
"contentId": "group-123",
"title": "Weekly Discussion",
"dateCreated": "2026-02-17T10:00:00.000Z",
"visibility": "public",
"allowAnonymousPosts": false,
"groupId": "group-123"
}

Mensagens

Caminho base: /messaging/messages

MétodoCaminhoAuthPermissãoDescrição
GET/conversation/:conversationIdJWTCarregue todas as mensagens de uma conversa
GET/catchup/:churchId/:conversationIdPúblicoCarregue todas as mensagens de uma conversa (catchup público para chat ao vivo)
GET/:churchId/:idPúblicoCarregue uma única mensagem por ID
POST/JWTSalve mensagens (lote). Envia atualizações em tempo real e dispara notificações
POST/sendPúblicoEnvie mensagens (lote, público). Envia atualizações em tempo real via WebSocket e dispara notificações
POST/setCalloutJWT(legado) Transmita uma mensagem de chamada em tempo real. Sem cliente ativo; chat de transmissão ao vivo não renderiza mais chamadas
DELETE/:churchId/:idJWTDeletar uma mensagem e transmitir a exclusão em tempo real

Exemplo: Enviar uma Mensagem

POST /messaging/messages/send

[
{
"churchId": "church-789",
"conversationId": "conv-456",
"personId": "person-123",
"displayName": "John Smith",
"content": "Hello everyone!",
"messageType": "comment"
}
]
[
{
"id": "msg-001",
"churchId": "church-789",
"conversationId": "conv-456",
"personId": "person-123",
"displayName": "John Smith",
"timeSent": "2026-02-17T10:05:00.000Z",
"content": "Hello everyone!",
"messageType": "comment"
}
]

Mensagens Privadas

Caminho base: /messaging/privatemessages

MétodoCaminhoAuthPermissãoDescrição
GET/JWTCarregue todas as mensagens privadas do usuário atual (inclui última mensagem por conversa, marca todas como lidas)
GET/existing/:personIdJWTEncontre uma conversa privada existente com uma pessoa específica
GET/:idJWTCarregue uma mensagem privada por ID (limpa notificação se dirigida ao usuário atual)
POST/JWTEnvie mensagens privadas (lote). Dispara notificação push para o destinatário

Notificações

Caminho base: /messaging/notifications

MétodoCaminhoAuthPermissãoDescrição
GET/unreadCountJWTObtenha contagem de notificação não lida para o usuário atual
GET/myJWTCarregue todas as notificações do usuário atual (marca todas como lidas)
GET/tmpEmailPúblicoDispare resumo de email de notificação diária (endpoint de depuração/cron)
GET/:churchId/person/:personIdJWTCarregue notificações para uma pessoa específica
GET/:churchId/:idJWTCarregue uma notificação por ID
POST/JWTCrie ou atualize notificações (lote)
POST/createJWTCrie notificações para várias pessoas. Corpo: { peopleIds, contentType, contentId, message, link }
POST/markRead/:churchId/:personIdJWTMarque todas as notificações como lidas para uma pessoa
POST/sendTestJWTEnvie uma notificação push de teste. Corpo: { personId, title }
POST/pingPúblicoCrie uma notificação a partir de um gatilho externo. Corpo: { personId, churchId, contentType, contentId, message, triggeredByPersonId }
DELETE/:churchId/:idJWTDeletar uma notificação

Exemplo: Criar Notificações

POST /messaging/notifications/create
Authorization: Bearer <token>

{
"peopleIds": ["person-123", "person-456"],
"contentType": "group",
"contentId": "group-789",
"message": "New event posted in your group",
"link": "/groups/group-789"
}

Preferências de Notificação

Caminho base: /messaging/notificationpreferences

Estende CRUD padrão. A classe base fornece POST / (criar ou atualizar, sem permissão necessária).

MétodoCaminhoAuthPermissãoDescrição
POST/JWTCrie ou atualize preferências de notificação (da classe base CRUD)
GET/myJWTCarregue preferências de notificação do usuário atual (cria padrões automaticamente se nenhum existir)

Conexões

Caminho base: /messaging/connections

Gerencia conexões WebSocket/tempo real para chat, conversas em grupo, mensagens privadas e transmissão ao vivo. Consulte Arquitetura de Tempo Real para o protocolo end-to-end.

MétodoCaminhoAuthPermissãoDescrição
GET/:churchId/:conversationIdPúblicoCarregue todas as conexões de uma conversa
POST/PúblicoRegistre conexões (lote). Dispara uma transmissão de atendimento na conversa. Itens do corpo: { churchId, conversationId, socketId, displayName?, personId? }
POST/setNamePúblicoAtualize o nome de exibição de uma conexão por ID de socket. Corpo: { socketId, name }
DELETE/:churchId/:conversationId/:socketIdPúblicoSolte uma conexão de uma conversa. Dispara uma transmissão de atendimento
POST/tmpSendAlertPúblicoEnvie um alerta de notificação para as conexões de uma pessoa. Corpo: { churchId, personId }

Dispositivos

Caminho base: /messaging/devices

Gerencia registro de dispositivo para notificações push e emparelhamento de conteúdo (ex: aplicativo Lessons em displays de TV).

MétodoCaminhoAuthPermissãoDescrição
POST/enrollJWTInscreva ou atualize um dispositivo (registro de push móvel). Corresponde por token FCM ou ID de dispositivo
POST/enrollAnonPúblicoInscreva um dispositivo anônimo e gere um código de emparelhamento de 4 caracteres
POST/PúblicoSalve dispositivos (lote)
GET/pair/:pairingCodeJWTEmparelhe um dispositivo usando seu código de emparelhamento. Opcional ?contentType=&contentId= para atribuir conteúdo
GET/status/:deviceIdPúblicoVerifique status de emparelhamento de um dispositivo
GET/:churchIdJWTCarregue todos os dispositivos de uma igreja
GET/:churchId/person/:personIdJWTCarregue todos os dispositivos de uma pessoa
GET/:churchId/:idJWTCarregue um dispositivo por ID
DELETE/:churchId/:idJWTDeletar um dispositivo

Exemplo: Inscrever um Dispositivo

POST /messaging/devices/enroll
Authorization: Bearer <token>

{
"fcmToken": "firebase-token-abc123",
"appName": "B1Mobile",
"label": "John's iPhone",
"deviceInfo": "iOS 17, iPhone 15"
}
{
"id": "device-001",
"churchId": "church-789",
"fcmToken": "firebase-token-abc123",
"appName": "B1Mobile",
"label": "John's iPhone",
"registrationDate": "2026-02-17T10:00:00.000Z",
"lastActiveDate": "2026-02-17T10:00:00.000Z"
}

Conteúdos de Dispositivo

Caminho base: /messaging/devicecontents

Gerencia atribuições de conteúdo para dispositivos emparelhados (ex: qual lição é exibida em uma TV).

MétodoCaminhoAuthPermissãoDescrição
GET/deviceId/:deviceIdJWTCarregue atribuições de conteúdo de um dispositivo
POST/JWTSalve atribuições de conteúdo de dispositivo (lote)
DELETE/:idJWTDeletar uma atribuição de conteúdo de dispositivo

Envio de Mensagens

Caminho base: /messaging/texting

Gerencia provedores de SMS de envio de mensagens, mensagens de texto em grupo e rastreamento de entrega.

MétodoCaminhoAuthPermissãoDescrição
GET/providersJWTCarregue provedores de envio de mensagens da igreja (credenciais são mascaradas)
GET/preview/:groupIdJWTVisualize destinatários para um texto em grupo (contagem elegível, optada, sem telefone)
GET/sentJWTCarregue todos os registros de mensagem de texto enviados da igreja
GET/sent/:id/detailsJWTCarregue um texto enviado com logs de entrega por destinatário
POST/providersJWTSalve provedores de envio de mensagens (lote). Criptografa credenciais de API
POST/sendJWTEnvie um SMS para todos os membros elegíveis de um grupo. Corpo: { groupId, message }
POST/sendPersonJWTEnvie um SMS para uma pessoa individual. Corpo: { personId, phoneNumber, message }
DELETE/providers/:idJWTDeletar um provedor de envio de mensagens

Exemplo: Enviar Texto em Grupo

POST /messaging/texting/send
Authorization: Bearer <token>

{
"groupId": "group-123",
"message": "Reminder: Service starts at 10 AM this Sunday!"
}
{
"totalMembers": 50,
"recipientCount": 42,
"successCount": 40,
"failCount": 2,
"optedOutCount": 5,
"noPhoneCount": 3
}

Modelos de Email

Caminho base: /messaging/emailTemplates

Gerencia modelos de email reutilizáveis e envio de emails com modelo para grupos.

MétodoCaminhoAuthPermissãoDescrição
GET/JWTCarregue todos os modelos de email da igreja
GET/:idJWTCarregue um único modelo de email por ID
GET/preview/:groupIdJWTVisualize entrega de email para um grupo (contagem de destinatário elegível, membros sem email)
POST/JWTCrie ou atualize modelos de email (lote)
POST/sendJWTEnvie um email com modelo para todos os membros de um grupo. Corpo: { groupId, subject, htmlContent }
DELETE/:idJWTDeletar um modelo de email

Exemplo: Enviar Email para Grupo

POST /messaging/emailTemplates/send
Authorization: Bearer <token>

{
"groupId": "group-123",
"subject": "This Week's Update - {{churchName}}",
"htmlContent": "<p>Hello {{firstName}},</p><p>Here's what's happening this week...</p>"
}
{
"totalMembers": 50,
"recipientCount": 45,
"successCount": 44,
"failCount": 1,
"noEmailCount": 5
}

Campos de mesclagem suportados: {{firstName}}, {{lastName}}, {{displayName}}, {{email}}, {{churchName}}

IPs Bloqueados

Caminho base: /messaging/blockedips

(legado) Bloqueio de IP para chat de transmissão ao vivo. O cliente B1App não chama mais POST / — bloqueio de IP foi removido na migração de entrega unificada. A rota /clear ainda é invocada servidor-a-servidor por StreamingServiceController quando serviços de transmissão são salvos.

MétodoCaminhoAuthPermissãoDescrição
POST/JWT(legado) Salve IPs bloqueados (lote). Nenhum cliente ativo
POST/clearJWTLimpe todos os IPs bloqueados para serviços específicos. Corpo: [{ serviceId, churchId }]

Logs de Entrega

Caminho base: /messaging/deliverylogs

Rastreia status de entrega para mensagens enviadas (SMS, notificações push, email).

MétodoCaminhoAuthPermissãoDescrição
GET/content/:contentType/:contentIdJWTCarregue logs de entrega por tipo de conteúdo e ID
GET/person/:personIdJWTCarregue logs de entrega de uma pessoa. Opcional ?startDate=&endDate= filtros
GET/recentJWTCarregue logs de entrega recentes da igreja. Opcional ?limit= (padrão 100)
GET/:idJWTCarregue um log de entrega por ID

Páginas Relacionadas