A Pushpop plugin for sending messages to Slack
Add pushpop-slack
gem to your Gemfile
gem 'pushpop-slack'
or install it as a gem
$ gem install pushpop-slack
You will also need to set an environment variable for your Slack Webhook. Here's how:
- Go to your Slack team site and create an Incoming Webhooks integration.
- Choose a default channel for pushpop messages. You can override this in the actual job.
- Copy the
Webhook URL
. - Set that to
SLACK_WEBHOOK_URL
in your environment (heroku, shell)
pushpop-slack
has a pretty easy DSL for sending messages to slack, and also handles all of the weird formatting that Slack requires. It copies much of the functionality of the slack-notifier gem, which is used internally.
Here's a very basic example of sending a message to slack:
job 'send "Hello, World!" to #general'
slack do
message 'Hello, World!'
end
end
We use slack-notifier's LinkFormatter
internally. That means you can either use HTML or Markdown format for your links
job 'send "Hello, World!" to #general'
slack do
message 'Where [in the world](http://en.wikipedia.org/wiki/Carmen_Sandiego) is Carmen Sandiego?'
# or
message 'Have you seen this <a href="http://en.wikipedia.org/wiki/Carmen_Sandiego">in the world</a> is Carmen Sandiego?'
end
end
Your webhook has a default channel that it sends to, but you can also choose a custom channel at runtime
job 'send "Hello, World!" to #general'
slack do
message 'Hello, World!'
channel '#alerts'
end
end
Slack expects the #
before your channel name. However, if you forget it, pushpop-slack will insert it there for your convenience
You can choose a custom username for your message to "come from". This can be a completely new username, or an existing one.
job 'send "Hello, World!" to #general'
slack do
message 'Hello, World!'
username 'Carmen Sandiego'
end
end
You can also set the avatar/icon for the "user" sending the message. Paired with the Username, this can make your pushpop messages look like they're from a real user.
You can use emoji icons, or just use an image anywhere on the internet. For emoji, use the slack formatting (ie: :ghost:
). For an image on the internet, just enter a URL (must start with http
).
job 'send "Hello, World!" to #general'
slack do
message 'Hello, World!'
icon ':ghost:'
# or
icon 'https://upload.wikimedia.org/wikipedia/en/e/ed/Carmen_Sandiego.png'
end
end
By default, Slack does not unfurl links from Webhooks (only media, like images). You can override that default by calling unfurl.
Calling unfurl
with no parameter will default to true, or you can pass it a boolean.
job 'send "Hello, World!" to #general'
slack do
message 'Where [in the world](http://en.wikipedia.org/wiki/Carmen_Sandiego) is Carmen Sandiego?'
unfurl
# or
unfurl true
end
end
You can send attachments over Slack as well. Attachments have a lot of options, so you have to pass in a pretty heavy configuration block. If you're going to use attachments, it's worth reading the slack-notifier paramters docs and the Slack Attachments Reference.
job do
slack do
first_attachment = {
fallback: 'This is the fallback',
pretext: 'Hey check out this attachment',
color: '#b0b0b0',
fields: [
{
title: 'Field Title',
value: 'This is the value of the first field!',
short: false
}
]
}
message 'Hello, World!'
attachment first_attachment
end
end
Code and documentation issues and pull requests are welcome.