searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

企业微信发送应用消息

2023-07-14 00:17:44
19
0

企业微信发送应⽤消息

实现范围

主动发送应⽤消息:企业后台调⽤接⼝通过应⽤向指定成员发送单聊消息

仅使⽤markdown⼀种形式发送

notify_channel 接⼊

配置⽂件维护

新增wxMsg模板配置

新增wsMsg账号密码、地址等配置

模板的形式进⾏发送类型区分

模板定义

详⻅接⼝调⽤

token获取

刷新策略

启动时候拉取⼀次

失败

全局错误码:https://developer.work.weixin.qq.com/document/path/90455

token获取失败

上报

token失效导致的失败

42001 access_token已过期 access_token有时效性,需要重新获取⼀次

则加锁重新获取token

接⼝调⽤

⽀持使⽤模板配置三种通知

markdownend

textSend

textCardSend频率限制

企业Idagentidcorpsecret 加密

对称加密⽅式

https://developer.work.weixin.qq.com/document/path/91039

请求⽅式: GET(HTTPS)

请求地址: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET

{

"errcode": 0,

"errmsg": "ok",

"access_token": "accesstoken000001",

"expires_in": 7200

}

https://developer.work.weixin.qq.com/document/path/90312

每应⽤不可超过帐号上限数*200⼈次/天(注:若调⽤api⼀次发给1000⼈,算1000⼈次;若企业帐号上限是

500⼈,则每个应⽤每天可发送100000⼈次的消息)

每应⽤对同⼀个成员不可超过30次/分钟,超过部分会被丢弃不下发

发消息频率不计⼊基础频率

/**

* 加密

*

* @param input 原⽂

* @param key 定义 key,必须 8 字节以上

* @param transformation 算法

* @param algorithm 加密类型

*/

private static String encryptDes(String input, String key, String

transformation, String algorithm) throws Exception {

Cipher cipher = Cipher.getInstance(transformation);

// 加密规则

SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), algorithm);

// 初始化

cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);

byte[] bytes = cipher.doFinal(input.getBytes());

// Base64 转码失败处理

上报prometheus

告警

n9e

grafana

通知类型 -- 采⽤模板配置⽅开发,⽬前预计⽀持textmarkdown

⽂本消息

markdown

textcard

接⼝调⽤

String encode = new String(Base64.getEncoder().encode(bytes));

return encode;

}

/**

* 解密

*

* @param encryptDES 密⽂

* @param key 定义 key

* @param transformation 算法

* @param algorithm 加密类型

*/

private static String decryptDes(String encryptDES, String key, String

transformation, String algorithm) throws Exception {

Cipher cipher = Cipher.getInstance(transformation);

// 解密规则

SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), algorithm);

// 初始化

cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);

byte[] bytes = cipher.doFinal(Base64.getDecoder().decode(encryptDES));

return new String(bytes);

}

https://developer.work.weixin.qq.com/document/path/90236

请求⽅式:POST(HTTPS)

请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKENbody:

markdownSend:

{

"agentid":10000841,

"duplicate_check_interval":1800,

"enable_duplicate_check":0,

"enable_id_trans":0,

"markdown":{

"content":"${content}"

},

"msgtype":"markdown",

"name":"markdownend",

"touser":"${tousers}"

}

textSend:

{

"agentid":10000841,

"duplicate_check_interval":1800,

"enable_duplicate_check":0,

"enable_id_trans":0,

"msgtype":"text",

"name":"textSend",

"text":{

"content":"${content}"

},

"touser":"${tousers}"

}

textCardSend:

{

"agentid":10000841,

"duplicate_check_interval":1800,

"enable_duplicate_check":0,

"enable_id_trans":0,

"msgtype":"textcard",

"name":"textCardSend",

"textcard":{

"btntxt":"${btntxt}",

"description":"${description}",

"title":"${title}",

"url":"${url}"

},

"touser":"${tousers}"

}后台逻辑

告警通知、订阅规则

模板: 参照微信机器⼈markdown模板

消息推送控制

超过2048 字符的主动截断 2000,分⻚发送

如:{{.RuleName}} 1/2

{{.RuleName}} 2/2

配置

通知账号获取,users.wecom_id

{{range .}}

[级别状态]: {{if .IsRecovered}}S{{.Severity}} Recovered{{else}}S{{.Severity}}

Triggered{{end}}

{{if eq .Severity 1}}<font color=red>**[规则标题]: {{.RuleName}}**</font>{{else}}[规则标

题]: {{.RuleName}}{{end}}

[规则备注]: {{.RuleNote}}

{{if .IsRecovered}}[恢复时间]:{{timeformat .RecoverTime}}{{else}}[触发时间]: {{timeformat

.TriggerTime}}

[触发时值]: {{.TriggerValue}}{{end}}

{{if .OrderTaskId}}[⼯单号]: {{.OrderTaskId}}{{end}}

{{if .TargetIdent}}[监控对象]: {{.TargetIdent}}{{end}}

[告警描述]: {{.Describe}}

[发送时间]: {{timestamp}}

[告警处理]: [认领](url) [忽略1⼩时](url) [忽略6⼩时](url) [忽略1天](url)

[告警标记]: [准确](url) [误报](url) [备注](url)

{{end}}

[WxMsg]

Url = "xxx"

Template = "markdownend"

User = "xxx"

Pass = "xxx"

0条评论
作者已关闭评论
蚊子也怕冷
5文章数
0粉丝数
蚊子也怕冷
5 文章 | 0 粉丝
蚊子也怕冷
5文章数
0粉丝数
蚊子也怕冷
5 文章 | 0 粉丝
原创

