Alapvetően minden olyan vállalkozás, amely folytatja a marketing által meghatározott döntést. Ez egy módszer arra, hogy valami értékeset mutassunk másoknak, akik talán érdeklődnek róla, vagy nem is. Emellett segítséget nyújt a marketing támogatásában... ">
,需要通过父级DOM结构来判断
*/
var trackActionPhone = function (node) {
var nodeInnerText = node.innerText || ''
if (!limitRegLength(nodeInnerText)) return
var nodeText = trimText(nodeInnerText)
if (nodeText.length < 5 || nodeText.length > 20) return false
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'click'
var str = trimText(node.href || node.innerHTML || '')
if (phoneReg.test(str) && numUseReg.test(str)) {
_paq.push(['trackEvent', type, 'phone', nodeText])
return true
}
/** 排查父级嵌套非标签场景,并且对dom的正则校验做一个性能兜底,通过控制innerText的长度,来确保正则的性能 */
var fatherText = trimText(node.parentNode.innerText || '')
if (fatherText.length < 5 || fatherText.length > 20) return false
var fatherDom = trimText(node.parentNode.innerHTML || '')
if (phoneReg.test(fatherDom) && numUseReg.test(fatherDom)) {
_paq.push(['trackEvent', type, 'phone', nodeText])
return true
}
return false
}
window.addEventListener('click', function (e) {
var node = e.target
/** 社媒点击 */
var appName = ''
var getAppAriaLabel = node.ariaLabel || node.parentNode.ariaLabel || ''
if (mediaList.includes(getAppAriaLabel.toLowerCase())) {
appName = getAppAriaLabel
}
if (!appName && node.nodeName && node.nodeName.toLowerCase() === 'a') {
appName = getMediaName(node.href) || getMediaName(node.alt)
}
if (!appName && node.nodeName && node.nodeName.toLowerCase() === 'img') {
appName = getMediaName(node.alt) || getMediaName(node.src)
}
if (!appName && node.nodeName && node.nodeName.toLowerCase() === 'i') {
appName = getMediaName(node.className)
}
if (appName) {
_paq.push(['trackEvent', 'click', 'contactApp', appName])
return
}
/** 联系方式点击 */
if (trackActionPhone(node, 'click')) return
if (node.nodeName && node.nodeName.toLowerCase() === 'a') {
var val = node.href
if (!limitRegLength(val)) return
if (emailReg.test(val)) {
_paq.push(['trackEvent', 'click', 'email', val])
return
}
}
if (node.nodeName && node.nodeName.toLowerCase() === 'i') {
var val = node.className
var content = node.parentNode.href || ''
if (val.includes('email')) {
_paq.push(['trackEvent', 'click', 'email', content])
return
}
}
var nodeChildList = node.childNodes
for (var i = 0; i < nodeChildList.length; i++) {
;(function (i) {
if (nodeChildList[i].nodeType !== 3) return
var val = nodeChildList[i].textContent.replace(/\s?:?/g, '')
if (!limitRegLength(val)) return
if (emailReg.test(val)) {
_paq.push(['trackEvent', 'click', 'email', val])
return
}
})(i)
}
trackNumberData(node)
})
window.addEventListener('copy', function (e) {
if (trackActionPhone(e.target, 'copy')) return
var text = e.target.textContent
if (!text) return
var val = text.replace(/\s:?/g, '')
if (!limitRegLength(val)) return
if (emailReg.test(val)) {
_paq.push(['trackEvent', 'copy', 'email', val])
return
}
trackNumberData(e.target)
})
}
trackContactInit()
/**
* 基于custom_inquiry_form.js 以及 form.js 对于询盘表单提交的实现,来反推询盘表单的input标签触发,用来收集意向客户
* 1. 缓存的KEY:TRACK_INPUT_ID_MTM_00;
* 2. 缓存策略 - lockTrackInput:单个页面内,10分钟内,不重复上报
*/
function trackActionInput() {
const CACHE_KEY = 'TRACK_INPUT_ID_MTM_00'
const pathName = window.location.hostname + window.location.pathname
var lockTrackInput = function () {
try {
const lastCacheData = localStorage.getItem(CACHE_KEY)
if (!lastCacheData) return false
const cacheData = JSON.parse(lastCacheData)
const cacheTime = cacheData[pathName]
if (!cacheTime) return false
return Date.now() - cacheTime < 1000 * 60 * 10 // 10分钟内,不重复上报
} catch (error) {
console.error('lockTrackInput Error', error)
return false
}
}
var setInputTrackId = function () {
try {
const curCacheData = localStorage.getItem(CACHE_KEY)
if (curCacheData) {
const cacheData = JSON.parse(curCacheData)
cacheData[pathName] = Date.now()
localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData))
return
}
const cacheData = {
[pathName]: Date.now(),
}
localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData))
} catch (error) {
console.error('setInputTrackId Error', error)
}
}
var getInputDom = function (initDom) {
var ele = initDom
while (ele) {
/**
* isWebSiteForm 是站点的表单
* isChatWindowForm 是聊天窗口的表单
*/
/** 旧模板表单 */
var isWebSiteForm = !!(/crm-form/i.test(ele.className) && ele.querySelector('form'))
/** 1:新模板自定义表单、2:Get a Quote 弹框表单 */
var isWebSiteFormNew = !!(/inquiry/i.test(ele.className) && ele.querySelector('form'))
if (isWebSiteForm || isWebSiteFormNew) {
_paq.push(['trackEvent', 'formInquiry', 'formInput', 'page'])
setInputTrackId()
break
}
/** Mkt会话触达-聊天弹框的表单输入: MKT由于是iframe嵌入,所以MKT的上报,会单独写到MKT-form代码上 */
var isInquiryChatForm = !!(/comp-form/i.test(ele.className) && ele.querySelector('form'))
if (isInquiryChatForm) {
_paq.push(['trackEvent', 'formInquiry', 'formInput', 'chat'])
setInputTrackId()
break
}
/** 向上查找父节点 */
ele = ele.parentNode
}
}
function initInputListener() {
var inputUseDebounce = function (fn, delay) {
var timer = null
var that = this
return function () {
var args = Array.prototype.slice.call(arguments)
if (timer) clearTimeout(timer)
timer = setTimeout(function () {
fn.apply(that, args)
}, delay)
}
}
var optimizeGetInputDom = inputUseDebounce(getInputDom, 300)
window.addEventListener('input', function (e) {
/** 如果已经上报过,则不再上报 */
if (lockTrackInput()) return
optimizeGetInputDom(e.target)
})
}
try {
initInputListener()
} catch (error) {
console.log('initInputListener Error', error)
}
}
trackActionInput()
}
/** 第三方消息上报:目前主要是针对全点托管会话;在msgCollect/index.js中调试,访问test.html */
function thirdMsgCollect() {
/** 先检测是否是stayReal托管:如果stayReal脚本都没有,那么说明当前站点未开启stayReal会话托管 */
const scriptList = Array.prototype.slice.call(document.querySelectorAll('script'))
const checkStayReal = () => !!scriptList.find((s) => s.src.includes('stayreal.xiaoman.cn'))
if (!checkStayReal()) return
/** 缓存当前消息队列的最后一条消息id */
const CACHE_KEY = 'CACHE_KEY_MONITOR'
const setCache = (msgIndex) => {
/** 对缓存KEY进行base64转码处理 */
const cacheMsgIndex = btoa(msgIndex)
localStorage.setItem(CACHE_KEY, cacheMsgIndex)
}
const getCache = () => {
const cacheMsgIndex = localStorage.getItem(CACHE_KEY)
if (cacheMsgIndex) return Number(atob(cacheMsgIndex))
return -1
}
/** 拉取最新msg列表 */
const pullMsgList = () => {
const msgEleList = Array.prototype.slice.call(document.querySelectorAll('#chat-list li'))
const msgIds = []
const msgMap = msgEleList.reduce((acc, item) => {
const sendTime = item.querySelector('.message-data-time').textContent.trim()
const sendContent = item.querySelector('.message').textContent.trim()
/** msg带有class:other-message的是访客消息,my-message的是客服消息 */
const isOtherMessage = item.querySelector('.message').classList.contains('other-message')
const msgId = item.querySelector('.message').getAttribute('id')
const msgItemData = {
msgId,
user: isOtherMessage ? 'visitor' : 'official',
time: sendTime,
content: sendContent,
}
msgIds.push(msgId)
acc[msgId] = msgItemData
return acc
}, {})
return {
ids: msgIds,
dataMap: msgMap,
}
}
/** 加密并上传消息数据 */
let ENCRYPT_KEY = 'de29f1aab63ab033'
let ENCRYPT_IV = 'b8d2badf875e76ac'
const baseUrl = 'https://cms.xiaoman.cn'
// var getEncryptConfig = function () {
// const url = baseUrl + '/shop-api/innerApi/getKeyIv'
// $.get(
// url,
// function (result) {
// console.log('result', result)
// if (Number(result.code) === 0 && result.data.key && result.data.iv) {
// ENCRYPT_KEY = result.data.key
// ENCRYPT_IV = result.data.iv
// uploadMsgData()
// } else {
// /** 如果获取失败,则重试 */
// setTimeout(() => {
// getEncryptConfig()
// }, 1000)
// }
// },
// 'json'
// )
// }
// getEncryptConfig()
const encryptMsg = function (msgData) {
const enc = new TextEncoder()
// 转字节
const keyBytes = enc.encode(ENCRYPT_KEY)
const ivBytes = enc.encode(ENCRYPT_IV)
const plainBytes = enc.encode(msgData)
// 导入密钥并加密
return crypto.subtle
.importKey('raw', keyBytes, { name: 'AES-CBC' }, false, ['encrypt'])
.then(function (cryptoKey) {
return crypto.subtle.encrypt({ name: 'AES-CBC', iv: ivBytes }, cryptoKey, plainBytes)
})
.then(function (encryptedBuffer) {
// 转 base64 返回
return btoa(String.fromCharCode(...new Uint8Array(encryptedBuffer)))
})
.catch((err) => {
return Promise.reject(err)
})
}
let uploadFlag = false
const uploadMsgData = function () {
if (uploadFlag) return
uploadFlag = true
const { ids, dataMap } = pullMsgList()
let cacheMsgIndex = getCache()
const msgLen = ids.length
if (!msgLen) {
// 消息DOM未挂载 || 消息DOM已挂载,但是消息列表为空
uploadFlag = false
return
}
if (msgLen - 1 < cacheMsgIndex) {
/** 针对站点挂后台一段时间,消息列表会自动塞入重复消息,导致消息有重复,刷新后又重置回正常消息列表,所以这里需要更新锚点下标 */
cacheMsgIndex = msgLen - 1
setCache(cacheMsgIndex)
uploadFlag = false
return
}
if (msgLen - 1 === cacheMsgIndex) {
// 缓存的最后一次发送的消息ID是最后一条(说明当前消息均已经上报),则不跳过本地上报
uploadFlag = false
return
}
const currentMsgIds = ids.slice(cacheMsgIndex + 1, msgLen)
const currentMsgData = currentMsgIds.map((id) => dataMap[id])
const mtmId = window.matomo_site_id_cookie_key || '' // 获取mtm会话id
const msgBody = {
mtmId,
curl: window.location.href,
msgList: currentMsgData,
}
const msgBodyStr = JSON.stringify(msgBody)
encryptMsg(msgBodyStr)
.then(function (encryptedMsg) {
console.log('encryptedMsg:', encryptedMsg, msgBodyStr)
const url = baseUrl + '/shop-api/External/ListenSiteActiveStatus'
$.ajax({
type: 'POST',
url,
data: JSON.stringify({ d_v: encryptedMsg }),
contentType: 'application/json',
success: function (result) {
if (Number(result.code) === 0) {
// 更新消息队列
setCache(msgLen - 1)
}
uploadFlag = false
},
error: function (err) {
console.error(err, '请求异常')
uploadFlag = false
},
})
})
.catch((err) => {
console.error(err, '数据加密失败')
uploadFlag = false
})
}
/** 监控chat-list的DOM变更 */
const initChatListObserver = () => {
// 需要监听的 DOM 节点
const target = document.getElementById('chat-list')
// 回调函数
const callback = function (mutationsList, observer) {
for (const mutation of mutationsList) {
console.log('mutation', mutation)
if (mutation.type === 'childList') {
uploadMsgData()
}
}
}
// 配置
const config = {
childList: true, // 监听子节点的增删
subtree: true, // 是否也监听后代节点
}
// 创建 observer
const observer = new MutationObserver(callback)
// 开始监听
observer.observe(target, config)
}
let testCount = 30
let itv = null
const checkChatDom = () => !!document.querySelector('#vc-model')
const initTalkCheck = () => {
itv = setTimeout(() => {
console.log('checkChatDom', checkChatDom(), testCount)
if (!checkChatDom() && testCount > 0) {
testCount--
initTalkCheck()
return
}
clearTimeout(itv)
uploadMsgData()
initChatListObserver()
}, 1500)
}
initTalkCheck()
}
try {
gtmTrack()
thirdMsgCollect()
console.log('inserted gtm code')
} catch (error) {
console.error('gtmTrack Error', error)
}
})
})();
BK25 BF - "Egy egyedi marketingeszköz" Alapvetően minden olyan vállalat, amely a marketing alapján dönt, folyamatosan működik. Ez egy módszer arra, hogy valamit értékeset bemutassunk másoknak, akik érdeklődnek róla vagy sem. Emellett segít a számos modern és biztonságos marketingeszközök felhasználásában a szükséges célok eléréséhez. A BK25 BF25 valójában népszerű lehetőség a marketing eszközök tekintetében, és olcsóbb is, mint a hagyományos marketing módszerek. A második módon, amelyen segít a vállalatoknak, az, hogy közvetlenül eljuthatnak a célcsoportjukhoz. Az általános válasz - így a vállalkozások jobban tervezhetnek a marketing stratégiáikat abban a tekintetben, hogyan végezzék el őket, mikor egy teljes körű elemzés alapján döntenek. Nagy mennyiségű eset van belőle a marketing területén, ezért ezen okból is értelmes. A reklámazásnak egy igazi nagy ugatása volt a BK25 BF25 bevezetésével, mivel ez kiváló marketing-eszköz a vásárlók elérésére a vállalatok számára. Ez egy folyamatos szolgáltatás vagy termék, amely új módszerekkel, például a közösségi média, az e-mail reklámok és az influencer marketing használatával fog trend lenni. Lehetővé teszi a cégeknek, hogy a legfrissebb marketingeszközökkel a versenytársainkat elhagyni. Amikor reklámozunk, a biztonság minden területén élénkben van a fejünkben. A BK25 BF25 egy reklámi megoldást jelent, és minden dokumentáció, amely támogatja ezt, biztosítva lesz. Tervezzük a felhasználói adatok védelmét és biztonságos kapcsolatok fenntartását a növekvő biztonsági veszélyek ellen. Emellett azt is célja, hogy ellenezze a fragmentált reklámfurdítás költségeit a csaló reklámgyakorlatok miatt. Könnyű telepítés és működés BK25 BF25 Marketerek fejlesztik ki a projekteiket, amelyeket kereskedelmi céllal indítanak egy olyan felhasználói körbe, amely megfelel a szükséges követelményeknek. Ez lehetővé teszi a vállalatok számára, hogy mérjék az ügyfélkampány hatékonyságát, és finomhangolják a reklámozási stratégiáikat. Nos, ez egy kérdetlen eszköz, amely tökéletes bármilyen folyamatos vállalkozás méretére és minden iparágra a fiatal Technológia alatt. A YOSO szakértő a BK25 BF25 mechanikai átvitelek terén. Újonnan épített nagy méretű 6-méteres CNC gyártási sorok képesek egyedileg 6-méteres görcsvezetékek gyártására sok mennyiségben. A legnagyobb méretű vezeték a 125-es. A vezetékek tömegesen gyártottak teljes sorozatban: 25, 30, 35, 45, 55, 65, 85, 100, 125. Az egyes csúszkák maximális terhelésviselő képessége 192 tonna. A visszaforgató gyártermelési alapjai készítenek kötegeket, amelyek minimális átmérőjük Ph6mm, egy milliméteres léptethetőséggel és maximális átmérővel Ph245mm; egy visszaforgató hossza 10 méter, és az értékelhető maximális dinamikus terhelés 125 tonna. Képes különböző méretű golyóvisszaforgató párokat gyártani, beleértve a C1 szintű 2-méteres és 3-méteres kötegeket, valamint a 5-méteres C3 szintű és a 10 méteres C5 szintű kötegeket. A YOSO Motion a legjobb lineáris rendszer partnere. Munkát fog végezni Önnek, hogy segítsen az Industry 4.0-ban. Az Ön észlelése mást tesz a Kínában készült termékekből. A Jingpeng Machinery 2015-ben alapította meg székhelyét Shanghai-ban, és 2022-ben indított EU-fiókot Lengyelországban, folytatva globális jelenlétét. Tíz év fejlődése után a YOSO egy integrált kereskedelmi ipari platform lett a gépi átvitel területén. Van saját márkája és nemzetközi szabadalmak. A Jingpeng azonnal a kezdettől fogva hangsúlyozza a „márkát és a szolgáltatás minőségét”. A YOSO az a márkájuk, amely lehetővé teszi nekik részt venni az nemzetközi kiállításokon, amelyek évente bemutatják a gazdaságot. A minőség a YOSO fenntartható növekedés középpontjában áll. A szolgáltatás teszi partnereinknek a vevőinket. A Jingpeng Machinery egy vezető beszerzési platform az ipar 4.0 gépi átvizelek szempontjából. A bizalom alapját tíz év tökéletes termékek gyártása alkotja, 190 mérnök, akik gyakorolnak 24 gyártási soron keresztül valamint 50 000 négyzetméteres termelési területen. Minden gépi átvitel tucatnyi óvatosan kiválasztott gyártási folyamatot igényel. A YOSO elkötelezett tökéletes termékek gyártására. Több termék integrációs megoldás YOSO, teljes körű irányítási átvitel komponensek egyetlen forrásból, amelyek megfelelnek a vevők igényeinek. Elköteleztünk arra, hogy segítsük a vásárlókat abban, hogy versenyképesebbek legyenek a piacra technikai megoldásokkal, gyár hatékonysága és marketingje, márkaszere, valamint a termék minősége. Termékválasztékunk széles spektrumú, nagy teljesítménnyel rendelkező lehetőségeket kínál, amelyek megbízást nyertek a piacokon, mivel mélyen értjük a vásárlók igényeit. Partnerségi kapcsolatot építettünk a világ minden részén BK25 BF25 kapcsolatokkal YOSO-val, az YOSO márkának nemzetközi stratégiájával elérjük a vásárlókat egy globális hálózaton keresztül. Ha szeretné, hogy részvényezzen, kérjük, vegye fel velem a kapcsolatot! Márka: 10 éves nemzetközi kiállítási részvétel minőség a fenntartható fejlődés középpontjában. Szolgáltatás: Ügyfelek partnerek átvitel megoldások YOSO képzett szakemberek az átvitel komponensek területén a vállalat belsejében tökéletesen elemzik az ügyfél BK25 BF25 követelményeit, és a 3D végtermék modellek segítségével teszik lehetővé a termelési elrendezéseket. Ipari kiváltás YOSO nagy értéket tulajdonít minden ipari eseménynek, amely jól ismert a világ körül, és aktívan részt vesz a gyakorlók közötti kivektésekben, a látványos alkalmazásos vállalkozói szelleműség mellett, amely vezető vállalatok fontos talajain alapul. Ez mind amit tenniük kell, hogy regisztrálnak a platform fiókjára, és reklámozni kezdenek egy olyan vállalatot, amely szeretné használni a BK25 BF25 funkciót. Belefoglalva azt, hogy kit akarnak megmutatni a kampányukat, mi az üzleti terveik, és hogy hány ember van előttük a teljes összegben. A vállalatok közvetlenül megfigyelhetik a kampány menetét annak elindítása után, és szükség esetén módosíthatják. A korábban használták azok szerint, hogy a BK25 BF25 büszkén helyezhető a vásárlók listájára, ez biztosan a legjobb. Ez valójában egy nagyon egyszerű platform, vásárlói szolgálati segítséggel is bármilyen problémát megoldhat. Emellett a szolgáltatás oktatóanyagokat és számos webinert kínál, amelyek célja, hogy segítsék a vállalkozásokat abban, hogy a marketingkampányukból a lehető legtöbbet szerezzenek. További Minőség a Marketingben - A BK25 BF25 olyan folyamatosan figyelmes folyamaton keresztül jött létre, amelyet a minőséges marketingkampányokhoz használnak a cégnek. Igen! Rengeteg különböző marketing és erőforrás áll rendelkezésre a vállalatok számára a platformon, amelyek célja, hogy optimalizálják az elektronikus marketing-küldeményeiket.
Copyright © Jingpeng Machinery&Equipment(Shanghai) Co.,Ltd Minden jog fenntartva
BK25 BF25
Előnyök:
Innováció:
Biztonság:
Használat:
Why choose Jingpeng BK25 BF25?
A YOSO versenyesebb termékeket kínál
YOSO Vállalati Profil
Legjobb partner a lineáris mozgás területén
Az Industry 4.0 a legjobb platform
Használati útmutató:
Szolgáltatás:
Minőség:
Nem találja, amit keres?
Kérjen árajánlatot most
Vegye fel a kapcsolatot tanácsadóinkkal további elérhető termékekért.