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=JWTMag-load ng mga pag-uusap ayon sa comma-separated IDs na may unang/huling mga mensahe
GET/messages/:contentType/:contentIdJWTMag-load ng mga pag-uusap para sa nilalaman na may paginated messages (?page=&limit=)
GET/postsJWTKunin ang mga pag-uusap ng uri ng post para sa mga grupo ng kasalukuyang gumagamit
GET/posts/group/:groupIdJWTKunin ang mga pag-uusap ng uri ng post para sa isang partikular na grupo
GET/current/:churchId/:contentType/:contentIdPublicKunin o lumikha ang kasalukuyang pag-uusap para sa nilalaman (auto-decrypts contentId)
GET/:churchId/:contentType/:contentIdPublicMag-load ng mga pag-uusap ayon sa uri ng nilalaman at ID
GET/:churchId/:idPublicMag-load ng isang pag-uusap ayon sa ID
POST/JWTLumikha o i-update ang mga pag-uusap (batch)
POST/startJWTMagsimula ng isang bagong pag-uusap na may paunang mensaheng komento
DELETE/:churchId/:idJWTTanggalin 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/:conversationIdJWTMag-load ng lahat ng mensahe para sa isang pag-uusap
GET/catchup/:churchId/:conversationIdPublicMag-load ng lahat ng mensahe para sa isang pag-uusap (pampublikong catchup para sa live chat)
GET/:churchId/:idPublicMag-load ng isang mensahe ayon sa ID
POST/JWTMag-save ng mga mensahe (batch). Nagpadala ng real-time updates at nag-trigger ng mga notification
POST/sendPublicMagpadala 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/:idJWTTanggalin 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/JWTMag-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/:personIdJWTMaghanap ng isang umiiral na pribadong pag-uusap na may isang partikular na tao
GET/:idJWTMag-load ng isang pribadong mensahe ayon sa ID (nag-clear ng notification kung natugunan sa kasalukuyang gumagamit)
POST/JWTMagpadala ng mga pribadong mensahe (batch). Nag-trigger ng push notification sa tumatanggap

Mga Notification

Base path: /messaging/notifications

MethodPathAuthPermissionDescription
GET/unreadCountJWTKunin ang bilang ng hindi nabasang notification para sa kasalukuyang gumagamit
GET/myJWTMag-load ng lahat ng notification para sa kasalukuyang gumagamit (minarkahan ang lahat bilang basahin)
GET/tmpEmailPublicI-trigger ang pang-araw-araw na email notification digest (debug/cron endpoint)
GET/:churchId/person/:personIdJWTMag-load ng mga notification para sa isang partikular na tao
GET/:churchId/:idJWTMag-load ng isang notification ayon sa ID
POST/JWTLumikha o i-update ang mga notification (batch)
POST/createJWTLumikha ng mga notification para sa maraming tao. Body: { peopleIds, contentType, contentId, message, link }
POST/markRead/:churchId/:personIdJWTMarkahan ang lahat ng notification bilang basahin para sa isang tao
POST/sendTestJWTMagpadala ng isang pagsubok ng push notification. Body: { personId, title }
POST/pingPublicLumikha ng isang notification mula sa isang panlabas na trigger. Body: { personId, churchId, contentType, contentId, message, triggeredByPersonId }
DELETE/:churchId/:idJWTTanggalin 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/JWTLumikha o i-update ang mga kagustuhan ng notification (mula sa base class ng CRUD)
GET/myJWTMag-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/:conversationIdPublicMag-load ng lahat ng mga koneksyon para sa isang pag-uusap
POST/PublicMag-register ng mga koneksyon (batch). Nag-trigger ng attendance broadcast sa pag-uusap. Body items: { churchId, conversationId, socketId, displayName?, personId? }
POST/setNamePublicI-update ang pangalan ng display para sa isang koneksyon ayon sa socket ID. Body: { socketId, name }
DELETE/:churchId/:conversationId/:socketIdPublicIhulog ang isang koneksyon mula sa isang pag-uusap. Nag-trigger ng attendance broadcast
POST/tmpSendAlertPublicMagpadala 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/enrollJWTI-enroll o i-update ang isang device (mobile push registration). Tumutugma ayon sa FCM token o device ID
POST/enrollAnonPublicI-enroll ang isang anonymous device at lumikha ng 4-character pairing code
POST/PublicMag-save ng mga device (batch)
GET/pair/:pairingCodeJWTI-pair ang isang device gamit ang pairing code nito. Optional ?contentType=&contentId= upang magtalag ng nilalaman
GET/status/:deviceIdPublicSuriin ang pairing status ng isang device
GET/:churchIdJWTMag-load ng lahat ng mga device para sa isang simbahan
GET/:churchId/person/:personIdJWTMag-load ng lahat ng mga device para sa isang tao
GET/:churchId/:idJWTMag-load ng isang device ayon sa ID
DELETE/:churchId/:idJWTTanggalin 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/:deviceIdJWTMag-load ng mga pagtatalaga ng nilalaman para sa isang device
POST/JWTMag-save ng mga pagtatalaga ng nilalaman ng device (batch)
DELETE/:idJWTTanggalin 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/providersJWTMag-load ng mga texting provider para sa simbahan (ang mga credentials ay nakabalot)
GET/preview/:groupIdJWTI-preview ang mga tumatanggap para sa isang group text (eligible, opted-out, walang phone counts)
GET/sentJWTMag-load ng lahat ng napadaling record ng text message para sa simbahan
GET/sent/:id/detailsJWTMag-load ng isang napadaling text na may bawat tumatanggap na delivery logs
POST/providersJWTMag-save ng mga texting provider (batch). Nag-encrypt ng mga credentials ng API
POST/sendJWTMagpadala ng isang SMS sa lahat ng eligible na miyembro ng isang grupo. Body: { groupId, message }
POST/sendPersonJWTMagpadala ng isang SMS sa isang tao. Body: { personId, phoneNumber, message }
DELETE/providers/:idJWTTanggalin 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/JWTMag-load ng lahat ng mga template ng email para sa simbahan
GET/:idJWTMag-load ng isang template ng email ayon sa ID
GET/preview/:groupIdJWTI-preview ang email delivery para sa isang grupo (eligible recipient count, mga miyembro na walang email)
POST/JWTLumikha o i-update ang mga template ng email (batch)
POST/sendJWTMagpadala ng isang template email sa lahat ng miyembro ng isang grupo. Body: { groupId, subject, htmlContent }
DELETE/:idJWTTanggalin 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/clearJWTI-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/:contentIdJWTMag-load ng mga delivery logs ayon sa uri ng nilalaman at ID
GET/person/:personIdJWTMag-load ng mga delivery logs para sa isang tao. Optional ?startDate=&endDate= filters
GET/recentJWTMag-load ng mga kamakailang delivery logs para sa simbahan. Optional ?limit= (default 100)
GET/:idJWTMag-load ng isang delivery log ayon sa ID

Mga Kaugnay na Pahina