claudia.jsでslack custom commandsを作る
というわけで、まずはslackを使いこなせないと始まりません。
手始めに、custom commandsを使ってみます。
こちらが公式ページ(英語です)
api.slack.com
その前に、ここまでできてる前提で話しますね。
kei0425tan.hatenablog.com
slackの設定
というわけで、AWS lambdaで、web APIは使いこなせる??ようになっているはずです。
なので、slackでの設定を行います。
まずは、slackのチーム名の隣の下向き▼を押して、メニューを出して、「Apps & integrations」をクリックします。
面倒だったら、以下をクリックで!
slack.com
外部連携は基本的にいつもこのページからできるはずです。
その後、右上の「Build」をクリックし、「Something just for my team」をクリックします。
すると、以下の4つが表示されます。
- Incoming WebHooks
→ slackにメッセージを表示する。
- Bots
→ いわゆるBots
- Slash Commands
→ /で始まるコマンド
- Outgoing WebHooks
→ slackの表示されたメッセージを外部に渡す。
今回は、Slash Commandsを作成するので、そちらを選択します。
そうすると、コマンド名を入力する画面になるので、好きなコマンド名を入力します。
すると、まずPOSTデータのサンプルが表示されます。
token=RIKqnGNDN6r2yx01mOkIGgwe team_id=T0001 team_domain=example channel_id=C2147483705 channel_name=test user_id=U2147483697 user_name=Steve command=/weather text=94070 response_url=https://hooks.slack.com/commands/1234/5678
それぞれの意味は以下です。
- token → slackの認識用のトークン。受け取ったらまずここをチェックして違ったら弾くこと。
- team_id → チームID。チームドメインは変更可能だが、team_idはずっとユニークで変更できないはず。
- team_domain → チームドメイン。urlの最初。
- channel_id → チャンネルID。チャンネル名は変更可能だが、こちらはユニーク。
- channel_name → チャンネル名。
- user_id → ユーザID。こちらもユニーク
- user_name → ユーザ名
- command → 入力されたコマンド(/つき)
- text → 入力されたコマンドの引数。日本語も入ります。入力通りに受け取れます。
- response_url → 処理に時間が掛かるときに利用するレスポンス用URL
次に、上から順に以下を設定していきます。
- URL → 前回作成したURL
- Method → POSTのまま
- Token → そのまま。メモっておきましょう。
- Customize Name → 表示するコマンド名。
- Customize Icon → アイコンの変更ができます。
- Preview Message → 上のCustomize NameとCustomize Iconを適用したプレビュー
- Autocomplete help text → こちらを設定しておくと補完が効いてヘルプが見えます。
- Escape channels, users, and links → ここを設定しておくと、POSTデータのtextが拡張されて、一緒にユーザIDなどが来ます。
- Descriptive Label → なんだろう??知ってる人教えてください。
というわけで、大事なのはURLだけですね。
ここでは仮に、
コマンド名は/test
claudiaのpathも
https://yfw8aqrorg.execute-api.ap-northeast-1.amazonaws.com/latest/test
にしましょう。
それで、最後までいったら「Save Integration」をクリックします。
画面は遷移しませんが保存されます。
AWSの設定
とりあえず、前回のスクリプトに以下を追加。トークンは上のトークン入れてくださいね。
api.post('/test', function (request) { if (request.post.token != 'トークン') { return {message:'token error'}; } return { "response_type": "in_channel", "text": "It's 80 degrees right now.", "attachments": [ { "text":"Partly cloudy today and tomorrow" } ] }; });
- response_type → "in_channnel"を指定するとチャンネル全員が見えます。"ephemeral"を指定するとコマンドを発行した人のみに見えます。デフォルトでは、"ephemeral"を指定したのと同じです。
- text → 表示するメッセージです。
- attachments → 追加情報。引用みたくみえます。
さあ、ここまでできれば、あとは自由自在にコマンドを作れますね。
レッツコーディング!
いきなりステーキ ワイルドハンバーグ
今日は2/28
いつもいきなりステーキで29日にチャージをしています。
肉の日で5倍になるからです。
通常1万円チャージすると300円分ポイントが付くのですが、肉の日に限ってはその5倍で1500円分。
ランチ1食以上浮いてしまいます。
で、今月は28日までしかないのでチャージできないなと思っていたのですが、いきなりステーキではなぜか今日5倍になっていたので行ってきました!
ワイルドハンバーグ300g ライス抜き ブロッコリー変更 黒烏龍茶(肉マイレージおまけ)
昔は「ライス大盛り無料ですがいかがいたしますか?」と聞かれると、はい、お願いしますって答えていたのですが、ロカボダイエットを始めてからは常にライス抜きにしています。
いきなりステーキではロカボ対応ということで、ライス抜きだと100円引き。さらに通常はコーンが付け合せなのですが、より糖質の少ないブロッコリーに無料で変更できます。
税込972円なり。
ちょっとランチにしてはお値段はりますが、300gは結構満足します。
肉マイレージは16625gまでたまりました。
あと、3375gで念願のプラチナカードなんだけどな。。。
ikinaristeak.com
ランチであと11回ちょっと。
プラチナ目指してがんばろう!
AWSで何をするのか
いろいろやりたいことがたくさんあるのですが、こんなことをやりたいなと思っています。
slackと連携していろんなbotを作成する。
スマホしか持っていない友達がブログを作っているのですが、よくお店の地図のタグ送ってと頼まれます。
PCで検索して共有を選んでコピペするだけなのですが、時間が掛かって申し訳ないなぁと思ったりします。
それをbotでさくっと出せたら便利かな。
あと、メールでしか来ないお知らせを、slackに転送したりとかもしたいですね。
これは、サクラのクラウドで実現してたのですが、サクラの仮想マシンは高いので削除してしまいました。
利用するだろうAPI
かつや やみつきスパイスのチキンカツ定食
今日はかつやの割引券が2月末までだったのでかつやに行ってきました。
期間限定メニュー「やみつきスパイスのチキンカツ定食」を頼んでみました。
6味スパイスとは以下になります。
- フライドガーリック
- 唐辛子
- 魚粉
- フライドエシャロット
- クミン
- コリアンダー
いつものようにご飯抜き。
かつやの場合は「やみつきスパイスのチキンカツ定食単品で。あとトン汁小!」と頼むとスムーズです。
よくあるとんかつ屋さんと違って、かつやはキャベツが食べ放題じゃありません。
なので、キャベツを食べる配分には気を付けましょう。
今回、キャベツ先に食べきってしまったので、最後ちょっと辛かったです。
あと、結構フライドガーリックがきついかも??
今でもお口が臭い感じしちゃいます。
なので、お昼に食べるのはちょっと危険かも??
税抜き690円(税込745円)
ご飯なし+100円引きなので税込558円でした!
ちなみに、かつやの単品は税込216円引き。
それに、トン汁小が税込129円なので、ご飯分は税込87円ですね。
claudia.js使ってAWS lambdaはじめました
いろいろ調べてみたら、claudia.jsを利用すると簡単にAWS lambdaを利用できるようです。
とはいうものの、ほんとにはじめの一歩になるのでかなり苦労しました。
例によって、実行環境はcloud9を利用します。
cloud9でのワークスペースの作成
テンプレートにpython用を選択して作成すること。
最初はなんでもいいやということで、blankを選択したのですが、AWS用CLIコマンドをインストールするのに、pipを利用します。
その際に、Python.hが必要になるのですが、blankには入っていませんでした。
それで、ググってみると、sudo apt-get install python2.7-devをすればいいよとあるのですが、なぜかそんなパッケージは見つからないと出てきます。
なので、最初からpython用のテンプレートを選択することによりすんなりと先に進めます。
nodeの確認
python用のテンプレートを利用しても、nvmやnodeはインストールされています。
ところが、バージョンを確認すると、v4.7.3がインストールされています。
AWS lambdaを調べてみると、4.3.2(と0.10.36)しかサポートされていないため、念のため、バージョンを合わせておきます。
$ nvm install 4.3.2 $ nvm alias default 4.3.2
AWS CLIの設定
AWSのページで先にユーザを作成し、アクセスキーとシークレットキーを生成しておきます。
管理ポリシーしは以下の3つを指定しておいてください。
- AWSLambdaFullAccess
- IAMFullAccess
- AmazonAPIGatewayAdministrator
https://aws.amazon.com/jp/developers/access-keys/aws.amazon.com
aws configureで対話形式で設定できます。
$ aws configure AWS Access Key ID [None]: 「アクセスキー」 AWS Secret Access Key [None]: 「シークレットキー」 Default region name [None]: ap-northeast-1(東京) Default output format [None]: json
上記操作により、以下の2つのファイルが作成されます。
~/.aws/credentials
[default] aws_access_key_id =「アクセスキー」 aws_secret_access_key = 「シークレットキー」
~/.aws/config
[default] output = json region = ap-northeast-1
claudia.jsのインストール
ここからは英語ですがチュートリアルがあります。
しかし、残念ながら私は英語苦手なのでこちらを参考にしました。
dev.classmethod.jp
npmでグローバルインストール
$ npm install claudia -g
プロジェクトの作成
$ mkdir web-api-sample $ cd web-api-sample $ npm init
とりあえず、全部エンターでちゃかちゃかやっちゃいましょう。
プロジェクトの dependency に Claudia API Builder を追加
$ npm install claudia-api-builder --save
web-api-sample/app.jsを以下の内容で作成。
var ApiBuilder = require('claudia-api-builder'); var api = new ApiBuilder(); module.exports = api; api.get('/hello', function () { 'use strict'; return 'hello claudia.js'; });
web-api-sample/package.jsonに"files": "*.js"を追加
{ "name": "web-api-sample", "version": "1.0.0", "description": "", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "claudia-api-builder": "^2.4.0" } }
AWSにデプロイ
$ claudia create --name web-api-sample --region ap-northeast-1 --api-module app
結構時間かかります。
何かが間違えてるとエラーになります。
うまく行くと以下のようになります。
saving configuration { "lambda": { "role": "web-api-sample-executor", "name": "web-api-sample", "region": "ap-northeast-1" }, "api": { "id": "yfw8aqrorg", "module": "app", "url": "https://yfw8aqrorg.execute-api.ap-northeast-1.amazonaws.com/latest" } }
そしたら、urlに/hello(app.jsに追加したやつ)を付けてアクセスしてみましょう!
https://yfw8aqrorg.execute-api.ap-northeast-1.amazonaws.com/latest/hello
"hello claudia.js"
と表示されれば完成です!
お疲れ様でした!
ここで作成した関数は、AWSのlambdaのところで参照できます。
最初アクセスしたときは、スタートアップ画面しかでてこなかったので、適当な関数を一度登録したところ、表示されるようになりました。
右上にリージョン選択があるので、「東京」を選んでくださいね。