Эндпоинты Messaging
Модуль Messaging управляет переписками в реальном времени, сообщениями чата, push-уведомлениями, доставкой SMS/email, WebSocket-соединениями, личными сообщениями, регистрацией устройств и провайдерами текстовых сообщений. Он обеспечивает уровень коммуникации, используемый во всех приложениях ChurchApps как для чата в прямом эфире, так и для асинхронных уведомлений.
Базовый путь: /messaging
Переписки
Базовый путь: /messaging/conversations
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /timeline/ids?ids= | JWT | — | Загрузить переписки по ID через запятую с первым/последним сообщениями |
| GET | /messages/:contentType/:contentId | JWT | — | Загрузить переписки для контента с постраничными сообщениями (?page=&limit=) |
| GET | /posts | JWT | — | Получить переписки типа «пост» для групп текущего пользователя |
| GET | /posts/group/:groupId | JWT | — | Получить переписки типа «пост» для конкретной группы |
| GET | /current/:churchId/:contentType/:contentId | Public | — | Получить или создать текущую переписку для контента (автоматически расшифровывает contentId) |
| GET | /:churchId/:contentType/:contentId | Public | — | Загрузить переписки по типу контента и ID |
| GET | /:churchId/:id | Public | — | Загрузить отдельную переписку по ID |
| POST | / | JWT | — | Создать или обновить переписки (пакетно) |
| POST | /start | JWT | — | Начать новую переписку с начальным сообщением-комментарием |
| DELETE | /:churchId/:id | JWT | — | Удалить переписку |
Пример: Начало переписки
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/:conversationId | JWT | — | Загрузить все сообщения для переписки |
| GET | /catchup/:churchId/:conversationId | Public | — | Загрузить все сообщения для переписки (публичное обновление для чата в прямом эфире) |
| GET | /:churchId/:id | Public | — | Загрузить отдельное сообщение по ID |
| POST | / | JWT | — | Сохранить сообщения (пакетно). Отправляет обновления в реальном времени и запускает уведомления |
| POST | /send | Public | — | Отправить сообщения (пакетно, публичный). Отправляет обновления в реальном времени через WebSocket и запускает уведомления |
| POST | /setCallout | JWT | — | Транслировать выделенное сообщение в переписку в реальном времени |
| DELETE | /:churchId/:id | JWT | — | Удалить сообщение и транслировать удаление в реальном времени |
Пример: Отправка сообщения
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/:personId | JWT | — | Найти существующую личную переписку с конкретным человеком |
| GET | /:id | JWT | — | Загрузить личное сообщение по ID (очищает уведомление, если адресовано текущему пользователю) |
| POST | / | JWT | — | Отправить личные сообщения (пакетно). Запускает push-уведомление получателю |
Уведомления
Базовый путь: /messaging/notifications
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /unreadCount | JWT | — | Получить количество непрочитанных уведомлений текущего пользователя |
| GET | /my | JWT | — | Загрузить все уведомления текущего пользователя (отмечает все как прочитанные) |
| GET | /tmpEmail | Public | — | Запустить ежедневную рассылку дайджеста уведомлений по email (отладка/cron) |
| GET | /:churchId/person/:personId | JWT | — | Загрузить уведомления для конкретного человека |
| GET | /:churchId/:id | JWT | — | Загрузить уведомление по ID |
| POST | / | JWT | — | Создать или обновить уведомления (пакетно) |
| POST | /create | JWT | — | Создать уведомления для нескольких людей. Тело: { peopleIds, contentType, contentId, message, link } |
| POST | /markRead/:churchId/:personId | JWT | — | Отметить все уведомления как прочитанные для человека |
| POST | /sendTest | JWT | — | Отправить тестовое push-уведомление. Тело: { personId, title } |
| POST | /ping | Public | — | Создать уведомление по внешнему триггеру. Тело: { personId, churchId, contentType, contentId, message, triggeredByPersonId } |
| DELETE | /:churchId/:id | JWT | — | Удалить уведомление |
Пример: Создание уведомлений
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 | /my | JWT | — | Загрузить настройки уведомлений текущего пользователя (автоматически создаёт значения по умолчанию, если не существуют) |
Соединения
Базовый путь: /messaging/connections
Управляет WebSocket-соединениями/соединениями реального времени для чата в прямом эфире.
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:churchId/:conversationId | Public | — | Загрузить все соединения для переписки |
| POST | / | Public | — | Зарегистрировать соединения (пакетно). Автонумерация анонимных пользователей и отправка обновлений посещаемости/заблокированных IP |
| POST | /setName | Public | — | Обновить отображаемое имя для соединения по socket ID. Тело: { socketId, name } |
| POST | /tmpSendAlert | Public | — | Отправить оповещение-уведомление на соединения человека. Тело: { churchId, personId } |
Устройства
Базовый путь: /messaging/devices
Управляет регистрацией устройств для push-уведомлений и привязки контента (напр., приложение уроков на ТВ-экранах).
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| POST | /enroll | JWT | — | Зарегистрировать или обновить устройство (мобильная push-регистрация). Сопоставление по FCM-токену или ID устройства |
| POST | /enrollAnon | Public | — | Зарегистрировать анонимное устройство и сгенерировать 4-символьный код сопряжения |
| POST | / | Public | — | Сохранить устройства (пакетно) |
| GET | /pair/:pairingCode | JWT | — | Привязать устройство по коду сопряжения. Необязательно ?contentType=&contentId= для назначения контента |
| GET | /status/:deviceId | Public | — | Проверить статус сопряжения устройства |
| GET | /:churchId | JWT | — | Загрузить все устройства для церкви |
| GET | /:churchId/person/:personId | JWT | — | Загрузить все устройства для человека |
| GET | /:churchId/:id | JWT | — | Загрузить устройство по ID |
| DELETE | /:churchId/:id | JWT | — | Удалить устройство |
Пример: Регистрация устройства
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/:deviceId | JWT | — | Загрузить назначения контента для устройства |
| POST | / | JWT | — | Сохранить назначения контента устройств (пакетно) |
| DELETE | /:id | JWT | — | Удалить назначение контента устройства |
Текстовые сообщения
Базовый путь: /messaging/texting
Управляет провайдерами SMS, групповыми текстовыми сообщениями и отслеживанием доставки.
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /providers | JWT | — | Загрузить провайдеров текстовых сообщений для церкви (учётные данные замаскированы) |
| GET | /preview/:groupId | JWT | — | Предпросмотр получателей для группового текстового сообщения (количество подходящих, отказавшихся, без телефона) |
| GET | /sent | JWT | — | Загрузить все записи отправленных текстовых сообщений для церкви |
| GET | /sent/:id/details | JWT | — | Загрузить отправленное сообщение с журналами доставки по получателям |
| POST | /providers | JWT | — | Сохранить провайдеров текстовых сообщений (пакетно). Шифрует API-учётные данные |
| POST | /send | JWT | — | Отправить SMS всем подходящим участникам группы. Тело: { groupId, message } |
| POST | /sendPerson | JWT | — | Отправить SMS одному человеку. Тело: { personId, phoneNumber, message } |
| DELETE | /providers/:id | JWT | — | Удалить провайдера текстовых сообщений |
Пример: Отправка группового текстового сообщения
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 | /clear | JWT | — | Очистить все заблокированные IP для конкретных служб. Тело: [{ serviceId, churchId }] |
Журналы доставки
Базовый путь: /messaging/deliverylogs
Отслеживает статус доставки отправленных сообщений (SMS, push-уведомления, email).
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /content/:contentType/:contentId | JWT | — | Загрузить журналы доставки по типу контента и ID |
| GET | /person/:personId | JWT | — | Загрузить журналы доставки для человека. Необязательные фильтры ?startDate=&endDate= |
| GET | /recent | JWT | — | Загрузить недавние журналы доставки для церкви. Необязательно ?limit= (по умолчанию 100) |
| GET | /:id | JWT | — | Загрузить журнал доставки по ID |
Связанные страницы
- Эндпоинты Membership -- Люди, группы, роли и основная идентификация
- Эндпоинты Attendance -- Отслеживание служений и посещений
- Аутентификация и разрешения -- Процесс входа, JWT, OAuth, модель разрешений
- Структура модулей -- Паттерны организации кода