本应用为了支持更多个性化钉钉功能,比如图文消息,公告对接,卡片消息等。
本应用是为了支持更多个性化钉钉功能,比如图文消息,公告对接等。
前提条件是用户在使用钉钉并且o2oa已经集成了钉钉,具体集成方式参考 https://www.o2oa.net/cms/mobileoa/194.html
在o2oa集成钉钉的文章中已经提到过,o2oa的消息推送给钉钉需要在 dingding.json 配置文件中开启消息参数 messageenable ,然后默认o2oa内置有钉钉消息推送功能就会把消息推送给钉钉,但是默认消息是普通文本消息,工作消息也是一个打开链接,无法做更多扩展。
关于内置消息的各种类型的消息发送,还有发送消息的处理器可以参考o2oa消息处理器的文章,
本应用的消息接口,可扩展更多形式的消息。
就是用本应用内的消息接口来替换o2oa内置的钉钉消息发送器。
所以只要按照前面提到的o2oa消息处理器的文章 内说明的,找到o2oa服务器的配置文件 messages.json ,把原来里面默认的钉钉消息处理器关闭,启用restful的处理器,比如待办消息类型下的消息处理器:
"task_create": {
"consumers": [
{
"type": "ws",
"enable": true,
"loader": "",
"filter": ""
},
{
"type": "pmsinner",
"enable": true,
"loader": "",
"filter": ""
},
{
"type": "dingding",
"enable": false, //这里改成false,关闭默认钉钉消息处理器
"loader": "",
"filter": ""
},
// restful 消息处理器配置如下
{
"url": "http://127.0.0.1:20020/x_app_dingding_support_assemble_control/jaxrs/o2msg/receive", //这里注意应用端口,默认是80或者20020
"method": "post", // 这里是post请求
"type": "restful",
"enable": true, // 这里是启用restful处理器
"loader": "",
"filter": ""
},
],
"description": "创建待办"
},
将需要发送钉钉消息的各种o2oa消息类型都按照上面这样的方式进行处理器的配置就可以使用本应用的消息处理器进行钉钉消息的推送。
目前本应用针对信息发布支持3种特殊的钉钉消息的模版,分别是 链接消息、oa消息、卡片消息 样式如下:
链接消息:
oa消息:
卡片消息:
如何使用: o2oa的消息处理器都带有一个脚本加载器,就是上面配置里面的 loader 字段,这个字段可以配置一个脚本,处理消息的具体内容。具体使用方式可以参考上面提到的 文章中 加载器 这段内容 。
加载器的作用是处理消息体中信息发布文档数据对象的具体内容,当然也可以不使用加载器,在信息发布中的其他事件中处理好文档数据对象的具体内容,文档数据对象中要包含具体消息模版需要的字段内容。具体需要的内容根据模版不同有如下要求:
{
"id":"文档id",
"summary":"文档描述信息",
"title":"文档标题",
"appid":"...",
"appname":"...",
"categoryid":"...",
"categoryname":"...",
...
"temptype": "link", //表示链接消息
"temptitle": "这里是链接消息的标题",
"temptext": "这里是链接消息的内容描述",
"tempcmspicid": "这里是链接消息的图片id,图片必须是已经上传到信息发布中的文件。tempcmspicid和tempmediaid只需要一个就够了",
"tempmediaid": "已经上传图片到钉钉,钉钉返回的mediaid。上传图片到钉钉,本应用提供了专门的接口。tempcmspicid和tempmediaid只需要一个就够了",
"tempurl": "默认不需要这个字段,如果有特殊的地址需要打开,可以添加这个字段,只支持o2oa内部html地址"
}
{
"id":"文档id",
"summary":"文档描述信息",
"title":"文档标题",
"appid":"...",
"appname":"...",
"categoryid":"...",
"categoryname":"...",
...
"temptype": "oa", //表示oa消息
"temptitle": "这里是oa消息的标题",
"temptext": "这里是oa消息的内容描述",
"tempcmspicid": "这里是oa消息的图片id,图片必须是已经上传到信息发布中的文件。tempcmspicid和tempmediaid只需要一个就够了",
"tempmediaid": "已经上传图片到钉钉,钉钉返回的mediaid。上传图片到钉钉,本应用提供了专门的接口。tempcmspicid和tempmediaid只需要一个就够了",
"tempurl": "默认不需要这个字段,如果有特殊的地址需要打开,可以添加这个字段,只支持o2oa内部html地址"
}
{
"id":"文档id",
"summary":"文档描述信息",
"title":"文档标题",
"appid":"...",
"appname":"...",
"categoryid":"...",
"categoryname":"...",
...
"temptype": "card", //表示卡片消息
"temptitle": "这里是卡片消息的标题",
"temptext": "这里是卡片消息的内容描述",
"tempcardimageurl": "如果卡片消息需要上图示那样有图片展现,需要添加这个字段,里面添加在线的图片url地址,匿名可访问的图片地址。",
"tempcardsingletitle": "查看详情"
}
本应用提供了两个发送钉钉消息的接口,一个是工作通知消息,一个是普通消息。两者消息类型都是相同的,分别有 消息类型: text , image, voice ,file, link, oa, markdown, action_card 。
url: /x_app_dingding_support_assemble_control/jaxrs/dingdingsupport/media/upload/{type} method: post url中的type:
上传成功后返回的id,就是钉钉的mediaid,消息发送的需要用到这个值。
url: /x_app_dingding_support_assemble_control/jaxrs/dingdingsupport/msg/corpconversation/send method: post 各种消息类型需要提交的字段不同,参考文档下面的 消息类型提交内容样例 的样例说明
url: /x_app_dingding_support_assemble_control/jaxrs/dingdingsupport/msg/normal/send method: post 各种消息类型需要提交的字段不同,参考文档下面的 消息类型提交内容样例 的样例说明
发送文字消息,请求的body体需要提供:
{
"msgtype": "text",
"text": "这里是消息内容"
}
发送图片消息,请求的body体需要提供:
{
"msgtype": "image",
"mediaid": "图片文件id,来自上面提到的媒体文件上传到钉钉的接口的返回值"
}
发送语音消息,请求的body体需要提供:
{
"msgtype": "voice",
"mediaid": "语音文件id,来自上面提到的媒体文件上传到钉钉的接口的返回值",
"duration": 10
}
发送文件消息,请求的body体需要提供:
{
"msgtype": "file",
"mediaid": "文件id,来自上面提到的媒体文件上传到钉钉的接口的返回值"
}
发送链接消息,请求的body体需要提供:
{
"msgtype": "link",
"mediaid": "图片id,来自上面提到的媒体文件上传到钉钉的接口的返回值",
"title": "标题",
"text": "描述",
"messageurl": "打开消息的url",
}
发送oa消息,请求的body体需要提供:
{
"msgtype": "oa",
"title": "标题",
"text": "描述",
"messageurl": "打开消息的url"
}
发送markdown消息,请求的body体需要提供:
{
"msgtype": "markdown",
"title": "标题",
"text": "这里填markdown格式的内容,可以生成富文本内容"
}
发送卡片消息,请求的body体需要提供:
{
"msgtype": "action_card",
"title": "标题",
"text": "这里填markdown格式的内容,可以生成富文本内容",
"messageurl": "打开消息的url",
"cardsingletitle": "查看详情"
}
url: /x_app_dingding_support_assemble_control/jaxrs/dingdingsupport/blackboard/create method: post 具体参数说明如下图:
查询当前用户能看到的公告列表,最多10条. url: /x_app_dingding_support_assemble_control/jaxrs/dingdingsupport/blackboard/list/top method: get 具体参数说明如下图:
url: /x_app_dingding_support_assemble_control/ jaxrs/dingdingsupport/blackboard/{id} method: get 具体参数说明如下图:
url: /x_app_dingding_support_assemble_control/ jaxrs/dingdingsupport/blackboard/update/{blackboardid} method: post 具体参数说明如下图:
url: /x_app_dingding_support_assemble_control/ jaxrs/dingdingsupport/blackboard/{id} method: delete 具体参数说明如下图: