Javascript 对slack的JSON post请求返回无效的\u auth

Javascript 对slack的JSON post请求返回无效的\u auth,javascript,json,google-apps-script,slack,slack-api,Javascript,Json,Google Apps Script,Slack,Slack Api,在用户按下按钮后,我试图通过google应用程序脚本在slack中打开一个对话框,但我收到以下错误消息: {"ok":false,"error":"invalid_auth","warning":"missing_charset","response_metadata":{"warnings":["missing_charset"]}} 这是我的代码: function openDialog (range, triggerId, token) { var url = 'https://

在用户按下按钮后,我试图通过google应用程序脚本在slack中打开一个对话框,但我收到以下错误消息:

{"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; 
}
有人能发现我遗漏了什么吗

谢谢


下面是触发openDialog()函数的doPost()函数,它使用
callback\u id=“gasolina”
value=“update”
从处于松弛状态的按钮读取有效负载:


我认为,虽然您的脚本几乎是正确的,但需要稍加修改。对你的脚本进行这样的修改怎么样?根据您的问题,我不确定您当前使用dialog.open of Slack的设置。所以这个修改过的脚本假设设置是正确的

修改点:
  • 缺少\u字符集的原因是由于对负载使用了
    JSON.stringify()
  • 从中,有效负载是
    令牌
    对话框
    触发器id
  • 标记
    不用于标头
  • application/json
    不用于
    contentType
当这些点反映到脚本中时,修改的脚本如下所示

修改脚本: 注:
  • 在我的环境中,我使用dialog.open和上面的脚本一样的请求。但是如果这不起作用,请检查错误消息并修改您的设置

根据错误响应,我认为您在授权标头中传递的令牌有问题。也许是变形了,谢谢!你知道没有发送令牌的代码中是否有问题吗?我测试了令牌和触发器id的导入值,它们正确无误。似乎没有被“张贴”,谢谢你的帮助。然而,我一直收到一个错误。这一次,它的内容是:
{“ok”:false,“error”:“invalid_auth”}
@Mário Guidoux给您带来的不便,我真的很抱歉。发现您的错误已更改。从的文档中,
invalid_auth
表示
身份验证的某些方面无法验证。提供的令牌无效,或者请求来自不允许发出请求的IP地址。
。请您再确认一下好吗。@Mário Guidoux我也已经确认,这个修改过的脚本在正确的设置下工作正常。但正如我所说,我不确定您使用dialog.open的设置。我可以问一下您的设置的详细信息吗?如果可以,请通过更新问题来添加详细流程。这样,我就能想出解决你错误的办法。我想解决您的问题。谢谢您的持续支持!在触发openDialog()的doPost()函数下面可以找到:if(payload.callback\u id==“gasolina”){var selectedOption=actions.value;var operation=payload.callback\u id;var triggerId=payload.trigger\u id;var token=payload.token;var timeStampRange=actions.name;if(selectedOption==“update”){var keyword='no+money';var gastoExtra='';var operation=payload.callback\u id;var gastoExtraRange=actions.name;return openDialog(gasRange,triggerId,token);}@MárioGuidoux我遇到了无效的身份验证问题。您能修复它吗?似乎没有任何关于这方面的有用文档:(
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); 
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; 
}