Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add a new built-in tool of Slack Incoming Webhook #4067

Merged
merged 1 commit into from
May 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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