slack_throttle v0.1.0 SlackThrottle.API
This library provides wrapper functions for the Slack Web API and automatically throttles all requests to it according to API rate limits.
Usage
Look up the API method you want to use in the Slack documentation. Function names are method names with dots replaced by underscores:
# method: channels.info
iex> SlackThrottle.API.channels_info("some token", %{channel: "C123456"})
%{"ok" => true, "channel" => %{"id" => "C123456", ...}}
If you don’t care about the response, e.g. when broadcasting a message,
use :cast
as the third argument:
# method: chat.postMessage
iex> SlackThrottle.API.chat_postMessage("some token", params, :cast)
:ok
Broadcasts are executed asynchronously and return :ok
immediately.
Rate Limits
The Slack Web API is subject to rate limiting. Requests are only allowed at a rate of one per second on a per-access-token basis.
To comply with these restrictions, the library queues all function calls
(grouped by access token) and executes them at the given rate. These queues
are priority queues: Regular blocking function calls have higher priority than
asynchronous broadcasts (the :cast
ones).
Configuration
The API throttle rate :api_throttle
can be configured as well as the
timeout for blocking function calls :enqueue_sync_timeout
:
config :slack_throttle,
api_throttle: 1000, # in milliseconds
enqueue_sync_timeout: 20000 # in milliseconds
Summary
Functions
auth_revoke(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
auth_test(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
bots_info(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_archive(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_close(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_create(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_createChild(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_history(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_info(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_invite(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_kick(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_leave(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_list(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_mark(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_open(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_rename(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_replies(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_setPurpose(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_setTopic(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
channels_unarchive(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
chat_delete(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
chat_meMessage(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
chat_postMessage(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
chat_update(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
dnd_info(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
dnd_teamInfo(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
emoji_list(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
files_comments_add(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
files_comments_delete(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
files_comments_edit(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
files_delete(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
files_info(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
files_list(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
files_revokePublicURL(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
files_upload(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_archive(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_close(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_create(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_createChild(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_history(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_info(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_invite(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_kick(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_leave(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_list(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_mark(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_open(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_rename(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_replies(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_setPurpose(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_setTopic(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
groups_unarchive(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
im_close(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
im_history(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
im_list(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
im_mark(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
im_open(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
im_replies(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
mpim_close(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
mpim_history(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
mpim_list(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
mpim_mark(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
mpim_open(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
mpim_replies(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
pins_add(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
pins_list(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
pins_remove(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
reactions_add(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
reactions_get(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
reactions_list(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
reactions_remove(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
reminders_add(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
reminders_complete(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
reminders_delete(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
reminders_info(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
reminders_list(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
rtm_start(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
search_all(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
search_files(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
search_messages(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
stars_add(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
stars_list(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
stars_remove(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
team_accessLogs(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
team_billableInfo(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
team_info(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
team_integrationLogs(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
team_profile_get(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
usergroups_create(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
usergroups_disable(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
usergroups_enable(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
usergroups_list(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
usergroups_update(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
usergroups_users_list(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
usergroups_users_update(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
users_deletePhoto(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
users_getPresence(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
users_identity(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
users_info(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
users_list(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
users_profile_get(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
users_profile_set(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
users_setActive(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok
users_setPhoto(binary, %{optional(atom) => any}, :call | :cast) :: %{optional(binary) => any} | :ok