【问题标题】:What is wrong with my JSON output for a Slack Message payload?我的 Slack 消息有效负载的 JSON 输出有什么问题?
【发布时间】:2019-04-05 22:45:21
【问题描述】:

我已经设置了我认为应该是有效的 JSON 输出以在 slack 中发送消息,但 Slack 一直拒绝它。

我使用 slack 的 api 网站上的指南尝试了多种不同的消息布局格式,但到目前为止,唯一成功发送的方法是完全扁平的 JSON,没有块格式。

function submitValuesToSlack(e) {

  var name = e.values[1];
  var caseNumber = e.values[2];
  var problemDescription = e.values[3];
  var question = e.values[4];
  var completedChecklist = e.values[5];

  var payload = [{
    "channel": postChannel,
    "username": postUser,
    "icon_emoji": postIcon,
    "link_names": 1,
    "blocks": [
      {
        "type": "section",
        "fields": [
          {
            "type": "mrkdwn",
            "text": "*Name:*\n " + name
          }
        ]
      }]
  }];
  console.log(JSON.stringify(payload, null, "\t"));

  var options = {
    'method': 'post',
    'payload': JSON.stringify(payload)
  };

  console.log(options)

  var response = UrlFetchApp.fetch(slackIncomingWebhookUrl, options);

}

当我运行它时,我得到以下输出:

[  
   {  
      "channel":"#tech-support",
      "username":"Form Response",
      "icon_emoji":":mailbox_with_mail:",
      "link_names":1,
      "blocks":[  
         {  
            "type":"section",
            "fields":[  
               {  
                  "type":"mrkdwn",
                  "text":"*Name:*\n test"
               }
            ]
         }
      ]
   }
]

我认为这是正确的,但是 slack api 只是以 HTTP 400 错误“无文本”拒绝它

我对块格式有什么误解吗?

编辑:

澄清一下,如果我将它用于我的 JSON 而不是更复杂的格式,则格式化是有效的:

{  
      "channel":"#tech-support",
      "username":"Form Response",
      "icon_emoji":":mailbox_with_mail:",
      "link_names":1,
      "text":"*Name:*\n test"
}

【问题讨论】:

  • payload 是在 options 中分配数据的正确属性吗?这是从浏览器还是服务器发送的?
  • 我相信是这样,当我删除其他格式时,slack 会对此做出响应,也就是如果我只有:``` { "channel":"#tech-support", "username": "Form Response", "icon_emoji":":mailbox_with_mail:", "link_names":1, "text":"*Name:*\n test" }``
  • 查看他们的 API 文档,我相信 "blocks":[] 是导致问题的原因。试着把它拿出来。
  • @EternalHour 当然,但这不能回答 OP 的问题
  • @ErikKalkoken 这不是一个答案,因此,它是一个评论:)

标签: javascript json slack slack-api


【解决方案1】:

您收到错误 no_text 的原因是您的负载中没有有效的消息文本属性。您需要有一个文本属性作为顶行参数(经典样式 - 您的示例在底部)或部分块中的文本块。

如果您只想使用块(如您所问),则节块称为text,而不是fieldsfields 是另一种具有不同含义的节块。

所以正确的语法是:

[  
   {  
      "channel":"#tech-support",
      "username":"Form Response",
      "icon_emoji":":mailbox_with_mail:",
      "link_names":1,
      "blocks":[  
         {  
            "type":"section",
            "text":[  
               {  
                  "type":"mrkdwn",
                  "text":"*Name:*\n test"
               }
            ]
         }
      ]
   }
]

另请参阅here 以获取有关它的官方文档。

块非常强大,但有时可能很复杂。我建议使用消息生成器来试用您的消息并查看文档中的示例。

【讨论】:

  • 那是我的问题,是的。同意,文档确实令人困惑。感谢您的回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多