SaitoSlackでスッキリすの結果を見る需要があったので、Slashコマンドを初めて使ってみました。Educateに登録してLambdaに処理させるようにしました。commandをLambdaランタイム上のPythonで実行する方法を記録します。はじめに今回作ったコードはGitHubに保存しているので、併せて参照してください。ちなみにスッキリすのスクレイピングの話はしません。Gatewayを通じてLambdaに処理が渡され、スッキリすのスクレイピングをし、その結果を返す構成です。commandを打った時にPOSTされるパラメータは以下のドキュメントに掲載されています。https://api.slack.com/slash-commands#app_command_handlingちなみに掲載時点ではパラメータ例は以下のようになっています。application/x-www-form-urlencodedで送られます。出力はtextあるいはjsonで構成します。こだわりがなければtextだけでいいですが、jsonでリッチなメッセージを送ることもできます。以下のドキュメントに簡単な説明が書いてあります。"in_channel"というkey-valueをつけたjsonにする必要があります。GatewayとLambdaの結合部分は統合プロキシと呼ばれています。Lambda)は以下のドキュメントに掲載されています。https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-create-api-as-simple-proxy掲載時点では以下のようになっています。(2019/11/10追記:出力フォーマットが入力フォーマットと同一になっていた誤りを修正。"..."}ちなみにこの出力は、Pythonのdictionary型でもよいことを確認しました。今回はPythonを用います。理由はよく使用しているスクレイピングライブラリのBeautifulSoupが使えたからです。Lambdaから呼び出された際に実行する関数はハンドラと呼ばれ、2引数関数で実装します。(特にファイル名や関数名は問わない、自由に設定できる。Gatewayの入力はevent(第1引数)に渡されます。第2引数のcontextはLambdaを実行している環境の情報が与えられます(今回は触れない)。詳しいことはドキュメントを参照してください。PythonのLambdaハンドラ:https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-programming-model-handler-types.html第2引数のLambdaコンテキスト:https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-context-object.htmlSlackのコマンドの引数はtextパラメータに保存されるので、以下のように抜き出します。parse_qs(event['body'])['text'][0].rstrip()ここでrstrip()を使っているのは、パラメータの末尾に改行が含まれているためです。Commandそれぞれのフォーマットに合わせる必要があるため、最終的に以下のような関数になります。}あとは好きな処理を加えて煮るなり焼くなり好きにします。コードをzip保存LambdaのコードはWebコンソール上のエディタで作成することもできますが、zipアップロードすることもできます。ここではpipでインストールしたモジュールも入れたいため、zipアップロードを使用します。zipを作る前に、ソースと同じディレクトリにモジュールを落とします。.続いて、ソースとモジュールを同時にzipで固めます。*これでpipモジュールを使っていても、全く同じコードで走らせることができます。デプロイAWSLambdaのコンソールを開き、「関数の作成」を選択。編集画面に移ったら、「関数コード」ペインにスクロールし、以下のように設定して保存。コードエントリタイプ:.zipファイルをアップロードランタイム:指定の言語ハンドラ:ファイル名.関数名(sukkirisu.pyのlambda_handler()ならsukkirisu.lambda_handler)続いて上の「Designer」ペインにスクロールし、「+トリガーを追加」を選びます。APIは「新規APIの作成」を選びます。セキュリティは「オープン」とします。Commandのリクエストがユーザ指定のリクエストに対応していないので、どうしてもセキュリティ設定をしたい場合はPOSTリクエスト内容を見るしか現状ないです。これで出来上がるエンドポイントURLを控えておきます。これでAWS側の設定は完了です。APIのapps(https://api.slack.com/apps)でアプリを作成します。Commands」を選びます。Command」を選び、新規コマンド作成画面へ。GatewayのURLを入れます。コマンドを叩いたら、レスポンスが返ってくるか確認します。コメントをキャンセルメールアドレスが公開されることはありません。WordPress%d人のブロガーが「いいね」をつけました。