#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. Это была моя проблема, да. Документация действительно запутанная, согласен. Спасибо за ответ!