编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

如何用Python建立一个Socket模式的Slackbot——教程

wxchong 2024-07-02 03:08:53 开源技术 11 ℃ 0 评论

出于安全考虑,使用Slack的大型组织通常在公司防火墙后面运作。这使得建立一个Slackbot变得更加复杂。如果你的工作空间不受保护,那么你可能不需要在Socket模式下创建一个机器人。相反,请查看关于如何用Python建立你的第一个Slackbot的教程。

在本教程中,你将学习如何创建一个可以从企业防火墙后面运行的Slackbot,以实现内部运行。我们将用Python编写机器人的代码,并利用Slack的API。

前提条件

  • 一个Slack账户。如果你还没有,你可以在这里创建一个。
  • Python 3.6或更新版本。如果你的电脑上没有安装Python,你可以在这里下载它。

建立一个简单的Slackbot

一旦你有了上面的材料,你就可以开始建立你的简单Slackbot。我们将通过以下步骤来建立你的项目,创建和安装Slackbot,编写代码,并进行测试。

设置你的项目

首先,为你的项目创建并导航到一个目录。你可以通过运行以下命令来完成。

mkdir simple-slack-bot
cd simple-slack-bot
复制代码

在你导航到你的项目后,创建一个虚拟环境。这将为你提供一个空间来正确安装你的项目所需要的正确的依赖性。你可以用下面的方法来做这件事。

python3 -m venv .venv
复制代码

现在你已经创建了你的虚拟环境,你必须激活它。

source .venv/bin/activate
复制代码

接下来,安装一些你创建机器人所需的依赖项。

pip install slack-sdk slack-bolt python-dotenv
复制代码

创建Slackbot

现在你已经为你的项目设置了基本配置,是时候创建Slackbot了。

如果你想在一个新的工作区建立你的机器人,请在这里创建一个。如果你已经是一个工作区的一部分,你想在那里建立你的机器人,请继续阅读!

要开始,请浏览Slack应用程序仪表板上的Slack API。在这里,你应该找到一个绿色按钮,上面写着创建新的应用程序。当你点击这个按钮时,选择_从头开始_创建你的应用程序的选项_。_

为你的机器人创建一个名称,如 "Simple-Bot"。选择你想让你的机器人存在的工作空间。如果你的工作区有应用程序限制,你会看到一个类似于下图的黄色警告信息。这是好的!点击创建应用程序

配置Slackbot

一旦你创建了你的机器人,你应该看到一个类似下面的页面。

在这里,我们将需要配置一些设置,以便机器人能够正常运行。导航到左边面板_上功能_下的 "OAuth & Permissions "标签。

向下滚动,在_Bot Token Scopes_下添加以下作用域。

  • app_mentions.read: 允许机器人查看提到你的机器人的信息。
  • **channels:join:**允许机器人加入频道。
  • chat:write: 允许机器人在公共频道中发布信息。

启用Slackbot的Socket模式

接下来,我们将启用Socket模式。套接字模式允许我们的机器人在我们的工作区进行互动,而不暴露公共的HTTP端点,这在企业的防火墙后面可能是不允许的。

要启用 "套接字模式",请导航到左侧面板中 "设置"下的 "套接字模式 "标签。拨动 "启用套接字模式"旁边的按钮。

为你的机器人创建一个应用级令牌,如下图所示。一个应用程序级别的令牌与你的应用程序普遍连接,并在你的应用程序使用的每个组织中连接。这与机器人级令牌不同,后者将在后面讨论。在这个例子中,令牌的名称是 "simple_bot_app_token"。

点击生成后,你将收到一个应用程序级别的令牌,它将被称为SLACK_APP_TOKEN 。复制这个令牌并把它存放在安全的地方--我们以后会需要它。点击 "完成"按钮,确保Socket模式被启用。

启用Slackbot的事件订阅

一旦我们启用了Socket模式,我们将启用事件订阅。事件订阅允许我们的机器人自动响应某些事件,如提及或直接消息。在左侧面板的_功能_下导航到 "事件订阅"。启用事件。

展开_订阅机器人事件_部分,点击添加机器人用户事件按钮。选择要订阅的app_mention事件,然后保存您的更改。

将Slackbot安装到一个工作区

一旦你配置好你的机器人,我们就可以把它安装到一个工作区。要做到这一点,请导航到_设置_下的 "安装应用程序"。

如果你的工作区有限制,像Twilio和许多大型组织,你将需要请求安装你的应用程序,然后才能在工作区查看它。这个过程可能因你的组织而异。在Twilio,在你请求安装一个应用程序后,你需要通过Service Now门户提交请求,以批准你的应用程序。

在其他情况下,当你从企业防火墙后面工作时,可能需要创建一个请求。例如,你可能想使用Webhooks来为你的应用程序收集实时数据。Webhooks需要一个URL来发送JSON数据。你也许可以为此目的向你的组织申请一个独特的URL。

