JSON-запрос на slack возвращает invalid_auth - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь открыть диалоговое окно в режиме ожидания через скрипт приложения Google после того, как пользователь нажимает кнопку, но я получаю следующее сообщение об ошибке:

{"ok":false,"error":"invalid_auth","warning":"missing_charset","response_metadata":{"warnings":["missing_charset"]}}

Это мой код:

function openDialog (range, triggerId, token) {
    var url = 'https://slack.com/api/dialog.open';
    var dialog = {
        trigger_id: triggerId,
        title: 'Submit a helpdesk ticket',
        callback_id: 'submit-ticket',
        submit_label: 'Submit',
        elements: [
            {
                label: 'Title',
                type: 'text',
                name: 'title',
                value: 'teste',
                hint: '30 second summary of the problem',
            },
            {
                label: 'Description',
                type: 'textarea',
                name: 'description',
                optional: true,
            },
            {
                label: 'Urgency',
                type: 'select',
                name: 'urgency',
                options: [
                    { label: 'Low', value: 'Low' },
                    { label: 'Medium', value: 'Medium' },
                    { label: 'High', value: 'High' },
                ],
            },
        ],
    };

    var options = {
        'method' : 'post',                  
        'contentType': 'application/json', 
        'headers': {
            'Authorization': 'Bearer ' +  token,
        },
        'payload' : JSON.stringify(dialog),
    };

    var urlFetch = UrlFetchApp.fetch(url, options);
    var message = ContentService.createTextOutput(urlFetch).setMimeType(ContentService.MimeType.JSON);

    return message; 
}

Может кто-нибудь определить, что мне не хватает?

Спасибо


Вот функция doPost (), запускающая функцию openDialog (), которая считывает полезную нагрузку изкнопка в расслабленном состоянии с callback_id = "gasolina" и value = "update":

if (payload.callback_id == "gasolina") {
  var selectedOption = actions.value;
  var operation = payload.callback_id;
  var triggerId = payload.trigger_id;
  var token = payload.token;
  var inputRow = actions.name;
  if (selectedOption == 'update') {
    var keyword = 'no+money';
    var gastoExtra = '';
    var operation = payload.callback_id;
    var gastoExtraRange = actions.name;
    return openDialog (gasRange, triggerId, token); 

1 Ответ

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

Я думаю, что хотя ваш сценарий почти правильный, требуется небольшая модификация.Как насчет этой модификации для вашего скрипта?От вашего вопроса, я не уверен в ваших текущих настройках для использования dialog.open из Slack.Таким образом, этот измененный сценарий предполагает, что настройки верны.

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

  • Причина missing_charset связана с использованием JSON.stringify() для полезной нагрузки.
  • Из документа dialog.open , полезная нагрузка token, dialog и trigger_id.
  • token не использует для заголовка.
  • application/json не используется для contentType.

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

Измененный сценарий:

function openDialog (range, triggerId, token) {
  var url = 'https://slack.com/api/dialog.open';
  var dialog = {
    title: 'Submit a helpdesk ticket',
    callback_id: 'submit-ticket',
    submit_label: 'Submit',
    elements: [
      {
        label: 'Title',
        type: 'text',
        name: 'title',
        value: 'teste',
        hint: '30 second summary of the problem',
      },
      {
        label: 'Description',
        type: 'textarea',
        name: 'description',
        optional: true,
      },
      {
        label: 'Urgency',
        type: 'select',
        name: 'urgency',
        options: [
          { label: 'Low', value: 'Low' },
          { label: 'Medium', value: 'Medium' },
          { label: 'High', value: 'High' },
        ],
      },
    ],
  };
  var options = {
    method: 'post',
    payload: {
      token: token,
      dialog: JSON.stringify(dialog),
      "trigger_id": triggerId,
    },
  };
  var urlFetch = UrlFetchApp.fetch(url, options);
  var message = ContentService.createTextOutput(urlFetch).setMimeType(ContentService.MimeType.JSON);
  return message; 
}

Примечание:

  • В моей среде я использую dialog.open с запросом, подобным приведенному выше сценарию.Но если это не помогло, проверьте сообщения об ошибках и измените настройки.
...