slackpad-server は REST API と Chat Protocol (WebSocket) を提供します。
REST API としては以下のエンドポイントが存在します。
GET /channels
GET /channels/:channel_id/messages
POST /channels/:channel_id/messages
POST /images
GET /images/:id
チャンネル一覧を取得。
パラメタ名 | 例 | |
---|---|---|
page | 1 | オプション |
per_page | 50 | オプション |
$ curl -s http://localhost:3000/channels | jq
[
{
"id": 1,
"name": "hogelog-channel",
"created_at": "2018-07-12 13:42:18 UTC",
"updated_at": "2018-07-12 13:42:18 UTC"
},
{
"id": 2,
"name": "general",
"created_at": "2018-07-12 13:45:17 UTC",
"updated_at": "2018-07-12 13:45:17 UTC"
}
]
チャンネルの過去メッセージを受け取る。
パラメタ名 | 例 | |
---|---|---|
channel_id | 1 | 必須 |
page | 1 | オプション |
per_page | 50 | オプション |
$ curl -s 'http://localhost:3000/channels/1/messages?page=2' | jq
[
{
"id": 2,
"nickname": "robot",
"message": "こんにちわこんにちは!",
"created_at": "2018-07-12 13:42:20 UTC",
},
{
"id": 1,
"nickname": "hogelog",
"message": "Hello World!",
"created_at": "2018-07-12 13:42:18 UTC",
}
]
チャンネルにメッセージを投稿する。
パラメタ名 | 例 | |
---|---|---|
channel_id | 1 | 必須 |
nickname | rrreeeyyy | 必須 |
message | hello! | 必須 |
$ curl -s -X POST 'http://localhost:3000/channels/1/messages -d nickname=rrreeeyyy -d message="hello!"
{
"id": 2,
"channel_id": 1,
"nickname": "rrreeeyyy",
"message": "hello!",
"created_at": "2018-07-27 10:54:11 UTC",
"updated_at": "2018-07-27 10:54:11 UTC"
}
画像を投稿。
パラメタ名 | 例 | |
---|---|---|
filename | ok.gif | 必須 |
data | R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAQQAOw== | 必須 |
$ curl -s -X POST http://localhost:3000/images -d filename=ok.gif -d data=R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAQQAOw==
{
"id": 1,
"filename": "ok.gif",
"created_at": "2018-07-12 13:42:18 UTC",
"updated_at": "2018-07-12 13:42:18 UTC"
}
画像を取得。
パラメタ名 | 例 | |
---|---|---|
id | 1 | 必須 |
$ curl -v http://localhost:3000/images/1
...
< HTTP/1.1 200 OK
< Content-Type: image/gif
< Content-Disposition: inline
< Content-Transfer-Encoding: binary
< Cache-Control: private
< ETag: W/"8d7483433b479a6f6ecf7257fc636d85"
< X-Request-Id: 58d81b47-c7be-4fb6-80fe-10b0fa0982ad
< X-Runtime: 0.002065
< Transfer-Encoding: chunked
<
* Connection #0 to host localhost left intact
GIF89a,;
slackpad-server アプリケーションは /ws のパスで WebSocket ベースのチャット機能を提供する。 /ws に接続したクライアントには各クライアントが送った各種コマンドに対するリプライが送られてくる。
チャットコマンドとしては以下のコマンドが存在します。
user [<nickname>]
join [<channel>]
part [<channel>]
message [<channel>, <message>]
list [<channel>]
<command> <params>
:<prefix> <command> <params>
user [<nickname>]
接続クライアントのユーザ名で認識させる。 実行直後に general チャンネルにジョインされる。 このコマンドを実行前に各種コマンドを送った場合の動作は未定義。
:<nickname> user <nickname>
:<nickname> join general
> user ["hogelog"]
< :hogelog user ["hogelog"]
< :hogelog join ["general"]
join [<channel>]
チャンネルにジョインする。 ジョインしたチャンネルでの message リプライが送られてくるようになる。
:<nickname> join [<channel>]
<channel>
にジョインしている全クライアントに送信される> join ["じぇねらる"]
< :hogelog join ["じぇねらる"]
part [<channel>]
チャンネルを抜ける。 抜けたチャンネルからは message リプライが送られてこなくなる。
:<nickname> part [<channel>]
<channel>
にジョインしている全クライアントに送信される> part ["じぇねらる"]
< :hogelog part ["じぇねらる"]
message [<channel>, <message>]
チャンネルにメッセージを送信する。
:<nickname> message [<channel>, <message>]
<channel>
にジョインしている全クライアントに送信される> message ["general", "はろーはろー"]
< :hogelog message ["general","はろーはろー"]
< :sunao message ["general","こんにちは。"]
list [<channel>]
チャンネルにジョインしているニックネーム一覧を取得します。
:slackpad list [<channel>, [<nickname1>, <nickname2>, ...]]
> list ["general"]
< :slackpad list ["general", ["hogelog", "sunao", "superman"]]