Две модели поставки: полный набор возможностей как облачный сервис или развёртывание на ваших серверах — аккаунты, сообщения и записи остаются во внутренней сетиВесь стек на ваших серверахО развёртывании
Шлюз постоянных соединений, Open API и доставка колбэков: личные и групповые чаты, чат-комнаты, супергруппы и системные уведомления. В слабой сети сообщения не теряются и не дублируются, а операции и аудит доступны в админ-панели.
Web, Android, iOS, macOS, Flutter, React Native и мини-программа; UI-компоненты IMKit можно использовать сразу.
Один аккаунт, несколько устройств онлайн одновременно
IMKit даёт UI для диалогов, сообщений и контактов
Консоль и админ-панель для управления и аудита
Надёжная доставка и управляемый контент
Дело не только в отправке: надёжность доставки, качество диалога и модерация контента решаются вместе.
Ни потерь, ни дублей при смене сети
Шлюз соединений отвечает за отправку и приём; подтверждение приходит только после записи с тремя репликами. Клиент ведёт сквозной номер в каждом диалоге, после переподключения догружает пропущенное и отбрасывает дубли — поэтому при переключении сетей и завершении процесса сообщения не теряются и не показываются дважды.
Три реплики хранения, согласованность и при перекосе в запись
Канал офлайн-push как резерв, даже если приложение не запущено
Доставка колбэков передаёт статусы сообщений в ваши системы
Детали, которые нужны каждый день
От отметки о прочтении до ответа с цитатой: всё, что реально используется в переписке, уже встроено — после интеграции получается полноценный опыт общения.
Групповая отметка о прочтении в виде n/m, с детализацией по участникам
Отзыв сообщений, @упоминания, ответ с цитатой, черновики и закрепление
Роуминг истории и поиск по всем сообщениям
Чат-комнаты с высокой параллельностью и ограничением частоты сообщений
Контакты и группы под контролем
Заявки в друзья, чёрные списки, управление группой и фильтр слов собраны в одном интерфейсе и видны в админ-панели.
Заявки в друзья с подтверждением, чёрные списки и синхронизация статусов
Админ группы может переименовать, назначить админов, заглушить, удалить, передать
Объявление группы доходит до всех, системные уведомления заметнее
Фильтр слов и модерация: блокировать или заменять
Архитектура
Устройство держит одно постоянное соединение, сервер разделён по задачам, хранение и push независимы и масштабируются отдельно.
import FeiyanIM from '@feiyan/im-sdk';
// 1. Init: get the AppID from the app details in the console
const im = FeiyanIM.init({ appId: 'YOUR_APP_ID' });
// 2. Connect (auto-reconnect after a drop, offline messages are re-delivered)
await im.connect({ userId: 'user_1001', token });
// 3. Send a message: one API for direct chats, groups and chat rooms
await im.sendMessage({
target: 'group_2001',
type: 'text',
content: 'Hello, FeiyanCloud',
});
// 4. Listen for messages and read receipts
im.on('message', (msg) => console.log(msg));
im.on('readReceipt', (r) => {
console.log(`${r.readCount}/${r.totalCount}`, r.readUserIds);
});
Частые вопросы перед интеграцией
Больше технических деталей — в документации или в заявке в поддержку.
Как сообщения не теряются и не дублируются?
Шлюз соединений передаёт сообщение в сервис сообщений, и подтверждение отправляется только после успешной записи с тремя репликами. Клиент ведёт возрастающий номер для каждого диалога, после переподключения догружает пропущенное и убирает дубли. Поэтому при смене сети или завершении процесса сообщения не теряются и не показываются дважды.
Какие типы сообщений поддерживаются и можно ли свои?
Встроены текст, изображения, файлы, голос, геолокация и системные уведомления. Дополнительно можно задать собственный тип: тело сообщения и его отображение определяете вы, сервер только передаёт и хранит — подходит для карточек заказов и rich-карточек.
Как считается отметка о прочтении в группе?
В групповом чате показывается n/m — прочитали n из m участников, а детали по прочитавшим можно получить через интерфейс. В личном чате просто фиксируется время прочтения. Оба статуса передаются в вашу админ-панель через колбэки.
Сколько хранится роуминг истории?
В облаке срок задаётся тарифом и настраивается в консоли, а история читается постранично через Open API. При частном развёртывании хранение и правила роуминга лежат в вашей базе данных, и срок хранения вы определяете сами.
Как синхронизируются сообщения при нескольких устройствах?
Один аккаунт может быть онлайн на Web, мобильном и десктопе одновременно. Отправка или прочтение на одном устройстве вызывает событие в онлайн-канале, а устройства без соединения догружают пропущенное по номеру при следующем подключении — состояние диалогов совпадает.
IM можно использовать отдельно или только вместе с RTC?
IM и видео в реальном времени — независимые продукты, их можно подключать по отдельности. Если нужен звонок прямо из диалога, используйте возможности RTC: аккаунт и аутентификация остаются общими.
Скриншоты продукта
Интерфейс и админка — один продукт
Групповой чат: упоминания @, объявления группы и счётчики прочтенийПрочитали 2 из 7, 8 участников и заглушка отозванного сообщения — всё в реальном диалогеСписок чатов на телефонеЗначки непрочитанного, закреплённые чаты, черновики и системные уведомленияСовещание на телефонеЗвонок 1:1: удалённое видео крупно, своё превью в маленьком окнеДемонстрация экранаПоказываем дашборд консоли, справа остаются видео участников
Первое сообщение за 30 минут
Бесплатного тарифа достаточно для разработки и отладки; при запуске перейдите на тариф по нагрузке.