Bugly 分配处理人时通知到其他IM

目的

在 Bugly 进行分配处理人时,想要能够及时通知到对应人,最好是能够自动发送内部沟通工具消息到对方,进行提醒。

分析

通过浏览器消息分析,发现有以下两个消息需要进行处理:

请求含义
https://bugly.qq.com/v2/updateIssueStatus分配处理人的请求
https://bugly.qq.com/v4/api/old/get-app-members?获取所有处理人的请求

步骤

先拦截获取所有处理人的请求,然后存储所有人的数据,方便后续取到对应的人员

function sendBypass(sendFunc) {

	return function (e, n) {
		//console.log(e);
		//console.log(n);
		if (e && n) {
			if (e.startsWith('https://bugly.qq.com/v2/updateIssueStatus')) {
				try {
					handlerSendUpdateStatus(n.body);
				} catch (e) {
				}
			}
			else if (e.startsWith('https://bugly.qq.com/v4/api/old/get-app-members?')) {
				try {
					handlerSendGetMembers(e, n);
				} catch (e) {
				}
			}
		}
		return sendFunc.apply(this, arguments);
	};

}
window.fetch = sendBypass(window.fetch);

var buglyMyData;
function handlerSendGetMembers(e, n) {
	if (!buglyMyData) {
		buglyMyData = true;
		//console.log(n);
		fetch(e, n).then(data => { return data.json() })
			.then(res => {
				//console.log(res);
				buglyMyData = res;
				// 组装查询issue信息的url
				buglyMyData.issueLink = 'https://bugly.qq.com/v4/api/old/get-issue-info?appId=' + buglyMyData.data.appId + '&pid=1&exceptionTypeList=0&crashDataType=undefined&fsn=' + buglyMyData.traceId + '&issueId=';
				buglyMyData.sendHeader = n;
				if (window.location.href.indexOf('crash-reporting/crashes/') > -1) {
					buglyMyData.jumpLink = 'https://bugly.qq.com/v2/crash-reporting/crashes/' + buglyMyData.data.appId + '/';
				}
				else {
					buglyMyData.jumpLink = 'https://bugly.qq.com/v2/crash-reporting/errors/' + buglyMyData.data.appId + '/';
				}
			})
			.catch(error => console.log(error));
	}
}

接着,在具体分配处理人的时候,就可以组装信息,发送到自定义的位置

function handlerSendUpdateStatus(bodyStr) {

	if (!buglyMyData) {
		return;
	}

	var obj = JSON.parse(bodyStr);
	//console.log(obj);
	// issueIds 问题ID
	// appId 应用id
	// processors 处理人
	// status 2处理中0未解决
	// userId 这个账号者
	//console.log(obj.issueIds);
	var issueList = obj.issueIds.split(';');
	var userList = obj.processors.split(';');
	var operUserId = 0;//obj.userId;
	var newStatus = obj.status;

	for (let i = 0; i < issueList.length; i++) {
		const issueId = issueList[i];

		var e = buglyMyData.issueLink + issueId;
		var n = buglyMyData.sendHeader;
		fetch(e, n).then(data => { return data.json() })
			.then(res => {
				//console.log(res);
				if (res.code == 200 && res.data.issueList && res.data.issueList.length > 0) {
					var info = res.data.issueList[0];
					if (newStatus == 0 || newStatus == 2) {
						var exceptionName = info.exceptionName;
						var exceptionMessage = info.exceptionMessage;
						var pos = exceptionMessage.indexOf('\n');
						if (pos > -1) {
							exceptionMessage = exceptionMessage.substring(0, pos);
						}
						var sendMsg = '【bugly】【IssueId:' + info.issueId + '】\\n【Ver:' + info.issueVersions[0].version + '】【次数:' + info.count + '】【设备:' + info.imeiCount + '】\\n' + exceptionName + '\\n' + exceptionMessage;
						//sendMsg = GBK.URI.encodeURIComponent(sendMsg); 
						sendMsg += ' ' + buglyMyData.jumpLink + info.issueId + '?pid=1';

						for (let j = 0; j < userList.length; j++) {
							const userId = userList[j];
							if (userId == operUserId) {
								console.log('自身操作不发送');
							}
							else {
								for (let k = 0; k < buglyMyData.data.members.length; k++) {
									const userInfo = buglyMyData.data.members[k];

									if (userInfo.userId == userId) {
										console.log('发送给 ' + userInfo.name);
										break;
									}
								}
							}
						}
					}
				}
			})
			.catch(error => console.log(error));
	}
}

可以将这些做成chrome插件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值