Hopp til hovedinnhold

Meldingsendepunkter

Meldingsmodulen administrerer sanntidssamtaler, chatkjedter, push-meldinger, SMS/e-postlevering, WebSocket-tilkoblinger, private meldinger, enhetsregistrering og tekstingsleverandører. Det gir kommunikasjonslaget som brukes på tvers av alle ChurchApps-programmer for både live streaming chat og asynkrone meldinger.

Basisbane: /messaging

Samtaler

Basisbane: /messaging/conversations

MetodeBaneGodkjennelseTillatelseBeskrivelse
GET/timeline/ids?ids=JWTLast samtaler etter kommaseparerte IDer med første/siste meldinger
GET/messages/:contentType/:contentIdJWTLast samtaler for innhold med paginerte meldinger (?page=&limit=)
GET/postsJWTFå innlegg-type samtaler for de gjeldende brukergruppenes grupper
GET/posts/group/:groupIdJWTFå innlegg-type samtaler for en spesifikk gruppe
GET/current/:churchId/:contentType/:contentIdOffentligFå eller opprett gjeldende samtale for innhold (auto-dekrypterer contentId)
GET/:churchId/:contentType/:contentIdOffentligLast samtaler etter innholdstype og ID
GET/:churchId/:idOffentligLast en enkelt samtale etter ID
POST/JWTOpprett eller oppdater samtaler (batch)
POST/startJWTStart en ny samtale med en initial kommentarmelding
DELETE/:churchId/:idJWTSlett en samtale

Adgangskontroll for personmerknader

Samtaler med contentType: "person" (Merknader-fanen på en personoppføring) eller contentType: "personConfidential" (Konfidensielle merknader-delen) blir gates på alle les- og skrivebaner, inkludert de offentlige rutene ovenfor, som returnerer 401 for disse innholdstypene. person krever MembershipApi Mennesker / Rediger tillatelse; personConfidential krever Mennesker / Vis konfidensielle merknader. For scoped API-nøkler, people:write transporterer begge handlinger (nøkkelens bruker må fortsatt holde den underliggende rolletillatelsen).

Eksempel: Start en samtale

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

Meldinger

Basisbane: /messaging/messages

MetodeBaneGodkjennelseTillatelseBeskrivelse
GET/conversation/:conversationIdJWTLast alle meldinger for en samtale
GET/catchup/:churchId/:conversationIdOffentligLast alle meldinger for en samtale (offentlig opptak for live chat)
GET/:churchId/:idOffentligLast en enkelt melding etter ID
POST/JWTLagre meldinger (batch). Sender sanntidsoppdateringer og utløser meldinger
POST/sendOffentligSend meldinger (batch, offentlig). Sender sanntidsoppdateringer via WebSocket og utløser meldinger
POST/setCalloutJWT(legacy) Kringkast en kallutmelding i sanntid. Ingen aktiv klient; live streaming chat gir ikke lenger opprop
DELETE/:churchId/:idJWTSlett en melding og kringkast slettingen i sanntid

Eksempel: Send en melding

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 meldinger

Basisbane: /messaging/privatemessages

MetodeBaneGodkjennelseTillatelseBeskrivelse
GET/JWTLast alle private meldinger for gjeldende bruker (inkluderer siste melding per samtale, merker alle som lest)
GET/existing/:personIdJWTFinn en eksisterende privat samtale med en spesifikk person
GET/:idJWTLast en privat melding etter ID (fjerner melding hvis adressert til gjeldende bruker)
POST/JWTSend private meldinger (batch). Utløser push-melding til mottaker

Meldinger

Basisbane: /messaging/notifications

MetodeBaneGodkjennelseTillatelseBeskrivelse
GET/unreadCountJWTFå ulest meldingsantall for gjeldende bruker
GET/myJWTLast alle meldinger for gjeldende bruker (merker alle som lest)
GET/tmpEmailOffentligUtløs daglig e-post-meldingssamling (debug/cron-endepunkt)
GET/:churchId/person/:personIdJWTLast meldinger for en spesifikk person
GET/:churchId/:idJWTLast en melding etter ID
POST/JWTOpprett eller oppdater meldinger (batch)
POST/createJWTOpprett meldinger for flere mennesker. Kropp: { peopleIds, contentType, contentId, message, link }
POST/markRead/:churchId/:personIdJWTMerk alle meldinger som lest for en person
POST/sendTestJWTSend en test-push-melding. Kropp: { personId, title }
POST/pingOffentligOpprett en melding fra en ekstern utløser. Kropp: { personId, churchId, contentType, contentId, message, triggeredByPersonId }
DELETE/:churchId/:idJWTSlett en melding

Eksempel: Opprett meldinger

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

Meldingspreferanser

Basisbane: /messaging/notificationpreferences

Utvider standard CRUD. Baseklassen gir POST / (opprett eller oppdater, ingen tillatelse påkrevd).

MetodeBaneGodkjennelseTillatelseBeskrivelse
POST/JWTOpprett eller oppdater meldingspreferanser (fra CRUD-baseklasse)
GET/myJWTLast meldingspreferanser for gjeldende bruker (auto-oppretter standarder hvis ingen eksisterer)

Tilkoblinger

Basisbane: /messaging/connections

Administrerer WebSocket/sanntidstilkoblinger for chat, gruppsamtaler, private meldinger og live streaming. Se Sanntidsarkitektur for protokollen ende-til-ende.

