Lumipat sa pangunahing nilalaman

Mga Endpoint ng Pagmemensahe

Ang module ng Pagmemensahe ay namamahala sa real-time na mga pag-uusap, mga mensaheng chat, mga push notification, SMS/email delivery, WebSocket connections, private messaging, device registration, at texting providers. Nag-aalok ito ng communication layer na ginagamit sa lahat ng mga aplikasyon ng ChurchApps para sa live streaming chat at asynchronous na mga notification.

Base path: /messaging

Mga Pag-uusap​

Base path: /messaging/conversations

MethodPathAuthPermissionDescription
GET/timeline/ids?ids=JWT—Mag-load ng mga pag-uusap ayon sa comma-separated IDs na may unang/huling mga mensahe
GET/messages/:contentType/:contentIdJWT—Mag-load ng mga pag-uusap para sa nilalaman na may paginated messages (?page=&limit=)
GET/postsJWT—Kunin ang mga pag-uusap ng uri ng post para sa mga grupo ng kasalukuyang gumagamit
GET/posts/group/:groupIdJWT—Kunin ang mga pag-uusap ng uri ng post para sa isang partikular na grupo
GET/current/:churchId/:contentType/:contentIdPublic—Kunin o lumikha ang kasalukuyang pag-uusap para sa nilalaman (auto-decrypts contentId)
GET/:churchId/:contentType/:contentIdPublic—Mag-load ng mga pag-uusap ayon sa uri ng nilalaman at ID
GET/:churchId/:idPublic—Mag-load ng isang pag-uusap ayon sa ID
POST/JWT—Lumikha o i-update ang mga pag-uusap (batch)
POST/startJWT—Magsimula ng isang bagong pag-uusap na may paunang mensaheng komento
DELETE/:churchId/:idJWT—Tanggalin ang isang pag-uusap

Kontrol sa access ng mga tala ng tao​

Ang mga pag-uusap na may contentType: "person" (ang tab ng Mga Tala sa isang record ng tao) o contentType: "personConfidential" (ang seksyon ng Mga Kumpidensyal na Tala) ay naka-gate sa bawat landas ng basahin at isulat, kasama ang mga pang-publiko na ruta sa itaas, na nagbabalik ng 401 para sa mga uri ng nilalaman na ito. Ang person ay nangangailangan ng MembershipApi Mga Tao / I-edit na pahintulot; personConfidential ay nangangailangan ng Mga Tao / Tingnan ang Mga Kumpidensyal na Tala. Para sa mga key ng scoped API, ang people:write ay may kasamang parehong aksyon (ang user ng susi ay dapat pa ring manatili sa pinagbabatayan na pahintulot ng papel).

Halimbawa: Magsimula ng Pag-uusap​

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

Mga Mensahe​

Base path: /messaging/messages

MethodPathAuthPermissionDescription
GET/conversation/:conversationIdJWT—Mag-load ng lahat ng mensahe para sa isang pag-uusap
GET/catchup/:churchId/:conversationIdPublic—Mag-load ng lahat ng mensahe para sa isang pag-uusap (pampublikong catchup para sa live chat)
GET/:churchId/:idPublic—Mag-load ng isang mensahe ayon sa ID
POST/JWT—Mag-save ng mga mensahe (batch). Nagpadala ng real-time updates at nag-trigger ng mga notification
POST/sendPublic—Magpadala ng mga mensahe (batch, pampubliko). Nagpadala ng real-time updates sa pamamagitan ng WebSocket at nag-trigger ng mga notification
POST/setCalloutJWT—(legacy) Maglunsad ng callout message sa real time. Walang active client; ang live stream chat ay hindi na gumagana ng mga callout
DELETE/:churchId/:idJWT—Tanggalin ang isang mensahe at i-broadcast ang pagbabago sa real time

Halimbawa: Magpadala ng Mensahe​

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

Mga Pribadong Mensahe​

Base path: /messaging/privatemessages

