-
-
Save nadar/68a347d2d1de586e4393 to your computer and use it in GitHub Desktop.
<?php | |
/** | |
* Send a Message to a Slack Channel. | |
* | |
* In order to get the API Token visit: | |
* | |
* 1.) Create an APP -> https://api.slack.com/apps/ | |
* 2.) See menu entry "Install App" | |
* 3.) Use the "Bot User OAuth Token" | |
* | |
* The token will look something like this `xoxb-2100000415-0000000000-0000000000-ab1ab1`. | |
* | |
* @param string $message The message to post into a channel. | |
* @param string $channel The name of the channel prefixed with #, example #foobar | |
* @return boolean | |
*/ | |
function slack($message, $channel) | |
{ | |
$ch = curl_init("https://slack.com/api/chat.postMessage"); | |
$data = http_build_query([ | |
"token" => "YOUR_API_TOKEN", | |
"channel" => $channel, //"#mychannel", | |
"text" => $message, //"Hello, Foo-Bar channel message.", | |
"username" => "MySlackBot", | |
]); | |
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); | |
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | |
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); | |
$result = curl_exec($ch); | |
curl_close($ch); | |
return $result; | |
} | |
// Example message will post "Hello world" into the random channel | |
slack('Hello world', '#random'); |
This great!. I can send message easier and more flexible than incoming webhooks way. Thank you so much @nadar
Awesome, so easy and fast to include in my code! Thank you @nadar!
@jtuei If a file is pure PHP code, it is preferable to omit the PHP closing tag at the end of the file. This prevents accidental whitespace or new lines being added after the PHP closing tag, which may cause unwanted effects because PHP will start output buffering when there is no intention from the programmer to send any output at that point in the script.
This didn't work for me until I set CURLOPT_SSL_VERIFYPEER
to true
. Just thought I'd leave this here in case it helps anyone else.
Thanks for the mention @nicgordon, if someone wants to read more about CURLOPT_SSL_VERIFYPEER => https://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYPEER.html
Thank you. Really Interesting.
Is there a way to make this function can handle new line?
Fix it using PHP_EOL. Thanks for this simple and working function that does not include a lot of other codes.
I did get invalid_payload
response. Issue was with $data
, I had to pass it as json:
function slack($message, $channel)
{
$url = getenv('SLACK_WEBHOOK_URL');
$ch = curl_init($url);
$data = [
'channel' => $channel,
'text' => $message,
'username' => 'SlackBot',
];
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_THROW_ON_ERROR, 512));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
Legacy tokens creation disabled...
Yeah from:
https://api.slack.com/legacy/custom-integrations/legacy-tokens
Legacy token management
Tokens may no longer be created, but you can re-issue existing tokens here.
I needed a simple test so now have to look for another PHP example...
The code still works but you have to use Bot User OAuth Token
which requires to:
1.) Create an APP -> https://api.slack.com/apps/
2.) See menu entry "Install App"
3.) Use the "Bot User OAuth Token"
The file_get_contents()
version:
function slack($message, $channel)
{
$url = "https://slack.com/api/chat.postMessage";
$data = http_build_query([
"token" => getenv('SLACK_BOT_TOKEN'), // the "Bot User OAuth Token" value
"channel" => $channel,
"text" => $message,
"username" => "NotificationBot",
]);
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'content' => $data,
'ignore_errors' => true // This is useful to get the content of the response even if the status code is not 200
]
]);
$result = file_get_contents($url, false, $context);
return $result;
}
Thanks You
How to get all Slack channel messages on my site ?