MetodeBaneGodkjennelseTillatelseBeskrivelse
GET/:churchId/:conversationIdOffentligLast alle tilkoblinger for en samtale
POST/OffentligRegistrer tilkoblinger (batch). Utløser kringkasting av deltagelse på samtalen. Kroppen elementer: { churchId, conversationId, socketId, displayName?, personId? }
POST/setNameOffentligOppdater visningsnavnet for en tilkobling etter socket ID. Kropp: { socketId, name }
DELETE/:churchId/:conversationId/:socketIdOffentligSlipp en tilkobling fra en samtale. Utløser kringkasting av deltagelse
POST/tmpSendAlertOffentligSend en meldingsvarsling til en persons tilkoblinger. Kropp: { churchId, personId }

Enheter

Basisbane: /messaging/devices

Administrerer enhetsregistrering for push-meldinger og innholdspairing (f.eks. Lessons-app på TV-skjermer).

MetodeBaneGodkjennelseTillatelseBeskrivelse
POST/enrollJWTRegistrer eller oppdater en enhet (registrering av mobil push). Samsvarer med FCM-token eller enhet-ID
POST/enrollAnonOffentligRegistrer en anonym enhet og generer en 4-tegns parringskode
POST/OffentligLagre enheter (batch)
GET/pair/:pairingCodeJWTPair en enhet ved hjelp av dens parringskode. Valgfritt ?contentType=&contentId= for å tildele innhold
GET/status/:deviceIdOffentligSjekk parringsstatus for en enhet
GET/:churchIdJWTLast alle enheter for en kirke
GET/:churchId/person/:personIdJWTLast alle enheter for en person
GET/:churchId/:idJWTLast en enhet etter ID
DELETE/:churchId/:idJWTSlett en enhet

Eksempel: Registrer en enhet

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

Enhetsinnhold

Basisbane: /messaging/devicecontents

Administrerer innholdsoppdrag for parede enheter (f.eks. hvilken leksjon som vises på en TV).

MetodeBaneGodkjennelseTillatelseBeskrivelse
GET/deviceId/:deviceIdJWTLast innholdsoppdrag for en enhet
POST/JWTLagre enhetsinnholdsoppdrag (batch)
DELETE/:idJWTSlett et enhetsinnholdsoppdrag

Tekstering

Basisbane: /messaging/texting

Administrerer SMS-tekstingsleverandører, gruppetext-meldinger og leveringssporing.

MetodeBaneGodkjennelseTillatelseBeskrivelse
GET/providersJWTLast tekstingsleverandører for kirken (legitimasjon er maskert)
GET/preview/:groupIdJWTForhåndsvis mottakere for en gruppetekst (kvalifisert, meldt av, ingen telefon antall)
GET/sentJWTLast alle sendte tekstmeldingsposter for kirken
GET/sent/:id/detailsJWTLast en sendt tekst med per-mottaker leveringslogger
POST/providersJWTLagre tekstingsleverandører (batch). Krypterer API-legitimasjon
POST/sendJWTSend en SMS til alle kvalifiserte medlemmer av en gruppe. Kropp: { groupId, message }
POST/sendPersonJWTSend en SMS til en enkelt person. Kropp: { personId, phoneNumber, message }
DELETE/providers/:idJWTSlett en tekstingsleverandør

Eksempel: Send gruppetekst

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
}

E-postmaler

Basisbane: /messaging/emailTemplates

Administrerer gjenbrukbare e-postmaler og sending av templated e-post til grupper.

MetodeBaneGodkjennelseTillatelseBeskrivelse
GET/JWTLast alle e-postmaler for kirken
GET/:idJWTLast en enkelt e-postmal etter ID
GET/preview/:groupIdJWTForhåndsvis e-postlevering for en gruppe (antall kvalifiserte mottakere, medlemmer uten e-post)
POST/JWTOpprett eller oppdater e-postmaler (batch)
POST/sendJWTSend en templated e-post til alle medlemmer av en gruppe. Kropp: { groupId, subject, htmlContent }
DELETE/:idJWTSlett en e-postmal

Eksempel: Send e-post til gruppe

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
}

Støttede flettfelt: {{firstName}}, {{lastName}}, {{displayName}}, {{email}}, {{churchName}}

Blockerte IP-adresser

Basisbane: /messaging/blockedips

(legacy) IP-blokkering for live streaming chat. B1App-klienten kaller ikke lenger POST / -- IP-blokkering ble fjernet i den enhetlige leveringsmigringen. /clear-ruten blir fortsatt påkalt server-til-server av StreamingServiceController når streaming-tjenester lagres.

MetodeBaneGodkjennelseTillatelseBeskrivelse
POST/JWT(legacy) Lagre blockerte IP-adresser (batch). Ingen aktiv klient
POST/clearJWTFjern alle blockerte IP-adresser for spesifikke tjenester. Kropp: [{ serviceId, churchId }]

Leveringslogger

Basisbane: /messaging/deliverylogs

Sporer leveringsstatus for sendte meldinger (SMS, push-meldinger, e-post).

MetodeBaneGodkjennelseTillatelseBeskrivelse
GET/content/:contentType/:contentIdJWTLast leveringslogger etter innholdstype og ID
GET/person/:personIdJWTLast leveringslogger for en person. Valgfritt ?startDate=&endDate= filtre
GET/recentJWTLast nylige leveringslogger for kirken. Valgfritt ?limit= (standard 100)
GET/:idJWTLast en leveringslogg etter ID

Relaterte sider