Vai al contenuto principale

Endpoint di Messaggistica

Il modulo di Messaggistica gestisce conversazioni in tempo reale, messaggi di chat, notifiche push, consegna SMS/email, connessioni WebSocket, messaggistica privata, registrazione dei dispositivi e provider di texting. Fornisce il livello di comunicazione utilizzato in tutte le applicazioni ChurchApps sia per la chat di trasmissione in diretta che per le notifiche asincrone.

Percorso base: /messaging

Conversazioni

Percorso base: /messaging/conversations

MetodoPercorsoAuthAutorizzazioneDescrizione
GET/timeline/ids?ids=JWTCarica conversazioni per ID separati da virgola con primi/ultimi messaggi
GET/messages/:contentType/:contentIdJWTCarica conversazioni per contenuto con messaggi impaginati (?page=&limit=)
GET/postsJWTOttieni conversazioni di tipo post per i gruppi dell'utente attuale
GET/posts/group/:groupIdJWTOttieni conversazioni di tipo post per un gruppo specifico
GET/current/:churchId/:contentType/:contentIdPubblicoOttieni o crea la conversazione attuale per il contenuto (auto-decrittografa contentId)
GET/:churchId/:contentType/:contentIdPubblicoCarica conversazioni per tipo di contenuto e ID
GET/:churchId/:idPubblicoCarica una singola conversazione per ID
POST/JWTCrea o aggiorna conversazioni (batch)
POST/startJWTAvvia una nuova conversazione con un messaggio di commento iniziale
DELETE/:churchId/:idJWTElimina una conversazione

Controllo di accesso alle note della persona

Le conversazioni con contentType: "person" (la scheda Note su un record di persona) o contentType: "personConfidential" (la sezione Note Confidenziali) sono controllate su ogni percorso di lettura e scrittura, inclusi i percorsi altrimenti pubblici di cui sopra, che restituiscono 401 per questi tipi di contenuto. person richiede il permesso Persone / Modifica dell'API Membership; personConfidential richiede Persone / Visualizza Note Confidenziali. Per le chiavi API scoped, people:write esegue entrambe le azioni (l'utente della chiave deve comunque detenere il permesso di ruolo sottostante).

Esempio: Avvia una Conversazione

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

Messaggi

Percorso base: /messaging/messages

MetodoPercorsoAuthAutorizzazioneDescrizione
GET/conversation/:conversationIdJWTCarica tutti i messaggi per una conversazione
GET/catchup/:churchId/:conversationIdPubblicoCarica tutti i messaggi per una conversazione (catch-up pubblico per chat dal vivo)
GET/:churchId/:idPubblicoCarica un singolo messaggio per ID
POST/JWTSalva messaggi (batch). Invia aggiornamenti in tempo reale e attiva notifiche
POST/sendPubblicoInvia messaggi (batch, pubblico). Invia aggiornamenti in tempo reale tramite WebSocket e attiva notifiche
POST/setCalloutJWT(legacy) Trasmetti un messaggio di callout in tempo reale. Nessun client attivo; la chat di trasmissione in diretta non renderizza più i callout
DELETE/:churchId/:idJWTElimina un messaggio e trasmetti l'eliminazione in tempo reale

Esempio: Invia un Messaggio

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

Messaggi Privati

Percorso base: /messaging/privatemessages

MetodoPercorsoAuthAutorizzazioneDescrizione
GET/JWTCarica tutti i messaggi privati per l'utente attuale (include ultimo messaggio per conversazione, contrassegna tutti come letti)
GET/existing/:personIdJWTTrova una conversazione privata esistente con una persona specifica
GET/:idJWTCarica un messaggio privato per ID (cancella la notifica se indirizzato all'utente attuale)
POST/JWTInvia messaggi privati (batch). Attiva la notifica push al destinatario

Notifiche

Percorso base: /messaging/notifications

MetodoPercorsoAuthAutorizzazioneDescrizione
GET/unreadCountJWTOttieni il conteggio delle notifiche non lette per l'utente attuale
GET/myJWTCarica tutte le notifiche per l'utente attuale (contrassegna tutti come letti)
GET/tmpEmailPubblicoAttiva il digest email di notifica giornaliera (endpoint debug/cron)
GET/:churchId/person/:personIdJWTCarica le notifiche per una persona specifica
GET/:churchId/:idJWTCarica una notifica per ID
POST/JWTCrea o aggiorna notifiche (batch)
POST/createJWTCrea notifiche per più persone. Corpo: { peopleIds, contentType, contentId, message, link }
POST/markRead/:churchId/:personIdJWTContrassegna tutte le notifiche come lette per una persona
POST/sendTestJWTInvia una notifica push di test. Corpo: { personId, title }
POST/pingPubblicoCrea una notifica da un trigger esterno. Corpo: { personId, churchId, contentType, contentId, message, triggeredByPersonId }
DELETE/:churchId/:idJWTElimina una notifica

Esempio: Crea Notifiche

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

Preferenze di Notifica

Percorso base: /messaging/notificationpreferences

Estende CRUD standard. La classe base fornisce POST / (crea o aggiorna, nessuna autorizzazione richiesta).

MetodoPercorsoAuthAutorizzazioneDescrizione
POST/JWTCrea o aggiorna preferenze di notifica (dalla classe base CRUD)
GET/myJWTCarica le preferenze di notifica per l'utente attuale (auto-crea default se non esistono)

Connessioni

Percorso base: /messaging/connections

Gestisce le connessioni WebSocket/real-time per chat, conversazioni di gruppo, messaggi privati e trasmissione in diretta. Vedi Architettura Real-time per il protocollo end-to-end.

MetodoPercorsoAuthAutorizzazioneDescrizione
GET/:churchId/:conversationIdPubblicoCarica tutte le connessioni per una conversazione
POST/PubblicoRegistra connessioni (batch). Attiva una trasmissione di frequenza sulla conversazione. Elementi del corpo: { churchId, conversationId, socketId, displayName?, personId? }
POST/setNamePubblicoAggiorna il nome visualizzato per una connessione per ID socket. Corpo: { socketId, name }
DELETE/:churchId/:conversationId/:socketIdPubblicoChiudi una connessione da una conversazione. Attiva una trasmissione di frequenza
POST/tmpSendAlertPubblicoInvia un avviso di notifica alle connessioni di una persona. Corpo: { churchId, personId }

Dispositivi

Percorso base: /messaging/devices

Gestisce la registrazione dei dispositivi per le notifiche push e l'associazione di contenuto (ad es., l'app Lessons su display TV).

