json - create - slack bot webhook
EnvĂo de JSON a Slack en una solicitud HTTP POST (10)
Si estás usando Java y sales de esa dependencia, Voila !! aqui tienes
* Make a POST call to the chat.PostMessage.
*/
public void chatPostMessage(Message message)
{
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
map.add("token", slackPostMessageToken); //Required
map.add("text", message.getText());//Required
map.add("channel", message.getChannelId());//Required
map.add("unfurl_links","true");
map.add("as_user","false");//Default false
map.add("icon_emoji",":chart_with_upwards_trend:");
map.add("attachments","[/n" +
" {/n" +
" /"fallback/": /"Required plain-text summary of the attachment./",/n" +
" /"color/": /"#36a64f/",/n" +
" /"pretext/": /"Optional text that appears above the attachment block/",/n" +
" /"author_name/": /"Bobby Tables/",/n" +
" /"author_link/": /"http://flickr.com/bobby//",/n" +
" /"author_icon/": /"http://flickr.com/icons/bobby.jpg/",/n" +
" /"title/": /"Slack API Documentation/",/n" +
" /"title_link/": /"https://api.slack.com//",/n" +
" /"text/": /"Optional text that appears within the attachment/",/n" +
" /"fields/": [/n" +
" {/n" +
" /"title/": /"Priority/",/n" +
" /"value/": /"High/",/n" +
" /"short/": false/n" +
" }/n" +
" ],/n" +
" /"image_url/": /"http://my-website.com/path/to/image.jpg/",/n" +
" /"thumb_url/": /"http://example.com/path/to/thumb.png/",/n" +
" /"footer/": /"Datoo ©/",/n" +
" /"ts/": "+System.currentTimeMillis()+"" +
" }/n" +
" ]");
map.add("username","III");
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
try {
ResponseEntity<String> response = restTemplate.postForEntity(slackPostMessageUrl, request, String.class);
System.out.println(response);
}
catch (RestClientException e) {
logger.error("Error :-( : ", e);
}
}
Intento enviar un mensaje usando la llamada a la API chat.postMessage de Slack . No tengo problemas para codificar mis mensajes de prueba dentro de HTTP GET, pero estoy tratando de lograr el mismo resultado con JSON en una solicitud HTTP POST.
He estado probando tanto con curl
como con Postman , pero Slack no parece estar reconociendo mi cuerpo de solicitud en absoluto.
{
"ok": false,
"error": "not_authed"
}
En curl
, mi solicitud está codificada de esta manera:
curl -H "Content-type: application/json" -X POST -d ''{"token":"my-token-here","channel":"#channel-name-or-id","text":"Text here.","username":"otherusername"}''
En Postman, este es el cuerpo sin procesar:
{
"token":"my-token-here",
"channel":"#channel-name-or-id",
"text":"Text here.",
"username":"otherusername"
}
No he hecho algo así antes, así que no estoy seguro de si me estoy perdiendo algo. ¡Gracias!
A partir de marzo de 2018 , Slack ahora es compatible con POST con JSON body
Punto final : https://slack.com/api/chat.postMessage
Encabezados : Authorization: Bearer xoxp-your-hardly-find-token-here
Cuerpo : {"channel":"CH9NN37","text":"something from me!"}
Observe el portador en el encabezado Authorization .
De acuerdo, después de volver a leer la documentación, la encontré:
Cuerpos con codificación JSON
Para estos métodos de escritura, puede enviar alternativamente sus datos HTTP POST como tipo de contenido: application / json.
Hay algunas reglas básicas:
- Debe establecer explícitamente el encabezado HTTP Content-type en application / json. No interpretaremos su cuerpo POST como tal sin él.
- Debe transmitir su token como token de portador en el encabezado HTTP de autorización.
- No puede enviar su token como parte de la cadena de consulta o como un atributo en su JSON publicado.
- No mezcle argumentos entre cadena de consulta, cuerpo POST codificado en URL y atributos JSON. Elija un enfoque por solicitud.
- Proporcionar un valor explícitamente nulo para un atributo dará como resultado el comportamiento predeterminado que se le haya asignado.
Y el ejemplo curl
Observe el encabezado de Autorización .
curl -X POST /
-H ''Authorization: Bearer xoxb-1234-56789abcdefghijklmnop'' /
-H ''Content-type: application/json'' /
--data ''{"channel":"C061EG9SL","text":""..."}'' /
https://slack.com/api/chat.postMessage
En cartero puedes enmarcar tu pedido así:
url (POST): https://slack.com/api/chat.postMessage
Luego, en la sección Headers
, coloca estos dos encabezados:
valor clave (tipo de
Content-Type
) (application/json
)valor clave (
Authorization
) (YOUR-TOKEN-NAME
)
Luego, en la sección Body
en forma raw
pon tus datos:
{"channel": "CHANNEL-NAME", "data": "You better post this to channel"}
Es posible que esto no califique para la respuesta completa, pero si el propósito es enviar un archivo adjunto a un mensaje, puede enviar una estructura JSON urlencode
d como el valor del parámetro attachments
, como tal (dividido en varias líneas para mayor claridad):
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
El valor de los attachments
tiene codificación URL [{"color":"good","fallback":"plain text","text":"colored text"}]
. Debería poder usar todos los atributos de adjuntos que se describen aquí .
Estoy un poco tarde, pero espero que esto pueda ayudar a otras personas que se topan con este problema como yo. Acabo de estar en contacto con Slack, y esto es lo que me dijeron:
Slack Web API no acepta datos JSON en absoluto; por lo tanto, junto con el cambio del tipo de contenido, esas variables se deben publicar utilizando atributos de formulario HTTP estándar.
Planeamos admitir datos JSON en el futuro para mantener la coherencia en el futuro.
Entonces, su línea cURL debería verse así:
curl -X POST -d ''token=my-token-here&channel=#channel-name-or-id&text=Text here.&username=otherusername''`
¡Espero que esto ayude! :)
Hice esto en powershell y funciona como un encanto.
$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
}
Slack ha sido actualizado, esto ahora funciona. Prueba este ejemplo:
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
Consulte https://api.slack.com/incoming-webhooks para obtener documentación.
Trate de poner cada propiedad en su propio parámetro -d, así:
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:"
not_authed
significa que no se ha proporcionado ningún token de autenticación.
¿Qué símbolo está transmitiendo en la solicitud? Debes pasar tu token de OAuth, que puedes obtener de here .