Assist

Как настроить OpenReplay Assist и поддерживать ваших конечных пользователей с помощью живого экрана и WebRTC.

Assist

OpenReplay Assist позволяет вам поддерживать ваших пользователей, видя их экран в реальном времени и мгновенно начиная звонок (WebRTC) с ними без необходимости какого-либо стороннего программного обеспечения для демонстрации экрана.

npm i @openreplay/tracker-assist

С помощью 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>

Инициализируйте трекер, затем загрузите плагин @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();
  }, [])
//...
}

Плагин 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'})
}

Можно настроить каждый аспект этого виджета с помощью приведённого ниже набора ids и classes. Ids служат якорями для отдельных кнопок/элементов, тогда как classes могут использоваться для групповых контейнеров.

Тип HTMLИмя(имена)Описание
idor-assistКонтейнер виджета
classcard, border-dark, shadow and drag-areaСтили для границы и тени карточки
idcontrolsКонтейнер для части, отвечающей за звонок, внутри виджета
classcard-headerСтили для заголовка карточки виджета звонка (того, который показывает имя агента рядом с таймером)
idagent-nameКонтейнер для имени агента
iddurationКонтейнер для таймера
idvideo-containerКонтейнер собственного видеопотока пользователя
idremote-streamВидеопоток агента
classcard-footerКонтейнер для кнопок Без звука, Видео, Завершить звонок
idaudio-btnКнопка отключения звука
idvideo-btnКнопка видео
idend-call-btnКнопка завершения звонка
idremote-control-rowСтрока для элементов удалённого управления
idend-control-btnId кнопки завершения управления

Вот список всех колбэков:

  • 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 или загляните на наш Форум и получите помощь от нашего сообщества.