如何将内部 API(办公室网络外无法访问)集成到 slack slash 命令

How to integrate internal APIs (Not accessible outside office network) to slack slash commands

我正在尝试对我的一个松弛频道使用斜杠命令。我尝试使用 git API 进行 POC,它运行良好。

我首先从这个 link 创建了一个斜杠命令: https://api.slack.com/censored/slash-commands

命令:/poc 请求 URL:http://jsonplaceholder.typicode.com/posts

当我在我的频道的 slack 聊天框中键入 /opc 时,这工作正常。它returns一些数据。

但是当我将请求 URL 更改为只能从办公室域访问的内部 API 时,出现错误:

Darn – that slash command didn't work (error message: Failure when receiving data from the peer). Manage the command at .

我相信,slack 无法访问我的内部 URL 以防万一。是否可以查看松弛日志?

谁能帮帮我。

这行不通,因为请求 URL 需要从 public Internet 访问才能使用 Slack。

一般来说,Slack 的大部分交互功能(Slash 命令、交互消息、模式、事件 API、...)都要求您的应用提供一个 public 端点,该端点可以由 Slack 调用通过 HTTP。

为了使用 Slack 访问内部 APIs,您需要某种网关或隧道通过贵公司的防火墙,将请求 URL 公开给 Slack。有很多方法可以做到这一点,需要根据贵公司的安全策略设计解决方案。

这里有一些建议:

VPN 隧道

一种方法是 运行 内部网络服务器(可以访问内部 API)上的斜线命令脚本使用 VPN 隧道将该网络服务器暴露给互联网,例如使用像 ngrok.

这样的工具

非军事区

另一种方法是 运行 您的应用程序位于您公司网络的 DMZ 中,并在两侧配置防火墙以允许从 public Internet 访问 Slack,并且您的应用程序可以访问您的内部网络。

另一种方法是在 public Internet 上托管和 运行 应用程序与 Slack 交互的部分,以及在公司内部网络上与内部网络交互的部分。然后添加一个安全连接,允许 public 部分与公司内部网络上的 运行ning 部分进行通信。

如果无法打开到内部网络的连接,还有另一种方法可以通过使用队列反转通信方向来允许与内部服务通信。

为此,您需要部署一个 public 端点,它接受来自 Slack 的请求并将它们放入队列(例如 AWS Lambda + SQS、Flask + RabbitMQ),然后从内部网络。轮询需要经常发生(至少每秒一次),以确保通信足够快,用户不会注意到太多的延迟。通过这样做,您可以避免暴露内部网络的任何端点。

这种方法的缺点是基础设施更复杂,响应时间更慢,但在某些公司环境中它可能是一个很好的选择。