Skip to content

Commit

Permalink
feat: add a new built-in tool of Slack Incoming Webhook (#4067)
Browse files Browse the repository at this point in the history
  • Loading branch information
ericyangpan committed May 4, 2024
1 parent 67902b5 commit 5940564
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 0 deletions.
1 change: 1 addition & 0 deletions api/core/tools/provider/_position.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,4 @@
- qrcode
- dingtalk
- feishu
- slack
22 changes: 22 additions & 0 deletions api/core/tools/provider/builtin/slack/_assets/icon.svg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions api/core/tools/provider/builtin/slack/slack.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from core.tools.provider.builtin.slack.tools.slack_webhook import SlackWebhookTool
from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController


class SlackProvider(BuiltinToolProviderController):
def _validate_credentials(self, credentials: dict) -> None:
SlackWebhookTool()
pass
13 changes: 13 additions & 0 deletions api/core/tools/provider/builtin/slack/slack.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
identity:
author: Pan YANG
name: slack
label:
en_US: Slack
zh_Hans: Slack
pt_BR: Slack
description:
en_US: Slack Webhook
zh_Hans: Slack Webhook
pt_BR: Slack Webhook
icon: icon.svg
credentials_for_provider:
43 changes: 43 additions & 0 deletions api/core/tools/provider/builtin/slack/tools/slack_webhook.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
from typing import Any, Union

import httpx

from core.tools.entities.tool_entities import ToolInvokeMessage
from core.tools.tool.builtin_tool import BuiltinTool


class SlackWebhookTool(BuiltinTool):
def _invoke(self, user_id: str, tool_parameters: dict[str, Any]
) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]:
"""
Incoming Webhooks
API Document: https://api.slack.com/messaging/webhooks
"""

content = tool_parameters.get('content', '')
if not content:
return self.create_text_message('Invalid parameter content')

webhook_url = tool_parameters.get('webhook_url', '')

if not webhook_url.startswith('https://hooks.slack.com/services/'):
return self.create_text_message(
f'Invalid parameter webhook_url ${webhook_url}, not a valid Slack webhook URL')

headers = {
'Content-Type': 'application/json',
}
params = {}
payload = {
"text": content,
}

try:
res = httpx.post(webhook_url, headers=headers, params=params, json=payload)
if res.is_success:
return self.create_text_message("Text message was 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 through webhook. {}".format(e))
40 changes: 40 additions & 0 deletions api/core/tools/provider/builtin/slack/tools/slack_webhook.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
identity:
name: slack_webhook
author: Pan YANG
label:
en_US: Incoming Webhook to send message
zh_Hans: 通过入站 Webhook 发送消息
pt_BR: Incoming Webhook to send message
icon: icon.svg
description:
human:
en_US: Sending a message on Slack via the Incoming Webhook
zh_Hans: 通过入站 Webhook 在 Slack 上发送消息
pt_BR: Sending a message on Slack via the Incoming Webhook
llm: A tool for sending messages to a chat on Slack.
parameters:
- name: webhook_url
type: string
required: true
label:
en_US: Slack Incoming Webhook url
zh_Hans: Slack 入站 Webhook 的 url
pt_BR: Slack Incoming Webhook url
human_description:
en_US: Slack Incoming Webhook url
zh_Hans: Slack 入站 Webhook 的 url
pt_BR: Slack Incoming Webhook url
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 channel or person.
zh_Hans: 消息内容文本
pt_BR: Content to sent to the channel or person.
llm_description: Content of the message
form: llm

0 comments on commit 5940564

Please sign in to comment.