Не удается заставить команду косой черты Slack работать с функциями Azure

Я пытаюсь настроить простую функцию Azure для интеграции с командой Slack "косая черта". Кажется, что все подключается, за исключением того, что Slack отправляет тип контента «application/x-www-form-urlencoded», с которым, по-видимому, функции Azure не знают, что делать.

Я бы оставил это как «невыполнимое», за исключением того, что в Azure есть конкретная настройка веб-хука для «Slack», что наводит меня на мысль, что он должен работать.

Любые советы о том, как я могу заставить это работать?


person CBGrey    schedule 19.11.2016    source источник
comment
Добавлен тег, чтобы убедиться, что это легко найти. Надеюсь, ответ ниже поможет.   -  person Fabio Cavalcante    schedule 20.12.2016


Ответы (2)


Slack WebHooks действительно поддерживаются в Функциях Azure. Я не уверен, с какой ошибкой вы столкнулись, так как она не была подробно описана, но вот краткий пример функции командной косой черты, которая возвращает сообщение пользователю:

Код:

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.

person Fabio Cavalcante    schedule 20.12.2016

Я попробовал метод Фабио, но не смог заставить его работать, так как я не был уверен, должны ли мы дать 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]);

    }
}
person Bryan Gateley    schedule 02.01.2018