Skip to content

API SDK ​

html
<script src="https://sdk.remeet.video/v0.js"></script>

Один файл без зависимостей, около 7 КБ. Он объявляет глобальный объект ReMeet. Адрес v0 не ломается: изменения в нём остаются совместимыми; несовместимое изменение получит новый файл (v1.js).

Все методы возвращают промисы. Если ReMeet отказывает в вызове, промис отклоняется с Error, у которого есть числовой code:

КодЧто значит
400Сначала не вызван ready()
403Право не выдано; или это может только ведущий; или приложение не установлено у этого человека
404Неизвестный метод или участник; или у приложения нет сцены
413Данные broadcast больше 8 КБ
429Больше 20 сообщений broadcast в секунду
500Сбой внутри ReMeet

Если ReMeet не ответил за 15 секунд, промис отклоняется с «ReMeet did not answer». Если страницу открыли не во встрече и не в симуляторе, ready() отклоняется с подсказкой открыть её в симуляторе.

ReMeet ​

ReMeet.ready() ​

Подключается к встрече. Вызывайте один раз при старте; повторные вызовы возвращают тот же объект.

js
const app = await ReMeet.ready();

Возвращает app:

СвойствоТип
app.contextobjectВсё, что ReMeet сообщил приложению при старте, см. ниже
app.meParticipantЧеловек, у которого запущена эта копия: { id, name, role }
app.permissionsstring[]Права, которые разрешил этот человек
app.contextTokenstringПодписанный JWT для вашего сервера, см. Контекст-токен
app.can(permission)booleantrue, если право выдано

app.context:

js
{
  sdk: 'v0',
  app: { key: 'wave', version: '0.1.0' },
  surface: 'panel',                 // или 'stage'
  meeting: { id: '01m6saztdr6cafg9yzx83db0fs', title: 'Планёрка' },
  me: { id: 'p_…', name: 'Анна', role: 'host' },   // 'host' | 'member' | 'guest'
  locale: 'ru',                     // 'en' | 'ru' | 'ar'
  theme: 'dark',                    // 'light' | 'dark'
  permissions: ['participants.read', 'app.broadcast'],
  participants: [ /* Participant[], пусто без participants.read */ ],
  contextToken: 'eyJ…'
}

ReMeet.on(name, handler) / app.on(name, handler) ​

Подписка на событие встречи. Возвращает функцию отписки.

js
const off = app.on('speaking', ({ ids }) => highlight(ids));
off();

ReMeet.version, ReMeet.surface ​

Версия SDK ('0.1.0') и где показана эта копия ('panel' или 'stage'). Доступны ещё до ready().

Участники ​

Право: participants.read.

app.participants() ​

Все, кто сейчас во встрече, включая самого человека.

ts
type Participant = {
  id: string;          // 'p_' + 24 hex: один человек — один id во всех встречах, разный в разных приложениях
  name: string;
  isMe: boolean;
  isSpeaking: boolean;
  role: string;        // 'host' | 'member' | 'guest'
};

Обмен данными ​

Право: app.broadcast.

app.broadcast(data) ​

Отправляет data (всё, что умещается в JSON, до 8 КБ) копиям вашего приложения у всех остальных участников, у кого оно открыто. Доставка надёжная и по порядку. Своя копия сообщение не получает.

js
await app.broadcast({ type: 'move', x: 3, y: 5 });

Принимается событием broadcast.

Уведомления ​

app.notify(text) ​

Показывает этому человеку уведомление ReMeet: «Название приложения: текст». До 200 символов. Право не нужно.

Чат ​

app.chat.send(text) ​

Право: chat.send. Отправляет в чат встречи сообщение от этого человека, начинающееся с [Название приложения]. До 500 символов.

Читать сообщения — событием chat.message (право chat.read).

Значки ​

Право: badges.write.

app.badges.set(participantId, text) ​

Ставит короткую метку (эмодзи или до 24 символов) на плитку видео участника. Один значок от приложения на плитке; новый заменяет старый. text = null убирает его.

app.badges.clear(participantId) ​

Убирает значок вашего приложения с плитки.

Значки рисуются у этого человека

Значок появляется на экране того, чья копия его поставила. Чтобы значок увидели все, разошлите его через broadcast и пусть каждая копия вызовет badges.set() — как в примере «Помахать» из быстрого старта.

Сцена ​

app.stage.open({ everyone }) ​

Открывает страницу stage вашего приложения поверх сетки видео.

  • app.stage.open() — только для этого человека. Право не нужно.
  • app.stage.open({ everyone: true }) — для всех участников, у кого установлено приложение. Нужно право stage.start, и человек должен быть ведущим встречи; иначе 403.

Ошибка 404, если в манифесте нет stage.

app.stage.close() ​

Закрывает сцену у этого человека.

Хранилище ​

Право: storage. Небольшое хранилище «ключ — значение» на приложение и на человека, на серверах ReMeet: одни и те же данные во всех встречах и на всех устройствах.

app.storage.get(key) ​

Возвращает сохранённое значение или null.

app.storage.set(key, value) ​

Сохраняет любое значение JSON: до 16 КБ на значение и до 64 КБ всего. Ключи: 1–64 символа, латиница, цифры, _ . -.

app.storage.delete(key) ​

Удаляет ключ.

js
const notes = (await app.storage.get('notes')) ?? '';
await app.storage.set('notes', notes + '\nНовая идея');
await app.storage.delete('draft');

События ​

СобытиеДанныеПраво
participant.joinedParticipantparticipants.read
participant.left{ id }participants.read
speaking{ ids: string[] } — кто сейчас говорит; пусто, когда тишинаparticipants.read
broadcast{ data, from: Participant }app.broadcast
chat.message{ from: { id, name }, text }chat.read
captions{ from: { id, name }, text, lang }captions.read
theme{ theme: 'light' | 'dark' }—

ReMeet Apps SDK v0 · бета. Файл SDK v0.js — под лицензией MIT.