MethodPathAuthPermissionDescription
GET/JWT—Mag-load ng lahat ng mga pribadong mensahe para sa kasalukuyang gumagamit (kasama ang huling mensahe bawat pag-uusap, minarkahan ang lahat bilang basahin)
GET/existing/:personIdJWT—Maghanap ng isang umiiral na pribadong pag-uusap na may isang partikular na tao
GET/:idJWT—Mag-load ng isang pribadong mensahe ayon sa ID (nag-clear ng notification kung natugunan sa kasalukuyang gumagamit)
POST/JWT—Magpadala ng mga pribadong mensahe (batch). Nag-trigger ng push notification sa tumatanggap

Mga Notification​

Base path: /messaging/notifications

MethodPathAuthPermissionDescription
GET/unreadCountJWT—Kunin ang bilang ng hindi nabasang notification para sa kasalukuyang gumagamit
GET/myJWT—Mag-load ng lahat ng notification para sa kasalukuyang gumagamit (minarkahan ang lahat bilang basahin)
GET/tmpEmailPublic—I-trigger ang pang-araw-araw na email notification digest (debug/cron endpoint)
GET/:churchId/person/:personIdJWT—Mag-load ng mga notification para sa isang partikular na tao
GET/:churchId/:idJWT—Mag-load ng isang notification ayon sa ID
POST/JWT—Lumikha o i-update ang mga notification (batch)
POST/createJWT—Lumikha ng mga notification para sa maraming tao. Body: { peopleIds, contentType, contentId, message, link }
POST/markRead/:churchId/:personIdJWT—Markahan ang lahat ng notification bilang basahin para sa isang tao
POST/sendTestJWT—Magpadala ng isang pagsubok ng push notification. Body: { personId, title }
POST/pingPublic—Lumikha ng isang notification mula sa isang panlabas na trigger. Body: { personId, churchId, contentType, contentId, message, triggeredByPersonId }
DELETE/:churchId/:idJWT—Tanggalin ang isang notification

Halimbawa: Lumikha ng Mga Notification​

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

Mga Kagustuhan ng Notification​

Base path: /messaging/notificationpreferences

Pinalawak ang standard na CRUD. Ang base class ay nagbibigay ng POST / (lumikha o i-update, walang kinakailangang pahintulot).

MethodPathAuthPermissionDescription
POST/JWT—Lumikha o i-update ang mga kagustuhan ng notification (mula sa base class ng CRUD)
GET/myJWT—Mag-load ng mga kagustuhan ng notification para sa kasalukuyang gumagamit (auto-lumilikha ng mga default kung walang umiiral)

Mga Koneksyon​

Base path: /messaging/connections

Namamahala sa WebSocket/real-time na mga koneksyon para sa chat, mga pag-uusap ng grupo, mga pribadong mensahe, at live streaming. Tingnan ang Real-time Architecture para sa end-to-end protocol.

MethodPathAuthPermissionDescription
GET/:churchId/:conversationIdPublic—Mag-load ng lahat ng mga koneksyon para sa isang pag-uusap
POST/Public—Mag-register ng mga koneksyon (batch). Nag-trigger ng attendance broadcast sa pag-uusap. Body items: { churchId, conversationId, socketId, displayName?, personId? }
POST/setNamePublic—I-update ang pangalan ng display para sa isang koneksyon ayon sa socket ID. Body: { socketId, name }
DELETE/:churchId/:conversationId/:socketIdPublic—Ihulog ang isang koneksyon mula sa isang pag-uusap. Nag-trigger ng attendance broadcast
POST/tmpSendAlertPublic—Magpadala ng isang notification alert sa mga koneksyon ng isang tao. Body: { churchId, personId }

Mga Device​

Base path: /messaging/devices

Namamahala sa device registration para sa mga push notification at content pairing (hal., Lessons app sa TV displays).

MethodPathAuthPermissionDescription
POST/enrollJWT—I-enroll o i-update ang isang device (mobile push registration). Tumutugma ayon sa FCM token o device ID
POST/enrollAnonPublic—I-enroll ang isang anonymous device at lumikha ng 4-character pairing code
POST/Public—Mag-save ng mga device (batch)
GET/pair/:pairingCodeJWT—I-pair ang isang device gamit ang pairing code nito. Optional ?contentType=&contentId= upang magtalag ng nilalaman
GET/status/:deviceIdPublic—Suriin ang pairing status ng isang device
GET/:churchIdJWT—Mag-load ng lahat ng mga device para sa isang simbahan
GET/:churchId/person/:personIdJWT—Mag-load ng lahat ng mga device para sa isang tao
GET/:churchId/:idJWT—Mag-load ng isang device ayon sa ID
DELETE/:churchId/:idJWT—Tanggalin ang isang device

