# 问题排查
提交问题前,请先排查和定位问题所在
# 消息发送失败,怎么排查?
- 进入云平台->消息服务->消息日志审计 ; 根据筛选条件,筛选出发送失败消息,可以看到具体发送失败原因;
- 鼠标放置红色字体 "发送失败" 上边,会弹出错误原因提示框
# 如何查看消息失败记录?
发送失败的消息,在失败状态的旁边,有一个图标提示,鼠标移入会出现消息失败的记录。包括什么时间失败的,失败的原因是什么。因为消息失败有重发的机制,所以失败记录可以有多条。每条失败原因的前面,都有一个【】,【】里提示问题的源头,比如以下原因:
【阿里云短信】短信模板不合法
这个原因的源头是阿里云短信,需要去阿里云短信控制台去查找问题,其他的问题同理,先确定问题源头,再查找并排除问题出现的原因
# 业务系统发送消息问题排查逻辑
先从云平台→消息服务→消息日志审计 中,查询是否存在刚刚发送的消息,如果发送了且发送失败根据发送失败去找原因;如果没有该消息按照下方逻辑排查;
从业务系统去着手排查,配置参数正确吗?调用报错吗?有消息相关控制按钮吗?都没问题再往下;
确认业务系统的对应的应用存在,且配置了相对应的消息类型,且模板不为空;以上问题都确认了没问题,相信问题已解决。
如果问题还是没有处理成功,可联系开发人员协助排查问题
# 功能相关
功能使用相关问题
# 消息如何接入,提供哪些接入方式?
目前消息服务提供了6种消息发送方式:SMS(手机短信)、MAIL(邮件)、WECHAT(微信)、DINGTALK(钉钉)、SUPERAPP(APP)、WEBSITE(系统消息)
发送消息
应用系统接入消息服务发送消息,三个前提步骤:
应用注册:开放平台进行应用注册(未对接)或后台管理员分配;提供应用名称、应用描述信息,得到appId等信息。
消息类型申请:定义消息类型、类型编码、发送方式(多选)。
消息模板设置:单模板、多模板;多个发送方式定义同一模板,也可以每个发送方式定义一个模板。
所有对接API为restful风格,基于OAuth2.0 或 JWT (二选一)的认证授权模式。
查看消息
- 接口查看:提供的API可以查询消息。
- 消息组件:VUE项目可以集成消息中心组件,个人接收到的系统消息可以进行管理。
# 消息有哪些状态?
消息任务状态
消息服务通过任务形式向终端用户发送消息,一次消息任务既可以单发给一个人,也可以群发给多个人。
消息任务的状态,包括:待发送、定时中、审核中、已发送、草稿、审核未通过、已撤回、超时撤回等;
待发送:已进入消息队列,尚未完成发送任务的消息任务,处于待发送状态。
定时中:消息任务支持定时,定时发送的消息任务,处于定时中状态。
审核中:消息任务支持审核功能,提交审核的消息任务,处于审核中状态。
已发送:发送完成的消息任务,处于已发送状态。
草稿:消息任务支持存为草稿,同时定时中消息任务,支持取消发送,这2种情况的消息任务,处于草稿状态。
审核未通过:审核未通过的消息任务,处于审核未通过状态。
已撤回:审核中消息任务,支持撤回,这种情况的消息任务,被标记为已撤回。
超时撤回:定时发送的消息任务,同样支持审核,如果该消息任务超过了定时时间,仍未审核,将会被撤回,此时被标记为超时撤回。
消息记录状态
消息记录是消息任务发送到每个用户产生的一条记录。消息记录状态只能表示发送到最终用户是成功和失败。
发送成功:用户接收到消息。
发送失败:用户接收不到消息;发送失败记录失败日志。
接收用户消息状态
目前系统消息支持用户在PC/APP(门户/超级APP)双端上进行状态操作管理。
- 系统消息:接收用户可以在PC/APP 上标记接收到消息已读、未读状态;无用垃圾消息可放到消息回收站;回收站中消息可以进行删除。
# 是否支持手工发送消息?
支持;部门管理员 可以手工发送消息。
# 消息的安全性、稳定性(大并发情况)、可靠性(漏发补发机制)是如何保证的?
安全性
敏感词校验:消息支持敏感词校验;敏感词库会不断迭代更新,用户可以选择性的维护校内敏感词信息。
消息模板规范内容:规定消息发送按照一定格式发送,且消息模板会进行敏感词校验,走流程审核。
消息发送审核:人工发送消息,可以设置流程审核通过才可发送。
--------------- 针对用户 -------------
- 用户免打扰:根据不同业务,规定业务消息发送时间段。(二期开发)
稳定性
消息队列:消息队列是为了异步+流量削峰,大并发情况下缓冲瞬时流量。
多线程:增加消费能力,防止队列中数据堆积。
分布式多节点:服务可以横向扩展,增加服务节点,提供更高的容错性、稳定性
可靠性
自动重发:发送失败,系统按照倍增时间间隔自动重发。默认重发5次,初始时间间隔2分钟,倍数为2,(2 ,4 ,8,16 ,32 分钟重发,共计5次);可自行设置。
任务审计:通过消息任务审计,对比消息记录,进行查缺补漏,遗漏记录会自动补发;默认审计33分钟 - 7天内所有发送成功的消息任务,时间区间可自行设置。
# 如何为用户添加消息前台登录权限(为前台用户配置发送部门)?
添加步骤如下:
云平台-授权服务-应用角色,找到【消息发布员】角色;
为【消息发布员】角色授权一个岗位用户组;
用户服务-岗位用户组,往刚刚授权的岗位里,加入一个用户,并为用户配置可管理岗位;
这时,使用这个账号登录前台,即可登录成功;
新建消息时,发送部门来自刚刚岗位设置的,用户可管理部门;
# app小铃铛误区
这里的小铃铛指的是系统消息,不是app推送消息
app推送消息是在消息通知栏里边显示的,消失后不会留下记录
# 什么是透传消息,透传消息有什么效果?
见app推送消息个推网关,Andriod常见问题基础名词解释-透传模板消息
# 发送相关
消息发送相关问题
# app锁屏消息发送失败,提示账号没有绑定cid?
检查该账号app端是否登录;若已登录还提示改错误,则需联系app开发人员
# 流程代办没有消息
查看云平台菜单-消息服务-消息日志审计,查找是否有流程表单应用的任务记录,以及任务发送明细的发送状态
如果没有记录,检查流程对接消息,并查看流程表单sys_message表,查看消息发送接口调用情况
如果有记录,根据错误信息排查问题
# app推送消息,离线收不到推送消息
在云平台上-找到消息服务-消息日志审计,查看发送记录是否成功 (如果发送成功收不到消息,查看消息类型配置的消息网关,消息网关的intent参数是否有配置,普通通知网关时候要选择第二个,打开应用内页面(StartActivityTemplate))
# 消息发送接口调用成功,但是云平台-消息服务-消息日志审计里找不到记录
可以看一下未发送任务列表,确认一下是否任务是待审核状态,如果是待审核状态,在消息设置里边把审核关闭
- 查看rancher中 message-service-center 工作负载的日志,是否有对应业务系统的调用记录(有传参打印)。以及查看业务系统调用消息接口后返回的响应信息,是否有报错信息,并根据报错信息进行决绝; (ps:可能是因为appId对应的消息应用被停用;发送方式和messageTypeCode对应的消息类型所配置的发送方式不满足;未传paramValueJson下的模板字段以及值)
- 如果rancher中 message-service-center 工作负载的日志看不到调用记录,请核实业务系统是否跟消息服务有对接,以及对接是否成功,举例参考:
认证未发送消息
流程未发送消息
# 手机没有收到app推送
- 云平台->消息服务->消息日志审计查看到记录是发送成功的
- 先检查一下自己的手机设置(包括通知栏弹窗设置,以及app通知设置)
- 检查消息app网关参数和使用的app的appId,appKey,masterSecret是否一致(可能发到其他app上了)
- 找app开发协助检查推送下发情况
云平台->消息服务->消息日志审计查看到记录是失败的,根据失败原因排查原因
# app锁屏消息发送失败,提示参数不合法
账号未绑定cid,属于参数不合法的一种,且大部分情况下都是这个原因。
# APP推送问题分析逻辑
验证消息类型是否配置了app推送网关
验证消息类型网关配置参数是否正确;intent生成配置见如何生成intent;
验证个推配置的参数是否正确;尤其是个推配置的android和ios证书需要存在
# 认证发送验证码无反应,无记录(认证消息对接)
确认对接应用appId,模板参数(消息模板和短信模板不一样),以及发送方式 对接文档
# 实施相关
实施相关问题
# 容器内部地址怎么获得?
容器内部地址规则如下:
http://<service-name(服务名)>.<namespace(命名空间)>.svc.cluster.local:<port(端口)>/<项目路径(没有可以省略)>
<>内的内容需要依据部署实际情况调整
# 短信额度管理菜单(新版老版)
# 流程对接消息
流程配置开启
流程配置消息地址
流程配置消息appid
消息创建appid和消息类型消息模板
form-flow工作负载里边的映射配置:
MSG_SWITCH(open:开,off:关)
MSG_APP_ID(消息应用appId),
MSG_SERVER_URL(消息发送的接口地址)
注:如果消息服务应用管理没有流程表单应用,可以执行sql (流程表单应用初始化sql) 配置完成后,检查流程图节点是否开启消息,以及配置的消息的发送方式是否满足消息平台的发送方式配置。
# 企业微信 用户不在接受范围
确认企业微信应用后台配置应用接收人权限范围;确认企业微信网关参数,agentId
# 在线发送页面一直刷新
rancher message-page的映射配置里确认有没有key:CAS_TYPE value:auth 的配置参数
# 在线发送页面一直loading,加载不出来
f12打开浏览器控制台-network,查看是否有404或者报错接口(如果有报错接口,核对接口域名以及地址,然后在rancher上修改正确配置)
查看浏览器地址栏,地址中是否有ticket,,如果有,需要在云平台-认证管理-认证对接配置,搜索消息,尝试修改对接配置
# 云平台菜单不显示消息服务
检查message-route.sql执行情况,以及执行的sql里边的现场环境地址url是否有改
# 部署工作负载报红,ErrImagePull: rpc error:...
检查镜像地址,镜像版本,以及镜像凭证的配置
# oracle用户锁定
执行下边sql解锁
alter user message account unlock
# 如何生成intent
生成新的intent,只需要知道当前项目安卓的包名、和打开地址的全路径(不清楚的问下安卓工程师) 修改XXXX部分,对照上面参考:
intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x04000000;package=XXXXX;component=XXXXXX;S.payload=&{params};end
# 没有根据roleCode和applicationId的接口
升级认证并确认导入yaml,查看poa-docs.xxx.edu.cn里边 授权服务-ROLE-获取应用下的一个角色关联的用户组(https://poa.xxx.edu.cn/apis/authz/v1/application/{applicationId}/role/{rolecode}/groups)有没有这个接口 如果有接口,核实一下执行消息应用角色初始化的sql(应用角色code应该是527,不是80) 消息应用初始化脚本sql
# 确认用户服务接口是否有问题
- 查看消息服务版本依赖的用户服务版本是否符合要求(用户服务实际版本高于消息依赖版本即可)
- 如果用户服务版本不满足,找实施去升级用户服务
- 如果用户服务版本满足,浏览器打开https://poa-docs.xxx.edu.cn/user/v1/latest/#tag/Group (注意事项:https还是http;xxx根据现场环境的域名去替换后访问)
- 查看是否有,获取帐号的用户组(岗位) - 组织机构列表(按 accountName) 这个接口
- 如果没有,找实施确认用户服务的docs-installer是否创建成功,以及用(postman)测试该接口是否可以调用成功
# 发送部门无数据
- 打开rancher 找到message-service-manager工作负载日志,有没有bad_gateway,以及404;
- bad_gateway和404的地址一般情况下都是用户服务的接口问题
- 确认用户接口没问题
- 确认云平台角色sql有没有导入,消息平台应用角色有没有创建,
- 消息应用角色有没有没有配置用户组,配置的用户组里边有没有配置部门范围,用户有没有消息应用角色权限。实施文档 (参考第九步)
# 接口报错
接口报错相关问题
# 消息弹窗报错
f12看浏览器控制台network报错信息
# 接口调用反馈,消息通知和消息类型配置的发送方式不一致
检查传参 sendType:""
# 消息任务未发送接口404 ,批量不限制接口 404
升级消息版本1.6.0以上
# 消息发送接口404或bad_gateway
检查 https://poa-docs.xxx.edu.cn 是否有messagecenter的接口文档
如果没有,参考下面文档第三步
https://supwisdom.coding.net/s/3be1c9bb-5e93-47fc-bcb6-a92eab4255cd,查看密码:ym46
# 对接access token获取问题
https://supwisdom.coding.net/s/9a9174e7-6fd5-4b3c-98c7-63e1e2e7f5c4
# poa方式对接消息发送接口,传输token问题
token属于 Authorization 的Bearea token,header 用 Authorization字段传输
# app推送消息个推网关,Andriod常见问题
# app推送消息个推网关,iOS常见问题
# 消息类型报错:No message available?
将消息版本升级到1.6.0以后的版本
# 进入消息模板后报错:TemplateVariableType类型枚举不存在?
将消息版本升级到1.6.0以后的版本