slack - 如何诊断 slack Bolt 消息传递 404 错误

标签 slack slack-api slack-block-kit

我正在尝试为我的 Slack 应用程序启动一个模式。必须通过单击基本消息部分中的按钮来启动该模式。我正在使用 slack block builder ( https://www.blockbuilder.dev/ ) 包来构建 json。

bolt 应用程序具有以下功能:

app.action('watch-skill-video', async ({ ack, action, client, say, respond }) => {

  ack()
  const msg = await watchLayoutBuilder('some value', 'someother value')
  console.log('Message - ' + msg)
  await respond(JSON.parse(msg))

});

我可以看到消息被打印为 -

{
  "title": {
    "type": "plain_text",
    "text": "Abc"
  },
  "submit": {
    "type": "plain_text",
    "text": "Submit"
  },
  "blocks": [
    {
      "text": {
        "type": "plain_text",
        "text": "Dummy"
      },
      "type": "button"
    }
  ],
  "type": "modal"
}

但是与此同时,控制台中会显示 404 错误(当然弹出窗口不起作用)!

[ERROR]  bolt-app UnknownError: Request failed with status code 404
    at asCodedError (/Users/rajeshghosh/Projects/pwa-slack/node_modules/@slack/bolt/dist/errors.js:35:12)
    at App.handleError (/Users/rajeshghosh/Projects/pwa-slack/node_modules/@slack/bolt/dist/App.js:608:57)
    at App.processEvent (/Users/rajeshghosh/Projects/pwa-slack/node_modules/@slack/bolt/dist/App.js:593:25)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
    at async SocketModeClient.<anonymous> (/Users/rajeshghosh/Projects/pwa-slack/node_modules/@slack/bolt/dist/receivers/SocketModeReceiver.js:126:17) {
  code: 'slack_bolt_unknown_error',
  original: Error: Request failed with status code 404
      at createError (/.../node_modules/@slack/bolt/node_modules/axios/lib/core/createError.js:16:15)
      at settle (/.../node_modules/@slack/bolt/node_modules/axios/lib/core/settle.js:17:12)
      at IncomingMessage.handleStreamEnd (/.../node_modules/@slack/bolt/node_modules/axios/lib/adapters/http.js:322:11)
      at IncomingMessage.emit (events.js:412:35)
      at IncomingMessage.emit (domain.js:475:12)
      at endReadableNT (internal/streams/readable.js:1334:12)
      at processTicksAndRejections (internal/process/task_queues.js:82:21) {
    config: {
      transitional: [Object],
      adapter: [Function: httpAdapter],
      transformRequest: [Array],
      transformResponse: [Array],
      timeout: 0,
      xsrfCookieName: 'XSRF-TOKEN',
      xsrfHeaderName: 'X-XSRF-TOKEN',
      maxContentLength: -1,
      maxBodyLength: -1,
      validateStatus: [Function: validateStatus],
      headers: [Object],
      proxy: false,
      method: 'post',
      url: 'https://hooks.slack.com/actions/TFTS42ALT/3855892288214/7lmakyKKBAvk0paJguVzxoih',
      data: '{"title":{"type":"plain_text","text":"Abc"},"submit":{"type":"plain_text","text":"Submit"},"blocks":[{"text":{"type":"plain_text","text":"Dummy"},"type":"button"}],"type":"modal"}'
    },
    request: ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: true,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      _contentLength: null,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      socket: [TLSSocket],
      _header: 'POST /actions/TFTS42ALT/3855892288214/7lmakyKKBAvk0paJguVzxoih HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        'Content-Type: application/json\r\n' +
        'User-Agent: axios/0.26.1\r\n' +
        'Content-Length: 179\r\n' +
        'Host: hooks.slack.com\r\n' +
        'Connection: close\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: noopPendingOutput],
      agent: [Agent],
      socketPath: undefined,
      method: 'POST',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      path: '/actions/TFTS42ALT/3855892288214/7lmakyKKBAvk0paJguVzxoih',
      _ended: true,
      res: [IncomingMessage],
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'hooks.slack.com',
      protocol: 'https:',
      _redirectable: [Writable],
      [Symbol(kCapture)]: false,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype]
    },
    response: {
      status: 404,
      statusText: 'Not Found',
      headers: [Object],
      config: [Object],
      request: [ClientRequest],
      data: [Object]
    },
    isAxiosError: true,
    toJSON: [Function: toJSON]
  }
}
[ERROR]   An unhandled error occurred while Bolt processed (type: block_actions, error: Error: Request failed with status code 404)

我正在使用网络钩子(Hook)。感谢这里的任何帮助!

顺便说一句,如果我发送一条简单的消息而不是模态消息,它就可以正常工作。

最佳答案

事实证明,json 没有为 Modal 正确构建。当我将 json 交给 block kit builder 时,它正在提示。我尝试改变响应说,它能够向我显示验证错误。 Modal 中的 block 需要嵌入元素,然后嵌入输入字段。

因此,从 slack 接收 404 的原始问题已得到解决。

但是我遇到了另一个问题(模态未渲染弹出窗口),为此我打开了一个单独的 SOF 线程。

关于slack - 如何诊断 slack Bolt 消息传递 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73150474/

相关文章:

terraform - 每次有人运行 terraform 文件时通知 slack

ruby - 从 Slack 机器人访问 Slack 文件

超过 2 列的松弛 block

slack - 如何在 Slack 上通知不在 channel 中的用户?

airflow - 显式跳过 DAG 时松弛通知

slack-api - 返回通过 Slack API 发送的消息总数

python - Slack 发送附件返回 500 错误

javascript - 如何避免重复用户被 Slack 中的机器人提及?

slack - 您可以非交互地使用松弛按钮吗?