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

问题描述 投票:0回答:2

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

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

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

azure mime-types content-type slack azure-functions
2个回答
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不允许您将函数secret作为令牌,因此您需要执行相反的操作(将Slack令牌带到您的函数中以便用作秘密)。为了做到这一点,抓住你的Slack令牌,打开你的功能的“键”面板,删除你的功能级别“默认”键,并通过粘贴你从Slack获得的令牌重新创建(命名为“默认”)。


0
投票

我尝试了Fabio的方法,但无法让它工作,因为我不确定我们是否应该放弃一个新的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]);

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.