微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Slack API:rtm.start 有效但 rtm.connect 不在 slack_sdk.rtm_v2

如何解决Slack API:rtm.start 有效但 rtm.connect 不在 slack_sdk.rtm_v2

TL;DR:尝试使用 slack_sdk.rtm_v2 在 Python 中制作 Slack 机器人。 rtm.start 有效,但 rtm.connect 无效,尽管除了返回的信息量外,它们的表现几乎相同。为什么?


我正在尝试用 Python 制作一个 Slack 机器人,它会在将消息识别为命令时侦听频道并回答不同的事情。我必须说我对他们的在线文档有些困惑。它非常杂乱无章,分散在多个网站(slack.dev、api.slack.com 等)中。提供了使用预制方法的示例,但文档主要讨论这些方法发送和接收的 JSON 字符串,而不是如何使用这些方法本身。 (如果 Slack 的某个人读到了这篇文章,我认为还有改进的余地。)

据我所知,有旧的 slackclient API 和新的 slack_sdk,后者本身包含 rtm 和 rtm_v2 API。 (很烦人,因为你在论坛上寻找的答案有大约 2/3 的机会是你没有使用的 API!)它说在不同的地方用 slack_sdk.rtm_v2 构建机器人是可行的,但仍然需要一个经典的Slack 应用而不是更新的应用。

我在 this page 上尝试了第一个示例,这对我有用:

import os
from slack_sdk.rtm_v2 import RTMClient

rtm = RTMClient(token=os.environ["SLACK_BOT_TOKEN"])

@rtm.on("message")
def handle(client: RTMClient,event: dict):
    if 'Hello' in event['text']:
        channel_id = event['channel']
        thread_ts = event['ts']
        user = event['user'] # This is not username but user ID (the format is either U*** or W***)

        client.web_client.chat_postMessage(
            channel=channel_id,text=f"Hi <@{user}>!",thread_ts=thread_ts
        )

rtm.start()

在其他页面(例如 this onethis onethis one)上,rtm.startrtm.connect 显示为完成几乎相同的事情,除了 rtm.start 返回更多信息并因此产生更多流量。因此,他们推荐rtm.connect

这是我的问题,当我在上面的例子中用 rtm.start 替换 rtm.connect 时,我的脚本在一秒钟后停止,没有任何消息或错误。怎么回事?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。