Slack Modal 和 AWS Lambda:在错误的用户输入后返回 response_action 会引发模态错误

Slack Modal and AWS Lambda: Returning response_action after wrong user input throws an error in modal

我目前正在构建一个带有模式的 Slack 应用程序。我使用包含处理用户交互的 Lambda 函数的无服务器 AWS Stack。这些交互在 Lambda 中得到验证。

如果用户输入正确,模式将成功关闭(Lambda returns 200 响应)。但是,如果我 return 在用户输入错误并且用户提交模态 (as per Slack´s documentation) 时将以下内容作为正文:

{
"response_action" : "errors",
"errors": {
    "startDate": "Start date is incorrect.",
    },
}

我在 Lambda 函数末尾 return 的完整响应是:

response = {
        statusCode: 200,
        headers: {
            'content-type': 'application/json'
        },
        body: JSON.stringify({
            response_action : "errors",
            errors: {
                "endDate": "Start date is incorrect.",
            }
        })
    };

我在下一个屏幕截图中收到错误消息:

我错过了什么吗?非常感谢。

所以我发现了问题,这里是我的解决方案(可能对你有帮助 reader):

正确的块类型

我构建的模态由交互式组件组成,例如日期选择器。这些组件是“部分”类型的块。为了更好地理解,它们看起来像这样:

但是,似乎与显示输入错误的功能不兼容。为此,您必须选择“输入”类型的块。同样,为了便于理解,它们看起来像这样:

并且那种类型的块displaying error messages as per Slack documentation兼容。

来自 AWS Lambda 的响应

当您在 AWS Lambda 函数中验证用户输入时,Slack expects 如果您想警告错误,您可以在响应中 return 以下结构:

{ "response_action": "errors", "errors": { "ticket-due-date": "You may not select a due date in the past" } }

但是,您似乎需要通过添加 header 定义内容的 JSON 类型来指示内容的时间,而没有 statusCode。就我而言,有效的回应是:

response = {
        headers: {
        'content-type': 'application/json'
        },
        body: JSON.stringify({
        response_action : "errors",
        errors: {
            "test": "That date is invalid. Please, select a future date.",
        }
    })

这样,自定义错误消息就会出现: