Подтвердить что ты не робот

Отправка 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"
}

Я раньше не делал ничего подобного, поэтому я не уверен, что я что-то упустил. Спасибо!

4b9b3361

Ответ 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        
    }