Browse Source

feat: add Wecom(企业微信) tool for sending message to chat group bot via webhook (#2638)

Bowen Liang 1 year ago
parent
commit
f25cec265d

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

@@ -17,3 +17,4 @@
 - time
 - vectorizer
 - gaode
+- wecom

BIN
api/core/tools/provider/builtin/wecom/_assets/icon.png


+ 46 - 0
api/core/tools/provider/builtin/wecom/tools/wecom_group_bot.py

@@ -0,0 +1,46 @@
+from typing import Any, Union
+
+import httpx
+
+from core.tools.entities.tool_entities import ToolInvokeMessage
+from core.tools.tool.builtin_tool import BuiltinTool
+
+
+class WecomRepositoriesTool(BuiltinTool):
+    def _invoke(self, user_id: str, tool_parameters: dict[str, Any]
+                ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]:
+        """
+            invoke tools
+        """
+        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 hook_key:
+            return self.create_text_message('Invalid parameter hook_key')
+
+        msgtype = 'text'
+        api_url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send'
+        headers = {
+            'Content-Type': 'application/json',
+        }
+        params = {
+            'key': hook_key,
+        }
+        payload = {
+            "msgtype": msgtype,
+            "text": {
+                "content": 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/wecom/tools/wecom_group_bot.yaml

@@ -0,0 +1,40 @@
+identity:
+  name: wecom_group_bot
+  author: Bowen Liang
+  label:
+    en_US: Send Group Message
+    zh_Hans: 发送群消息
+    pt_BR: Send Group Message
+  icon: icon.svg
+description:
+  human:
+    en_US: Sending a group message on Wecom via the webhook of group bot
+    zh_Hans: 通过企业微信的群机器人webhook发送群消息
+    pt_BR: Sending a group message on Wecom via the webhook of group bot
+  llm: A tool for sending messages to a chat group on Wecom(企业微信) .
+parameters:
+  - name: hook_key
+    type: string
+    required: true
+    label:
+      en_US: Wecom Group bot webhook key
+      zh_Hans: 群机器人webhook的key
+      pt_BR: Wecom Group bot webhook key
+    human_description:
+      en_US: Wecom Group bot webhook key
+      zh_Hans: 群机器人webhook的key
+      pt_BR: Wecom 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

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

@@ -0,0 +1,8 @@
+from core.tools.provider.builtin.wecom.tools.wecom_group_bot import WecomRepositoriesTool
+from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
+
+
+class GaodeProvider(BuiltinToolProviderController):
+    def _validate_credentials(self, credentials: dict) -> None:
+        WecomRepositoriesTool()
+        pass

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

@@ -0,0 +1,13 @@
+identity:
+  author: Bowen Liang
+  name: wecom
+  label:
+    en_US: Wecom
+    zh_Hans: 企业微信
+    pt_BR: Wecom
+  description:
+    en_US: Wecom group bot
+    zh_Hans: 企业微信群机器人
+    pt_BR: Wecom group bot
+  icon: icon.png
+credentials_for_provider: