我无法使用 python slack API 发送布局块

I can't send layout blocks using python slack API

我使用 slack 的最新 bot kit builder 为我的消息附件生成以下按钮。邮件发送没有任何问题,但我没有看到附件。我一直在努力解决这个问题并感谢您的帮助。我的附件是slack要求的列表api.

attachment_json = [
    {
        "type": "section",
        "text": {
            "type": "mrkdwn",
            "text": "Hello, Please select your environment"
        }
    },
    {
        "type": "actions",
        "elements": [
            {
                "type": "button",
                "text": {
                    "type": "plain_text",
                    "text": "production"
                },
                "value": "production"
            },
            {
                "type": "button",
                "text": {
                    "type": "plain_text",
                    "text": "staging"
                },
                "value": "staging"
            },
            {
                "type": "button",
                "text": {
                    "type": "plain_text",
                    "text": "demo"
                },
                "value": "demo"
            }
        ]
    }
]

我正在使用 slackclient SDK 发送消息。

  slack_client.api_call("chat.postMessage", channel="D4KU1DGUB", text='Hello World',
                          attachments=json.dumps(attachment_json))

目前我没有看到任何按钮。任何帮助将不胜感激。谢谢。

即使发送示例中的附件也不起作用

{
    "text": "Would you like to play a game?",
    "attachments": [
        {
            "text": "Choose a game to play",
            "fallback": "You are unable to choose a game",
            "callback_id": "wopr_game",
            "color": "#3AA3E3",
            "attachment_type": "default",
            "actions": [
                {
                    "name": "game",
                    "text": "Chess",
                    "type": "button",
                    "value": "chess"
                },
                {
                    "name": "game",
                    "text": "Falken's Maze",
                    "type": "button",
                    "value": "maze"
                },
                {
                    "name": "game",
                    "text": "Thermonuclear War",
                    "style": "danger",
                    "type": "button",
                    "value": "war",
                    "confirm": {
                        "title": "Are you sure?",
                        "text": "Wouldn't you prefer a good game of chess?",
                        "ok_text": "Yes",
                        "dismiss_text": "No"
                    }
                }
            ]
        }
    ]
}

这个附件对我有用

   attachment_json = [
    {
        "fallback": "Upgrade your Slack client to use messages like these.",
        "color": "#CC0000",
        "actions": [
            {
                "type": "button",
                "text": ":red_circle:   Complete Task: ",
                "url": "https://roach.ngrok.io/workflow/",
            }
        ]
    }
    ]

但我不明白为什么第一个示例不起作用。

第一个示例不起作用的原因是您在方法调用中混合了附件和布局块的语法。这些是不同的功能,因此每个功能在 chat.postMessage.

的调用中都有自己的参数
  1. (次要)附件通过 attachments 参数传递。
  2. 布局块通过 blocks 参数传递。

因此第一个示例中的代码的更正版本为:

slack_client.api_call("chat.postMessage", channel="D4KU1DGUB", text='Hello World',
                          blocks=json.dumps(attachment_json))

您可能还想将变量重命名为 blocks_json 以避免混淆。