MetodoPercorsoAuthAutorizzazioneDescrizione
POST/enrollJWTRegistra o aggiorna un dispositivo (registrazione push mobile). Corrisponde per token FCM o ID dispositivo
POST/enrollAnonPubblicoRegistra un dispositivo anonimo e genera un codice di associazione di 4 caratteri
POST/PubblicoSalva dispositivi (batch)
GET/pair/:pairingCodeJWTAssocia un dispositivo usando il suo codice di associazione. Opzionale ?contentType=&contentId= per assegnare il contenuto
GET/status/:deviceIdPubblicoControlla lo stato di associazione di un dispositivo
GET/:churchIdJWTCarica tutti i dispositivi per una chiesa
GET/:churchId/person/:personIdJWTCarica tutti i dispositivi per una persona
GET/:churchId/:idJWTCarica un dispositivo per ID
DELETE/:churchId/:idJWTElimina un dispositivo

Esempio: Registra un 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"
}

Contenuti Dispositivo

Percorso base: /messaging/devicecontents

Gestisce le assegnazioni di contenuto per dispositivi associati (ad es., quale lezione viene visualizzata su una TV).

MetodoPercorsoAuthAutorizzazioneDescrizione
GET/deviceId/:deviceIdJWTCarica le assegnazioni di contenuto per un dispositivo
POST/JWTSalva le assegnazioni di contenuto del dispositivo (batch)
DELETE/:idJWTElimina un'assegnazione di contenuto del dispositivo

Texting

Percorso base: /messaging/texting

Gestisce i provider di texting SMS, la messaggistica di testo di gruppo e il tracciamento della consegna.

MetodoPercorsoAuthAutorizzazioneDescrizione
GET/providersJWTCarica i provider di texting per la chiesa (le credenziali sono mascherate)
GET/preview/:groupIdJWTAnteprima dei destinatari per un testo di gruppo (conteggi idonei, non coinvolti, senza telefono)
GET/sentJWTCarica tutti i record dei messaggi di testo inviati per la chiesa
GET/sent/:id/detailsJWTCarica un testo inviato con registri di consegna per destinatario
POST/providersJWTSalva i provider di texting (batch). Crittografa le credenziali dell'API
POST/sendJWTInvia un SMS a tutti i membri idonei di un gruppo. Corpo: { groupId, message }
POST/sendPersonJWTInvia un SMS a una singola persona. Corpo: { personId, phoneNumber, message }
DELETE/providers/:idJWTElimina un provider di texting

Esempio: Invia Testo di Gruppo

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
}

Modelli di Email

Percorso base: /messaging/emailTemplates

Gestisce i modelli di email riutilizzabili e l'invio di email con template ai gruppi.

MetodoPercorsoAuthAutorizzazioneDescrizione
GET/JWTCarica tutti i modelli di email per la chiesa
GET/:idJWTCarica un singolo modello di email per ID
GET/preview/:groupIdJWTAnteprima della consegna email per un gruppo (conteggio dei destinatari idonei, membri senza email)
POST/JWTCrea o aggiorna modelli di email (batch)
POST/sendJWTInvia un'email con template a tutti i membri di un gruppo. Corpo: { groupId, subject, htmlContent }
DELETE/:idJWTElimina un modello di email

Esempio: Invia Email al Gruppo

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
}

Campi di fusione supportati: {{firstName}}, {{lastName}}, {{displayName}}, {{email}}, {{churchName}}

IP Bloccati

Percorso base: /messaging/blockedips

(legacy) Blocco IP per chat di trasmissione in diretta. Il client B1App non chiama più POST / -- il blocco IP è stato rimosso nella migrazione di consegna unificata. Il percorso /clear è ancora invocato server-to-server da StreamingServiceController quando vengono salvati i servizi di streaming.

MetodoPercorsoAuthAutorizzazioneDescrizione
POST/JWT(legacy) Salva IP bloccati (batch). Nessun client attivo
POST/clearJWTCancella tutti gli IP bloccati per servizi specifici. Corpo: [{ serviceId, churchId }]

Registri di Consegna

Percorso base: /messaging/deliverylogs

Traccia lo stato di consegna per i messaggi inviati (SMS, notifiche push, email).

MetodoPercorsoAuthAutorizzazioneDescrizione
GET/content/:contentType/:contentIdJWTCarica i registri di consegna per tipo di contenuto e ID
GET/person/:personIdJWTCarica i registri di consegna per una persona. Filtri opzionali ?startDate=&endDate=
GET/recentJWTCarica i registri di consegna recenti per la chiesa. Opzionale ?limit= (default 100)
GET/:idJWTCarica un registro di consegna per ID

Pagine Correlate