Posted at

rubyのスクリプトでslackのAPIを使って簡単なメッセージを投稿してみる_100DaysOfCodeチャレンジ31日目(Day_31:#100DaysOfCode)

More than 1 year has passed since last update.


はじめに

この記事はTwitterで人気のハッシュタグ#100DaysOfCodeをつけて、

100日間プログラミング学習を続けるチャレンジに挑戦した31日目の記録です。


動作環境


  • Ruby 2.4.1p111 (2017-03-22 revision 58053)


本日学んだこと


  • slackのAPIを使って、Botにメッセージを送ってみる


SlackのAPIを使うために必要なTOKENを取得する

公式サイト: https://api.slack.com/

上記のリンク先からアクセスして、「start building」ボタンを押します。

「Create a Slack App」というモーダルが立ち上がるので、任意の名前と開発対象となる既存のワークスペースを選択します。

「Basic Information」というページに遷移するので、「Add features and functionality」から追加する機能を選択します。

今回はBotsを選択しましょう。

Bot Userページに遷移するので、「Add a Bot User」ボタンを押します。

「Display name」と「Default username」に表示させたい名前を入力して、「Add Bot a User」ボタンを押します。

サイドメニューにある「OAuth & Permissions」を選択し、「Install App to Workspace」を押しましょう。

確認画面が表示されるので、「許可する」を選択します。

そうすると、画面が遷移し、「OAuth & Permissions」ページに「OAuth Access Token」と「Bot User OAuth Access Token」という二つのトークンが表示されているのがわかります。

今回のスクリプトでは、「OAuth Access Token」を使います。


ターミナルの作業:Rubyのスクリプトを作成する

ここからはターミナルの作業です。

任意の場所で、適当なディレクトリを作成します。rubyでslackのAPIを使うために、gemをインストールするので、bundle initをしておきましょう。

$ mkdir slack-bot

$ cd slack-bot
$ bundle init

Gemfileに次のgemを追加します。

gem 'slack-api'

gem 'dotenv'

bundle installします。

$ bundle install --jobs=4

続いて、先ほど取得した「OAuth Access Token」をdotenvに記述します。

SLACK_TOKEN="jfirjirifxkXXXXXXXX45454fekdoe0fikeo"

そして、ここからslackのAPIを使うためのファイルを作成します。

touch slack.rb

slack.rbの中身はこんな感じです。

#slack.rb

require "dotenv/load"
require "slack"

Slack.configure do |config|
config.token = ENV['SLACK_TOKEN']
end

# ワークスペースにいる全員にメッセージを送る
def send_message_to_all
Slack.users_list["members"].each do |member|
Slack.chat_postMessage(channel: member["id"], text: "Hello! テストだよ!")
end
end

send_message_to_all

保存したら、ターミナルで実行してみましょう。

$ bundle exec ruby slack.rb

対象となるワークスペースで、テキストが表示されていたら成功です。

これを応用して、ポモドーロで25分ごとに休憩を促すBotとかを作ったら、色々はかどりそうですよね。

時間見つけて実装してみようと思います。


参考

https://www.rubydoc.info/gems/slack-api/Slack/Endpoint/Chat#chat_postMessage-instance_method

https://api.slack.com/methods/chat.postMessage