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 Tracker from '@openreplay/tracker';
import trackerAssist from '@openreplay/tracker-assist';
const tracker = new Tracker({
projectKey: PROJECT_KEY,
});
tracker.use(trackerAssist(options)); // check the list of available options below
tracker.start();
Если ваше веб-приложение рендерится на стороне сервера (SSR)
Section titled Если ваше веб-приложение рендерится на стороне сервера (SSR)Следуйте приведённому ниже примеру, если ваше приложение использует SSR. Убедитесь, что tracker.start() вызывается после запуска приложения (в useEffect или componentDidMount).
import OpenReplay from '@openreplay/tracker/cjs';
import trackerFetch from '@openreplay/tracker-assist/cjs';
const tracker = new OpenReplay({
projectKey: PROJECT_KEY
});
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;
callUITemplate?: string
})
Кастомизация виджетов
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 and 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")
}
Остались вопросы?
Section titled Остались вопросы?Возникли трудности с настройкой этого плагина? Подключайтесь к нашему Slack или загляните на наш Форум и получите помощь от нашего сообщества.