yearning的默认webhook格式支持钉钉,默认格式不支持企业微信。本文的目的是讲工单流程节点变更通知到企业微信个人或群。

本文假设读者已具备以下技能

1、python flask

2、企业微信接口对接

  1)到群比较简单,直接转到指定URL即可

  2)到个人,需要脚本内换access_token,并且需要有效期内缓存token,企微token有次数限制

 

实现的步骤:

1、使用python写一个http监听代理

2、代理程序内转换webhook报文为企业微信支持的格式

3、转发给企业微信

 

消息转发流程:

yearing → 代理脚本监听器  → 企业微信

 

 

from flask import Flask, request

@app.route("/webhook/event", methods=['POST'])
def event():
    try:
          logger.info('收到Yearning的推送:' + urllib.parse.unquote(request.data))
       # 转换json格式为企业微信需要的markdown格式,详细见企业微信官方文档
       # 转到企业微信
      
app.run(host
=HOST, port=PORT, debug=False)

 

Yearning的webhook地址配置: http://HOST:PORT/webhook/event

 

转到群的步骤

在企业微信群里,添加机器人,即可得到一个 webhook推送地址,此地址无需token,可直接post

 

转到个人的步骤:

1、获取企业微信的access token并缓存token

2、根据报文里的下一人员和提交人员(此处是yearing的登录用户名),得到企业微信里的个人用户名(可通过企业微信部门接口获取成员名单)

3、yearning的用户名和企业微信的用户名对应关系需要自己先对应好,写在库里,简单的话写在脚本里页可以,人员新入职记得添加用户名对应关系

4、根据token和企业微信用户名,推送企业微信要求的格式到企业微信个人

 

posted @ 2024-07-18 13:32 二师弟tl 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 在网上搜到413的解决办法有多种,看具体项目找到对应的解决办法 如果是wcf返回的413,与serverRuntime无关,只要在Binding中设置最大接收值即可, 如果还不行,这样设置就可以了,我就是这样解决的 第一个无name的binding很重要 阅读全文
posted @ 2016-08-31 20:48 二师弟tl 阅读(764) 评论(0) 推荐(0) 编辑
摘要: 请在抽象类下属性加virtual或abstract 阅读全文
posted @ 2016-07-21 14:12 二师弟tl 阅读(949) 评论(0) 推荐(0) 编辑
摘要: 大家都知道身份证号码中包含生日,但又的是阳历,有的是阴历,建议以后系统中输入身份证号码且需要识别为生日时,后面加一位如320123******3421L表示农历,S表示阳历,或者1表示阳历,2表示农历等 阅读全文
posted @ 2016-05-31 18:13 二师弟tl 阅读(295) 评论(0) 推荐(0) 编辑
摘要: //以下两个注册,在Unity中是默认的 //注册控制器,否则不管接口注入还是属性注入都获取不到服务实例 Builder.RegisterControllers(typeof(MvcApplication).Assembly); //这句可支持属性注入 //Builder.RegisterContr 阅读全文
posted @ 2016-05-24 16:17 二师弟tl 阅读(1864) 评论(0) 推荐(0) 编辑
摘要: 使用控制反转最理想的状态是,热插拔。 通俗解释:当一个service要更新了,丢一个新的dll到bin下,ioc配置中把新的程序集中的实现类的实例映射到当前service的抽象,报错该配置。网站不需要重启,下一个用户使用的时候,直接调用了新的服务实现。对client来讲,服务器没有任何暂停服务的迹象 阅读全文
posted @ 2016-05-03 15:01 二师弟tl 阅读(288) 评论(0) 推荐(0) 编辑
摘要: examples come from native speaker Put john in the loop about this. He will have good advice.Why have I been cut out of the loop? I need to know about 阅读全文
posted @ 2016-04-18 19:00 二师弟tl 阅读(8909) 评论(0) 推荐(0) 编辑
摘要: 以上举例代码属性的类型是一个可空枚举类型。 枚举类型是一个泛型,且泛型的Type定义是Nullable<> [0]是泛型的第一个参数。 如该属性如下 这是缩写写法,完整写法是 所以可空枚举类型的泛型参数有且仅有一个参数,直接写索引0[0]不会有问题了。(泛型至少会有一个参数) 要判断Gender是不 阅读全文
posted @ 2016-04-14 10:02 二师弟tl 阅读(3580) 评论(0) 推荐(1) 编辑
摘要: 大部分url重写的需求是伪静态,当然有很多第三方开源组件,但是这种需求的核心方法其实就是context.rewritePath() 要是系统像ARR那样,用重写做代理和反向代理,一般的重写就不行了,context.rewritePath()的内部不允许跨站点的url。 你可能会想到实现自己的IHtt 阅读全文
posted @ 2016-03-31 11:04 二师弟tl 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 我们常讨论说要取真实IP,不同场景所谓的真实IP含义不一样。 如你要根据客户端IP去判断客户所在区域,那么要记录客户的出口IP,这里的出口IP才是你所谓的真实IP。 如你要判断多个客户端是不是同一个,那么需要同时使用外网IP和内网IP才能区分: 因为若仅使用内网IP,不同的内网有相同的内网IP; 若 阅读全文
posted @ 2016-03-30 11:45 二师弟tl 阅读(506) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示