1.发送纯文本消息
1.1代码如下
#!/usr/bin/env python
#coding=utf-8
import json
import requests
url = "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxx" #机器人勾子,发送纯文本使用自定义机器人即可
payload_message = {
"msg_type": "text",
"content": {
"text": "你要发送的消息"
}
}
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=json.dumps(payload_message))
print(response.text)
2.发送图片
2.1首先要先创建一个机器人,拿到机器人的app_id和app_secret,并且要给机器人im:resource:upload,im:resource权限,用于图片上传。笔者在写这篇博客时发现现在只需要申请一个权限即可(创建机器人的过程很坎坷,需要后台管理权限,并且每次修改机器人配置都要进行一次发布和审批,我在网上找到的相关文章基本上都没有创建机器人的过程,笔者也是在飞书技术客服的支持下稀里糊涂的完成了飞书机器人的创建。)这个机器人是没有勾子的,因此不能用来发送消息。
创建的机器人:
2.2创建一个群机器人,使用自定义机器人即可,使用该机器人的勾子进行消息发送。
2.3代码如下(因定制化需求更改过此原始代码,读者在使用时先检查下此代码有没有语法上的错误)
#!/usr/bin/env python
#coding=utf-8
import requests
from requests_toolbelt import MultipartEncoder
import json
# 你复制的webhook地址
class SendMsg():
def __init__(self, app_id, app_secret, web_hook_url):
self.app_id = app_id # 发送图片时需要
self.app_secret = app_secret # 发送图片时需要
self.web_hook_url = web_hook_url # 机器人web_hook地址
def get_tenant_access_token(self): #获取token在上传图片时使用
url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
body = {
"app_id": self.app_id,
"app_secret": self.app_secret
}
r = requests.request(method='post', url=url, json=body)
print(r.json())
print(r.json()['tenant_access_token'])
return r.json()['tenant_access_token']
# 上传图片生成image id
def uploadImage(self, image_rb):
if image_rb == None:
return None
else:
tenant_access_token = self.get_tenant_access_token()
print(tenant_access_token)
url = "https://open.feishu.cn/open-apis/im/v1/images"
with open(image_rb, 'rb') as f:
image = f.read()
form = {'image_type': 'message',
'image': image} # image_rb:是以rb格式读的图片内容,也可以是ui自动截的图,直接传过来
multi_form = MultipartEncoder(form)
headers = {
'Authorization': 'Bearer {}'.format(tenant_access_token), ## 获取tenant_access_token, 需要替换为实际的token
}
headers['Content-Type'] = multi_form.content_type
response = requests.request("POST", url, headers=headers, data=multi_form)
# print(response.headers['X-Tt-Logid']) # for debug or oncall
print(response.json()) # Print Response
img_key = response.json()['data']['image_key']
return img_key
def send_post(self,title,text,img_key):
"""
title: 发送消息的标题
content: 使用富文本格式:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/im-v1/message/create_json
"""
msg = {
"msg_type": "post",
"content": {
"post": {
"zh_cn": {
"title": title,
"content": [
[
{
"tag": "text",
"text": text
},
{
"tag": "img",
"image_key": img_key
}
]
],
}
}
}
}
r = requests.request(method='post', url=self.web_hook_url, json=msg)
print(r.content)
if __name__ == '__main__':
exp = SendMsg('cli_a3214dc867f8xxxx', 'kOf8Hw3kcJDqIM6BUT5KRbGXbGzjxxxx',
'https://open.feishu.cn/open-apis/bot/v2/hook/ec0eb702-4fe2-4e07-bbb9-c01732xxxxxx')
exp.get_tenant_access_token()
img_key = exp.uploadImage(r'C:\Users\Administrator\Desktop\login\TestScripts\1.jpg')
exp.send_post('消息通知','发送图片',img_key)
2.4效果
3.踩过的坑
3.1在调试脚本时不要开启抓包工具,比如fiddler,飞书机器人勾子使用的是https,在开启时会有证书相关的报错信息,当然有些大神可以通过代码解决,但是建议代码能力不是很强的tester在运行脚本时关闭抓包工具就行了。
3.2待续