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

Slack Bolt Modal多行输入特殊字符提交失败问题求助

Slack Bolt模态框多行输入支持特殊字符的解决办法

问题根源

你遇到的提交报错,并非plain_text_input不支持特殊字符,而是请求处理环节的编码解析问题,或是Slack对提交内容的隐性校验被触发。

具体解决步骤

  1. 确保后端正确解析JSON请求体
    Slack提交模态框数据时,会以JSON格式发送POST请求。如果你的Bolt应用依赖Express等框架,必须提前配置JSON解析中间件,否则会导致请求内容解析失败,触发Slack的连接错误。示例代码(Node.js):

    const express = require('express');
    const { App } = require('@slack/bolt');
    const app = express();
    
    // 必须添加这行,确保解析JSON请求体
    app.use(express.json());
    
    const slackApp = new App({
      token: process.env.SLACK_BOT_TOKEN,
      signingSecret: process.env.SLACK_SIGNING_SECRET,
      receiver: app
    });
    
  2. 接收时解码特殊字符
    即使Slack自动对部分特殊字符进行转义,后端接收后可以通过解码还原原始内容。比如在处理模态框提交的回调中:

    slackApp.view('your_modal_callback_id', async ({ ack, view }) => {
      await ack();
      // 获取多行输入的内容
      const rawInput = view.state.values.input_b.description.value;
      // 解码还原特殊字符
      const decodedInput = decodeURIComponent(rawInput);
      // 后续处理逻辑
    });
    
  3. 避免内容长度超限
    Slack的plain_text_input(多行)有最大长度限制(默认3000字符),如果输入的URL+其他内容超过限制,也会触发提交失败。可以在模态框配置中显式设置max_length,同时提示用户输入长度上限:

    {
      "type": "input",
      "block_id": "input_b",
      "element": {
        "type": "plain_text_input",
        "multiline": true,
        "action_id": "description",
        "max_length": 3000
      },
      "label": {
        "type": "plain_text",
        "text": "Describe the issue (Max 3000 characters, include details/URLs)",
        "emoji": true
      }
    }
    
  4. 绕过隐性校验的小技巧
    如果上述方案仍无效,可以尝试让用户在输入URL时用反引号包裹(比如`https://example.com/path?a=1#b`),Slack会将其识别为纯文本代码块,不会触发特殊字符的校验逻辑,后端接收后再去掉反引号即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:15:12