Использование слабого webhook с узлом - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь использовать слабый webhook.Я могу прочитать много вариаций о том, как мне поступить, но до сих пор ни один из них не работал должным образом.

Я использую модуль узла request, чтобы сделать вызов API, но я не могуизмените, если необходимо.

Сначала попробуйте следующий этот

import request from 'request';
const url = 'https://hooks.slack.com/services/xxx';
const text = '(test)!';
request.post(
  {
    headers : { 'Content-type' : 'application/json' },
    url,
    payload : JSON.stringify({ text }),
  },
  (error, res, body) => console.log(error, body, res.statusCode)
);

Я получаю: null 400 'invalid_payload'

Следующая попытка следующего это

request.post(
  {
    headers : { 'Content-type' : 'application/json' },
    url,
    form : JSON.stringify({ text }),
  },
  (error, res, body) => console.log(error, body, res.statusCode)
);

На этот раз это работает, но Slack отображает: %28test%29%21 вместо (test)!

Я что-то пропустил?

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

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

const request = require('request');

const url = 'https://hooks.slack.com/services/xxxxx';
const text = '(test)!';
request.post(
  {
    headers : { 'Content-type' : 'application/json' },
    url,
    form : {payload: JSON.stringify({ text } )}
  },
  (error, res, body) => console.log(error, body, res.statusCode)
);

Если вы хотите использовать запрос, вы можете проверить, какslack-node публикует данные, здесь соответствующие отрывки из slack-node

Slack.prototype.webhook = function(options, callback) {
    var emoji, payload;
    emoji = this.detectEmoji(options.icon_emoji);
    payload = {
      response_type: options.response_type || 'ephemeral',
      channel: options.channel,
      text: options.text,
      username: options.username,
      attachments: options.attachments,
      link_names: options.link_names || 0
    };
    payload[emoji.key] = emoji.val;
    return request({
      method: "POST",
      url: this.webhookUrl,
      body: JSON.stringify(payload),
      timeout: this.timeout,
      maxAttempts: this.maxAttempts,
      retryDelay: 0
    }, function(err, body, response) {
      if (err != null) {
        return callback(err);
      }
      return callback(null, {
        status: err || response !== "ok" ? "fail" : "ok",
        statusCode: body.statusCode,
        headers: body.headers,
        response: response
      });
    });
  };
0 голосов
/ 07 июня 2018

Я наконец-то выбрал Slack-webhook , который мне понравился больше, чем slack-node.Решение d parolin - лучший ответ на мой вопрос, но я хотел бы упомянуть работу pthm для завершения.

0 голосов
/ 06 июня 2018

Вы можете попробовать модуль slack-node, оборачивающий пост в ловушку.Вот сокращенный пример измененного реального мира, который я использовал для отправки уведомлений для экземпляров AWS.

[EDIT] Изменен для использования вашего текста

Теперь, используя slack-node, вы собираете {} самостоятельно,добавьте текст: и другие параметры самостоятельно и передайте его .webhook

const Slack = require('slack-node');

const webhookUri = 'https://hooks.slack.com/services/xxxxx';
const slack = new Slack();
slack.setWebhook(webhookUri);

text = "(test)!"

slack.webhook({
        text: text
        // text: JSON.stringify({ text })
    }, function(err, response) {
       console.log(err, response);
});
...