* * * 文章内容仅是作为个人学习记录,如有不足,欢迎指正♥
posts - 19,comments - 0,views - 10219
复制代码
复制代码
复制代码
官网API:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/guide/faq
class FeishuBotChat():
    def __init__(self,webhook):
        self.webhook = webhook
    #获取飞书创建的应用的token,飞书-工作台-创建应用-凭证与基础信息获取appid和appSecret
    def query_token(self):
        url="https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
        payload={
                    "app_id": "cli_a387080afc7b905c",
                    "app_secret": "0IoNjEQgCw4n8cv5uV16yfl2aNVjqcaA"
        }
        res = requests.request('POST',url=url,data=payload)
        return res.json()["tenant_access_token"]
    
    # 通过飞书手机号获取用户的user_id,前提是开通权限,消息与群体
    def query_one_uesrid(self,mobile):
        url = 'https://open.feishu.cn/open-apis/contact/v3/users/batch_get_id?user_id_type=open_id'
        payload = json.dumps({
            "mobiles": [mobile]
        })
        token=self.query_token()
        header = {'Authorization': f'Bearer {token}', 'Content-Type': 'application/json'}
        res = requests.request('POST', url=url, headers=header, data=payload)
        if res.json()["data"] and "user_id" in res.json()["data"]["user_list"][0]:
            return res.json()["data"]["user_list"][0]["user_id"]
        else:
            user_id = ""
            return user_id
    # 根据邮箱或手机号获取飞书userid----暂时只支持手机号
    def query_userid_dict(self, **phone_dict):
        """
        :param token: 飞书创建应用对应的token
        :param phone_list: 字典,人名:手机号简直对
        :return:
        """
        url = 'https://open.feishu.cn/open-apis/contact/v3/users/batch_get_id?user_id_type=open_id'
        mobiles = []
        name_uesrid = {}
        userid_list = []
        for onephone in phone_dict.values():
            mobiles.append(onephone)
        json = {"mobiles": mobiles}
        token = self.query_token()
        header = {'Authorization': f'Bearer {token}', 'Content-Type': 'application/json'}
        try:
            res = requests.request("POST", url=url, headers=header, json=json)
            res = res.json()
            user_list = res['data']['user_list']
            for mobile_userid in user_list: #列表转换字典,后续可赋值使用
                for k, v in phone_dict.items():
                    if v == mobile_userid["mobile"]:
                        name = k
                        name_uesrid[name] = mobile_userid["user_id"] #字典赋值,name=userId
                        userid_list.append(mobile_userid["user_id"]) #列表追加userId
                    else:
                        continue
                return name_uesrid, userid_list
            else:
                return name_uesrid, userid_list

        except Exception as e:
            print(e)
    def send_feishu_text(self, msg, isSign=True, is_at_all=False, at_userid=[], is_auto_at=True):
        """
        text类型
        :param msg: 消息内容
        :param isSign:是否验签,可调用自定义的signSh256验签方法
        :param is_at_all: @所有人时:true,否则为false(可选)
        :param at_userid: 被@人的userid(注意:可以在msg内容里自定义@userid的位置,也支持同时@多个userid,可选)
        :param is_auto_at: 是否自动在msg内容末尾添加@手机号,默认自动添加,可设置为False取消(可选)
        :return: 返回消息发送结果
        """
        inData = {
            "timestamp":"timestamp",
            "sign":"sign",
            "msg_type": "text",
            "content":{"text": msg}
        }
        if isSign:  #判断是否需要验签
            timestamp,sign=signSh256()
            # 请求参数
            inData["timestamp"]=timestamp
            inData["sign"] = sign

        # 判断是否单独 @ 某人
        if at_userid:
            atuserid = ''
            for i in range(0, len(at_userid)):
                atuserid = atuserid + f'<at user_id=\"{at_userid[i]}\"></at>'
            if is_auto_at:  # 是否自动在msg内容末尾添加@手机号,默认自动添加,可设置为False取消(可选)
                inData["content"]["text"] = f'{msg}' + f"{atuserid}"

        #判断是否@全员,如果入参is_at_all=True则进行@,否则不@
        if is_at_all:
            # @所有人发送信息
            content_text = f'<at user_id=\"all\">所有人</at>' + f"{msg}"
            inData["content"] =json.dumps({"text": content_text})
        resp = requests.request("POST", self.webhook, headers={"Content-Type":'application/json'}, data=json.dumps(inData))
        return resp.json()
    print(xiaoshu.send_feishu_text(msg, isSign=True, at_userid=userid_list))
    print(xiaoshu.send_feishu_text(msg, isSign=True, is_at_all=True))
复制代码

 

复制代码
复制代码

 

posted on   __陈胖胖  阅读(511)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示