美洽怎么设置访客端聊天窗口崩溃上报?
要在美洽把访客端聊天窗口崩溃上报起来,关键是两步走:前端先把“崩溃”的证据抓到(捕获 JS 异常、Promise 拒绝、资源加载错误、渲染/白屏检测、截图与面包屑),把必要上下文(访客 ID、会话 ID、页面与版本信息、source map、时间戳)打包后发到你自己的上报后端;然后由后端通过美洽的服务端消息接口或管理 API,把这条崩溃信息以“系统消息/工单”形式关联到对应访客会话,便于客服查看与跟踪。配合采样、隐私过滤、限流与 source map 解析,就能把崩溃定位到具体源码行并高效流转给运维或开发。下面把每步拆开,带代码示例和落地建议。

先把概念说清楚(为什么要这样做)
把崩溃直接“上报到美洽”的目的是希望客服第一时间看到并处理访客在聊天过程中遇到的问题。但美洽本身偏向消息与会话管理,不一定把前端崩溃采集当作完整的错误聚合平台来做。因此更稳妥的做法是:前端负责捕获与收集证据,先发到你的上报后端(便于统一聚合、做去重、分析、挂接源码映射),后端再把整理好的信息通过美洽的服务端消息或 API 推送到对应会话。这样既能利用美洽把问题交给客服,又能保持错误管理的专业流程(告警、聚合、回溯)。
总体流程(一步步来)
- 捕获:在访客端捕获各种崩溃信号(同步 / 异步错误、资源错误、白屏检测、UI 崩坏等)。
- 收集上下文:访客 ID、会话 ID、页面 URL、用户代理、SDK 版本、操作路径(breadcrumbs)、Network 日志快照、source map 引用、截图(可选)。
- 上报到后端:把完整的 payload POST 到你自己的崩溃上报接口,后端负责去重、聚合、解析 source map。
- 同步到美洽:后端调用美洽服务端 API(或通过美洽后台消息接口)把崩溃信息以系统消息或工单的形式关联到相应会话/访客。这样客服在会话里能直接看到崩溃详情并跟进。
- 告警与修复闭环:对高严重度错误触发告警,把信息投递到开发或运维团队;修复后可以在会话中回复访客或自动通知。
捕获层:哪些信号要抓?
- window.onerror:同步异常(带 stack)
- window.addEventListener(‘unhandledrejection’):未处理的 Promise 拒绝
- 资源加载错误:图片、脚本、样式加载失败(error 事件)
- 白屏/卡顿检测:页面关键节点超时未渲染、首屏空白(可结合性能 API 与可见性检测)
- UI 崩坏/样式错乱:重要 DOM 丢失、聊天窗挂起(可用心跳或定期自检)
- 网络异常:与美洽后端或 SDK 的长连接断开、返回 5xx
前端示例:简单捕获并上报(示例代码)
// 捕获错误(示例)
window.onerror = function(message, source, lineno, colno, error) {
const payload = {
kind: 'error',
message,
source,
lineno,
colno,
stack: error && error.stack,
url: location.href,
ua: navigator.userAgent,
meiqiaVisitorId: window.__MEIQIA_VISITOR_ID__, // 需在初始化时保存
timestamp: Date.now()
};
// 发到你自己的上报接口
navigator.sendBeacon('/api/crash-report', JSON.stringify(payload));
};
window.addEventListener('unhandledrejection', function(evt) {
const reason = evt.reason;
const payload = { kind: 'unhandledrejection', reason: reason && reason.stack || reason, url: location.href, timestamp: Date.now() };
fetch('/api/crash-report', { method: 'POST', body: JSON.stringify(payload), headers: {'Content-Type':'application/json'}});
});
上面示例里我用到了 window.__MEIQIA_VISITOR_ID__(你需要在美洽 SDK 初始化后把访客 ID 存到一个全局变量或 localStorage,以便关联会话)。如果找不到访客 ID,也至少把 session cookie、clientId、或页面上的会话标识一并带上。
后端接收与处理(为什么要在后端先处理)
后端统一入口可以做去重、聚合、解析 source map(把压缩的 stack 转换回源码行)、拼装成客服友好的文本或附件,并且控制频率与隐私过滤。同时后端可以把上报与报警集成到既有的 SRE 流程(钉钉/邮件/PagerDuty)。
后端要做的事情清单
- 接收并持久化崩溃事件。
- 做指纹/哈希,去重相同堆栈的事件(聚合)。
- 解析 source map(如果你使用了编译压缩)。
- 提取并存储会话标识(meiqia visitor id / conversation id)。
- 根据策略(严重度、影响用户数)决定是否立刻推送到美洽或触发告警。
如何把崩溃“写进”美洽会话(两种常见方式)
有两种常见做法:前端直接用美洽 SDK 发一条“系统消息”;或后端调用美洽服务端 API 把崩溃以消息/工单的形式写入会话。通常更推荐后端推送,因为可以保证数据质量和权限控制。
方式 A:前端直接发送(简单,但受限)
- 优点:实现快,实时性好。
- 缺点:前端权限受限,网络丢包时可能丢失;难做去重与 source map 解析。
// 假设美洽 SDK 支持发送系统/游客消息(各项目 SDK 名称不同,需参考你使用的美洽 SDK 文档)
if (window.Meiqia && typeof window.Meiqia.send === 'function') {
Meiqia.send({
type: 'system',
text: '[崩溃上报] ' + JSON.stringify({ message: payload.message, stack: payload.stack })
});
}
方式 B:后端通过美洽服务端 API 写入(推荐)
后端拿到标准化崩溃事件后,调用美洽的服务端 API(或管理 API)创建一条“系统消息”或“工单”,并带上访客 ID / 会话 ID。这样客服在会话中能看到崩溃详情和复现步骤。
示例伪请求(具体字段和鉴权以你接入的美洽 API 文档为准):
POST https://api.meiqia.com/v1/messages
Headers: Authorization: Bearer {server_token}
Body: {
"visitor_id": "abc123",
"conversation_id": "conv456", // 如果有会话ID就填写,没有就写visitor_id
"type": "system",
"content": "用户端聊天窗口崩溃:ErrorType ...",
"attachments": { "stack": "...", "screenshot_url": "...", "source_map_hash": "..." }
}
需要收集的关键信息(表格)
| 字段 | 说明 |
| timestamp | 错误发生时间 |
| meiqia_visitor_id | 美洽访客 ID(若可用) |
| conversation_id | 当前会话 ID(若有) |
| page_url | 出错页面 URL |
| ua | 浏览器/操作系统信息 |
| stack | 错误堆栈(尽量保留) |
| breadcrumbs | 用户操作路径与关键事件 |
| screenshot | 页面截图(可选,用 html2canvas 等获取) |
| network_logs | 与美洽 SDK 通信快照(WebSocket/HTTP) |
实务建议:如何把上报做得更可靠、更有用
- 保存访客标识:在美洽 SDK 初始化成功回调里把访客 ID 与当前会话 ID 保存到 localStorage,全局可读以便上报时带上。
- 有限度截图:截图对定位很有帮助,但要注意隐私,模糊敏感信息或让用户同意。
- source map 管理:前端构建时上传 source map 到后端或错误平台,后端在接收到压缩堆栈时解析成可读源码行。
- 节流与采样:对同一指纹的错误做采样或限流,避免把客服淹没在重复消息里。
- 隐私筛查:自动过滤或掩码手机号、身份证、银行卡等字段。
- 重试与防丢失:使用 sendBeacon 或在本地队列内重试上报,保证在网络波动时仍能发送。
- 演练流程:定期做“真人故障演练”,保证崩溃上报能正确到达客服并触发处理流程。
调试与验收:怎么确认已经生效
- 在开发环境故意抛出异常,观察你的后端是否收到事件并能把消息写进美洽会话。
- 用不同浏览器与网络条件测试(慢网、断网重连),确认重试策略与 sendBeacon 能生效。
- 检查 source map 是否能把堆栈正确映射到源码。
- 确认客服端能看到足够信息但没有敏感数据泄露。
常见问题与注意点(边想边写的那些坑)
- 如果没有访客 ID,消息就难以自动归并到会话,只能作为新工单或待处理项上报。
- 美洽服务端 API 的权限和速率限制需要事先了解,避免被限流影响上报。
- 前端直接发送消息会受网络影响且难以解析 source map,建议把核心解析放在后端。
- 不要把完整的用户数据未加掩码地直接发送到外部错误平台或第三方系统。
说到底,技术上并不复杂:抓取、打包、送达、关联、提醒、修复。真正花时间的,是把流程打磨成能被客服和开发同时用的产线:崩溃信息要足够可读(有堆栈与复现路径)、要可追踪到会话(有访客/会话 ID)、要能自动分级告警、要遵守隐私合规。你可以先做一个最小可用流程(前端捕获 + 后端转发到美洽),把它跑通后再逐步完善截图、source map、去重与告警联动。这样既能快速收到第一批真实问题,又能不断把质量做上去——对吧,就像调客服话术一样,需要一点点迭代。祝你集成顺利,遇到具体 API 字段或鉴权问题时,翻翻美洽开发者文档或把你现有的 SDK 初始化片段贴出来,我可以帮你把代码改得更贴合。