Halimbawa: I-enroll ang isang 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"
}

Mga Nilalaman ng Device​

Base path: /messaging/devicecontents

Namamahala sa mga pagtatalaga ng nilalaman para sa mga paired device (hal., aling aralin ang ipinapakita sa TV).

MethodPathAuthPermissionDescription
GET/deviceId/:deviceIdJWT—Mag-load ng mga pagtatalaga ng nilalaman para sa isang device
POST/JWT—Mag-save ng mga pagtatalaga ng nilalaman ng device (batch)
DELETE/:idJWT—Tanggalin ang isang pagtatalaga ng nilalaman ng device

Texting​

Base path: /messaging/texting

Namamahala sa SMS texting providers, group text messaging, at delivery tracking.

MethodPathAuthPermissionDescription
GET/providersJWT—Mag-load ng mga texting provider para sa simbahan (ang mga credentials ay nakabalot)
GET/preview/:groupIdJWT—I-preview ang mga tumatanggap para sa isang group text (eligible, opted-out, walang phone counts)
GET/sentJWT—Mag-load ng lahat ng napadaling record ng text message para sa simbahan
GET/sent/:id/detailsJWT—Mag-load ng isang napadaling text na may bawat tumatanggap na delivery logs
POST/providersJWT—Mag-save ng mga texting provider (batch). Nag-encrypt ng mga credentials ng API
POST/sendJWT—Magpadala ng isang SMS sa lahat ng eligible na miyembro ng isang grupo. Body: { groupId, message }
POST/sendPersonJWT—Magpadala ng isang SMS sa isang tao. Body: { personId, phoneNumber, message }
DELETE/providers/:idJWT—Tanggalin ang isang texting provider

Halimbawa: Magpadala ng Text ng 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
}

Mga Template ng Email​

Base path: /messaging/emailTemplates

Namamahala sa mga mabagong template ng email at pagpadala ng mga template email sa mga grupo.

MethodPathAuthPermissionDescription
GET/JWT—Mag-load ng lahat ng mga template ng email para sa simbahan
GET/:idJWT—Mag-load ng isang template ng email ayon sa ID
GET/preview/:groupIdJWT—I-preview ang email delivery para sa isang grupo (eligible recipient count, mga miyembro na walang email)
POST/JWT—Lumikha o i-update ang mga template ng email (batch)
POST/sendJWT—Magpadala ng isang template email sa lahat ng miyembro ng isang grupo. Body: { groupId, subject, htmlContent }
DELETE/:idJWT—Tanggalin ang isang template ng email

Halimbawa: Magpadala ng Email sa 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
}

Suportadong mga merge field: {{firstName}}, {{lastName}}, {{displayName}}, {{email}}, {{churchName}}

Mga Blocked na IP​

Base path: /messaging/blockedips

(legacy) IP-blocking para sa live streaming chat. Ang B1App client ay hindi na tumatawag sa POST / -- ang IP blocking ay inalis sa unified-delivery migration. Ang /clear route ay patuloy na tinatawag server-to-server ng StreamingServiceController kapag ang mga streaming services ay naka-save.

MethodPathAuthPermissionDescription
POST/JWT—(legacy) Mag-save ng mga blocked IP (batch). Walang active client
POST/clearJWT—I-clear ang lahat ng mga blocked IP para sa mga partikular na serbisyo. Body: [{ serviceId, churchId }]

Mga Delivery Logs​

Base path: /messaging/deliverylogs

Sinusubaybayan ang delivery status para sa mga napadaling mensahe (SMS, push notification, email).

MethodPathAuthPermissionDescription
GET/content/:contentType/:contentIdJWT—Mag-load ng mga delivery logs ayon sa uri ng nilalaman at ID
GET/person/:personIdJWT—Mag-load ng mga delivery logs para sa isang tao. Optional ?startDate=&endDate= filters
GET/recentJWT—Mag-load ng mga kamakailang delivery logs para sa simbahan. Optional ?limit= (default 100)
GET/:idJWT—Mag-load ng isang delivery log ayon sa ID

Mga Kaugnay na Pahina​