スキップしてメイン コンテンツに移動

インターン(その4) Slack Bot 作成まとめ

豊橋技術科学大学の近藤です。

Slackで自動的に発言するBotを作る機会があったので、
簡単にまとめてみました。



POSTに用いるURLの取得

Webhook URL :
Configure Integrations(左チーム名のドロップダウン)
 -> Incomig WebHooks(下の方)
   -> チャンネルを選んで、Add Incoming Webhook Integrationを選択
     -> Webhook URL

チャンネルは、どれを選んでも後で指定できる
要するにデフォルトがこのページで設定できる


チャンネルIDの取得

全てのチャンネルのWebhook URLを取得するのは面倒。
チャンネルのIDを取得すると、一つで大丈夫。

手動で取得:
チャンネル名のドロップダウン
-> Add a service integration... のURLに書いてある
これが一番速いと思う

POSTして取得:
  1. API Tokenを取得 https://api.slack.com/web
  2. POSTして、jsonのデータを取得
    XXX
  3. データを取り出す
    r = requests.get(Webhook URL, params={'token': api_token}, verify=False)↵
    for channel in json.loads(r.content)['channels']:
      id = channel['id']
      name = channel['name']
調べている途中で気付いたが、IDではなく名前の指定も可能。
(例:'#channel', '@username')


発言する

POSTするデータ:
data = {
  'channel': CHANNEL_ID, # ここに、チャンネル名、ユーザ名を指定してもOK
  'username': 'Mr.BOT',
  'icon_url': Icon URL, 
  'icon_emoji': ':smile:', #(チートシート:http://www.emoji-cheat-sheet.com/)
  'text': 'hoge',
  'attachments': [attachment, ], 
}
iconはemojiが優先、attachments 内のテキストは、textの下に出る。
attachmentsを使うと、テキストの左側にラインがつく。色を変えたりできる。
attachment = {
  'fallback': 'fuga', # attachmentsの表示ができない端末用の文字列
  'pretext': 'piyo', # attachmentの上にtextと同じように出力
  'color' : '#00FF00', # Hexのほかに、'good', 'warning', 'danger'が使用可能
  'title': 'タイトル',
  'title_link': URL, # タイトルにつけるリンク
  'text' : 'hogehoge',
 'fields': [field, ], 
  # 著者の表示など、引用で使えるもの
  'author_name' : '@Mr.Author',
  'author_link' : URL, # ユーザ名につけるリンク 名前がないと使えない
  'author_icon' : Icon URL, # emojiは使えない 名前がないと使えない
}
textの下に、fieldsに入れたフィールドが展開される。
field = {
  'title': 'フィールドタイトル',
  'value': 'フィールドテキスト',
  'short':  True, # Trueだと、2段組みになる
}

このデータをjsonに変換して送ると、指定したチャンネルに出力される。

requests.post(Webhook URL, data=json.dumps(data))


以上、slack bot作成まとめでした。

コメント

  1. このコメントはブログの管理者によって削除されました。

    返信削除

コメントを投稿

このブログの人気の投稿

はじめまして!

はじめまして!
株式会社MNUで新しくブログを始めます。
主に、プログラムに関する技術的なことを中心に社員が持ち回りで書いていきます。
皆様のお役に立てれば幸いです。

どうぞ、これからよろしくお願いします。


ここから下はコードを表示するサンプルです。

int x = foo(); /* This is a comment This is not code Continuation of comment */ int y = bar(); // This is line 4. foo(); bar(); baz(); boo(); far(); faz(); shfor target do WORKDIR=$(mktemp -d "$EXTRACTHOMEDIR"/XXXXXX) case "$target" in *.[Tt][Gg][Zz]|*.[Tt][Aa][Rr].[Gg][Zz]|*.[Tt][Aa][Rr].[Zz]) tar vzxf "$target" -C "$WORKDIR" move_to_currentpath "$WORKDIR" "$target" ;; *.[Tt][Bb][Zz]|*.[Tt][Aa][Rr].[Bb][Zz]2) tar vjxf "$target" -C "$WORKDIR" move_to_currentpath "$WORKDIR" "$target" ;; *.[Gg][Zz]) gzip -d "$target" move_to_currentpath "$WORKDIR" "$target" ;; *.[Zz][Ii][Pp]|*.[JjWw][Aa][Rr]) check_required_program unzip /usr/p…

液晶ディスプレイのパネル構造に関する特許を取得しました

はじめまして、MNUの伊東です。
先日、液晶ディスプレイのパネル構造に関する特許を出願し、無事審査を通りましたのでこれからそれに関する技術的ポイントについて記載して参りたいと思います。