From 3d3e437b003ad048d15579b624e0a5a02ce765d1 Mon Sep 17 00:00:00 2001 From: woni <320753691@qq.com> Date: Thu, 27 Mar 2025 00:16:29 +0800 Subject: [PATCH] add card message callback --- app/__init__.py | 2 +- app/task.py | 9 +++- app/utils/xbot_utils.py | 91 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+), 2 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 1ef90ac..66de18b 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -173,7 +173,7 @@ def do_card_action_trigger(data: P2CardActionTrigger) -> P2CardActionTriggerResp activity_name = data.event.action.form_value.get("select_activity") process_push_xbot_activity_bot.delay(activity_name, open_id) - resp = {"toast": {"type": "info", "content": "提交成功"}} + resp = {"toast": {"type": "info", "content": "提交成功, 机器人即将推送"}} return P2CardActionTriggerResponse(resp) diff --git a/app/task.py b/app/task.py index b5950e3..b1514c2 100644 --- a/app/task.py +++ b/app/task.py @@ -18,6 +18,7 @@ from app.utils.feishu import ( from app.utils.utils import update_record, add_record from app.utils.yd_utils import new_blank_robot, new_blank_activity from app.utils.xbot_utils import push_xbot_activity_bot +from app.utils.xbot_utils import send_select_activity_card_message def parse_history_message(data): @@ -148,11 +149,17 @@ def process_message_callback( content = json.loads(message_data.get("content")) content_text = content.get("text") - if "记录问题" not in content_text: + if "记录问题" not in content_text or "下载指令" not in content_text: # 忽略非记录问题的消息 lark.logger.info("忽略非记录问题的消息") return + # 根据消息内容走不同的逻辑 + if "下载指令" in content_text: + # 发送一个卡片消息 + send_select_activity_card_message(message_id) + return + record_category = "官方指令" if "指令" in content_text else "官方应用" record = {} diff --git a/app/utils/xbot_utils.py b/app/utils/xbot_utils.py index b74a173..2ba3229 100644 --- a/app/utils/xbot_utils.py +++ b/app/utils/xbot_utils.py @@ -260,6 +260,7 @@ def package_activity(token, robot_uuid, basedir): def send_message(file_path, open_id): + """发送指令文件到指定用户""" # 创建client YOUR_APP_ID = "cli_a5110cd1da70900b" @@ -348,3 +349,93 @@ def push_xbot_activity_bot(activity_code, open_id): token=token, robot_uuid=activity_code, basedir=base_dir ) send_message(activity_path, open_id) + + +def get_office_activity_names_with_viewname(token): + """ + 获取自定义指令的名称及版本 + :return: list, 返回自定义指令 名_版本号 + """ + page = 1 + uuid = [] + url = "https://api.winrobot360.com/api/v1/robot/activity/package/list?source=market&page=%s&size=100&uiaType=uiatype" + + payload = {} + headers = { + "Authorization": f"bearer {token}", + } + activity_data = [] + response = requests.request("GET", url % page, headers=headers, data=payload) + + page_info = response.json().get("page").get("pages") + for page in range(1, page_info + 1): + response = requests.request("GET", url % page, headers=headers, data=payload) + for item in response.json().get("data"): + uuid.append(item.get("packageName") + "==" + item.get("packageVersion")) + # activity_data[item.get("packageViewName")] = item.get("packageName") + "==" + item.get("packageVersion") + + # activity_data.append({"activity_name": item.get("packageViewName"), "activity_code": item.get("packageName") + "==" + item.get("packageVersion")}) + + activity_data.append( + { + "text": item.get("packageViewName"), + "value": f'{item.get("packageName")}=={item.get("packageVersion")}', + } + ) + + return activity_data + + +def send_select_activity_card_message(message_id): + username = "剑心@fckj" + password = "320753691love" + # open_id = "ou_d542891996bf1961f9a94563e6bd4d49" + token = get_token(username=username, password=password) + activity_data = get_office_activity_names_with_viewname(token) + + content = { + "type": "template", + "data": { + "template_id": "AAqR6hyJFojEs", + "template_version_name": "1.0.6", + "template_variable": {"activity_list": activity_data}, + }, + } + APP_ID = "cli_a5110cd1da70900b" + APP_SECRET = "XwTUlUq7dGK1XexUS7ljShJJ7t1MIwXF" + + client = ( + lark.Client.builder() + .app_id(APP_ID) + .app_secret(APP_SECRET) + .log_level(lark.LogLevel.DEBUG) + .build() + ) + + # 构造请求对象 + + request: ReplyMessageRequest = ( + ReplyMessageRequest.builder() + .message_id(message_id) + .request_body( + ReplyMessageRequestBody.builder() + .content(content=content) + .msg_type("text") + .reply_in_thread(True) + .build() + ) + .build() + ) + + # 发起请求 + response: CreateMessageResponse = client.im.v1.message.create(request) + + # 处理失败返回 + if not response.success(): + lark.logger.error( + f"client.im.v1.message.create failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}, resp: \n{json.dumps(json.loads(response.raw.content), indent=4, ensure_ascii=False)}" + ) + return + + # 处理业务结果 + lark.logger.info(lark.JSON.marshal(response.data, indent=4))