【问题标题】:Configure Google Apps Script callback for Slack slash command为 Slack 斜杠命令配置 Google Apps 脚本回调
【发布时间】:2017-02-25 13:05:15
【问题描述】:

TL;DR - 我想设置一个适用于 Google Apps 脚本的 Slack 斜杠命令。您如何建议我这样做?

上下文:

我目前使用 google.com/script 和表格在有人填写 Google 表单时触发对 Slack 的 webhook 调用。 Here it is for reference。我的问题是我想添加的一个附加功能,它不会与此代码重叠。

我想在 Google Apps 中收听 Slack 斜杠命令,因此我一直在查看大量回调示例。我不明白实现这一切所必需的舞蹈。以下是变量:

  • 我已经设置了 Slack 斜杠命令,它要求提供 URL 和方法类型(POST 或 GET),然后给我一个 token 来验证传出的有效负载。
  • 我在 Google API 上设置了 OAuth 2.0 客户端 ID,它提供了 client IDsecret token
  • Google Apps 教程 here 提供 https://script.google.com/macros/d/{SCRIPT ID}/usercallback,但如果我在 this guide 中正确阅读它,则需要用户授权

我查看了其他提到回调的问题(thisthis),但没有发现任何相关内容。

能够配置回调 URL 并了解它将如何进行身份验证并最终在 Google 中使用来自 Slack 的 API 调用的后续步骤的指导将非常棒。

【问题讨论】:

  • 如果不是太问,你可能想接受我的回答?谢谢!

标签: google-apps-script slack-api


【解决方案1】:

你在正确的轨道上,几周以来我一直在摆弄这个,所以也许这会有所帮助:

Google 应用脚本

  1. 发布 > 部署为 Web 应用程序 > 版本:新/执行应用程序为:我/谁有权访问:任何人,甚至匿名
  2. 您将获得该 Web 应用程序的 URL,例如 https://script.google.com/macros/s/xxx-ver-long-number-xxx/exec
  3. 复制那个

Slack 集成

  1. 新建斜杠命令

  2. 方法 POST / URL:粘贴The url from your web app

  3. 复制安全令牌,您在 Google 应用脚本中需要它

  4. 根据需要设置所有其他设置。

  5. 别忘了保存

返回 Google 应用脚本

  1. 复制粘贴这些基本的东西

     function doPost(request) {
    
     //// SET SECURITY TOKEN (FROM SLACK COMMAND)
      var your_token = "YOUR_SLASH_COMMAND_TOKEN"; 
      var output;
    
     //// GET PARAMETES FROM SLACK POST REQUEST
      var params = request.parameters;
    
     //// ... and store them into variables
      var cmd_token = params.token; // or params.token[0] idk
    
     //// CHECK RECEIVED TOKEN AGAINST YOUR SAVED TOKEN
      if (your_token == cmd_token) {
         output = {"text":"SUCCESS"};
      } else {
         output = {"text":"INVALID TOKEN"};
      }
    
     //// SEND RESPONSE BACK TO SLACK
     return ContentService.createTextOutput(JSON.stringify(output)).setMimeType(ContentService.MimeType.JSON);
     }
    
  2. 保存脚本并再次将脚本发布为网络应用程序(每次更改时都必须这样做,始终选择“新”作为版本

其他信息

这是你从每个斜杠命令中得到的东西。在上面的例子中我只使用token ...

token=gIkuvaNzQIHg97ATvDxqgjtO
team_id=T0001
team_domain=example
channel_id=C2147483705
channel_name=test
user_id=U2147483697
user_name=Steve
command=/weather
text=94070
response_url=https://hooks.slack.com/commands/1234/5678

非常适合我,希望对您有所帮助 :) 祝你好运!

【讨论】:

  • 使用您的代码,我总是收到错误消息:401_client_error for a POST call from slack command,可能需要 auth2.0 吗?任何建议表示赞赏。谢谢。
  • @Albert 自去年以来谷歌很有可能发生了一些变化,我会尝试用一个新的例子来重现并回复你!
  • 非常感谢。我可以在网上找到的另一个 doPost()/slackCommand 项目案例是这个 googleappscripting.com/doget-dopost-tutorial-examples ,它也不起作用。仅供参考,不像从命令到 GAS Web 应用程序的失败,像 loripsum.net/api/plaintext 这样对 API 的简单调用确实有效,所以是的,看起来问题出在 Google 方面。
  • @Albert 我使用新的 Slack 命令 + 新的 GAS 项目再次测试了工作流程。我可以复制你看到的401_client_error。发布脚本的方式( Publish as Web App )在这里至关重要,事实上 Google 确实改变了一些东西。新方法对我有用:发布 > 部署为 Web 应用程序 > 项目版本:新建 > 将应用程序执行为:我 > 谁有权访问:任何人,甚至是匿名的。 (谁拥有访问权限部分已更改)现在我不再收到 401_client_error 了。希望这可以帮助。我更新了上面的答案。
  • 谢谢帕斯卡,它现在可以工作了。我正在阅读 @Tanaike 在 Github github.com/tanaikech/… 上的另一篇优秀的详细帖子,他在他的案例中指出了这个主题4,据他说,您之前的共享设置现在需要共享脚本文件,我做了但仍然失败,也许应该即使我在您的代码中看不到任何 Drive 访问权限,我们也至少添加 Drive 范围?另一个问题是如何在浏览器中授予对 POST 请求的访问权限。我需要编写一些涉及范围的脚本来看看它是如何工作的。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
相关资源
最近更新 更多