Skip to content

Repository files navigation

Slack Ruby Client

Gem VersionBuild Status

A Ruby client for the Slack Web and RealTime Messaging APIs.

Installation

Add to Gemfile.

gem 'slack-ruby-client'

Run bundle install.

Usage

Create a New Bot Integration

This is something done in Slack, under integrations. Create a new bot, and note its API token.

Use the API Token

Slack.configuredo |config|
config.token=ENV['SLACK_API_TOKEN']end

This sets a global default token. You can also pass a token into the initializer of both Slack::Web::Client and Slack::RealTime::Client or configure those separately via Slack::Web::Config.configure and Slack::RealTime::Config.configure. The instance token will be used over the client type token over the global default.

Web Client

The Slack Web API allows you to build applications that interact with Slack. For example, send messages with chat_PostMessage.

client=Slack::Web::Client.newclient.auth_testgeneral_channel=client.channels_list['channels'].detect{ |c| c['name'] == 't3'}client.chat_postMessage(channel: general_channel['id'],text: 'Hello World',as_user: true)

See a fully working example in examples/hi_web.

Refer to the Slack Web API Method Reference for the list of all available functions.

You can configure the Web client either globally or via the initializer.

Slack::Web::Client.configdo |config|
config.user_agent='Slack Ruby Client/1.0'end
client=Slack::Web::Client.new(user_agent: 'Slack Ruby Client/1.0')

The following settings are supported.

settingdescription
tokenSlack API token.
user_agentUser-agent, defaults to Slack Ruby Client/version.
proxyOptional HTTP proxy.
ca_pathOptional SSL certificates path.
ca_fileOptional SSL certificates file.
endpointSlack endpoint, default is https://slack.com/api.

RealTime Client

The Real Time Messaging API is a WebSocket-based API that allows you to receive events from Slack in real time and send messages as user.

client=Slack::RealTime::Client.newclient.on:hellodoputs"Successfully connected, welcome '#{client.self['name']}' to the '#{client.team['name']}' team at https://#{client.team['domain']}.slack.com."endclient.on:messagedo |data|
casedata['text']when'bot hi'thenclient.messagechannel: data['channel'],text: "Hi <@#{data['user']}>!"when/^bot/thenclient.messagechannel: data['channel'],text: "Sorry <@#{data['user']}>, what?"endendclient.start!

You can send typing indicators with typing.

client.typingchannel: data['channel']

You can send a ping with ping.

client.ping

The client exposes the properties of rtm.start upon a successful connection.

propertydescription
urlA WebSocket Message Server URL.
selfDetails on the authenticated user.
teamDetails on the authenticated user's team.
usersA list of user objects, one for every member of the team.
channelsA list of channel objects, one for every channel visible to the authenticated user.
groupsA list of group objects, one for every group the authenticated user is in.
imsA list of IM objects, one for every direct message channel visible to the authenticated user.
botsDetails of the integrations set up on this team.

You can configure the RealTime client either globally or via the initializer.

Slack::RealTime::Client.configdo |config|
config.websocket_ping=42end
client=Slack::RealTime::Client.new(websocket_ping: 42)

The following settings are supported.

settingdescription
tokenSlack API token.
websocket_pingThe number of seconds that indicates how often the WebSocket should send ping frames, default is 30.
websocket_proxyConnect via proxy, include :origin and :headers.

Note that the RealTime client uses a Web client to obtain the WebSocket URL via rtm.start, configure Web client options via Slack::Web::Client.configure as described above.

See a fullly working example in examples/hi_real_time.

Combinging RealTime and Web Clients

Since the Web client is used to obtain the RealTime client's WebSocket URL, you can continue using the Web client in combination with the RealTime client.

client=Slack::RealTime::Client.newclient.on:messagedo |data|
casedata['text']when'bot hi'thenclient.web_client.chat_postMessagechannel: data['channel'],text: "Hi <@#{data['user']}>!"when/^bot/thenclient.web_client.chat_postMessagechannel: data['channel'],text: "Sorry <@#{data['user']}>, what?"endendclient.start!

See a fullly working example in examples/hi_real_time_and_web.

History

This gem is based on slack-ruby-gem, but it more clearly separates the Web and RTM APIs, is more thoroughly tested and is in active development.

Contributing

See CONTRIBUTING.

Copyright and License

Copyright (c) 2015, Daniel Doubrovkine, Artsy and Contributors.

This project is licensed under the MIT License.

About

A Ruby client for the Slack Web and RealTime Messaging APIs.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages