Help us understand the problem. What is going on with this article?

KtorでSlackBot作ってみた

Slackで/chomadoを入力するとちょまどさんの写真を返すbotを作ってみました。

サンプルコードはこちらです。
https://github.com/hiroga-cc/chomadlin

また、サーバーも公開しているので、SlackBotだけ利用したい方は 3. Slackへのつなぎこみから読んでください。

Steps

  1. Ktorアプリの作成
  2. Herokuへのデプロイ
  3. Slackへのつなぎこみ

1. Ktorアプリの作成

公式ドキュメントに則ってセットアップします。

http://localhost:8080 で動くようになったら、次はロジックを作成します。

Ktorはレスポンスを返すメソッドにdata classを渡すといい感じでjsonに変換してくれるようなので(すみません、仕組みはよくわかってません...!)、Slackのレスポンスに準じてdata classを作成します。

SlackResponse.kt
# 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/

WorkSpace内でアプリを作成

アプリの機能としてSlash Commandを追加

作成したアプリをWorkspaceにインストール

疎通完了!

まとめ

Ktorを使って手早くSlackBot用のAPIを構成することができました。

そこそこ小さいフレームワークながらもJSONに対するサポートがあり、APIサーバーとしてはいい感じ(でも仕組みを早く理解したい)という印象です。

次はKtorの仕組みを細かく追いつつ、Botのロジックも修正していきます!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away