【问题标题】:Slack Slash Command and API Gateway IntegrationSlack Slash 命令和 API 网关集成
【发布时间】:2021-12-05 11:58:28
【问题描述】:

我设置了一个 Slack 斜杠命令,该命令触发一个 API 网关,然后执行我的 AWS Lambda。

斜杠命令现在有效,但我无法在我的 AWS lambda 中检索事件。

我已经关注了这个link,关于如何集成我的 API 网关以接受来自斜杠命令的非 json 有效负载,但是现在当我发送诸如 /helloworld trigger 之类的斜杠命令时,AWS lambda 的事件会这样返回:

{'postBody': 'token=CGH9VQ5Gop...&team_id=...&team_domain=...&channel_id=...&channel_name=...&user_id=U01R5QXP61Z&...}

这是我的 AWS Lambda 的代码,就这么简单:

def lambda_handler(event, context):

    return str(event)

有人可以帮忙吗?

【问题讨论】:

  • 有两种方法可以将 lambda 连接到您的 API - 通过代理或集成 - 您使用的是哪一种?他们是否调用了您的 lambda 的任何云监视日志?尝试添加一个日志语句,以便 Cloudwatch 可以捕获它此外,如果您在 API 网关中的方法/资源上使用 API 测试功能会发生什么?它会给出错误吗?使用集成和方法响应将 str 返回到 API 中特定设置的 API req。你通常必须返回一个带有 statusCode 和 body 键的 json。
  • 我正在使用集成方法。在 API 测试功能中,响应正文为 {}。这与邮递员的情况相同。只有 slack slash 命令返回我在上面的问题中输入的响应正文。请帮忙

标签: aws-lambda aws-api-gateway slack slack-commands


【解决方案1】:

因此,使用集成方法,您会收到一堆额外的信息——来自 API 网关的所有 JSON 信息,以及来自 slack webhook 的所有 json 信息。鉴于我在您的回复中看到的内容,似乎正在返回来自 Slack 的频道信息等。

由于您似乎想要返回的只是您在 trigger 中输入的任何内容,那么您需要知道 slack webhook 发送的 json 中的 Key 是什么。

如果您在 Slack API 文档中找不到该 json 的架构,那么您可以记录该事件并在 cloudwatch 中查看它以查看到底显示了什么。然后,您可以像操作代码中的任何 json 对象一样操作该 json,并从中获取您想要的各种键。

【讨论】:

  • 据我了解,此链接:api.slack.com/interactivity/slash-commands#app_command_handling Slack 无法发送 json 有效负载。它以application/x-www-form-urlencoded 发送它,这就是我无法正确格式化有效负载的原因。
  • 嗯,返回的事件显然是一个带有一堆参数的 json。您可能必须解析参数或其他内容。无论哪种方式,将事件放入日志都会显示您收到了什么以及如何处理它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多