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

インターン(その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作成まとめでした。

コメント

コメントを投稿

このブログの人気の投稿

INTEROP Tokyo2015

6月11日(木)Interop Tokyoへ行ってきました。 私の目当ては、CITRIX社 ブース会場で行われた クラウド・エバンジェリストの北瀬公彦さんと常田秀明さんの講演です CITRIX社のロードバランサーであるネットスケーラーの活用事例を IBM社のクラウドサービスSoftLayerを例に説明されていました。 CITRIX社は、IBM社のグローバル提携企業だから、 CITRIX社のロードバランサーであるネットスケーラーと SoftLayer は、セットで説明されていました。 SoftLayer は、データセンターをプライベートにつなぐネットワークだっていう話でしたので、 IBM社のSoftLayer の物理サーバーを使えば、 データセンターをクラウド化ができる。 (オンプレミスの環境をそのまあ維持してデータセンターへ移行できる) 従来のオンプレミスユーザー最適だってことでした。 そのため、仮想化とか、クラウドがどうかとか説明必要ないということになり、 企業の情報システム担当者は、安心して使えるし、経営者にも説明しやすいと思いました。 自前で仮想化システム研究できる余裕はなく、 PaaSは不安という感じがあれば、 SoftLayerのIaaSサービスって、選択しやすいし、わかりやすい。 最適なクラウド基盤を選択できるっていいなと思いました。

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

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

はじめまして!

はじめまして! 株式会社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(); sh for 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_pro