无法使用Azure功能使Slack“斜杠命令”

时间:2016-11-19 14:08:21

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

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

除非Azure为“Slack”设置了特定的Web挂钩设置,否则我会让它变得“不可行”,这让我相信它应该能够正常工作。

有关如何使其正常工作的任何提示?

2 个答案:

答案 0 :(得分:1)

Azure功能确实支持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令牌,打开&#34;键&#34;您的功能面板,删除您的功能级别&#34;默认&#34;键入并重新创建(将其命名为#34;默认&#34; ),方法是粘贴您从Slack获得的令牌。

答案 1 :(得分:0)

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

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]);

    }
}