企业微信发送应用消息

2023-07-14 00:17:44
19
0

企业微信发送应⽤消息

实现范围

主动发送应⽤消息:企业后台调⽤接⼝通过应⽤向指定成员发送单聊消息

仅使⽤markdown⼀种形式发送

notify_channel 接⼊

配置⽂件维护

新增wxMsg模板配置

新增wsMsg账号密码、地址等配置

模板的形式进⾏发送类型区分

模板定义

详⻅接⼝调⽤

token获取

刷新策略

启动时候拉取⼀次

失败

全局错误码:https://developer.work.weixin.qq.com/document/path/90455

token获取失败

上报

token失效导致的失败

42001 access_token已过期 access_token有时效性,需要重新获取⼀次

则加锁重新获取token

接⼝调⽤

⽀持使⽤模板配置三种通知

markdownend

textSend

textCardSend频率限制

企业Idagentidcorpsecret 加密

对称加密⽅式

https://developer.work.weixin.qq.com/document/path/91039

请求⽅式: GET(HTTPS)

请求地址: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET

{

"errcode": 0,

"errmsg": "ok",

"access_token": "accesstoken000001",

"expires_in": 7200

}

https://developer.work.weixin.qq.com/document/path/90312

每应⽤不可超过帐号上限数*200⼈次/天(注:若调⽤api⼀次发给1000⼈,算1000⼈次;若企业帐号上限是

500⼈,则每个应⽤每天可发送100000⼈次的消息)

每应⽤对同⼀个成员不可超过30次/分钟,超过部分会被丢弃不下发

发消息频率不计⼊基础频率

/**

* 加密

*

* @param input 原⽂

* @param key 定义 key,必须 8 字节以上

* @param transformation 算法

* @param algorithm 加密类型

*/

private static String encryptDes(String input, String key, String

transformation, String algorithm) throws Exception {

Cipher cipher = Cipher.getInstance(transformation);

// 加密规则

SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), algorithm);

// 初始化

cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);

byte[] bytes = cipher.doFinal(input.getBytes());

// Base64 转码失败处理

上报prometheus

告警

n9e

grafana

通知类型 -- 采⽤模板配置⽅开发,⽬前预计⽀持textmarkdown

⽂本消息

markdown

textcard

接⼝调⽤

String encode = new String(Base64.getEncoder().encode(bytes));

return encode;

}

/**

* 解密

*

* @param encryptDES 密⽂

* @param key 定义 key

* @param transformation 算法

* @param algorithm 加密类型

*/

private static String decryptDes(String encryptDES, String key, String

transformation, String algorithm) throws Exception {

Cipher cipher = Cipher.getInstance(transformation);

// 解密规则

SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), algorithm);

// 初始化

cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);

byte[] bytes = cipher.doFinal(Base64.getDecoder().decode(encryptDES));

return new String(bytes);

}

https://developer.work.weixin.qq.com/document/path/90236

请求⽅式:POST(HTTPS)

请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKENbody:

markdownSend:

{

"agentid":10000841,

"duplicate_check_interval":1800,

"enable_duplicate_check":0,

"enable_id_trans":0,

"markdown":{

"content":"${content}"

},

"msgtype":"markdown",

"name":"markdownend",

"touser":"${tousers}"

}

textSend:

{

"agentid":10000841,

"duplicate_check_interval":1800,

"enable_duplicate_check":0,

"enable_id_trans":0,

"msgtype":"text",

"name":"textSend",

"text":{

"content":"${content}"

},

"touser":"${tousers}"

}

textCardSend:

{

"agentid":10000841,

"duplicate_check_interval":1800,

"enable_duplicate_check":0,

"enable_id_trans":0,

"msgtype":"textcard",

"name":"textCardSend",

"textcard":{

"btntxt":"${btntxt}",

"description":"${description}",

"title":"${title}",

"url":"${url}"

},

"touser":"${tousers}"

}后台逻辑

告警通知、订阅规则

模板: 参照微信机器⼈markdown模板

消息推送控制

超过2048 字符的主动截断 2000,分⻚发送

如:{{.RuleName}} 1/2

{{.RuleName}} 2/2

配置

通知账号获取,users.wecom_id

{{range .}}

[级别状态]: {{if .IsRecovered}}S{{.Severity}} Recovered{{else}}S{{.Severity}}

Triggered{{end}}

{{if eq .Severity 1}}<font color=red>**[规则标题]: {{.RuleName}}**</font>{{else}}[规则标

题]: {{.RuleName}}{{end}}

[规则备注]: {{.RuleNote}}

{{if .IsRecovered}}[恢复时间]:{{timeformat .RecoverTime}}{{else}}[触发时间]: {{timeformat

.TriggerTime}}

[触发时值]: {{.TriggerValue}}{{end}}

{{if .OrderTaskId}}[⼯单号]: {{.OrderTaskId}}{{end}}

{{if .TargetIdent}}[监控对象]: {{.TargetIdent}}{{end}}

[告警描述]: {{.Describe}}

[发送时间]: {{timestamp}}

[告警处理]: [认领](url) [忽略1⼩时](url) [忽略6⼩时](url) [忽略1天](url)

[告警标记]: [准确](url) [误报](url) [备注](url)

{{end}}

[WxMsg]

Url = "xxx"

Template = "markdownend"

User = "xxx"

Pass = "xxx"

文章来自个人专栏
方案
4 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0