You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Slack Bolt开发Slack Bot如何设置必填字段与输入校验

解决方案

核心前提说明

Slack 普通消息(含chat_postEphemeral发送的临时消息)挂载的blocks表单,和Modal弹窗表单的校验逻辑有本质区别:

  • input块默认即为必填状态,只有显式配置"optional": true时才会标记为非必填,之前配置optional: true未达到必填效果,是因为字段逻辑搞反了
  • 普通消息内的表单不支持提交前原生拦截校验,所有必填、格式校验逻辑都需要在提交按钮的回调函数中手动实现

1. 必填项配置方法

  • 开始日期、结束日期、Field1 这类需要必填的input块,直接删除块内的optional字段即可,保持默认必填属性
  • Field3、数值输入框这类非必填字段,在对应input块中添加"optional": true标记即可,非必填字段配置示例:
{
    "type": "input",
    "optional": true,
    "hint": {
        "type": "plain_text",
        "text": "Numeric values only"
    },
    "element": {
        "type": "plain_text_input",
        "action_id": "plain_text_input-action",
        "placeholder": {
            "type": "plain_text",
            "text": "Enter Numeric Value"
        }
    },
    "label": {
        "type": "plain_text",
        "text": " "
    }
}
  • 提交时手动校验必填项:监听submit按钮的action事件,触发后从body["state"]["values"]中取出所有必填字段的值,若存在空值,直接调用chat_postEphemeral给当前用户发送错误提示,终止后续业务逻辑即可。

提示:现有blocks中所有input块都未配置唯一block_id,从返回值中取表单数据时定位会非常麻烦,建议给每个input块添加全局唯一的block_id字段。


2. 数值输入框校验实现

Slack的plain_text_input组件没有原生的输入字符过滤能力,无法直接禁止用户输入非数字内容,可通过以下两种方案实现校验:

方案1:提交时统一校验(实现成本最低,最常用)

在submit按钮的回调逻辑中,取出数值输入框的内容做格式判断,不符合要求就返回错误提示,校验代码示例:

@app.action("submit_action")
def handle_form_submit(ack, body, client):
    ack()
    form_data = body["state"]["values"]
    # 替换为你给数值输入块配置的block_id
    num_input_value = form_data["number_input_block"]["plain_text_input-action"]["value"]
    
    # 非必填字段先判断是否有输入值
    if num_input_value:
        # 支持整数、浮点数校验,若仅允许整数可直接用num_input_value.isdigit()判断
        if not num_input_value.replace('.', '', 1).isdigit():
            client.chat_postEphemeral(
                channel=body["channel"]["id"],
                user=body["user"]["id"],
                text="❌ 数值字段仅允许输入数字,请修改后重新提交"
            )
            return
    # 后续继续完成必填项校验、业务处理逻辑

方案2:输入时实时校验(体验更好)

给数值输入框添加输入触发事件配置,用户每输入一个字符就触发校验,不符合格式立刻提示,配置方式如下:

  1. 修改数值输入框的element配置,添加实时触发规则:
"element": {
    "type": "plain_text_input",
    "action_id": "plain_text_input-action",
    "placeholder": {
        "type": "plain_text",
        "text": "Enter Numeric Value"
    },
    # 新增以下配置,输入字符时自动触发action
    "dispatch_action_config": {
        "trigger_actions_on": ["on_character_entered"]
    }
}
  1. 编写对应action的监听逻辑,判断输入内容包含非数字字符时,立刻给用户发送临时提示即可。

内容的提问来源于stack exchange,提问作者Gavya Mehta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:06:20