Преглед на файлове

feat: add Feishu(飞书) tool for sending message to chat group bot via webhook (#3059)

Co-authored-by: crazywoola <427733928@qq.com>
arkii преди 1 година
родител
ревизия
5e591fc1b7

+ 1 - 0
api/core/tools/provider/_position.yaml

@@ -25,3 +25,4 @@
 - wecom
 - qrcode
 - dingtalk
+- feishu

+ 1 - 0
api/core/tools/provider/builtin/feishu/_assets/icon.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711946937387" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5208" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M262.339048 243.809524h326.070857s91.672381 84.504381 91.672381 200.655238l-152.81981 105.569524S445.781333 359.960381 262.339048 243.809524z" fill="#00DAB8" p-id="5209"></path><path d="M853.333333 423.350857s-112.103619-42.276571-183.393523-10.581333c-71.338667 31.695238-101.912381 73.923048-132.486096 105.618286-40.71619 42.22781-112.054857 116.150857-173.202285 73.923047-61.147429-42.276571 244.540952 147.846095 244.540952 147.846095s127.463619-71.631238 173.202286-190.122666C822.759619 444.464762 853.333333 423.350857 853.333333 423.350857z" fill="#0C3AA0" p-id="5210"></path><path d="M170.666667 402.236952v316.757334s112.298667 138.142476 376.978285 63.390476c112.103619-31.695238 203.824762-179.541333 203.824762-179.541333S618.934857 824.612571 170.666667 402.285714z" fill="#296DFF" p-id="5211"></path></svg>

+ 8 - 0
api/core/tools/provider/builtin/feishu/feishu.py

@@ -0,0 +1,8 @@
+from core.tools.provider.builtin.feishu.tools.feishu_group_bot import FeishuGroupBotTool
+from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
+
+
+class FeishuProvider(BuiltinToolProviderController):
+    def _validate_credentials(self, credentials: dict) -> None:
+        FeishuGroupBotTool()
+        pass

+ 13 - 0
api/core/tools/provider/builtin/feishu/feishu.yaml

@@ -0,0 +1,13 @@
+identity:
+  author: Arkii Sun
+  name: feishu
+  label:
+    en_US: Feishu
+    zh_Hans: 飞书
+    pt_BR: Feishu
+  description:
+    en_US: Feishu group bot
+    zh_Hans: 飞书群机器人
+    pt_BR: Feishu group bot
+  icon: icon.svg
+credentials_for_provider:

+ 50 - 0
api/core/tools/provider/builtin/feishu/tools/feishu_group_bot.py

@@ -0,0 +1,50 @@
+from typing import Any, Union
+
+import httpx
+
+from core.tools.entities.tool_entities import ToolInvokeMessage
+from core.tools.tool.builtin_tool import BuiltinTool
+from core.tools.utils.uuid_utils import is_valid_uuid
+
+
+class FeishuGroupBotTool(BuiltinTool):
+    def _invoke(self, user_id: str, tool_parameters: dict[str, Any]
+                ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]:
+        """
+            invoke tools
+            API document: https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot
+        """
+
+        url = "https://open.feishu.cn/open-apis/bot/v2/hook"
+
+        content = tool_parameters.get('content', '')
+        if not content:
+            return self.create_text_message('Invalid parameter content')
+
+        hook_key = tool_parameters.get('hook_key', '')
+        if not is_valid_uuid(hook_key):
+            return self.create_text_message(
+                f'Invalid parameter hook_key ${hook_key}, not a valid UUID')
+
+        msg_type = 'text'
+        api_url = f'{url}/{hook_key}'
+        headers = {
+            'Content-Type': 'application/json',
+        }
+        params = {}
+        payload = {
+            "msg_type": msg_type,
+            "content": {
+                "text": content,
+            }
+        }
+
+        try:
+            res = httpx.post(api_url, headers=headers, params=params, json=payload)
+            if res.is_success:
+                return self.create_text_message("Text message sent successfully")
+            else:
+                return self.create_text_message(
+                    f"Failed to send the text message, status code: {res.status_code}, response: {res.text}")
+        except Exception as e:
+            return self.create_text_message("Failed to send message to group chat bot. {}".format(e))

+ 40 - 0
api/core/tools/provider/builtin/feishu/tools/feishu_group_bot.yaml

@@ -0,0 +1,40 @@
+identity:
+  name: feishu_group_bot
+  author: Arkii Sun
+  label:
+    en_US: Send Group Message
+    zh_Hans: 发送群消息
+    pt_BR: Send Group Message
+  icon: icon.png
+description:
+  human:
+    en_US: Sending a group message on Feishu via the webhook of group bot
+    zh_Hans: 通过飞书的群机器人webhook发送群消息
+    pt_BR: Sending a group message on Feishu via the webhook of group bot
+  llm: A tool for sending messages to a chat group on Feishu(飞书) .
+parameters:
+  - name: hook_key
+    type: secret-input
+    required: true
+    label:
+      en_US: Feishu Group bot webhook key
+      zh_Hans: 群机器人webhook的key
+      pt_BR: Feishu Group bot webhook key
+    human_description:
+      en_US: Feishu Group bot webhook key
+      zh_Hans: 群机器人webhook的key
+      pt_BR: Feishu Group bot webhook key
+    form: form
+  - name: content
+    type: string
+    required: true
+    label:
+      en_US: content
+      zh_Hans: 消息内容
+      pt_BR: content
+    human_description:
+      en_US: Content to sent to the group.
+      zh_Hans: 群消息文本
+      pt_BR: Content to sent to the group.
+    llm_description: Content of the message
+    form: llm