Отправка JSON на Slack в HTTP-запрос POST
Я пытаюсь отправить сообщение с помощью вызова Slack chat.postMessage. У меня нет проблем с кодированием моих тестовых сообщений в HTTP GET, но я пытаюсь добиться того же результата с JSON в запросе HTTP POST.
Я тестировал как curl
, так и Postman, но Slack, похоже, вообще не подтверждает мое тело запроса.
{
"ok": false,
"error": "not_authed"
}
В curl
мой запрос закодирован следующим образом:
curl -H "Content-type: application/json" -X POST -d '{"token":"my-token-here","channel":"#channel-name-or-id","text":"Text here.","username":"otherusername"}'
В Postman это сырое тело:
{
"token":"my-token-here",
"channel":"#channel-name-or-id",
"text":"Text here.",
"username":"otherusername"
}
Я раньше не делал ничего подобного, поэтому я не уверен, что я что-то упустил. Спасибо!
Ответы
Ответ 1
Я немного опаздываю, но надеюсь, что это поможет другим людям, которые спотыкаются на эту проблему, как я. Я только что общался с Slack, и вот что мне сказали:
Slack Web API вообще не принимает данные JSON - поэтому наряду с изменением Content-Type эти переменные должны быть опубликованы с использованием стандартных атрибутов формы HTTP.
Мы планируем в будущем поддерживать данные JSON для обеспечения согласованности в будущем.
Итак, ваша строка cURL должна выглядеть так:
curl -X POST -d 'token=my-token-here&channel=#channel-name-or-id&text=Text here.&username=otherusername'`
Надеюсь, это поможет!:)
Ответ 2
Это может не соответствовать полному ответу, но если целью является отправка вложения сообщения, вы можете отправить структуру JSON urlencode
d в качестве значения параметра attachments
, например (разбито на несколько строк для ясности):
https://slack.com/api/chat.postMessage?
token=YOUR-TOKE-N000&
channel=%23alerts&
text=Hi&
attachments=%5B%7B%22color%22%3A%22good%22%2C%22fallback%22%3A%22plain+text%22%2C%22text%22%3A%22colored+text%22%7D%5D
Значение attachments
имеет URL-кодировку [{"color":"good","fallback":"plain text","text":"colored text"}]
. Вы должны иметь возможность использовать все атрибуты вложений описанные здесь.
Ответ 3
Попробуйте помещать каждое свойство в свой собственный параметр -d, например:
curl https://slack.com/api/chat.postMessage -X POST -d "channel=#tehchannel" -d "text=teh text" -d "username=teh user" -d "token=teh-token-you-got-from-teh-page-that-machinehead115-linked-to" -d "icon_emoji=:simple_smile:"
Ответ 4
Slack обновлен, теперь это работает. Попробуйте этот пример:
curl -X POST -H 'Content-type: application/json' --data '{"text":"This is a line of text.\nAnd this is another one."}' https://hooks.slack.com/services/AAAAAA/BBBBBB/CCCCCC
См. https://api.slack.com/incoming-webhooks для документации.
Ответ 5
not_authed
означает, что не указан токен аутентификации.
Какой токен вы передаете в запросе? Вам нужно передать токен OAuth, который вы можете получить из здесь.
Ответ 6
Я сделал это в powershell, и это работает как шарм.
$url="https://slack.com/api/chat.postMessage"
$messageContent= # your message here
$token = # your token here
$channel = # channel name
$opt_username= # optional user name
$body = @{token=$token;channel=$channel;username=$opt_username;text=$messageContent;pretty=1}
try
{
Invoke-WebRequest -Uri $url -Method POST -Body $body
}
catch
{
Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription
}