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
/**
* 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
})
تخصيص الأدوات (Widgets)
Section titled تخصيص الأدوات (Widgets)يمكن تخصيص أداة التحكم عن بُعد وكذلك أدوات المكالمة، تلك التي يراها المستخدم النهائي، بشكل كامل.
أداة التحكم عن بُعد
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 | معرّف زر إنهاء التحكم |
الاستدعاءات (Callbacks)
Section titled الاستدعاءات (Callbacks)فيما يلي قائمة بجميع الاستدعاءات:
callConfirm: تخصيص نص و/أو تخطيط النافذة المنبثقة لطلب المكالمة.controlConfirm: تخصيص نص و/أو تخطيط النافذة المنبثقة لطلب التحكم عن بُعد.config: يحتوي على إعدادات مخصّصة لخادم ICE/TURN. القيمة الافتراضية هي{ 'iceServers': [{ 'urls': 'stun:stun.l.google.com:19302' }], 'sdpSemantics': 'unified-plan' }.onAgentConnect: () => (()=>void | void): تُطلَق دالة الاستدعاء هذه بمجرد بدء جلسة مباشرة وتُرجِع تفاصيل الوكيل (email و name و 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 و name و query). يمكنها أيضاً أن تُرجِعonCallEndالذي سيتم استدعاؤه عند انتهاء المكالمة. في حالة الاتصال غير المستقر، قد يُستدعى هذا عدة مرات. فيما يلي مثال:
onCallStart: () => {
console.log("Call started")
const onCallEnd = () => console.log("Call ended")
return onCallEnd
}
onRemoteControlStart: ({ email, name, query }) => (()=>void | void): تُطلَق دالة الاستدعاء هذه بمجرد بدء جلسة تحكم عن بُعد وتُرجِع تفاصيل الوكيل (email و name و 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 و name و query).
onRemoteControlDeny: ({ email, name, query }) => {
console.log("Remote control request denied for", email)
}
onRecordingDeny?: (agentInfo: Record<string, any>) => any;: تُطلَق دالة الاستدعاء هذه عندما يرفض المستخدم جلسة التسجيل أثناء مرحلة الطلب وتُرجِع تفاصيل الوكيل (email و name و query).
onRecordingDeny: ({ email, name, query }) => {
console.log("Recording session denied")
}
هل لديك أسئلة؟
Section titled هل لديك أسئلة؟هل تواجه مشكلة في إعداد هذه الإضافة؟ يرجى الانضمام إلى Slack الخاص بنا أو الاطلاع على المنتدى الخاص بنا والحصول على المساعدة من مجتمعنا.