【问题标题】:Can't get Slack "slash command" working with Azure Functions无法让 Slack“斜杠命令”与 Azure Functions 一起使用
【发布时间】:2016-11-19 14:08:20
【问题描述】:

我正在尝试设置一个简单的 Azure 函数来与 Slack 的“斜线”命令集成。除了 Slack 发送的内容类型为“application/x-www-form-urlencoded”之外,一切似乎都已连接,显然 Azure Functions 不知道如何处理。

我认为它是“不可行的”,除了 Azure 有一个特定的“Slack”网络挂钩设置,这让我相信它应该能够工作。

关于如何让它工作的任何提示?

【问题讨论】:

  • 添加了标签以确保很容易找到。希望下面的答案对您有所帮助。

标签: azure mime-types content-type slack azure-functions


【解决方案1】:

Azure Functions 确实支持 Slack WebHooks。我不确定您遇到了什么错误,因为它没有详细说明,但这里有一个斜杠命令函数的快速示例,它将向用户回显消息:

代码:

using System.Collections.Specialized;

public static async Task<string> Run(HttpRequestMessage req, TraceWriter log)
{
    NameValueCollection data = await req.Content.ReadAsFormDataAsync();

    return data["text"];
}

功能配置(注意WebHook类型):

{
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "webHookType": "slack",
      "name": "req"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ],
  "disabled": false
}

提示:值得一提的是,将对 Slack 请求执行验证,以确保它确实来自 Slack。由于 Slack 不允许您将函数秘密作为令牌,因此您想做相反的事情(将您的 Slack 令牌带到您的函数中,以便将其用作秘密)。为此,请获取您的 Slack 令牌,打开您的功能的“键”面板,删除您的功能级别“默认”键并通过粘贴重新创建该键(将其命名为“默认”)你从 Slack 获得的令牌。

【讨论】:

    【解决方案2】:

    我尝试了 Fabio 的方法,但无法让它发挥作用,因为我不确定我们是否应该给 slack 一个新的 url 以将帖子发送到(尝试了 url 的变体,但不断收到客户端错误消息)。我最终只是手动解析表单数据。这似乎每次都很好用。

    string responseURL = "";
    string command = "";
    string content = await req.Content.ReadAsStringAsync();
    string formdata = content.Split(';')[0];
    string[] namevalues = formdata.Split('&');
    NameValueCollection col = new NameValueCollection();
    
    foreach (string value in namevalues)
    {
        string[] nameValueItem = value.Split('=');
        col.Add(nameValueItem[0], nameValueItem[1]);
        log.Info(nameValueItem[0] + " - " + nameValueItem[1]);
        if(nameValueItem[0] == "response_url")
        {
            responseURL = System.Web.HttpUtility.UrlDecode(nameValueItem[1]);
        }
        else if(nameValueItem[0] == "command")
        {
            command = System.Web.HttpUtility.UrlDecode(nameValueItem[1]);
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      相关资源
      最近更新 更多