首页 > 解决方案 > 使用 Slack Python Webhook API 回复线程

问题描述

我正在创建一个 Python 脚本来将消息发送到松弛通道。消息本身可以很好地传递,但是当我尝试启动一个线程并向该线程发送回复时,我无法让它工作。线程回复显示为新的父消息。

我正在使用https://github.com/satoshi03/slack-python-webhook上的 slack-python-webhook 模块

import slackweb
import json
slack = slackweb.Slack(
    url="https://hooks.slack.com/services/XXXX/XXXX/XXXXXX")


attachment = [{"text": "This is TEXT",
              "ts": "1564629129"
              }]


print(json.dumps(attachment))
slack.notify(attachments=attachment)

attachment = [{"text": "This is Thread REPLY",
              "thread_ts": "1564629129",
              "thread_ts": "1564629130"
              }]

print(json.dumps(attachment))
slack.notify(attachments=attachment)

我想知道上面的代码片段需要更改什么,以便第二条消息将显示为线程回复。

标签: pythonpython-3.xslack-api

解决方案


您的代码将不起作用,因为 webhook 不支持线程。如果您想回复线程,您需要使用 API 方法来发布消息(例如chat.postMessage)。

这意味着您可能还需要使用不同的库,因为您的问题中提到的库似乎只支持 webhook。

你的语法也不正确。thread_ts不是附件的属性,而是 API 方法的参数,例如channel.

我建议查看slackclient。它是 Slack 的官方 Python 库,完全支持所有 API 方法,包括。线程。

以下是使用 slackclient 回复线程的方法:

import slack
import os

# init slack client with access token
client = slack.WebClient(token=os.environ['SLACK_TOKEN'])

# reply to a thread
response = client.chat_postMessage(
    channel="general",
    text="This is a reply",
    thread_ts="1561764011.015500"
)
assert response["ok"]
print(response)

另请参阅有关线程的官方指南和有关 webhook 和线程的答案。


推荐阅读