Assist

Cómo configurar OpenReplay Assist y dar soporte a tus usuarios finales mediante pantalla en vivo y WebRTC.

Assist

OpenReplay Assist te permite dar soporte a tus usuarios viendo su pantalla en vivo e iniciando al instante una llamada (WebRTC) con ellos sin necesidad de ningún software de compartición de pantalla de terceros.

npm i @openreplay/tracker-assist

Con el fragmento de JavaScript

Section titled Con el fragmento de JavaScript

Si tu tracker de OpenReplay está configurado usando el fragmento de JS, simplemente reemplaza la aparición de .../openreplay.js por .../openreplay-assist.js. A continuación se muestra un ejemplo de cómo debería verse el script después del cambio:

<!-- 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>

Inicializa el tracker y luego carga el plugin @openreplay/tracker-assist.

Si tu sitio web es una aplicación de página única (SPA)

Section titled Si tu sitio web es una aplicación de página única (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();

Si tu aplicación web se renderiza del lado del servidor (SSR)

Section titled Si tu aplicación web se renderiza del lado del servidor (SSR)

Sigue el ejemplo de abajo si tu aplicación es SSR. Asegúrate de que tracker.start() se llame una vez que la aplicación se haya iniciado (en useEffect o 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();
  }, [])
//...
}

El plugin assist admite las siguientes opciones:

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
})

Personalización de los widgets

Section titled Personalización de los widgets

Tanto el control remoto como los widgets de llamada, los que ve el usuario final, se pueden personalizar por completo.

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'})
}

Es posible personalizar todos los aspectos de este widget mediante el siguiente conjunto de ids y classes. Los Ids sirven como anclas para botones/elementos individuales, mientras que las classes se pueden usar para contenedores de grupo.

Tipo HTMLNombre(s)Descripción
idor-assistContenedor del widget
classcard, border-dark, shadow and drag-areaEstilos para el borde y la sombra de la tarjeta
idcontrolsContenedor de la parte de llamada dentro del widget
classcard-headerEstilos para el encabezado de la tarjeta del widget de llamada (el que muestra el nombre del agente junto a un temporizador)
idagent-nameContenedor del nombre del agente
iddurationContenedor del temporizador
idvideo-containerContenedor del propio feed de video del usuario
idremote-streamFeed de video del agente
classcard-footerContenedor de los botones Silenciar, Video, Finalizar llamada
idaudio-btnBotón de silenciar
idvideo-btnBotón de video
idend-call-btnBotón de finalizar llamada
idremote-control-rowFila para los controles remotos
idend-control-btnId del botón de finalizar control

Esta es la lista de todos los callbacks:

  • callConfirm: Personaliza el texto o el diseño del popup de solicitud de llamada.
  • controlConfirm: Personaliza el texto o el diseño del popup de solicitud de control remoto.
  • config: Contiene la configuración personalizada del servidor ICE/TURN. Su valor por defecto es { 'iceServers': [{ 'urls': 'stun:stun.l.google.com:19302' }], 'sdpSemantics': 'unified-plan' }.
  • onAgentConnect: () => (()=>void | void): Esta función de callback se activa en cuanto comienza una sesión en vivo y devuelve los detalles del agente (email, nombre y query). También puede devolver onAgentDisconnect, que se llamará cuando la sesión se desconecte. En caso de una conexión inestable, esto puede llamarse varias veces. A continuación se muestra un ejemplo:
onAgentConnect = ({ email, name, query }) => {
  console.log("Live session started")
  const onAgentDisconnect =  () => console.log("Live session stopped")
  return onAgentDisconnect
}
  • onCallStart: ({ email, name, query }) => (()=>void | void): Esta función de callback se activa en cuanto comienza una llamada (webRTC) y devuelve los detalles del agente (email, nombre y query). También puede devolver onCallEnd, que se llamará cuando la llamada finalice. En caso de una conexión inestable, esto puede llamarse varias veces. A continuación se muestra un ejemplo:
onCallStart: () => {
  console.log("Call started")
  const onCallEnd = () => console.log("Call ended")
  return onCallEnd
}
  • onRemoteControlStart: ({ email, name, query }) => (()=>void | void): Esta función de callback se activa en cuanto comienza una sesión de control remoto y devuelve los detalles del agente (email, nombre y query). También puede devolver onRemoteControlEnd, que se llamará cuando se revoquen los permisos de control remoto. A continuación se muestra un ejemplo:
onRemoteControlStart: () => {
  console.log("Remote control started")
  const onControlEnd = () => console.log("Remote control ended")
  return onControlEnd
}
  • onCallDeny?: () => any;: Esta función de callback se activa cuando un usuario rechaza la llamada durante la fase de solicitud.
onCallDeny: () => {
  console.log("Call denied")
}
  • onRemoteControlDeny?: (agentInfo: Record<string, any>) => any;: Esta función de callback se activa cuando un usuario rechaza la sesión de control remoto durante la fase de solicitud y devuelve los detalles del agente (email, nombre y query).
onRemoteControlDeny: ({ email, name, query }) => {
  console.log("Remote control request denied for", email)
}
  • onRecordingDeny?: (agentInfo: Record<string, any>) => any;: Esta función de callback se activa cuando un usuario rechaza la sesión de grabación durante la fase de solicitud y devuelve los detalles del agente (email, nombre y query).
onRecordingDeny: ({ email, name, query }) => {
  console.log("Recording session denied")
 
}

¿Tienes problemas para configurar este plugin? Conéctate a nuestro Slack o visita nuestro Foro y obtén ayuda de nuestra comunidad.