Dropin is a minimalist Slack slash command integration with one purpose: bridging the gap between Slack and existing shell scripts and programs.
Dropin runs specific commands and sends their output back to Slack. This allows you to add your existing scripts to Slack without having to build a specific integration around them—for most kinds of use-cases, Dropin will Just Work™ out of the box.
Dropin supports basic authorization in the form of whitelisted channels and user IDs.
How to Add Dropin to your Slack Team
Prerequisites
- A Linux server (I hear DigitalOcean have some good cloud servers 😉)
- A domain name. A subdomain will work too. (required by Slack)
Configuring Slack
Start by creating a new Slack slash command here. Fill out these fields:
- Command
- URL: https://yourdomain.com
- Method: POST
- Token: Slack will auto-generate one for you
- Tick Show this command in the autocomplete list if you like
Installing Dropin
Dropin is released as a static binary. You can download the latest release from the releases page on GitHub. Once you've done so, place the binary wherever you want: /usr/local/bin
, /opt/dropin
, etc. Set proper permissions by running:
sudo chown root:root /path/to/dropin
sudo chmod 755 /path/to/dropin
Configuring Dropin
Dropin uses a config file to store the Slack connection info and other settings as well as the chatops commands. Start by setting the global settings:
team = "Slack Team ID"
token = "Slack Token"
listenaddress = "127.0.0.1:4000"
timeout = "3m"
timeout
is the global timeout value for chatops commands. Commands that exceed the timeout limit will be canceled. This default value can be overriden per individual command.
Set up authorization:
[[users]]
name = "user name"
id = "user ID"
[[channels]]
name = "channel name"
id = "channel ID"
Helpful links:
Add a Command
To add a command, add a section like this to the config file:
[[commands]]
name = "test"
description = "This is a test command"
executable = "/bin/echo"
chdir = "/tmp"
args = ["test"]
With this command, running /chatops test
will return test
—the output of running /bin/echo test
.
Available options are:
name
name, passed to the slash command. No spaces alloweddescription
descriptionexecutable
= "/bin/sleep"chdir
the working directory to run the command inargs
an array of arguments passed to the commandtakesArguments
boolean. iftrue
, any arguments passed to the slash command will be appended to the original commandtimeout
an optional override of the global timeout limit
Another example command:
[[commands]]
name = "sleep"
description = "This command should fail"
executable = "/bin/sleep"
chdir = "/tmp"
args = ["5"]
takesArguments = false
timeout = "2s"
HTTPS
It's always recommended for web services to communicate over HTTPS instead of plain HTTP. While Slack allows you to run slash commands over HTTP, Dropin can easily be put behind an HTTPS proxy. We'll use Caddy but you can use whichever web server you like (Nginx, traefik, etc.).
First, set Dropin to listen locally, e.g. localhost:4000
. You can use any port you like as long as it's not used by another process and is over 1024.
Add the following to your Caddyfile
and Caddy will take care of the rest.
yourdomain.com {
tls your-email-address-here
proxy / http://localhost:4000
}
Set Slack to use https://yourdomain.com/
as the slash command URL and you'll be all set.
Running Dropin as a System Service
You can use the following Systemd service unit file to run Dropin as a service. All chatops commands will be run as the same user that is running Dropin so pick one that works for you. If your commands don't need any special privileges, you can always use nouser
as the user and nogroup
as the group.
[Unit]
Description=dropin-chatops for Slack
After=network-online.target
[Service]
Restart=on-failure
User=dropin
Group=dropin
ExecStart=/opt/dropin/dropin -config /opt/dropin/dropin.toml
[Install]
WantedBy=multi-user.target
Replace /opt/dropin/dropin
with the path to the Dropin binary, and /opt/dropin/dropin.toml
with the path to config file.
Save the file in /etc/systemd/system/dropin.service
and enable it:
sudo systemctl daemon-reload
sudo systemctl start dropin
sudo systemctl enable dropin