一旦你的应用程序被批准,重新访问_安装应用程序_标签。你现在应该可以访问Bot用户OAuth Token。

这是你的SLACK_BOT_TOKEN 。Slackbot令牌引用了你所创建的应用程序的机器人用户实例,并特别设定了你的机器人可以访问的范围。

编写代码来运行Slackbot

现在我们将创建一个 "Hello World "程序并运行这个机器人。在项目目录下创建一个名为_.env_的文件。我们将用这个文件来存储SLACK_APP_TOKEN 和SLACK_BOT_TOKEN 。这是一个重要的步骤,因为它将帮助我们保持我们的Slack API令牌的秘密。在你的_.en_v文件中添加以下代码。

SLACK_BOT_TOKEN = "<YOUR_SLACK_BOT_TOKEN>"
SLACK_APP_TOKEN = "<YOUR_SLACK_APP_TOKEN>"
复制代码

接下来,创建一个名为_app.py_的文件。在该文件的顶部,包括以下代码。

from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
import os
from dotenv import load_dotenv

load_dotenv()
SLACK_BOT_TOKEN = os.environ[`SLACK_BOT_TOKEN`]
SLACK_APP_TOKEN = os.environ[`SLACK_APP_TOKEN`]

app = App(token=SLACK_BOT_TOKEN)
复制代码

os 模块从_.env_文件中读取令牌,在代码和你刚刚创建的机器人之间建立连接。

注意__:如果你要向git repo推送代码,你要创建一个名为 .gitignore的_文件_ ,并 在其中 添加你的 .env 文件。这将确保你的秘密令牌不会通过git公开。

我们还创建了bolt应用程序。Slack bolt是一个框架,使我们能够轻松地建立一个具有最新功能的Slackbot。如果你想了解更多关于Slack bolt for Python的信息,请查看Slack API文档。

如果你在使用slack-bolt的IDE中看到任何导入错误或警告,请尝试在终端输入以下命令。

pip install -U pip slack_bolt
复制代码

接下来,我们将允许我们的机器人对它所提到的消息做出回应。在该文件中添加以下代码。

@app.event("app_mention")                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
def mention_handler(body, say):
        say('Hello World!')
复制代码

方法装饰器确保每次机器人遇到提到它的名字的消息时,mention_handler ,就会调用这个方法。注意方法的参数body 和say 。

Body 将返回一个JSON有效载荷,其中包含我们的机器人正在响应的消息的信息。这将包括诸如消息的时间戳、消息文本和发送消息的用户等信息。我们不会在本教程中使用这些信息,但它在未来的项目中可能是非常重要的。

Say 是一个允许我们的机器人响应消息的方法。它需要一个字符串作为参数。

最后,在你的_app.py_文件的底部添加以下内容。

if __name__ == "__main__":
        handler = SocketModeHandler(app, SLACK_APP_TOKEN)
        handler.start()
复制代码

这将激活Socket模式,使你的应用程序能够运行。通过使用Socket模式,你永远不会访问一个公共的HTTP端点。相反,你的机器人将通过一个Websocket URL与Slack进行通信。这些类型的URL是在运行时生成的,而且每次都会有所不同。

在Slack频道中测试Slackbot

为了测试你的机器人,你要在你的工作区创建一个新的公共频道。在下面的例子中,一个名为 "simple-bot-test "的频道被创建。你也应该确保你的频道是公开的。点击 "创建"按钮。

你的频道现在会出现在Slack的左边面板的_频道_下。通过在频道中输入文字"@simple-bot",将你的机器人添加到新频道中。当有提示时,点击添加到频道按钮。

现在,我们已经准备好测试我们的机器人了。

确保你的虚拟环境已经被激活。在终端输入以下内容,运行你的代码。

python app.py
复制代码

你应该在终端看到一个 "Bolt应用程序正在运行!"的回应。在Slack中向你的机器人发送一个消息。

构建Slackbots的下一步是什么?

恭喜你!你已经成功地建立了一个可以工作的Slackbot。你成功地使用Socket模式、slack-bolt和Python构建了一个工作的Slackbot。作为下一步,你要把你的机器人部署到你的工作区,这样它就可以无限期地运行。

除了简单的 "hello world "消息,你还可以用Slackbots做很多事情。如果你想继续建立你的机器人,我建议你查看Slack的API文档。或者,如果你想尝试一些有挑战性的新东西,你可能想建立一个短信到Slack的桥梁,这样你就可以使用Twilio-Python包将文本信息转发到你的Slack工作区。

你也可以用Twilio Autopilot和Twilio Functions 通过Slackbot收集用户输入。另外,你也可以建立一个短信机器人来代替。选择是无穷无尽的,你可以带着你的新发现的知识一起走!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表