Перейти к основному содержимому

Эндпоинты Messaging

Модуль Messaging управляет переписками в реальном времени, сообщениями чата, push-уведомлениями, доставкой SMS/email, WebSocket-соединениями, личными сообщениями, регистрацией устройств и провайдерами текстовых сообщений. Он обеспечивает уровень коммуникации, используемый во всех приложениях ChurchApps как для чата в прямом эфире, так и для асинхронных уведомлений.

Базовый путь: /messaging

Переписки

Базовый путь: /messaging/conversations

МетодПутьАутентификацияРазрешениеОписание
GET/timeline/ids?ids=JWTЗагрузить переписки по ID через запятую с первым/последним сообщениями
GET/messages/:contentType/:contentIdJWTЗагрузить переписки для контента с постраничными сообщениями (?page=&limit=)
GET/postsJWTПолучить переписки типа «пост» для групп текущего пользователя
GET/posts/group/:groupIdJWTПолучить переписки типа «пост» для конкретной группы
GET/current/:churchId/:contentType/:contentIdPublicПолучить или создать текущую переписку для контента (автоматически расшифровывает contentId)
GET/:churchId/:contentType/:contentIdPublicЗагрузить переписки по типу контента и ID
GET/:churchId/:idPublicЗагрузить отдельную переписку по ID
POST/JWTСоздать или обновить переписки (пакетно)
POST/startJWTНачать новую переписку с начальным сообщением-комментарием
DELETE/:churchId/:idJWTУдалить переписку

Пример: Начало переписки

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

Сообщения

Базовый путь: /messaging/messages

МетодПутьАутентификацияРазрешениеОписание
GET/conversation/:conversationIdJWTЗагрузить все сообщения для переписки
GET/catchup/:churchId/:conversationIdPublicЗагрузить все сообщения для переписки (публичное обновление для чата в прямом эфире)
GET/:churchId/:idPublicЗагрузить отдельное сообщение по ID
POST/JWTСохранить сообщения (пакетно). Отправляет обновления в реальном времени и запускает уведомления
POST/sendPublicОтправить сообщения (пакетно, публичный). Отправляет обновления в реальном времени через WebSocket и запускает уведомления
POST/setCalloutJWTТранслировать выделенное сообщение в переписку в реальном времени
DELETE/:churchId/:idJWTУдалить сообщение и транслировать удаление в реальном времени

Пример: Отправка сообщения

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

Личные сообщения

Базовый путь: /messaging/privatemessages

МетодПутьАутентификацияРазрешениеОписание
GET/JWTЗагрузить все личные сообщения текущего пользователя (включает последнее сообщение для каждой переписки, отмечает все как прочитанные)
GET/existing/:personIdJWTНайти существующую личную переписку с конкретным человеком
GET/:idJWTЗагрузить личное сообщение по ID (очищает уведомление, если адресовано текущему пользователю)
POST/JWTОтправить личные сообщения (пакетно). Запускает push-уведомление получателю

Уведомления

Базовый путь: /messaging/notifications

МетодПутьАутентификацияРазрешениеОписание
GET/unreadCountJWTПолучить количество непрочитанных уведомлений текущего пользователя
GET/myJWTЗагрузить все уведомления текущего пользователя (отмечает все как прочитанные)
GET/tmpEmailPublicЗапустить ежедневную рассылку дайджеста уведомлений по email (отладка/cron)
GET/:churchId/person/:personIdJWTЗагрузить уведомления для конкретного человека
GET/:churchId/:idJWTЗагрузить уведомление по ID
POST/JWTСоздать или обновить уведомления (пакетно)
POST/createJWTСоздать уведомления для нескольких людей. Тело: { peopleIds, contentType, contentId, message, link }
POST/markRead/:churchId/:personIdJWTОтметить все уведомления как прочитанные для человека
POST/sendTestJWTОтправить тестовое push-уведомление. Тело: { personId, title }
POST/pingPublicСоздать уведомление по внешнему триггеру. Тело: { personId, churchId, contentType, contentId, message, triggeredByPersonId }
DELETE/:churchId/:idJWTУдалить уведомление

Пример: Создание уведомлений

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

Настройки уведомлений

Базовый путь: /messaging/notificationpreferences

Наследует стандартный CRUD. Базовый класс предоставляет POST / (создать или обновить, без проверки разрешений).

