飞书@看不到?那不妨试试发送加急消息吧
评论
收藏

飞书@看不到?那不妨试试发送加急消息吧

经验分享
莫奈
2024-04-02 19:09·浏览量:1562
莫奈
发布于 2024-04-02 17:59更新于 2024-04-02 19:091562浏览

大家使用机器人进行飞书群通知时,通常会进行@操作来传递相关的信息,但是作为现代打工仔,你一定有很多很多重要的“工作”群聊吧,那么摸鱼忙碌的时候,我们很容易忽略@信息而继续”认真“工作

那么如何让信息更高效的传递呢,不妨来试试使用影刀发送加急消息吧,让打工的你从此不在错过下班的播报,又或者提高我们的摸鱼工作安全感

拉远了拉远了,其实这是最近一个小伙伴咨询我的问题,目前影刀没有相关指令进行飞书的加息消息发送,所以我们来手把手搭建一个吧~


一、前置准备操作

1.新建一个飞书应用,开通添加机器人功能

2.我们需要给机器人开通一些我们需要使用到的权限

需要开通的权限:

  • 通过手机号或邮箱获取用户 ID
  • 获取用户受雇信息
  • 以应用身份读取通讯录
  • 获取用户 user ID
  • 获取与更新群组信息
  • 读取群信息
  • 获取群组信息
  • 获取与发送单聊、群组消息
  • 以应用的身份发消息
  • 发送应用内加急消息

3.开通好之后,我们发布一下版本,申请一下审核,审核通过后,我们的前置操作就欧克了

二、查看我们需要的API进行组合

1.首先我们需要获取一下访问凭证tenant_access_token

url = "<https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal>"
method = "post"
headers = {
    "Content-Type": "application/json; charset=utf-8"
}
params = {
    "app_id": "",
    "app_secret": "",
}

app_id,app_secret对应我们刚才建立的应用的应用凭证

2.我们需要获取一下我们机器人所在的群聊id信息,记得先把机器人添加到群聊里面哦

url = "<https://open.feishu.cn/open-apis/im/v1/chats>"
method = "get"
headers = {
    "Authorization": "Bearer " + access_token
}

3.既然我们需要加急消息,那么我们就需要获取一些通知对象的用户id信息

url = "<https://open.feishu.cn/open-apis/contact/v3/users/batch_get_id>"
method = "post"
headers = {
    "Authorization": "Bearer " + access_token
}
body = {
    "mobiles": [],
    "emails": [],
    "include_resigned": "true"
}

4.接下来我们只需要使用机器人发送一条消息后,获取消息id后,对该消息进行加急处理

url = "<https://open.feishu.cn/open-apis/im/v1/messages>"
method = "post"
headers = {
    "Authorization": "Bearer " + access_token
}
params = {
    "receive_id_type": "chat_id" //选择群聊
}
body = {
    "receive_id": "", //传入群聊id
    "msg_type": "text", //这里只介绍文本消息发送
    "content": "{\\"text\\":\\"" + 消息文本+ "\\"}"
}

url = "<https://open.feishu.cn/open-apis/im/v1/messages/>" + self.messageId + "/urgent_app"
method = "patch"
headers = {
    "Authorization": "Bearer " + access_token
}
params = {
    "user_id_type": "open_id"
}
body = {
    "user_id_list": "" //消息id传入
}

三、构建影刀指令,愉快使用吧

这里我已经帮助搭建封装好了一个指令,可以获取测试啦,底下附上源码,大家自己动动手丰衣足食~

# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块

import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv

def main(args):
    pass

import requests
import re

FeiShu = "<https://open.feishu.cn/open-apis/>"

class FS:
    def __init__(self, appId, appSecret):
        self.app_id = appId
        self.app_secret = appSecret
        self.Ttoken = ""
        self.useId_list = []
        self.chatId_list = []
        self.messageId = ""

    def tokenGet(self):
        url = FeiShu + "auth/v3/tenant_access_token/internal"
        headers = {
            "Content-Type": "application/json; charset=utf-8"
        }
        params = {
            "app_id": self.app_id,
            "app_secret": self.app_secret,
        }
        token_Get = requests.post(url=url, headers=headers, params=params)
        self.Ttoken = token_Get.json()['tenant_access_token']

    def userIdGet(self, moblies, emails):
        url = FeiShu + "contact/v3/users/batch_get_id"
        headers = {
            "Authorization": "Bearer " + str(self.Ttoken)
        }
        body = {
            "mobiles": moblies,
            "emails": emails,
            "include_resigned": "true"
        }
        useId_Get = requests.post(url=url, headers=headers, json=body)
        self.useId_list = useId_Get.json()['data']['user_list']

    def chatIdGet(self):
        url = FeiShu + "im/v1/chats"
        headers = {
            "Authorization": "Bearer " + str(self.Ttoken)
        }
        chatId_Get = requests.get(url=url, headers=headers)
        self.chatId_list = chatId_Get.json()['data']['items']

    def sendMessage(self, receive_id, content):
        url = FeiShu + "im/v1/messages"
        headers = {
            "Authorization": "Bearer " + str(self.Ttoken)
        }
        params = {
            "receive_id_type": "chat_id"
        }
        body = {
            "receive_id": receive_id,
            "msg_type": "text",
            "content": "{\\"text\\":\\"" + content + "\\"}"
        }
        chatId_Get = requests.post(url=url, headers=headers, params=params, json=body)
        self.messageId = chatId_Get.json()['data']['message_id']

    def UrgentMessage(self, user_id_list):
        url = FeiShu + "im/v1/messages/" + self.messageId + "/urgent_app"
        headers = {
            "Authorization": "Bearer " + str(self.Ttoken)
        }
        params = {
            "user_id_type": "open_id"
        }
        body = {
            "user_id_list": user_id_list
        }
        chatId_Get = requests.patch(url=url, headers=headers, params=params, json=body)
        result = chatId_Get.json()["data"]["invalid_user_id_list"]
        if len(result) == 0:
            return "Success"
        else:
            return "Not Find " + str(result)

def send_UrgentMessage(appid, appSecret, callUser, chatname, sendContent):
    """
    monai
    :param appid: 应用id
    :param appSecret: 应用密钥
    :param callUser: 查询用户id依据列表,使用电话/邮件,例["12341234123","xxx@xx.xxx"]
    :param chatname: 发送消息指定群聊
    :param sendContent: 发送文本信息
    :return: 
    """
    feishu = FS(appid, appSecret)
    feishu.tokenGet()
    email_list = list(filter(lambda x: re.match('.*@.*', x) != None, callUser))
    phone_list = list(filter(lambda x: re.match('[0-9]{11}', x) != None, callUser))
    feishu.userIdGet(moblies=phone_list, emails=email_list)
    id_List = feishu.useId_list
    useidList = list(map(lambda x: x["user_id"], id_List))
    feishu.chatIdGet()
    chatId_list = feishu.chatId_list
    chatIdDict = dict(zip(map(lambda x: x["name"], chatId_list), map(lambda x: x["chat_id"], chatId_list)))
    if chatname in chatIdDict.keys():
        chat_id = chatIdDict[chatname]
        feishu.sendMessage(chat_id, sendContent)
        result = feishu.UrgentMessage(useidList)
        return result
    else:
        return "该群聊不存在该机器人"

我们直接调用send_UrgentMessage方法即可使用~

快来愉快的搭建使用吧

收藏3
全部评论1
最新
发布评论
评论