英文:
Slack bot post mesage to usergroup
问题
我能够创建用户组并更新用户组。但在 Slack 文档中找不到将消息发布到用户组的方法。
我找到了这个函数 chat.postMessage,但从它接受的参数中,我找不到将消息发布到用户组的选项。
任何有关确定适当的 Slack API 函数的帮助都将不胜感激。
英文:
I was able to create usergroups and update usergroups.
But there was no method in slack document to post a message to usergroup
I found this function chat.postMessage but from the arguments it takes I couldn't find usergroups as an option to post the message to.
https://api.slack.com/methods/chat.postMessage
Any help figuring out the appropriate slack api function is appreciated.
答案1
得分: 2
chat.postMessage 是将消息发布到各种对话(例如公共频道、私人频道、直接消息或多人直接消息)的正确方式,在 channel 参数中,您应该提供正确的对话 ID,通常以 C**、G**、D** 开头,后跟字母和数字符号。Slack 用户组具有 S** ID,并且不被视为对话。如果您尝试使用 channel=S** 参数调用 chat.postMessage,将会收到 channel_not_found 错误。
Slack 用户组 通常用于更容易地将用户分开以便在频道中提及或批量邀请他们。最典型的用途是提及。然而,它们的提及方式有一些特殊,可以在 Slack 文档中的这里找到:https://api.slack.com/reference/surfaces/formatting#mentioning-groups,例如,您应该在您的 text 参数中包含 <!subteam^GROUP_ID> 或在您的文本 "type": "mrkdwn" 区块中包含。
例如,这段代码:
import logging
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
log = logging.getLogger(__name__)
if __name__ == "__main__":
    client = WebClient(token="xox**")
    try:
        pt_mention = client.chat_postMessage(channel="C**",
                                             text="在纯文本中提及<!subteam^S**>用户组。")
        print(pt_mention)
        block_mention = client.chat_postMessage(channel="C**",
                                                # text="在区块中提及<!subteam^S**>用户组。",
                                                blocks=[
                                                    {
                                                        "type": "section",
                                                        "text": {
                                                            "type": "mrkdwn",
                                                            "text": "在区块中提及<!subteam^S**>用户组。"
                                                        }
                                                    }
                                                ])
        print(block_mention)
    except SlackApiError as e:
        logging.exception(f"发生错误: {e.response['error']}")
会在 C** Slack 频道中生成两条连续的消息,其中提及了具有 ID S** 的 @test 用户组:此截图。
然而,使用 conversations.invite 调用无法将用户组邀请到 Slack 频道中,您应该使用另一种方法,该方法在此处进行了描述。
英文:
chat.postMessage is a correct way to post message into various conversations, i.e. public channel, private channel, DM or multi-person DM and in the channel argument you should provide the correct conversation ID, usually starting from C**, G**, D** followed with alphanumeric symbols. Slack usergroups have S** ID and are not considered as conversations. If you'll try to call chat.postMessage with channel=S** argument you'll get a channel_not_found error.
Slack user groups are usually created to make easier users separation for mentioning or mass-inviting them into channels. Most typical, for mentioning. However, their mentioning is kind specific and described in the Slack documentation here: https://api.slack.com/reference/surfaces/formatting#mentioning-groups, i.e. you should include <!subteam^GROUP_ID> in your text argument or in your text "type": "mrkdwn" block.
For example, this code:
import logging
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
log = logging.getLogger(__name__)
if __name__ == "__main__":
    client = WebClient(token="xox**")
    try:
        pt_mention = client.chat_postMessage(channel="C**",
                                             text="Mentioning the <!subteam^S**> user group in plain text.")
        print(pt_mention)
        block_mention = client.chat_postMessage(channel="C**",
                                                # text="Mentioning the <!subteam^S**> user group in the block.",
                                                blocks=[
                                                    {
                                                        "type": "section",
                                                        "text": {
                                                            "type": "mrkdwn",
                                                            "text": "Mentioning the <!subteam^S**> user group in the block."
                                                        }
                                                    }
                                                ])
        print(block_mention)
    except SlackApiError as e:
        logging.exception(f"Error occurred: {e.response['error']}")
produces two sequential messages into the C** Slack channel where it mentions @test user group with ID S**: on this screenshot.
However, it is not possible to invite a user group into Slack channel with conversations.invite call, you should use another method, described here.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论