如何在松弛模态中显示有关非输入块的验证错误

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

问题

我有一个Slack modal,其中的section块包含一个输入元素。当用户提交我的模态而不在此输入中输入值时,如何将该错误传达给用户?

我的尝试1:以验证错误回应

Slack的文档描述了当我收到input事件(view_submission)时如何验证https://api.slack.com/surfaces/modals/using#displaying_errors块的方法。但是,如果我为包含sectionstatic_select块返回错误,则Slack不会显示错误消息(也不会关闭模态)。

我的尝试2:将optional字段设置为false

input块具有optional字段,可用于验证。但是static_select块中的section没有optional字段:https://api.slack.com/reference/block-kit/block-elements#select

我的尝试3:使用input

我无法使用input块,因为它们不会触发block_actions消息(记录在https://api.slack.com/surfaces/modals/using#interactions中)。当用户回答问题时,我需要更新模式。

我的尝试#4:有效的绝望解决方案

我可以用view_submission响应来回复"response_action": "update"事件。在该响应中,在输入内容上方包含如下错误消息:缺少值:

{
  "type": "section",
  "text": {
    "type": "mrkdwn",
    "text": "*Please provide a start time:*"
  }
}

我不喜欢此解决方案,因为我怀疑我是否可以复制Slack为input块验证提供的出色的错误消息传递UX。

详细信息

这里是我传递给view调用的views.open参数的简化版本:

{
  "blocks": [
    {
      "block_id": "start_times",
      "type": "section",
      "text": {
        "type": "plain_text",
        "text": "Choose a start time"
      },
      "accessory": {
        "action_id": "start_times",
        "type": "static_select",
        "placeholder": {
          "type": "plain_text",
          "text": "Choose start"
        },
        "options": [
          {
            "text": {
              "type": "plain_text",
              "text": "10:27 pm"
            },
            "value":
              "{\"path\":\"bookings/new\",\"date\":\"2020-02-14 04:27:22 UTC\"}"
          },
          {
            "text": {
              "type": "plain_text",
              "text": "10:45 pm"
            },
            "value":
              "{\"path\":\"bookings/new\",\"date\":\"2020-02-14 04:45:00 UTC\"}"
          }
        ]
      }
    }
  ],
  "callback_id": "create booking",
  "private_metadata":
    "{\"channel_id\":\"C6M2A4690\",\"min_start_time\":\"2020-02-14 04:27:22 UTC\",\"path\":\"bookings/create\",\"room_id\":175128,\"selected_end_time\":null,\"selected_start_time\":null}",
  "type": "modal",
  "submit": {
    "type": "plain_text",
    "text": "Book"
  },
  "title": {
    "type": "plain_text",
    "text": "Booking room"
  }
}

如果用户立即单击提交,这是我对view_submission事件的答复:

{
  "response_action": "errors",
  "errors": {
    "start_times": "Please complete this required field"
  }
}

[收到我的回复后,Slack关闭微调器,将模式保持打开状态,但不显示错误消息。模态看起来与通过views.open首次打开时完全相同。

问题我有一个Slack模态,带有一个包含输入元素的节块。当用户提交我的模态而不在此输入中输入值时,如何将错误传达给用户?我的...

slack slack-api
1个回答
0
投票

在返回响应之前,将响应的“ content_type”设置为“ application/json”。

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