Что не так с моим выводом JSON для слабой полезной нагрузки сообщения?

#javascript #json #slack #slack-api

#javascript #json #slack #slack-api

Вопрос:

Я настроил то, что, по моему мнению, должно быть рабочим выводом JSON для отправки сообщения в slack, но Slack продолжает отклонять его.

Я пробовал несколько разных форматов компоновки сообщений, используя руководства на сайте API slack, но пока единственный метод, который успешно отправил, — это полностью плоский 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"
}
  

Комментарии:

1. Является payload правильным свойством для назначения данных в options ? это отправляется из браузера или сервера?

2. Я полагаю, что это так, и slack реагирует на это, когда я удаляю дополнительное форматирование, иначе говоря, если у меня просто есть: « { «канал»:»# техническая поддержка», «имя пользователя»:»Ответ формы», «icon_emoji»:»:mailbox_with_mail:», «link_names»:1, «текст»:»* Имя: * n тест» }«

3. Просматривая документацию по их API, я считаю, "blocks":[] что является причиной проблемы. Попробуйте удалить его.

4. @EternalHour Конечно, но это не ответило бы на вопрос о OP

5. @ErikKalkoken Это не должно было быть ответом, таким образом, это комментарий 🙂

Ответ №1:

Причина, по которой вы получаете ошибку no_text , заключается в том, что у вас нет допустимого текстового свойства сообщения в вашей полезной нагрузке. Вам либо нужно иметь свойство text в качестве параметра верхней строки (классический стиль — ваш пример внизу), либо текстовый блок в блоке раздела.

Если вы хотите использовать только блоки (как вы просите), вызывается блок раздела text , а не fields . fields это другой тип блока разделов, который имеет другое значение.

Итак, правильный синтаксис:

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

Также смотрите здесь официальную документацию по нему.

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

Комментарии:

1. Это была моя проблема, да. Документация действительно запутанная, согласен. Спасибо за ответ!