chat.postMessage ответ invalid_json - PullRequest
       80

chat.postMessage ответ invalid_json

1 голос
/ 13 февраля 2020

Я пытаюсь использовать метод Slack api chat.postMessage . Вот документация для отправки JSON в формате их блоков:

enter image description here

Этот код я использую со скриптом приложения Google для отправки сообщение:

try {
    var params = {
      method: "post",
      headers: {
        Authorization: "Bearer " + token,
        "Content-Type": "application/json; charset=utf-8"
      },
      payload: {
        text: "posted",
        channel: channel_id,
        blocks: encodeURIComponent(JSON.stringify(result.payload.blocks))
      }
    };
    var url = "https://slack.com/api/chat.postMessage";
    var response = UrlFetchApp.fetch(url, params);
    var json = response.getContentText();
    var data = JSON.parse(json);
    log("Response Data: " + JSON.stringify(data));
...

Я получаю ответ {"ok":false,"error":"invalid_json"}.

Я взял JSON и протестировал его с помощью Slack's Block Kit Builder где JSON выглядит хорошо отформатированным.

В приведенном выше коде я пробовал его с encodeURIComponent и без него, и получаю ту же ошибку. Я подумал, что мне нужно кодировать его из-за документации на картинке выше.

Я искал решение, но не нашел похожего вопроса. Что я должен искать здесь? В убыток. Спасибо!

1 Ответ

1 голос
/ 13 февраля 2020

Как насчет этой модификации?

Точки модификации:

  • В этом случае, пожалуйста, используйте JSON.stringify() для полезной нагрузки while, и encodeURIComponent() не требуется.

Модифицированный скрипт:

Когда ваш скрипт модифицирован, пожалуйста, измените его следующим образом.

С:
var params = {
  method: "post",
  headers: {
    Authorization: "Bearer " + token,
    "Content-Type": "application/json; charset=utf-8"
  },
  payload: {
    text: "posted",
    channel: channel_id,
    blocks: encodeURIComponent(JSON.stringify(result.payload.blocks))
  }
};
Кому:
var params = {
  method: "post",
  headers: {Authorization: "Bearer " + token},
  contentType: "application/json",
  payload: JSON.stringify({
    text: "posted",
    channel: channel_id,
    blocks: result.payload.blocks
  })
};

Примечание:

  • Если ошибка связана с областями, добавьте области для использования "chat.postMessage".
  • Я не уверен насчет result.payload.blocks. Поэтому, если структура result.payload.blocks неверна, возникает ошибка. Пожалуйста, будьте осторожны.

Ссылки:

Если я неправильно понял ваш вопрос, и это не было прямым решением вашей проблемы, прошу прощения.

...