Суттю всіх підприємств, що продовжують існувати, визначає маркетинг. Це спосіб показу чогось цінного іншим людям, які можуть або ні, мати до цього інтерес. Також це допомагає у продвиженні організації... ">
,需要通过父级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 - "Унікальна маркетингова властивість" Насправді всі підприємства, які продовжують бути визначені маркетингом. Це спосіб показати щось цінне іншим, хто може або не мати інтересу до цього. Також допомагає в продвиженні організацій, які є багатьма сучасними та безпечними інструментами для реклами, щоб досягти необхідних цілей. BK25 BF25 насправді є популярною опцією, коли йдеться про маркетингові інструменти, вона також коштує менше, ніж традиційні методи маркетингу. Другий спосіб, яким це допомагає бізнесу, полягає в тому, що компанії можуть безпосередньо звертатися до своєї цільової аудиторії. Відповідь, яка створюється - компанії отже краще можуть планувати щодо того, як вони проводять свої маркетингові стратегії, придержуючись детального аналізу. У нього є велика кількість випадків застосування в маркетингу, тому це також має сенс з цього пункту зору, звичайно. Реклама зробила стрибок, що безперечно величезний з появою BK25 BF25, оскільки вона виявилася надзвичайним інструментом маркетингу для зв'язку з клієнтами у користь організацій. Це неперервна послуга або продукт, який стає популярним за допомогою нових методів, таких як соціальні мережі, електронна пошта та маркетинг впливових осіб тощо. Вона дозволяє компаніям бути набагато впереди своїх конкурентів, використовуючи найновіші маркетингові інструменти. У нас, продвігши рекламу, безпека є головною усієї області. BK25 BF25 пропонується як маркетинговий підхід, і вся документація для підтримки цього буде надана. Створений для захисту персональних даних користувачів та безпечних з'єднань від розрахунку загроз. Також призначений для протидії фракційним витратам через маркетинговий обман у ході шахрайської реклами. Проста інсталяція та експлуатація BK25 BF25. Маркетинґові фахівці розробляють свої проекти, які потім запускаються у пул користувачів, що відповідають необхідним вимогам. Це дозволяє компаніям вимірювати ефективність кампанії та доробляти свої маркетингові стратегії. Ну, це безперечно інструмент, який є чудовим для будь-якої розмірності компанії та кожної галузі молодої технології. YOSO є експертом у галузі BK25 BF25 форм механічних передач. Новобудовані великого розміру 6-метрові виробничі лінії CNC здатні виробляти поодинці 6-метрові котушкові рейки багато. максимальний розмір провідної рейки становить 125. провідні рейки можуть бути масово випущені повним рядом 25, 30 35, 45 55, 65 85 100, 125. максимальна навантажувальна здатність окремого ползунка 192т. Виробничі бази шурупів створюють партії, які мають мінімальний діаметр Ph6mm, один міліметр ходу та максимальний діаметр Ph245mm; одна довжина шурупа 10м і номінальна максимальна динамічна навантаження 125 тон. Вона здатна виробляти пари кулькових шурупів різних розмірів, включаючи рівень C1 2-метрові і 3-метрові партії, 5-метровий рівень C3 і 10-метровий рівень C5. YOSO Motion найкращий партнер лінійної системи. вона працюватиме з вами, щоб допомогти Індустрії 4.0. Ваше сприйняття Made in China інше. Компанія Jingpeng Machinery була заснована у 2015 році, її штаб-квартира знаходиться у Шанхаї, а в 2022 році було запущено європейське відділення у Польщі та продовжують углиблювати світову присутність. Після 10 років розвитку YOSO стала інтегрованою торгово-промисловою платформою у сфері механічних передач. Вона має власну торгову марку та міжнародні патенти. Jingpeng дотримується корпоративного стилю, акцентуючи увагу на "бренду, як і якості сервісу" з самого початку. YOSO - це бренд, який дозволяє нам брати участь у міжнародних виставках, які демонструють галузь щороку. Якість є в основі сталого росту YOSO. Сервіс робить наші клієнти бізнес-партнерами. Компанія Jingpeng Machinery стала провідною закупівельною платформою для механічних передач у контексті промисловості 4.0. Це базується на довірі, яке засноване на 10 роках виробництва бездоганних продуктів, 190 інженерах, які практикують на 24 виробничих лініях, а також на території виробництва площею 50,000 квадратних метрів. Кожна механічна передача потребує десятків тщесердно вибраних процесів виробництва. YOSO присвячена виробництву ідеальних продуктів. Рішення для інтеграції багато продуктів YOSO, забезпечує повний контроль та передачу компонентів як одниний магазин, що відповідає потребам клієнтів. Ми присвячені допомогти клієнтам стати більш конкурентоспроможними на ринку, надаючи технічні рішення, ефективність заводу, маркетингову підтримку, сили бренду та якість продукції. Ми пропонуємо широкий асортимент продукції з високою продуктивністю, що заробив довіру на ринку завдяки глибокому розумінню потреб клієнтів. Партнери по всьому світу встановили співпрацю BK25 BF25 з YOSO, стратегія інтернаціоналізації бренду YOSO дозволяє дилерам досягти клієнтів у регіонах шляхом глобальної мережі. Якщо бажаєте взяти участь, будь ласка, зв'яжіться зі мною! Бренд: 10 років участі у міжнародних виставках. Якість як основа стабільного розвитку. Сервіс: клієнти - партнери. Розрахункові рішення YOSO. Професіонали, натреновані YOSO, у галузі передачних компонентів всередині компанії досконало аналізують вимоги клієнтів BK25 BF25. 3D моделі готової продукції спрощують організацію виробництва. Галузевий обмін. YOSO надає велике значення кожному галузевому заходу, який добре відомий у світі, активно беручи участь у зустрічах між практиками, перспективними застосуваннями та лідерами бізнесу, що мають важливий вплив на наш рост. Все, що їм потрібно зробити, це зареєструватися на платформі та продвигати компанію, яка бажає використовувати функцію BK25 BF25, включаючи, хто саме повинен бачити їхню кампанію, який бюджет вони мають за допомогою конкретної кількості людей перед ними. Бізнеси побачать, як йде кампанія безпосередньо після того, як вона стартує, і можуть робити зміни за необхідності. Люди, які вже користувалися цим, стверджують, що BK25 BF25 можна з гордістю додати до списку продукції, яка відносно до найкращих. Це дуже проста платформа, де підтримка клієнтів допомагає вирішити будь-які проблеми, які виникають. Крім того, сервіс має навчальні матеріали та багато вебінарів, спрямованих на допомогу підприємствам отримувати найбільше від своїх маркетингових кампаній. Більше якості в маркетингу - BK25 BF25 створюється за допомогою постійного процесу, який тщеславно використовується для якісних маркетингових кампаній організацій, які працюють у цій галузі. Так! Є багато різних видів маркетингу та ресурсів, доступних організаціям на платформі, призначених для оптимізації їхнього електронного маркетингу.
Авторське право © Jingpeng Machinery&Equipment (Shanghai) Co., Ltd. Всі права захищені.
BK25 BF25
Переваги:
Інновації:
Безпека:
Застосування:
Why choose Jingpeng BK25 BF25?
YOSO пропонує більш конкурентоспроможні продукти
Профіль компанії YOSO
Найкращий партнер лінійного руху
Платформа 4.0 найкраща платформа
Інструкція застосування:
Обслуговування:
Якість:
Не можете знайти те, що шукаєте?
Замовити пропозицію зараз
Зверніться до наших консультантів, щоб дізнатися про наявні продукти.