Assist
OpenReplay Assist позволяет вам поддерживать ваших пользователей, видя их экран в реальном времени и мгновенно начиная звонок (WebRTC) с ними без необходимости в каком-либо стороннем ПО для демонстрации экрана.
Установка
Section titled Установкаnpm i @openreplay/tracker-assist
Использование
Section titled ИспользованиеС помощью JavaScript-сниппета
Section titled С помощью JavaScript-сниппетаЕсли ваш трекер OpenReplay настроен с помощью JS-сниппета, просто замените вхождение .../openreplay.js на .../openreplay-assist.js. Ниже приведён пример того, как должен выглядеть скрипт после изменения:
<!-- OpenReplay Tracking Code -->
<script>
var initOpts = { projectKey: "GxPpaDARdn2345fgt321" };
var startOpts = { userID: "" };
(function(A,s,a,y,e,r){
r=window.OpenReplay=[e,r,y,[s-1, e]];
s=document.createElement('script');s.src=A;s.async=!a;
...
})("//static.openreplay.com/latest/openreplay-assist.js", 1, 0, initOpts, startOpts);
</script>
С помощью NPM
Section titled С помощью NPMИнициализируйте трекер, а затем загрузите плагин @openreplay/tracker-assist.
Если ваш веб-сайт является одностраничным приложением (SPA)
Section titled Если ваш веб-сайт является одностраничным приложением (SPA)import trackerAssist from '@openreplay/tracker-assist';
import { tracker } from '@openreplay/tracker';
tracker.configure({
projectKey: 'YOUR_PROJECT_KEY',
ingestPoint: "https://openreplay.mydomain.com/ingest", // when dealing with the self-hosted version of OpenReplay
});
tracker.use(trackerAssist(options)); // check the list of available options below
tracker.start();
Если ваше веб-приложение использует серверный рендеринг (SSR)
Section titled Если ваше веб-приложение использует серверный рендеринг (SSR)Следуйте приведённому ниже примеру, если ваше приложение использует SSR. Убедитесь, что tracker.start()
вызывается, когда приложение находится в среде браузера (то есть через useEffect или componentDidMount).
import trackerAssist from '@openreplay/tracker-assist';
import { tracker } from '@openreplay/tracker';
tracker.configure({
projectKey: 'YOUR_PROJECT_KEY',
ingestPoint: "https://openreplay.mydomain.com/ingest", // when dealing with the self-hosted version of OpenReplay
});
tracker.use(trackerAssist(options)); // check the list of available options below
//...
function MyApp() {
useEffect(() => { // use componentDidMount in case of React Class Component
tracker.start();
}, [])
//...
}
Опции
Section titled ОпцииПлагин assist поддерживает следующие опции:
trackerAssist({
callConfirm?: string|ConfirmOptions;
controlConfirm?: string|ConfirmOptions;
config?: object;
onAgentConnect?: () => (()=>void | void);
onCallStart?: () => (()=>void | void);
onRemoteControlStart?: () => (()=>void | void);
onCallDeny?: () => any;
onRemoteControlDeny?: (agentInfo: Record<string, any>) => any;
onRecordingDeny?: (agentInfo: Record<string, any>) => any;
onDragCamera?: (dx: number, dy: number) => any;
callUITemplate?: string
/**
* enables gzip compression for big batches on client side
* */
compressionEnabled: boolean;
/**
* Minimum amount of MESSAGES in a batch to trigger compression run
* @default 5000
* */
compressionMinBatchSize: number
})
Настройка виджетов
Section titled Настройка виджетовКак удалённое управление, так и виджеты звонков, которые видит конечный пользователь, можно полностью настроить.
Виджет удалённого управления
Section titled Виджет удалённого управленияtype ConfirmOptions = {
text?:string,
style?: StyleObject, // style object (i.e {color: 'red', borderRadius: '10px'})
confirmBtn?: ButtonOptions,
declineBtn?: ButtonOptions
}
type ButtonOptions = HTMLButtonElement | string | {
innerHTML?: string, // to pass an svg string or text
style?: StyleObject, // style object (i.e {color: 'red', borderRadius: '10px'})
}
Виджет звонка
Section titled Виджет звонкаМожно настроить каждый аспект этого виджета с помощью приведённого ниже набора ids и classes. Ids служат якорями для отдельных кнопок/элементов, тогда как classes могут использоваться для групповых контейнеров.
| Тип HTML | Имя(имена) | Описание |
|---|---|---|
| id | or-assist | Контейнер виджета |
| class | card, border-dark, shadow и drag-area | Стили для границы и тени карточки |
| id | controls | Контейнер для части звонка внутри виджета |
| class | card-header | Стили для заголовка карточки виджета звонка (того, что показывает имя агента рядом с таймером) |
| id | agent-name | Контейнер для имени агента |
| id | duration | Контейнер для таймера |
| id | video-container | Контейнер собственного видеопотока пользователя |
| id | remote-stream | Видеопоток агента |
| class | card-footer | Контейнер для кнопок «Без звука», «Видео», «Завершить звонок» |
| id | audio-btn | Кнопка отключения звука |
| id | video-btn | Кнопка видео |
| id | end-call-btn | Кнопка завершения звонка |
| id | remote-control-row | Строка для удалённого управления |
| id | end-control-btn | Id для кнопки завершения управления |
Колбэки
Section titled КолбэкиВот список всех колбэков:
callConfirm: Настройте текст и/или макет всплывающего окна запроса звонка.controlConfirm: Настройте текст и/или макет всплывающего окна запроса удалённого управления.config: Содержит пользовательскую конфигурацию сервера ICE/TURN. По умолчанию{ 'iceServers': [{ 'urls': 'stun:stun.l.google.com:19302' }], 'sdpSemantics': 'unified-plan' }.onAgentConnect: () => (()=>void | void): Эта функция обратного вызова срабатывает, как только начинается живая сессия, и возвращает данные агента (email, имя и query). Она также может вернутьonAgentDisconnect, которая будет вызвана при отключении сессии. В случае нестабильного соединения она может быть вызвана несколько раз. Ниже приведён пример:
onAgentConnect = ({ email, name, query }) => {
console.log("Live session started")
const onAgentDisconnect = () => console.log("Live session stopped")
return onAgentDisconnect
}
onCallStart: ({ email, name, query }) => (()=>void | void): Эта функция обратного вызова срабатывает, как только начинается звонок (webRTC), и возвращает данные агента (email, имя и query). Она также может вернутьonCallEnd, которая будет вызвана при завершении звонка. В случае нестабильного соединения она может быть вызвана несколько раз. Ниже приведён пример:
onCallStart: () => {
console.log("Call started")
const onCallEnd = () => console.log("Call ended")
return onCallEnd
}
onRemoteControlStart: ({ email, name, query }) => (()=>void | void): Эта функция обратного вызова срабатывает, как только начинается сессия удалённого управления, и возвращает данные агента (email, имя и query). Она также может вернутьonRemoteControlEnd, которая будет вызвана при отзыве разрешений на удалённое управление. Ниже приведён пример:
onRemoteControlStart: () => {
console.log("Remote control started")
const onControlEnd = () => console.log("Remote control ended")
return onControlEnd
}
onCallDeny?: () => any;: Эта функция обратного вызова срабатывает, когда пользователь отклоняет звонок на этапе запроса.
onCallDeny: () => {
console.log("Call denied")
}
onRemoteControlDeny?: (agentInfo: Record<string, any>) => any;: Эта функция обратного вызова срабатывает, когда пользователь отклоняет сессию удалённого управления на этапе запроса, и возвращает данные агента (email, имя и query).
onRemoteControlDeny: ({ email, name, query }) => {
console.log("Remote control request denied for", email)
}
onRecordingDeny?: (agentInfo: Record<string, any>) => any;: Эта функция обратного вызова срабатывает, когда пользователь отклоняет сессию записи на этапе запроса, и возвращает данные агента (email, имя и query).
onRecordingDeny: ({ email, name, query }) => {
console.log("Recording session denied")
}
onDragCamera?: (dx: number, dy: number) => any;: Эта функция ожидает обработчик, который определяет поведение удерживаемой кнопки мыши внутри canvas Three.js для удалённого управления. Обработчик получает dx и dy, указывающие на дельты движения мыши.
onDragCamera: (dx, dy) => {
moveCamera(dx, dy)
}
Есть вопросы?
Section titled Есть вопросы?Возникли трудности с настройкой этого плагина? Присоединяйтесь к нашему Slack или загляните на наш Форум и получите помощь от нашего сообщества.