0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Slack APIを使ってRailサーバー側からSlackのチャネルへメッセージを送る

Posted at

目的

最近はネットで先人の方々の知恵にしみじみと感謝しています。

今回、薬剤師の私がどうしてこちらを作成したいのかといいますと...
Slackで薬局内の在庫を見える化したいから!

今回はSlackAPI連携まで行って
また時間があるときに続きを記事にします。
では早速まとめていきます。

やりたいこと

特定のslackチャネルへメッセージを送るRailsアプリを作成したい

ざっくりこんな感じの手順でやります

  • Slackアプリを作成
  • アプリのスコープ設定
  • Slack botの設定とトークンを発行
  • Slackの特定のチャネルへbotを招待
  • Railsアプリの作成
  • Slack Bot クラスを作成
  • Railsコンソールからテキストを送信

Slackアプリを作成

  • まずはこちらからアクセスしてアプリの作成
    Slack API: Applications | Slack
  • Create New App
    From amanifestとFrom scratchが選択できます
    今回はFrom scratchを選択してゼロから作成
  • App Nameと自分自身のSlackワークスペースを設定
    Nameはなんでも大丈夫です。
    Slackのワークスペースを選択してCreate Appをクリックします。
    スクリーンショット 2024-11-30 21.46.37.png

Slackアプリのスコープ設定

  • Slackアプリのスコープ設定
    ※SlackのスコープではアプリがSlackワークスペース内で実行できる操作やアクセスできる情報を制御する権限の集合を指します。
    簡単に説明するとアプリが「何ができるか」を決めるルールのことです。
  • 左メニューのOAuth & Permissionsを選択する
    スクリーンショット 2024-11-30 22.27.21.png
  • chat:writeというスコープを設定
    ここでchat:writeを選択すると、Railsアプリが任意のチャンネルやユーザーに対してメッセージを送信できるようになります。
    スクリーンショット 2024-11-30 22.28.53.png

Slack botの設定とトークン発行

  • 左メニューのApp Homeを選択してApp Display Nameを編集
    DisplayNameとDefault usernameは適当で大丈夫です
    スクリーンショット 2024-11-30 22.37.23.png

  • 左のInstall Appからアプリをインストール
    インストールを行なって【許可する】を選択
    スクリーンショット 2024-11-30 22.40.01.png

  • インストールの過程を終えるとトークンが発行されます
    こちらのトークンはSlack API連携を行う際に必須となります。
    また、こちらは機密情報です。ワークスペースの不正操作などを行われてしまうため、情報漏洩しないように気をつけましょう。
    スクリーンショット 2024-11-30 22.43.03.png

Slackの特定のチャネルへbotを招待

特定のチャネルにアプリを招待してslack側の操作は終了です。
※Slackのメッセージ画面で下記入力。your_bot_nameには今回設定したnameを記載。

/invite @your_bot_name

Railsアプリの作成してアクセストークを保管

  • rails newでアプリケーションを作成
$ rails new アプリケーション名 [オプション]
gem 'slack-ruby-client'
  • アクセストークンの設定
    Slack側で発行したアクセストークンをcredentials.yml.enc 内に保管します。
    rails5.2以降では基本的にcredential.yml.encに保管するようです。
    こちらの記事が参考になります
EDITOR="vim" bin/rails credentials:edit

ファイル内に下記を記載

slack_api_token: 'your-slack-bot-token'  # 実際のトークンを設定

Slack Bot クラスを作成

  • Slack API を利用して簡単にメッセージを投稿する機能を作成
app/services/slack_notify_service.rb
class SlackNotifyService
 def initialize
   @client = Slack::Web::Client.new
 end

 def post_message(message, channel:)
   @client.chat_postMessage(channel: channel, text: message)
 end
end

Slack::Web::Client.newを使用して、Slack API にアクセスするためのクライアントインスタンスを作成します。このクライアントは @client変数に保持されます。

次のメソッドではchat.postMessageエンドポイントを呼び出して、特定のチャンネルにメッセージを投稿します。

  • Slack API の認証設定を一元管理
config/initializers/slack.rb
Slack.configure do |config|
  config.token = Rails.application.credentials.slack_api_token
end

Slack::Web::ClientがAPIを利用する際、認証に必要なアクセストークン(config.token)を設定します。
こちらではcredential.yml.encで保持したトークンを呼び出します。

Railsコンソールからテキストを送信

  • Railsコンソールで起動
rails console
  • コンソールからテキストを送信
client = Slack::Web::Client.new
client.chat_postMessage(
  channel: '#在庫管理bot',
  text: 'こんにちは'
)

Slackチャネルでこのようにメッセージが来ていたら成功です。
スクリーンショット 2024-11-30 23.16.29.png

参考サイト

https://api.slack.com/apis
https://github.com/slack-ruby/slack-ruby-client
https://zenn.dev/kame0707/articles/ef2453f31fe236

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?