Slackで/chomado
を入力するとちょまどさんの写真を返すbotを作ってみました。
サンプルコードはこちらです。
https://github.com/hiroga-cc/chomadlin
また、サーバーも公開しているので、SlackBotだけ利用したい方は 3. Slackへのつなぎこみから読んでください。
Steps
- Ktorアプリの作成
- Herokuへのデプロイ
- Slackへのつなぎこみ
1. Ktorアプリの作成
公式ドキュメントに則ってセットアップします。
http://localhost:8080 で動くようになったら、次はロジックを作成します。
Ktorはレスポンスを返すメソッドにdata classを渡すといい感じでjsonに変換してくれるようなので(すみません、仕組みはよくわかってません...!)、Slackのレスポンスに準じてdata classを作成します。
# SlackResponse.kt
package cc.hiroga
data class SlackResponse(
val response_type: String,
val text: String,
val attachments: Array<SlackResponseAttachement>
)
# SlackResponseAttatchment.kt
package cc.hiroga
data class SlackResponseAttachement(
val image_url: String
)
データクラスのオブジェクトの生成 & レスポンス
post("/chomado") {
val TEST_CHOMADO_PIC = "https://pbs.twimg.com/profile_images/1086536800791740417/uvkmvoBk_400x400.jpg"
val attachment = SlackResponseAttachement(TEST_CHOMADO_PIC)
val response = SlackResponse(
"in_channel",
"(*゚▽゚* っ)З. (*゚▽゚* っ)З ",
arrayOf(attachment)
)
call.respond(response)
}
結果
# POST https://chomadlin.herokuapp.com/chomado
{
"response_type": "in_channel",
"text": "(*゚▽゚* っ)З. (*゚▽゚* っ)З \u202c",
"attachments": [
{
"image_url": "https://pbs.twimg.com/profile_images/1086536800791740417/uvkmvoBk_400x400.jpg"
}
]
}
2. Herokuへのデプロイ
公式ドキュメントのガイド通り、app.json
(Herokuが使用するコンテナのイメージなどを指定する)とProcfile
(イメージの中で起動されるべきコマンドを指定する)を設定します。
(system.propertiesは設定しなくてもなんかいけました...)
3. Slackへのつなぎこみ
もしSlackでちょまどさんbotを使いたいだけの人がいれば、以下のURLで手順を進めてみてください!
https://chomadlin.herokuapp.com/
まとめ
Ktorを使って手早くSlackBot用のAPIを構成することができました。
そこそこ小さいフレームワークながらもJSONに対するサポートがあり、APIサーバーとしてはいい感じ(でも仕組みを早く理解したい)という印象です。
次はKtorの仕組みを細かく追いつつ、Botのロジックも修正していきます!