Slack Bolt - 单击按钮/应用程序尚未配置时发送响应

问题描述 投票:0回答:1

我对创建 slackbot 非常陌生,希望得到社区的一些帮助!

我正在使用 Python 创建一个 slackbot,每周都会向频道发送一条消息。然后,频道中提到的用户应该能够单击“确认”或“跳过”。 slackbot 服务器当前运行在 kubernetes 上。

我已经能够每周使用 CronTrigger 安排一条消息。但是,我无法听到松动螺栓动作的按钮响应。当我单击该消息时,我收到一条灰色警告,提示“应用程序尚未配置此功能”。

消息如下所示:

[
{
    "type": "actions",
    "elements": [
        {
            "type": "button",
            "text": {
                "type": "plain_text",
                "text": "Confirm!",
                "emoji": True,
            },
            "value": "confirm",
            "action_id": "actionId-0",
        },
        {
            "type": "button",
            "text": {
                "type": "plain_text",
                "text": "Skip Me!",
                "emoji": True,
            },
            "value": "skip",
            "action_id": "actionId-1",
        }
    ],
}
]

在我的应用程序类中,我有一个 Flask_app 正在运行:

app = App()

# Initialize web server and Slack client
client = WebClient(
    token=os.environ.get("SLACK_BOT_TOKEN"), proxy=os.environ.get("HTTP_PROXY")
)

flask_app = Flask(__name__)
handler = SlackRequestHandler(app)


@flask_app.route("/slack/events", methods=["POST"])
def slack_events():
    return handler.handle(request)

对于每个按钮,我尝试发送一个自定义响应

@app.action("actionId-0")
def button_confirm():
    logging.info("hit confirm!")
    current_user_id = scheduler.current_contact()
    message_block = mybot.get_confirm_message_block(current_user_id)

    logging.info("Initializing confirm message....")
    try:
        client.chat_postMessage(
            channel=os.environ.get("SLACK_CHANNEL"),
            blocks=message_block,
        )
        logging.info(f"Sending blocks {message_block}...")
    except SlackApiError as e:
        logging.error("Error confirming message: {}".format(e))
    pass

我不确定我做错了什么,非常感谢任何帮助调试。我仍在尽力了解一切是如何运作的:)

谢谢

我尝试在没有 Flask 应用程序的情况下运行,但没有成功。我查看了一堆 api 文档和在线资源,但我觉得我错过了一些东西。

python flask slack slack-api slack-bolt
1个回答
0
投票

您需要确保涵盖这两点:

  1. 打开“交互和快捷方式”页面中的“交互”选项,然后粘贴与活动相同的链接(在“活动订阅”页面中)。 Slack
  1. 您可以使用以下代码来监听具有特定 的操作。
    @app.action("<action_id>")
    def handle_button_pressed(ack, say, body):
      ack()
      say("Button pressed")

希望能帮助解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.