МетодПутьАутентификацияРазрешениеОписание
POST/JWTСоздать или обновить настройки уведомлений (из базового CRUD-класса)
GET/myJWTЗагрузить настройки уведомлений текущего пользователя (автоматически создаёт значения по умолчанию, если не существуют)

Соединения

Базовый путь: /messaging/connections

Управляет WebSocket-соединениями/соединениями реального времени для чата в прямом эфире.

МетодПутьАутентификацияРазрешениеОписание
GET/:churchId/:conversationIdPublicЗагрузить все соединения для переписки
POST/PublicЗарегистрировать соединения (пакетно). Автонумерация анонимных пользователей и отправка обновлений посещаемости/заблокированных IP
POST/setNamePublicОбновить отображаемое имя для соединения по socket ID. Тело: { socketId, name }
POST/tmpSendAlertPublicОтправить оповещение-уведомление на соединения человека. Тело: { churchId, personId }

Устройства

Базовый путь: /messaging/devices

Управляет регистрацией устройств для push-уведомлений и привязки контента (напр., приложение уроков на ТВ-экранах).

МетодПутьАутентификацияРазрешениеОписание
POST/enrollJWTЗарегистрировать или обновить устройство (мобильная push-регистрация). Сопоставление по FCM-токену или ID устройства
POST/enrollAnonPublicЗарегистрировать анонимное устройство и сгенерировать 4-символьный код сопряжения
POST/PublicСохранить устройства (пакетно)
GET/pair/:pairingCodeJWTПривязать устройство по коду сопряжения. Необязательно ?contentType=&contentId= для назначения контента
GET/status/:deviceIdPublicПроверить статус сопряжения устройства
GET/:churchIdJWTЗагрузить все устройства для церкви
GET/:churchId/person/:personIdJWTЗагрузить все устройства для человека
GET/:churchId/:idJWTЗагрузить устройство по ID
DELETE/:churchId/:idJWTУдалить устройство

Пример: Регистрация устройства

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

Контент устройств

Базовый путь: /messaging/devicecontents

Управляет назначениями контента для привязанных устройств (напр., какой урок отображается на ТВ).

МетодПутьАутентификацияРазрешениеОписание
GET/deviceId/:deviceIdJWTЗагрузить назначения контента для устройства
POST/JWTСохранить назначения контента устройств (пакетно)
DELETE/:idJWTУдалить назначение контента устройства

Текстовые сообщения

Базовый путь: /messaging/texting

Управляет провайдерами SMS, групповыми текстовыми сообщениями и отслеживанием доставки.

МетодПутьАутентификацияРазрешениеОписание
GET/providersJWTЗагрузить провайдеров текстовых сообщений для церкви (учётные данные замаскированы)
GET/preview/:groupIdJWTПредпросмотр получателей для группового текстового сообщения (количество подходящих, отказавшихся, без телефона)
GET/sentJWTЗагрузить все записи отправленных текстовых сообщений для церкви
GET/sent/:id/detailsJWTЗагрузить отправленное сообщение с журналами доставки по получателям
POST/providersJWTСохранить провайдеров текстовых сообщений (пакетно). Шифрует API-учётные данные
POST/sendJWTОтправить SMS всем подходящим участникам группы. Тело: { groupId, message }
POST/sendPersonJWTОтправить SMS одному человеку. Тело: { personId, phoneNumber, message }
DELETE/providers/:idJWTУдалить провайдера текстовых сообщений

Пример: Отправка группового текстового сообщения

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
}

Заблокированные IP

Базовый путь: /messaging/blockedips

Управляет блокировкой IP для чата в прямом эфире.

МетодПутьАутентификацияРазрешениеОписание
POST/JWTСохранить заблокированные IP (пакетно). Транслирует обновлённый список блокировок в переписку
POST/clearJWTОчистить все заблокированные IP для конкретных служб. Тело: [{ serviceId, churchId }]

Журналы доставки

Базовый путь: /messaging/deliverylogs

Отслеживает статус доставки отправленных сообщений (SMS, push-уведомления, email).

МетодПутьАутентификацияРазрешениеОписание
GET/content/:contentType/:contentIdJWTЗагрузить журналы доставки по типу контента и ID
GET/person/:personIdJWTЗагрузить журналы доставки для человека. Необязательные фильтры ?startDate=&endDate=
GET/recentJWTЗагрузить недавние журналы доставки для церкви. Необязательно ?limit= (по умолчанию 100)
GET/:idJWTЗагрузить журнал доставки по ID

Связанные страницы