Help us understand the problem. What is going on with this article?

slackにテキストや画像を投稿するbotの作り方

More than 1 year has passed since last update.

Webアプリの入力フォームに入力された情報をまとめてSlackに通知したいと思って色々検索したところ、Slackへの認証方法にTokenを用いている記事は見つけたのですが、公式的に現在は推奨されない方法のようだったので、公式が推奨しているSlackAppを使った投稿方法についてまとめました。
ちなみに、以下の解説ではRubyを使った例のみ記載しています。

ものすごく短くまとめると、「Ruby on Railsで作ったwebアプリからSlackAppを使って、Slackへテキストや画像を投稿する方法」について解説します。

++++アジェンダ++++

・SlackAppとは?
・SlackAppを登録する
・Slackに投稿する

(1)SlackAppとは?

Slack Appとは、他のwebアプリからSlackに情報を転送する機能やチャンネル内で自動返信を行う機能をまとめて行うことができるパッケージのようなものです。

ちなみに、現在公式が推奨していない方式のTokenとは、SlackなどのWebアプリに送信することが可能になるパスワードのようなものです。詳しく知りたい方はこちらを参照。

(2)SlackAppを登録する

 まずは、Slackにログインした状態でhttps://api.slack.com/apps にアクセスします。3.png4.png
「Create New App」をクリックします。Appの名前を入力しワークスペースを選択すると、Appの設定画面が表示されます。
5.png

 ここに3つの項目があるので、それぞれ解説します。

  • Add features and functionality : 作成するbotの機能を追加したり削除したり出来ます。自動返信機能や他Webアプリからのメッセージ転送はここで設定します。
  • Install your app to your workspace : 今作っているAppを自分のワークスペースで認証することができます。
  • Manage distribution : 他のワークスペースでもそのAppを使いたい場合にここから設定します。

6.png
 最初に、投稿する要素が存在するシステムから情報を引っ張ってくる設定をしたいので、「Add features and functionality」の中にある「Incoming Webhooks」をクリック。

7.png
「Activate Incoming Webhooks」をONにし、一番下にある「Add New Webhook to Workspace」をクリック。

8.png

 認証画面を進むと、ワークスペースにAppがインストールされます。これで3つの項目のうち2つが完了しました。(Manage distributionは本旨から外れるので説明を省きます。)
9.png
 画面左のSettingバーから「Basic information」をクリックして元の画面に戻ります。ここで再び「Add features and functionality」を開き「Bots」をクリックします。

10.png
 「Add a Bot User」をクリックするとBotのアカウント名と表示名が入力できます。(表示名に日本語は使えないので注意。)「Always Show My Bot as Online」というのは、そのBotを常にオンラインに設定するか否かという意味です。
11.png
「Add Bot User」をクリックすると、認証を再度設定する必要があるので、画面上部のバーの「click here」をクリックして再度認証します。

12.png
13.png

再度「Basic information」に戻り、「Add features and functionality」の「permissions」をクリック。

【重要】 このページにある「Bot User OAuth Access Token」は後に用いるので、メモしておいてください。

 これでBotの作成はひとまず終わりです。

(3)Slackに投稿する

上記で作成したSlackAppを使って、Slackにフォームの内容をWebアプリから投稿する際のサーバ側のコードは以下のような感じ。
ここでは、slack-apiというgemを利用しています。

require 'slack-api'

def post_to_slack
  # Slackに投稿するのに必要な設定
  Slack.configure do |config|
    config.token = "先ほどのTokenをここに入力"
  end
  # Slackに投稿するメッセージを作成
  msg = <<~EOC
       (例)連絡を受け取りました。
       (例)お名前:#{params[:user_name]}
       (例)メールアドレス:#{params[:user_email]}
       (例)詳細:#{params[:detail]}
       EOC
  # Slackに投稿する
  Slack.chat_postMessage(text: msg, username: 'slackのユーザーネームを入力', channel: "#投稿したいチャンネル名")
end

Slack.chat_postMessageのusernameは投稿者としてslackに表示される名前なので、適当な文字列で大丈夫です。
channelはSlackのチャンネル名が「posttest」ならば「#posttest」のように頭に「#」をつけないと投稿できないので注意してください。

次に、Slackに画像ファイルを投稿するコードは以下のような感じです。

require 'faraday'
require 'slack-api'

def post_to_slack
   Slack.files_upload(
           file: Faraday::UploadIO.new(params[:picture].tempfile, 'image/png'),
           channels: '#投稿したいチャンネル名',
           initial_comment: "画像と共につけるコメントを入力"
         )
end

ここでは画像のアップロードにFaradayというgemを使用しています。

これでテキスト同様、画像ファイルの投稿ができるようになりました。

参考URL:
・IT用語「トークン」を解説!
・Ruby の HTTP クライアントライブラリ Faraday が便利そう

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away