تمكين المكون الإضافي Click Analytics Auto-Collection
ملحقات ميزات Application Insights JavaScript SDK هي ميزات إضافية يمكن إضافتها إلى Application Insights JavaScript SDK لتحسين وظائفها.
في هذه المقالة، نغطي المكون الإضافي Click Analytics، الذي يتعقب تلقائيا أحداث النقر على صفحات الويب ويستخدم data-*
سمات أو علامات مخصصة على عناصر HTML لملء بيانات تتبع الاستخدام للحدث.
المتطلبات الأساسية
قم بتثبيت JavaScript SDK قبل تمكين المكون الإضافي Click Analytics.
ما هي البيانات التي يجمعها المكون الإضافي؟
يتم التقاط خصائص المفتاح التالية بشكل افتراضي عند تمكين المكون الإضافي.
خصائص الحدث المخصصة
Name | الوصف | عينة |
---|---|---|
الاسم | اسم الحدث المخصص. لمزيد من المعلومات حول كيفية ملء الاسم، راجع عمود الاسم. | حول |
itemType | نوع الحدث. | customEvent |
sdkVersion | إصدار Application Insights SDK مع النقر فوق المكون الإضافي. | JavaScript:2_ClickPlugin2 |
الأبعاد المخصصة
Name | الوصف | عينة |
---|---|---|
actionType | نوع الإجراء الذي تسبب في حدث النقر. يمكن أن يكون النقر بزر الماوس الأيمن أو الأيمن. | CL |
baseTypeSource | مصدر النوع الأساسي للحدث المخصص. | ClickEvent |
clickCoordinates | إحداثيات مكان بدء حدث النقر. | 659X47 |
المحتوى | عنصر نائب لتخزين سمات وقيم إضافية data-* . |
[{sample1:value1, sample2:value2}] |
pageName | عنوان الصفحة حيث يتم تشغيل حدث النقر. | عنوان العينة |
معرف الأصل | معرف العنصر الأصل أو اسمه. لمزيد من المعلومات حول كيفية ملء parentId، راجع مفتاح parentId. | navbarContainer |
القياسات المخصصة
Name | الوصف | عينة |
---|---|---|
timeToAction | الوقت المستغرق بالمللي ثانية للمستخدم للنقر فوق العنصر منذ تحميل الصفحة الأولية. | 87407 |
إضافة المكون الإضافي Click Analytics
يمكن للمستخدمين إعداد المكون الإضافي Click Analytics Auto-Collection عبر JavaScript (Web) SDK Loader Script أو npm ثم إضافة ملحق إطار عمل اختياريا.
إشعار
في 31 مارس 2025، سينتهي دعم إدخال مفاتيح الأجهزة. سيستمر استيعاب مفتاح الأجهزة في العمل ولكننا لن نقوم بتوفير تحديثات أو أي دعم للميزة. الانتقال إلى سلاسل الاتصال للاستفادة من الإمكانات الجديدة.
أضف التعليمات البرمجية
الصق برنامج JavaScript (Web) SDK Loader Script في أعلى كل صفحة تريد تمكين Application Insights لها.
<script type="text/javascript" src="https://js.monitor.azure.com/scripts/b/ext/ai.clck.2.min.js"></script>
<script type="text/javascript">
var clickPluginInstance = new Microsoft.ApplicationInsights.ClickAnalyticsPlugin();
// Click Analytics configuration
var clickPluginConfig = {
autoCapture : true,
dataTags: {
useDefaultContentNameOrId: true
}
}
// Application Insights configuration
var configObj = {
connectionString: "YOUR_CONNECTION_STRING",
// Alternatively, you can pass in the instrumentation key,
// but support for instrumentation key ingestion will end on March 31, 2025.
// instrumentationKey: "YOUR INSTRUMENTATION KEY",
extensions: [
clickPluginInstance
],
extensionConfig: {
[clickPluginInstance.identifier] : clickPluginConfig
},
};
// Application Insights JavaScript (Web) SDK Loader Script code
!(function (cfg){function e(){cfg.onInit&&cfg.onInit(n)}var x,w,D,t,E,n,C=window,O=document,b=C.location,q="script",I="ingestionendpoint",L="disableExceptionTracking",j="ai.device.";"instrumentationKey"[x="toLowerCase"](),w="crossOrigin",D="POST",t="appInsightsSDK",E=cfg.name||"appInsights",(cfg.name||C[t])&&(C[t]=E),n=C[E]||function(g){var f=!1,m=!1,h={initialize:!0,queue:[],sv:"8",version:2,config:g};function v(e,t){var n={},i="Browser";function a(e){e=""+e;return 1===e.length?"0"+e:e}return n[j+"id"]=i[x](),n[j+"type"]=i,n["ai.operation.name"]=b&&b.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(h.sv||h.version),{time:(i=new Date).getUTCFullYear()+"-"+a(1+i.getUTCMonth())+"-"+a(i.getUTCDate())+"T"+a(i.getUTCHours())+":"+a(i.getUTCMinutes())+":"+a(i.getUTCSeconds())+"."+(i.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z",iKey:e,name:"Microsoft.ApplicationInsights."+e.replace(/-/g,"")+"."+t,sampleRate:100,tags:n,data:{baseData:{ver:2}},ver:undefined,seq:"1",aiDataContract:undefined}}var n,i,t,a,y=-1,T=0,S=["js.monitor.azure.com","js.cdn.applicationinsights.io","js.cdn.monitor.azure.com","js0.cdn.applicationinsights.io","js0.cdn.monitor.azure.com","js2.cdn.applicationinsights.io","js2.cdn.monitor.azure.com","az416426.vo.msecnd.net"],o=g.url||cfg.src,r=function(){return s(o,null)};function s(d,t){if((n=navigator)&&(~(n=(n.userAgent||"").toLowerCase()).indexOf("msie")||~n.indexOf("trident/"))&&~d.indexOf("ai.3")&&(d=d.replace(/(\/)(ai\.3\.)([^\d]*)$/,function(e,t,n){return t+"ai.2"+n})),!1!==cfg.cr)for(var e=0;e<S.length;e++)if(0<d.indexOf(S[e])){y=e;break}var n,i=function(e){var a,t,n,i,o,r,s,c,u,l;h.queue=[],m||(0<=y&&T+1<S.length?(a=(y+T+1)%S.length,p(d.replace(/^(.*\/\/)([\w\.]*)(\/.*)$/,function(e,t,n,i){return t+S[a]+i})),T+=1):(f=m=!0,s=d,!0!==cfg.dle&&(c=(t=function(){var e,t={},n=g.connectionString;if(n)for(var i=n.split(";"),a=0;a<i.length;a++){var o=i[a].split("=");2===o.length&&(t[o[0][x]()]=o[1])}return t[I]||(e=(n=t.endpointsuffix)?t.location:null,t[I]="https://"+(e?e+".":"")+"dc."+(n||"services.visualstudio.com")),t}()).instrumentationkey||g.instrumentationKey||"",t=(t=(t=t[I])&&"/"===t.slice(-1)?t.slice(0,-1):t)?t+"/v2/track":g.endpointUrl,t=g.userOverrideEndpointUrl||t,(n=[]).push((i="SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)",o=s,u=t,(l=(r=v(c,"Exception")).data).baseType="ExceptionData",l.baseData.exceptions=[{typeName:"SDKLoadFailed",message:i.replace(/\./g,"-"),hasFullStack:!1,stack:i+"\nSnippet failed to load ["+o+"] -- Telemetry is disabled\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\nHost: "+(b&&b.pathname||"_unknown_")+"\nEndpoint: "+u,parsedStack:[]}],r)),n.push((l=s,i=t,(u=(o=v(c,"Message")).data).baseType="MessageData",(r=u.baseData).message='AI (Internal): 99 message:"'+("SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) ("+l+")").replace(/\"/g,"")+'"',r.properties={endpoint:i},o)),s=n,c=t,JSON&&((u=C.fetch)&&!cfg.useXhr?u(c,{method:D,body:JSON.stringify(s),mode:"cors"}):XMLHttpRequest&&((l=new XMLHttpRequest).open(D,c),l.setRequestHeader("Content-type","application/json"),l.send(JSON.stringify(s)))))))},a=function(e,t){m||setTimeout(function(){!t&&h.core||i()},500),f=!1},p=function(e){var n=O.createElement(q),e=(n.src=e,t&&(n.integrity=t),n.setAttribute("data-ai-name",E),cfg[w]);return!e&&""!==e||"undefined"==n[w]||(n[w]=e),n.onload=a,n.onerror=i,n.onreadystatechange=function(e,t){"loaded"!==n.readyState&&"complete"!==n.readyState||a(0,t)},cfg.ld&&cfg.ld<0?O.getElementsByTagName("head")[0].appendChild(n):setTimeout(function(){O.getElementsByTagName(q)[0].parentNode.appendChild(n)},cfg.ld||0),n};p(d)}cfg.sri&&(n=o.match(/^((http[s]?:\/\/.*\/)\w+(\.\d+){1,5})\.(([\w]+\.){0,2}js)$/))&&6===n.length?(d="".concat(n[1],".integrity.json"),i="@".concat(n[4]),l=window.fetch,t=function(e){if(!e.ext||!e.ext[i]||!e.ext[i].file)throw Error("Error Loading JSON response");var t=e.ext[i].integrity||null;s(o=n[2]+e.ext[i].file,t)},l&&!cfg.useXhr?l(d,{method:"GET",mode:"cors"}).then(function(e){return e.json()["catch"](function(){return{}})}).then(t)["catch"](r):XMLHttpRequest&&((a=new XMLHttpRequest).open("GET",d),a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE)if(200===a.status)try{t(JSON.parse(a.responseText))}catch(e){r()}else r()},a.send())):o&&r();try{h.cookie=O.cookie}catch(k){}function e(e){for(;e.length;)!function(t){h[t]=function(){var e=arguments;f||h.queue.push(function(){h[t].apply(h,e)})}}(e.pop())}var c,u,l="track",d="TrackPage",p="TrackEvent",l=(e([l+"Event",l+"PageView",l+"Exception",l+"Trace",l+"DependencyData",l+"Metric",l+"PageViewPerformance","start"+d,"stop"+d,"start"+p,"stop"+p,"addTelemetryInitializer","setAuthenticatedUserContext","clearAuthenticatedUserContext","flush"]),h.SeverityLevel={Verbose:0,Information:1,Warning:2,Error:3,Critical:4},(g.extensionConfig||{}).ApplicationInsightsAnalytics||{});return!0!==g[L]&&!0!==l[L]&&(e(["_"+(c="onerror")]),u=C[c],C[c]=function(e,t,n,i,a){var o=u&&u(e,t,n,i,a);return!0!==o&&h["_"+c]({message:e,url:t,lineNumber:n,columnNumber:i,error:a,evt:C.event}),o},g.autoExceptionInstrumented=!0),h}(cfg.cfg),(C[E]=n).queue&&0===n.queue.length?(n.queue.push(e),n.trackPageView({})):e();})({
src: "https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js",
crossOrigin: "anonymous",
// sri: false, // Custom optional value to specify whether fetching the snippet from integrity file and do integrity check
cfg: configObj // configObj is defined above.
});
</script>
لإضافة أو تحديث تكوين برنامج JavaScript (Web) SDK Loader Script، راجع تكوين برنامج JavaScript (Web) SDK Loader Script.
تلميح
إذا كنت ترغب في إضافة ملحق إطار عمل أو قمت بالفعل بإضافة ملحق، فشاهد نماذج React وReact Native وAngular code لمعرفة كيفية إضافة المكون الإضافي Click Analytics.
(اختياري) تعيين سياق المستخدم المصادق عليه
إذا كنت تريد تعيين هذا الإعداد الاختياري، فشاهد تعيين سياق المستخدم المصادق عليه.
إذا كنت تستخدم مصنف HEART مع المكون الإضافي Click Analytics، فلن تحتاج إلى تعيين سياق المستخدم المصادق عليه لمشاهدة بيانات تتبع الاستخدام. لمزيد من المعلومات، راجع وثائق مصنف HEART.
استخدام المكون الإضافي
تصف الأقسام التالية كيفية استخدام المكون الإضافي.
تخزين بيانات تتبع الاستخدام
يتم تخزين بيانات تتبع الاستخدام التي تم إنشاؤها من أحداث النقر كما هو الحال customEvents
في قسم Application Insights > Logs في مدخل Microsoft Azure>.
name
name
يتم ملء عمود استنادا customEvent
إلى القواعد التالية:
- إذا
customDataPrefix
لم يتم الإعلان عنه في التكوين المتقدم،id
يتم استخدام المتوفر فيdata-id
كاسمcustomEvent
. - إذا
customDataPrefix
تم الإعلان،id
يتم استخدام المقدم فيdata-*-id
، مما يعني أنه يجب أن يبدأ بdata
وينتهي بid
، كاسمcustomEvent
. على سبيل المثال، إذا كان عنصر HTML الذي تم النقر فوقه يحتوي على السمة"data-sample-id"="button1"
، فهذا"button1"
هوcustomEvent
الاسم. - إذا لم تكن السمة أو موجودة وإذا
useDefaultContentNameOrId
تم تعيينها إلىtrue
، يتم استخدام سمةid
HTML للعنصر الذي تم النقر فوقه أو اسم محتوى العنصر كاسمcustomEvent
.data-*-id
data-id
إذا كان كل منid
واسم المحتوى موجودين، يتم إعطاء الأسبقية إلىid
. - إذا كان
useDefaultContentNameOrId
هو ، فإنcustomEvent
الاسم هو"not_specified"
false
. نوصي بتعيينuseDefaultContentNameOrId
إلىtrue
لإنشاء بيانات ذات معنى.
contentName
إذا كانت لديك دالة contentName
رد الاتصال في التكوين المتقدم المعرفة، contentName
يتم ملء عمود customEvent
استنادا إلى القواعد التالية:
بالنسبة لعنصر HTML
<a>
الذي تم النقر فوقه، يحاول المكون الإضافي جمع قيمة سمة innerText (النص) الخاصة به. إذا لم يتمكن المكون الإضافي من العثور على هذه السمة، فإنه يحاول جمع قيمة سمةhtml الداخلية الخاصة به.بالنسبة لعنصر HTML
<img>
أو<area>
عنصر تم النقر فوقه، يجمع المكون الإضافي قيمة السمة الخاصة بهalt
.بالنسبة لكافة عناصر HTML الأخرى التي تم النقر فوقها،
contentName
يتم ملؤها استنادا إلى القواعد التالية، والتي يتم سردها بترتيب الأسبقية:- قيمة السمة
value
للعنصر - قيمة السمة
name
للعنصر - قيمة السمة
alt
للعنصر - قيمة سمة innerText للعنصر
- قيمة السمة
id
للعنصر
- قيمة السمة
parentId
مفتاح
لملء parentId
المفتاح داخل customEvent
customDimensions
الجدول في السجلات، قم بتعريف العلامة parentDataTag
أو تعريف السمةdata-parentid
.
يتم إحضار قيمة استنادا parentId
إلى القواعد التالية:
- عند تعريف
parentDataTag
، يجلب المكون الإضافي قيمةid
أوdata-*-id
المعرفة داخل العنصر الأقرب إلى العنصر الذي تم النقر فوقه كparentId
. - إذا تم تعريف كل من
data-*-id
وid
، يتم إعطاء الأسبقية إلىdata-*-id
. - إذا
parentDataTag
تم تعريفه ولكن لم يتمكن المكون الإضافي من العثور على هذه العلامة ضمن شجرة DOM، فإن المكون الإضافي يستخدمid
أوdata-*-id
المحدد داخل العنصر الأقرب إلى العنصر الذي تم النقر فوقه كparentId
. ومع ذلك، نوصي بتعريف السمةdata-{parentDataTag}
أوcustomDataPrefix-{parentDataTag}
لتقليل عدد الحلقات المطلوبة للعثور علىparentId
. يعد الإعلانparentDataTag
مفيدا عندما تحتاج إلى استخدام المكون الإضافي مع خيارات مخصصة. - إذا لم يتم تعريف أي
parentDataTag
معلومات ولم يتم تضمينهاparentId
في العنصر الحالي، فلن يتم جمع أيparentId
قيمة. - إذا
parentDataTag
تم تعريف ،useDefaultContentNameOrId
يتم تعيين إلىfalse
، ويتم تعريف سمةid
فقط داخل العنصر الأقرب إلى العنصر الذي تم النقر عليه، يتمparentId
ملء ك"not_specified"
. لإحضار قيمةid
، قم بتعيينuseDefaultContentNameOrId
إلىtrue
.
عند تعريف السمة data-parentid
أو data-*-parentid
، يجلب المكون الإضافي مثيل هذه السمة الأقرب إلى العنصر الذي تم النقر فوقه، بما في ذلك داخل العنصر الذي تم النقر فوقه إذا كان ذلك ممكنا.
إذا قمت بتعريف parentDataTag
السمة data-parentid
أو data-*-parentid
وتعريفها، يتم إعطاء الأسبقية إلى data-parentid
أو data-*-parentid
.
إذا ظهر تحذير بيانات تتبع الاستخدام "انقر فوق صفوف الأحداث بدون قيمة parentId"، فشاهد إصلاح التحذير "انقر فوق صفوف الأحداث بدون قيمة parentId".
للحصول على أمثلة توضح القيمة التي يتم إحضارها ك parentId
لتكوينات مختلفة، راجع أمثلة على parentid
المفتاح.
تنبيه
- بمجرد
parentDataTag
تضمينه في أي عنصر HTML عبر التطبيق الخاص بك، تبدأ SDK في البحث عن علامات الوالدين عبر التطبيق بأكمله وليس فقط عنصر HTML حيث استخدمته. - إذا كنت تستخدم مصنف HEART مع المكون الإضافي Click Analytics، لتسجيل أحداث HEART أو اكتشافها، يجب الإعلان عن العلامة
parentDataTag
في جميع الأجزاء الأخرى من تطبيق المستخدم النهائي.
customDataPrefix
customDataPrefix
يوفر الخيار في التكوين المتقدم للمستخدم القدرة على تكوين بادئة سمة بيانات للمساعدة في تحديد مكان وجود القلب داخل قاعدة التعليمات البرمجية للفرد. يجب أن تكون البادئة دائما صغيرة وتبدأ ب data-
. على سبيل المثال:
data-heart-
data-team-name-
data-example-
في HTML، data-*
تسمى السمات العمومية سمات البيانات المخصصة التي تسمح بتبادل المعلومات الخاصة بين HTML وتمثيل DOM الخاص به بواسطة البرامج النصية. المتصفحات القديمة مثل سمات إسقاط Internet Explorer وSafari التي لا يفهمونها، ما لم تبدأ ب data-
.
يمكنك استبدال العلامة النجمية (*
) في data-*
بأي اسم يتبع قاعدة الإنتاج لأسماء XML بالقيود التالية.
- يجب ألا يبدأ الاسم ب "xml"، مهما كانت الحالة المستخدمة للأحرف.
- يجب ألا يحتوي الاسم على فاصلة منقوطة (U+003A).
- ينبغي ألا يحتوي الاسم على أحرف كبيرة.
إضافة تكوين متقدم
Name | نوع | Default | الوصف |
---|---|---|---|
autoCapture | Boolean | صواب | تكوين الالتقاط التلقائي. |
أتصل مرة أخرى | IValueCallback | قيمة فارغة | تكوين عمليات رد الاتصال. |
pageTags | الكائن | قيمة فارغة | علامات الصفحة. |
dataTags | ICustomDataTags | قيمة فارغة | توفير علامات البيانات المخصصة لتجاوز العلامات الافتراضية المستخدمة لالتقاط بيانات النقرات. |
urlCollectHash | Boolean | خطأ | تمكين تسجيل القيم بعد الحرف "#" لعنوان URL. |
urlCollectQuery | Boolean | خطأ | تمكين تسجيل سلسلة الاستعلام الخاصة بعنوان URL. |
behaviorValidator | الدالة | قيمة فارغة | دالة رد الاتصال لاستخدامها للتحقق من صحة القيمة data-*-bhvr . لمزيد من المعلومات، راجع قسم behaviorValidator. |
defaultRightClickBhvr | السلسلة (أو) الـرقم | '' | قيمة السلوك الافتراضية عند حدوث حدث النقر بزر الماوس الأيمن. يتم تجاوز هذه القيمة إذا كان العنصر يحتوي على السمة data-*-bhvr . |
dropInvalidEvents | Boolean | خطأ | وضع علامة لإسقاط الأحداث التي لا تحتوي على بيانات نقر مفيدة. |
IValueCallback
Name | نوع | Default | الوصف |
---|---|---|---|
pageName | الدالة | قيمة فارغة | دالة لتجاوز سلوك الالتقاط الافتراضي pageName . |
pageActionPageTags | الدالة | قيمة فارغة | دالة رد اتصال لزيادة الإعداد الافتراضي pageTags الذي تم جمعه أثناء pageAction الحدث. |
contentName | الدالة | قيمة فارغة | دالة رد اتصال لملء مخصصة contentName . |
ICustomDataTags
Name | نوع | الإعداد الافتراضي | العلامة الافتراضية لاستخدامها في HTML | الوصف |
---|---|---|---|---|
useDefaultContentNameOrId | Boolean | خطأ | غير متوفر | إذا true ، يجمع سمة id HTML القياسية عندما contentName لا يتم وضع علامة على عنصر معين ببادئة البيانات الافتراضية أو customDataPrefix . وإلا، لا يتم جمع سمة id HTML القياسية ل contentName . |
customDataPrefix | السلسلة | data- |
data-* |
اسم محتوى الالتقاط التلقائي وقيمة العناصر التي تم تمييزها بالبادئة المتوفرة. على سبيل المثال، data-*-id وdata-<yourcustomattribute> يمكن استخدامها في علامات HTML. |
aiBlobAttributeTag | السلسلة | ai-blob |
data-ai-blob |
يدعم المكون الإضافي سمة كائن ثنائي كبير الحجم JSON بدلا من السمات الفردية data-* . |
metaDataPrefix | السلسلة | قيمة فارغة | غير متوفر | الالتقاط التلقائي لاسم عنصر التعريف ل HTML Head والمحتوى مع البادئة المتوفرة عند التقاطها. على سبيل المثال، يمكن استخدام custom- في علامات HTML. |
captureAllMetaDataContent | Boolean | خطأ | غير متوفر | الالتقاط التلقائي لجميع أسماء العناصر الوصفية الخاصة بـ HTML Head ومحتوياتها. الافتراضي خطأ. إذا تم تمكينه، فإنه يتجاوز المقدمة metaDataPrefix . |
parentDataTag | السلسلة | قيمة فارغة | غير متوفر | parentId إحضار في السجلات عند data-parentid مواجهة أو data-*-parentid عدم مواجهتها. للكفاءة، يتوقف عن اجتياز DOM لالتقاط اسم المحتوى وقيمة العناصر عند data-{parentDataTag} مواجهة أو customDataPrefix-{parentDataTag} سمة. لمزيد من المعلومات، راجع مفتاح parentId. |
dntDataTag | السلسلة | ai-dnt |
data-ai-dnt |
يتجاهل المكون الإضافي لالتقاط بيانات تتبع الاستخدام عناصر HTML بهذه السمة. |
behaviorValidator
behaviorValidator
تتحقق الدالات تلقائيا من أن السلوكيات ذات العلامات في التعليمات البرمجية تتوافق مع قائمة معرفة مسبقا. تضمن الوظائف أن السلوكيات ذات العلامات متسقة مع التصنيف الذي تم إنشاؤه في مؤسستك. ليس مطلوبا أو متوقعا أن يستخدم معظم عملاء Azure Monitor هذه الوظائف، ولكنها متوفرة للسيناريوهات المتقدمة. يمكن أن تساعد دوال behaviorValidator في الممارسات التي يمكن الوصول إليها بشكل أكبر.
تظهر السلوكيات في حقل customDimensions داخل جدول CustomEvents.
دالات رد الاتصال
يتم عرض ثلاث دالات مختلفة behaviorValidator
لرد الاتصال كجزء من هذا الملحق. يمكنك أيضا استخدام وظائف رد الاتصال الخاصة بك إذا لم تحل الوظائف المكشوفة متطلباتك. الهدف هو إحضار بنية بيانات سلوكك. يستخدم المكون الإضافي دالة المدقق هذه أثناء استخراج السلوكيات من علامات البيانات.
Name | الوصف |
---|---|
BehaviorValueValidator | استخدم دالة رد الاتصال هذه إذا كانت بنية بيانات السلوك عبارة عن صفيف من السلاسل. |
BehaviorMapValidator | استخدم دالة رد الاتصال هذه إذا كانت بنية بيانات السلوك عبارة عن قاموس. |
BehaviorEnumValidator | استخدم دالة رد الاتصال هذه إذا كانت بنية بيانات السلوك عبارة عن قائمة تعداد. |
تمرير قيم السلسلة مقابل القيم الرقمية
لتقليل وحدات البايت التي تمررها، مرر القيمة الرقمية بدلا من السلسلة النصية الكاملة. إذا لم تكن التكلفة مشكلة، يمكنك تمرير السلسلة النصية الكاملة (على سبيل المثال، NAVIGATIONBACK).
نموذج الاستخدام مع behaviorValidator
فيما يلي عينة لما قد يبدو عليه مدقق خريطة السلوك. قد يبدو تصنيفك مختلفا، اعتمادا على تصنيف مؤسستك والأحداث التي تجمعها.
var clickPlugin = Microsoft.ApplicationInsights.ClickAnalyticsPlugin;
var clickPluginInstance = new clickPlugin();
// Behavior enum values
var behaviorMap = {
UNDEFINED: 0, // default, Undefined
///////////////////////////////////////////////////////////////////////////////////////////////////
// Page Experience [1-19]
///////////////////////////////////////////////////////////////////////////////////////////////////
NAVIGATIONBACK: 1, // Advancing to the previous index position within a webpage
NAVIGATION: 2, // Advancing to a specific index position within a webpage
NAVIGATIONFORWARD: 3, // Advancing to the next index position within a webpage
APPLY: 4, // Applying filter(s) or making selections
REMOVE: 5, // Applying filter(s) or removing selections
SORT: 6, // Sorting content
EXPAND: 7, // Expanding content or content container
REDUCE: 8, // Sorting content
CONTEXTMENU: 9, // Context menu
TAB: 10, // Tab control
COPY: 11, // Copy the contents of a page
EXPERIMENTATION: 12, // Used to identify a third-party experimentation event
PRINT: 13, // User printed page
SHOW: 14, // Displaying an overlay
HIDE: 15, // Hiding an overlay
MAXIMIZE: 16, // Maximizing an overlay
MINIMIZE: 17, // Minimizing an overlay
BACKBUTTON: 18, // Clicking the back button
///////////////////////////////////////////////////////////////////////////////////////////////////
// Scenario Process [20-39]
///////////////////////////////////////////////////////////////////////////////////////////////////
STARTPROCESS: 20, // Initiate a web process unique to adopter
PROCESSCHECKPOINT: 21, // Represents a checkpoint in a web process unique to adopter
COMPLETEPROCESS: 22, // Page Actions that complete a web process unique to adopter
SCENARIOCANCEL: 23, // Actions resulting from cancelling a process/scenario
///////////////////////////////////////////////////////////////////////////////////////////////////
// Download [40-59]
///////////////////////////////////////////////////////////////////////////////////////////////////
DOWNLOADCOMMIT: 40, // Initiating an unmeasurable off-network download
DOWNLOAD: 41, // Initiating a download
///////////////////////////////////////////////////////////////////////////////////////////////////
// Search [60-79]
///////////////////////////////////////////////////////////////////////////////////////////////////
SEARCHAUTOCOMPLETE: 60, // Auto-completing a search query during user input
SEARCH: 61, // Submitting a search query
SEARCHINITIATE: 62, // Initiating a search query
TEXTBOXINPUT: 63, // Typing or entering text in the text box
///////////////////////////////////////////////////////////////////////////////////////////////////
// Commerce [80-99]
///////////////////////////////////////////////////////////////////////////////////////////////////
VIEWCART: 82, // Viewing the cart
ADDWISHLIST: 83, // Adding a physical or digital good or services to a wishlist
FINDSTORE: 84, // Finding a physical store
CHECKOUT: 85, // Before you fill in credit card info
REMOVEFROMCART: 86, // Remove an item from the cart
PURCHASECOMPLETE: 87, // Used to track the pageView event that happens when the CongratsPage or Thank You page loads after a successful purchase
VIEWCHECKOUTPAGE: 88, // View the checkout page
VIEWCARTPAGE: 89, // View the cart page
VIEWPDP: 90, // View a PDP
UPDATEITEMQUANTITY: 91, // Update an item's quantity
INTENTTOBUY: 92, // User has the intent to buy an item
PUSHTOINSTALL: 93, // User has selected the push to install option
///////////////////////////////////////////////////////////////////////////////////////////////////
// Authentication [100-119]
///////////////////////////////////////////////////////////////////////////////////////////////////
SIGNIN: 100, // User sign-in
SIGNOUT: 101, // User sign-out
///////////////////////////////////////////////////////////////////////////////////////////////////
// Social [120-139]
///////////////////////////////////////////////////////////////////////////////////////////////////
SOCIALSHARE: 120, // "Sharing" content for a specific social channel
SOCIALLIKE: 121, // "Liking" content for a specific social channel
SOCIALREPLY: 122, // "Replying" content for a specific social channel
CALL: 123, // Click on a "call" link
EMAIL: 124, // Click on an "email" link
COMMUNITY: 125, // Click on a "community" link
///////////////////////////////////////////////////////////////////////////////////////////////////
// Feedback [140-159]
///////////////////////////////////////////////////////////////////////////////////////////////////
VOTE: 140, // Rating content or voting for content
SURVEYCHECKPOINT: 145, // Reaching the survey page/form
///////////////////////////////////////////////////////////////////////////////////////////////////
// Registration, Contact [160-179]
///////////////////////////////////////////////////////////////////////////////////////////////////
REGISTRATIONINITIATE: 161, // Initiating a registration process
REGISTRATIONCOMPLETE: 162, // Completing a registration process
CANCELSUBSCRIPTION: 163, // Canceling a subscription
RENEWSUBSCRIPTION: 164, // Renewing a subscription
CHANGESUBSCRIPTION: 165, // Changing a subscription
REGISTRATIONCHECKPOINT: 166, // Reaching the registration page/form
///////////////////////////////////////////////////////////////////////////////////////////////////
// Chat [180-199]
///////////////////////////////////////////////////////////////////////////////////////////////////
CHATINITIATE: 180, // Initiating a chat experience
CHATEND: 181, // Ending a chat experience
///////////////////////////////////////////////////////////////////////////////////////////////////
// Trial [200-209]
///////////////////////////////////////////////////////////////////////////////////////////////////
TRIALSIGNUP: 200, // Signing up for a trial
TRIALINITIATE: 201, // Initiating a trial
///////////////////////////////////////////////////////////////////////////////////////////////////
// Signup [210-219]
///////////////////////////////////////////////////////////////////////////////////////////////////
SIGNUP: 210, // Signing up for a notification or service
FREESIGNUP: 211, // Signing up for a free service
///////////////////////////////////////////////////////////////////////////////////////////////////
// Referrals [220-229]
///////////////////////////////////////////////////////////////////////////////////////////////////
PARTNERREFERRAL: 220, // Navigating to a partner's web property
///////////////////////////////////////////////////////////////////////////////////////////////////
// Intents [230-239]
///////////////////////////////////////////////////////////////////////////////////////////////////
LEARNLOWFUNNEL: 230, // Engaging in learning behavior on a commerce page (for example, "Learn more click")
LEARNHIGHFUNNEL: 231, // Engaging in learning behavior on a non-commerce page (for example, "Learn more click")
SHOPPINGINTENT: 232, // Shopping behavior prior to landing on a commerce page
///////////////////////////////////////////////////////////////////////////////////////////////////
// Video [240-259]
///////////////////////////////////////////////////////////////////////////////////////////////////
VIDEOSTART: 240, // Initiating a video
VIDEOPAUSE: 241, // Pausing a video
VIDEOCONTINUE: 242, // Pausing or resuming a video
VIDEOCHECKPOINT: 243, // Capturing predetermined video percentage complete
VIDEOJUMP: 244, // Jumping to a new video location
VIDEOCOMPLETE: 245, // Completing a video (or % proxy)
VIDEOBUFFERING: 246, // Capturing a video buffer event
VIDEOERROR: 247, // Capturing a video error
VIDEOMUTE: 248, // Muting a video
VIDEOUNMUTE: 249, // Unmuting a video
VIDEOFULLSCREEN: 250, // Making a video full screen
VIDEOUNFULLSCREEN: 251, // Making a video return from full screen to original size
VIDEOREPLAY: 252, // Making a video replay
VIDEOPLAYERLOAD: 253, // Loading the video player
VIDEOPLAYERCLICK: 254, // Click on a button within the interactive player
VIDEOVOLUMECONTROL: 255, // Click on video volume control
VIDEOAUDIOTRACKCONTROL: 256, // Click on audio control within a video
VIDEOCLOSEDCAPTIONCONTROL: 257, // Click on the closed-caption control
VIDEOCLOSEDCAPTIONSTYLE: 258, // Click to change closed-caption style
VIDEORESOLUTIONCONTROL: 259, // Click to change resolution
///////////////////////////////////////////////////////////////////////////////////////////////////
// Advertisement Engagement [280-299]
///////////////////////////////////////////////////////////////////////////////////////////////////
ADBUFFERING: 283, // Ad is buffering
ADERROR: 284, // Ad error
ADSTART: 285, // Ad start
ADCOMPLETE: 286, // Ad complete
ADSKIP: 287, // Ad skipped
ADTIMEOUT: 288, // Ad timed out
OTHER: 300 // Other
};
// Application Insights Configuration
var configObj = {
connectionString: "YOUR_CONNECTION_STRING",
// Alternatively, you can pass in the instrumentation key,
// but support for instrumentation key ingestion will end on March 31, 2025.
// instrumentationKey: "YOUR INSTRUMENTATION KEY",
extensions: [clickPluginInstance],
extensionConfig: {
[clickPluginInstance.identifier]: {
behaviorValidator: Microsoft.ApplicationInsights.BehaviorMapValidator(behaviorMap),
defaultRightClickBhvr: 9
},
},
};
var appInsights = new Microsoft.ApplicationInsights.ApplicationInsights({
config: configObj
});
appInsights.loadAppInsights();
تطبيق النموذج
راجع تطبيق ويب بسيطا مع تمكين المكون الإضافي للتحليل التلقائي ل Click Analytics لمعرفة كيفية تنفيذ خصائص الحدث المخصصة مثل Name
parentid
والسلوك والمحتوى المخصصين. راجع نموذج التطبيق readme للحصول على معلومات حول مكان العثور على بيانات النقر.
أمثلة على parentId
المفتاح
توضح الأمثلة التالية القيمة التي يتم إحضارها ك parentId
لتكوينات مختلفة.
توضح الأمثلة كيف إذا تم parentDataTag
تعريفه ولكن المكون الإضافي لا يمكنه العثور على هذه العلامة ضمن شجرة DOM، يستخدم id
المكون الإضافي العنصر الأصل الأقرب إليه.
المثال 1
في المثال 1، لم يتم الإعلان عن parentDataTag
أو data-parentid
data-*-parentid
لم يتم تعريفه في أي عنصر. يوضح هذا المثال تكوينا حيث لا يتم جمع قيمة ل parentId
.
export const clickPluginConfigWithUseDefaultContentNameOrId = {
dataTags : {
customDataPrefix: "",
parentDataTag: "",
dntDataTag: "ai-dnt",
captureAllMetaDataContent:false,
useDefaultContentNameOrId: true,
autoCapture: true
},
};
<div className="test1" data-id="test1parent">
<div>Test1</div>
<div>with id, data-id, parent data-id defined</div>
<Button id="id1" data-id="test1id" variant="info" onClick={trackEvent}>Test1</Button>
</div>
بالنسبة للعنصر <Button>
الذي تم النقر فوقه، تكون قيمة parentId
هي “not_specified”
، لأنه لا يتم تعريف أي parentDataTag
تفاصيل ولا يتم توفير معرف عنصر أصل داخل العنصر الحالي.
المثال 2
في المثال 2، parentDataTag
يتم تعريف و data-parentid
. يوضح هذا المثال كيفية تجميع تفاصيل المعرف الأصل.
export const clickPluginConfigWithParentDataTag = {
dataTags : {
customDataPrefix: "",
parentDataTag: "group",
ntDataTag: "ai-dnt",
captureAllMetaDataContent:false,
useDefaultContentNameOrId: false,
autoCapture: true
},
};
<div className="test2" data-group="buttongroup1" data-id="test2parent">
<div>Test2</div>
<div>with data-id, parentid, parent data-id defined</div>
<Button data-id="test2id" data-parentid = "parentid2" variant="info" onClick={trackEvent}>Test2</Button>
</div>
بالنسبة للعنصر <Button>
الذي تم النقر فوقه، تكون قيمة parentId
هي parentid2
. على الرغم من parentDataTag
الإعلان، data-parentid
يتم تعريف مباشرة داخل العنصر . لذلك، هذه القيمة لها الأسبقية على جميع المعرفات الأصلية الأخرى أو تفاصيل المعرف المحددة في عناصرها الأصلية.
المثال 3
في المثال 3، parentDataTag
يتم الإعلان عنه ولم يتم تعريف السمة data-parentid
أو data-*-parentid
. يوضح هذا المثال كيف يمكن أن يكون الإعلان parentDataTag
مفيدا لجمع قيمة للحالات parentId
التي لا تحتوي فيها العناصر الديناميكية على id
أو data-*-id
.
export const clickPluginConfigWithParentDataTag = {
dataTags : {
customDataPrefix: "",
parentDataTag: "group",
dntDataTag: "ai-dnt",
captureAllMetaDataContent:false,
useDefaultContentNameOrId: false,
autoCapture: true
},
};
<div className="test6" data-group="buttongroup1" data-id="test6grandparent">
<div>Test6</div>
<div>with data-id, grandparent data-group defined, parent data-id defined</div>
<div data-id="test6parent">
<Button data-id="test6id" variant="info" onClick={trackEvent}>Test6</Button>
</div>
</div>
بالنسبة للعنصر <Button>
الذي تم النقر فوقه، فإن قيمة parentId
هي test6parent
، لأنه parentDataTag
تم تعريفها. يسمح هذا الإعلان للمكون الإضافي باجتياز شجرة العنصر الحالية، وبالتالي سيتم استخدام معرف أقرب أصل له عندما لا يتم توفير تفاصيل المعرف الأصل مباشرة داخل العنصر الحالي. data-group="buttongroup1"
مع المعرفة، يجد parentId
المكون الإضافي أكثر كفاءة.
إذا قمت بإزالة السمة data-group="buttongroup1"
، فإن قيمة parentId
لا تزال test6parent
، لأنه parentDataTag
لا يزال معلنا.
استكشاف الأخطاء وإصلاحها
راجع «dedicated troubleshooting article».
الخطوات التالية
- تأكد من تدفق البيانات.
- راجع الوثائق المتعلقة باستخدام مصنف HEART لتحليلات المنتجات الموسعة.
- راجع مستودع GitHub وحزمة npm ل Click Analytics Autocollection Plug-in.
- استخدم Events Analysis في تجربة الاستخدام لتحليل النقرات العلوية والشرائح حسب الأبعاد المتوفرة.
- راجع Log Analytics إذا لم تكن على دراية بعملية كتابة استعلام.
- إنشاء مصنف أو تصديره إلى Power BI لإنشاء مرئيات مخصصة لبيانات النقر.