松弛的交互式消息被发送回response_url的invalid_payload

时间:2020-03-28 19:17:41

标签: javascript node.js slack slack-api

我一直在使用Slack API及其相关工具 interactive messages

我在此处发布带有交互式消息附件的消息:

export const postMessage = (msg, channel) => {
    request({
      method: 'POST',
      uri: 'https://slack.com/api/chat.postMessage',
      headers: {
        'content-type': 'application/json;charset=UTF-8',
        Authorization: `Bearer ${process.env.SLACKTOKEN}`,
      },
      body: JSON.stringify({
        token: process.env.SLACKTOKEN,
        attachments: [
          {
              "text": "",
              "fallback": "If you could read this message, you'd be choosing something fun to do right now.",
              "color": "#3AA3E3",
              "attachment_type": "default",
              "callback_id": "command_selection",
              "actions": [
                  {
                      "name": "command_list",
                      "text": "Choose a command",
                      "type": "select",
                      "options": [
                          {
                              "text": "Register Team",
                              "value": "registerTeam"
                          },
                          {
                              "text": "Edit Team",
                              "value": "editTeam"
                          },
                          {
                              "text": "Get By Url",
                              "value": "getByUrl"
                          },
                          {
                              "text": "Report Issue",
                              "value": "reportIssue"
                          },
                          {
                              "text": "Find Team",
                              "value": "findTeam"
                          },
                          {
                              "text": "List Teams",
                              "value": "listTeams"
                          }
                      ]
                  }
              ]
          }
      ],
        text: msg,
        channel,
        as_user: true,
      })
    }, (err, res, body) => {
      if (err) {
        console.log('error posting msg: ', err);
      } else {
        console.log('post message to channel: ', body);
      }
    })
  }

然后,Slack向其URL发送POST请求,并在其有效负载中带有response_url参数。这是我从代码中获取有效负载的地方:

    api.post('/interactivity', (req, res) => {
        const { body } = req;
        const { payload } = body;
        const parsedPayload = JSON.parse(payload)
        res.send(parsedPayload.response_url)
        var message = {
            "text": payload.user.name+" clicked: "+payload.actions[0].name,
            "replace_original": false,
        }
        util.sendMessageToSlackResponseURL(parsedPayload.response_url, message)
    })
  export const sendMessageToSlackResponseURL = (responseURL, JSONmessage) => {
    var postOptions = {
        uri: responseURL,
        method: 'POST',
        headers: {
            'content-type': 'application/json'
        },
        json: JSONmessage
    }
    request(postOptions, (error, res, body) => {
        if (error){
            console.log(error)
        } else {
          console.log('post message to channel: ', body);
        }
    })
}

但是由于某种原因,当我单击链接时,response_url给出了invalid_payload错误,并且我无法弄清楚我发送的原始消息中发送的有效载荷是否与POST请求有关松弛发送

1 个答案:

答案 0 :(得分:0)

问题出在第json: JSONmessage行的实用程序方法中,应该是body: JSONmessage

更新的代码

  export const sendMessageToSlackResponseURL = (responseURL, JSONmessage) => {
    var postOptions = {
        uri: responseURL,
        method: 'POST',
        headers: {
            'content-type': 'application/json'
        },
        body: JSONmessage
    }
    request(postOptions, (error, res, body) => {
        if (error){
            console.log(error)
        } else {
          console.log('post message to channel: ', body);
        }
    })
}

希望这行得通!