Zum Hauptinhalt springen

Messaging Endpoints

The Messaging module manages real-time conversations, chat messages, push notifications, SMS/email delivery, WebSocket connections, private messaging, device registration, and texting providers. It provides the communication layer used across all ChurchApps applications for both live streaming chat and asynchronous notifications.

Base path: /messaging

Conversations

Base path: /messaging/conversations

MethodPathAuthPermissionDescription
GET/timeline/ids?ids=JWTLoad conversations by comma-separated IDs with first/last messages
GET/messages/:contentType/:contentIdJWTLoad conversations for content with paginated messages (?page=&limit=)
GET/postsJWTGet post-type conversations for the current user's groups
GET/posts/group/:groupIdJWTGet post-type conversations for a specific group
GET/current/:churchId/:contentType/:contentIdPublicGet or create the current conversation for content (auto-decrypts contentId)
GET/:churchId/:contentType/:contentIdPublicLoad conversations by content type and ID
GET/:churchId/:idPublicLoad a single conversation by ID
POST/JWTCreate or update conversations (batch)
POST/startJWTStart a new conversation with an initial comment message
DELETE/:churchId/:idJWTDelete a conversation

Example: Start a Conversation

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"
}

Messages

Base path: /messaging/messages

MethodPathAuthPermissionDescription
GET/conversation/:conversationIdJWTLoad all messages for a conversation
GET/catchup/:churchId/:conversationIdPublicLoad all messages for a conversation (public catchup for live chat)
GET/:churchId/:idPublicLoad a single message by ID
POST/JWTSave messages (batch). Sends real-time updates and triggers notifications
POST/sendPublicSend messages (batch, public). Sends real-time updates via WebSocket and triggers notifications
POST/setCalloutJWTBroadcast a callout message to a conversation in real time
DELETE/:churchId/:idJWTDelete a message and broadcast the deletion in real time

Example: Send a Message

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"
}
]

Private Messages

Base path: /messaging/privatemessages

MethodPathAuthPermissionDescription
GET/JWTLoad all private messages for the current user (includes last message per conversation, marks all as read)
GET/existing/:personIdJWTFind an existing private conversation with a specific person
GET/:idJWTLoad a private message by ID (clears notification if addressed to current user)
POST/JWTSend private messages (batch). Triggers push notification to recipient

Notifications

Base path: /messaging/notifications

MethodPathAuthPermissionDescription
GET/unreadCountJWTGet unread notification count for the current user
GET/myJWTLoad all notifications for the current user (marks all as read)
GET/tmpEmailPublicTrigger daily email notification digest (debug/cron endpoint)
GET/:churchId/person/:personIdJWTLoad notifications for a specific person
GET/:churchId/:idJWTLoad a notification by ID
POST/JWTCreate or update notifications (batch)
POST/createJWTCreate notifications for multiple people. Body: { peopleIds, contentType, contentId, message, link }
POST/markRead/:churchId/:personIdJWTMark all notifications as read for a person
POST/sendTestJWTSend a test push notification. Body: { personId, title }
POST/pingPublicCreate a notification from an external trigger. Body: { personId, churchId, contentType, contentId, message, triggeredByPersonId }
DELETE/:churchId/:idJWTDelete a notification

Example: Create Notifications

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"
}

Notification Preferences

Base path: /messaging/notificationpreferences

Extends standard CRUD. The base class provides POST / (create or update, no permission required).

MethodPathAuthPermissionDescription
POST/JWTCreate or update notification preferences (from CRUD base class)
GET/myJWTLoad notification preferences for the current user (auto-creates defaults if none exist)

Connections

Base path: /messaging/connections

Manages WebSocket/real-time connections for live streaming chat.

MethodPathAuthPermissionDescription
GET/:churchId/:conversationIdPublicLoad all connections for a conversation
POST/PublicRegister connections (batch). Auto-numbers anonymous users and sends attendance/blocked IP updates
POST/setNamePublicUpdate the display name for a connection by socket ID. Body: { socketId, name }
POST/tmpSendAlertPublicSend a notification alert to a person's connections. Body: { churchId, personId }

Devices

Base path: /messaging/devices

Manages device registration for push notifications and content pairing (e.g., Lessons app on TV displays).

MethodPathAuthPermissionDescription
POST/enrollJWTEnroll or update a device (mobile push registration). Matches by FCM token or device ID
POST/enrollAnonPublicEnroll an anonymous device and generate a 4-character pairing code
POST/PublicSave devices (batch)
GET/pair/:pairingCodeJWTPair a device using its pairing code. Optional ?contentType=&contentId= to assign content
GET/status/:deviceIdPublicCheck pairing status of a device
GET/:churchIdJWTLoad all devices for a church
GET/:churchId/person/:personIdJWTLoad all devices for a person
GET/:churchId/:idJWTLoad a device by ID
DELETE/:churchId/:idJWTDelete a device

Example: Enroll a Device

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"
}

Device Contents

Base path: /messaging/devicecontents

Manages content assignments for paired devices (e.g., which lesson is displayed on a TV).

MethodPathAuthPermissionDescription
GET/deviceId/:deviceIdJWTLoad content assignments for a device
POST/JWTSave device content assignments (batch)
DELETE/:idJWTDelete a device content assignment

Texting

Base path: /messaging/texting

Manages SMS texting providers, group text messaging, and delivery tracking.

MethodPathAuthPermissionDescription
GET/providersJWTLoad texting providers for the church (credentials are masked)
GET/preview/:groupIdJWTPreview recipients for a group text (eligible, opted-out, no-phone counts)
GET/sentJWTLoad all sent text message records for the church
GET/sent/:id/detailsJWTLoad a sent text with per-recipient delivery logs
POST/providersJWTSave texting providers (batch). Encrypts API credentials
POST/sendJWTSend an SMS to all eligible members of a group. Body: { groupId, message }
POST/sendPersonJWTSend an SMS to a single person. Body: { personId, phoneNumber, message }
DELETE/providers/:idJWTDelete a texting provider

Example: Send Group Text

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
}

Blocked IPs

Base path: /messaging/blockedips

Manages IP blocking for live streaming chat conversations.

MethodPathAuthPermissionDescription
POST/JWTSave blocked IPs (batch). Broadcasts updated block list to the conversation
POST/clearJWTClear all blocked IPs for specific services. Body: [{ serviceId, churchId }]

Delivery Logs

Base path: /messaging/deliverylogs

Tracks delivery status for sent messages (SMS, push notifications, email).

MethodPathAuthPermissionDescription
GET/content/:contentType/:contentIdJWTLoad delivery logs by content type and ID
GET/person/:personIdJWTLoad delivery logs for a person. Optional ?startDate=&endDate= filters
GET/recentJWTLoad recent delivery logs for the church. Optional ?limit= (default 100)
GET/:idJWTLoad a delivery log by ID