すみぬり小屋

hakobuneworksという屋号でいろんなことをしている墨崎達哉のブログ

SlackのSlash Commandsをとりあえず実装してみる

すみさきです。

最近気が緩みすぎてるのかSAN値が減りすぎてやる気が起きないのか、いろんなことが進んでないです。

というわけで息抜き回。
SlackのSlash Commandsを簡単に使ってみます。

api.slack.com

前提

今回はAWSを使用しています。

あと、Serverless Frameworkも使います。

serverless.com

もちろんSlackのアカウントも必要です。

処理部分

まずはSlackからのリクエストを受け付ける部分を作りましょう。

新しいサービスを作成します

sls create -t aws-python3 -p SlackAppService

中にserverless.ymlというファイルがあるので以下のように編集しましょう

service: SlackAppService

provider:
  name: aws
  runtime: python3.6
  stage: dev
  region: ap-northeast-1


functions:
  hello:
    handler: handler.hello
    events:
      - http:
          path: helloworld
          method: POST

(例では配置先を東京リージョンにしてますよ)

次はhandler.pyを以下のように書き換えます

import json
from urllib.parse import parse_qsl

def hello(event, context):

    # Slackからのリクエストをパースする
    params = dict(parse_qsl(event['body']))

    # レスポンスを作成
    res_body = {'text': 'hello <@{0}>'.format(params['user_id'])}
    response = {"statusCode": 200, "body": json.dumps(res_body)}

    return response

Slackから送られてくるPOSTリクエストの中身は、x-www-urlencodedなので、parse_qslでパースします。
parse_qsで直接dictにしても良いのですが、valueが配列になってしまうので・・・

今回は使っていませんが、使用したコマンドやパラメータを取りたい場合は、commandやtextの中に入っています。
詳しくはドキュメントを見るべし。

ソースが書けたらデプロイしましょう

sls deploy

Slash Commandsの作成

https://api.slack.com/appsにアクセスして、「Create New App」をクリック。
画面の指示に従ってアプリ名と開発ワークスペースを登録する。

f:id:T_Sumisaki:20171214224324p:plain

アプリが作成できたら、FeaturesのSlash Commandsを選択し、「Create New Command」をクリック

f:id:T_Sumisaki:20171214224800p:plain

コマンド名、リクエスト先、Slack上で表示されるツールヒントなどを入力して登録しましょう。

f:id:T_Sumisaki:20171214224805p:plain

全部作成できたら、SettingsのInstall Appから、自分のワークスペースにインストールすればOK

結果

こんな感じになるはず (コマンドをechoするわけではないのでちょっとわかりづらいっすけどねー) f:id:T_Sumisaki:20171214225433p:plain

AWS Lambdaや他のバックエンドに命令を送ることが出来るようになりますよ。
やったね。