著者: Will Witman および Marsh Gardiner
Slack は、今日の最も注目されているスタートアップの1つであり、チームコミュニケーションのためのメッセージングアプリです。Slack が非常に人気がある理由の1つは、GitHub、Google Drive、Heroku、Jira など、多くの外部サービスがすぐに使える統合機能として提供されていることです。しかし、特に素晴らしい機能は、独自のカスタム機能を簡単に作成できることです。
今日は、swagger-node を使用して独自の Slack 統合を作成する手順を説明します。swagger-node を使用すると、Swagger と Node.js を使用して API プロジェクトをローカルで簡単に構築、検証、テストできます。その後、Node.js をサポートする任意のクラウドプラットフォームにプロジェクトをデプロイできます。このケースでは、株価を取得する API を作成し、Slack の「Incoming WebHook」統合を使用して、その株価を Slack チームの会話に直接投稿します。

この API のバックエンドリソースは /ticker
であり、cURL で呼び出すことができます。
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" https://:10010/ticker -d "text=AAPL
...すると、このように Slack できれいにフォーマットされた応答が返されます。

API はローカルで実行およびテストしますが、Apigee、AWS、Heroku など、Node.js をサポートする任意のクラウドプラットフォームにデプロイできます。
開始する前に
以下の手順を試す場合は、Slack チームのメンバーであるか、新しいチームを作成する必要があります。どちらの場合も、統合を作成する権限が必要です。
GitHub からサンプル swagger-node-slack アプリを入手する
非常に簡単にするために、動作するプロジェクトをダウンロードできます。
- GitHub から swagger-node-slack プロジェクトをダウンロードまたはクローンします。
- ルートプロジェクトディレクトリ
swagger-node-slack
に移動します。
- Node.js の依存関係を取得するためにこのコマンドを実行します:
npm install
ティッカーボット統合の構築
/ticker
API を Slack と統合する手順を説明します。驚くほど簡単です。
まず、内部を簡単に見てみましょう
swagger-node-slack
プロジェクトを簡単に見てみましょう。
(swagger-node
プロジェクト構造に慣れていない場合は、ドキュメントを確認し、必要に応じてクイックスタートチュートリアルを試すことができます。)
swagger-node-slack
API の仕組みを理解するための鍵は、次の2つのファイルを見ることです。
./swagger-node-slack/api/swagger/swagger.yaml
-- これは API の Swagger 定義です。サービスへのパス、操作、パラメータを定義していることに注意してください。組み込みの Swagger エディタを使用して、swagger project edit
で変更を加えることができます。
これらのエンティティは、次に説明する対応するコントローラーファイルに直接関連付けられています。
... paths:
/ticker:
# binds app logic to a route
x-swagger-router-controller: ticker
post:
description: look up a stock price
# used as the method name of the controller
operationId: ticker
consumes:
+ application/x-www-form-urlencoded
parameters:
+ $ref: "#/parameters/text"
+ $ref: "#/parameters/user_name"
+ $ref: "#/parameters/icon_url"
+ $ref: "#/parameters/icon_emoji"
+ $ref: "#/parameters/channel"
responses:
"200":
description: Success
# responses may fall through to errors
default:
description: Error
schema:
$ref: "#/definitions/ErrorResponse"
...
./swagger-node-slack/api/controllers/ticker.js
-- これはコントローラーファイルです。特定の API パス (またはルート) に対して実行されるロジックを実装します。swagger.yaml
ファイルでは、x-swagger-router-controller
属性がコントローラーファイルの名前 (.js
は不要) を指定します。operationId
は、/ticker
パスが要求されたときに呼び出す関数の名前を指定します。したがって、この API では、/ticker
API を呼び出すと、ticker.js
というコントローラーファイル内の ticker()
という関数が実行されます。これがコントローラーコードです。URL
変数の値は Slack から来ます。リクエストがサーバーに到着すると、Swagger 仕様によって自動的に分類され、swagger-node
プロジェクトを使用すると、受信リクエストの構造に簡単にアクセスできます。たとえば、「text」という定義されたパラメータの値にアクセスするには、req.swagger.params.text.value
を使用できます。コントローラーコードでは次のとおりです。var util = require('util');var request = require('request');
var googleStocks = require('google-stocks');
module.exports = {
ticker: ticker
};
//var URL = "https://hooks.slack.com/services/GET/FROM/SLACK";
function ticker(req, res) {
var symbol = req.swagger.params.text.value.toUpperCase();
googleStocks.get([symbol], function(error, data) {
console.log(symbol+": "+data[0].l);
var text = symbol+" is now $"+data[0].l+" per share.\nThanks for asking, @"+req.swagger.params.user_name.value+"!";
request.post({ url:URL, body:{"text":text}, json:true});
res.status(200).type('application/json').end();
});
}
Slack 統合を作成する
次に、Slack 側で統合を作成して設定する必要があります。
- Slack アカウントにログインします。
- Slack チームメニューから [統合の設定] を選択します。

- [DYI Integrations & Customizations] までスクロールし、[Incoming WebHooks] をクリックします。
- [チャンネルに投稿] で、API 応答を投稿するチャンネルを選択します。つまり、誰かがティッカーボットを呼び出すたびに、株価がこのチャンネルに投稿され、全員が見ることができます。
- [Incoming WebHooks 統合を追加] をクリックします。
- 必要に応じて、設定手順を確認してください。WebHook URL に最も興味があります。
- WebHook URL をコピーします。ヒント: これはコントローラーファイルに追加する必要がある URL です。次のようになります。
https://hooks.slack.com/services/X01234/BT1234/PSb1234abcdefghi";
- [カスタム名] フィールドで、デフォルト名を「Ticker-bot」に変更します。これは Slack への投稿に表示される名前です。
- [カスタムアイコン] UI を使用して、Slack 投稿に表示される絵文字を選択します。
コントローラーを編集する
最後に、その WebHook URL を ticker.js
コントローラーファイルに追加しましょう。
- テキストエディタでファイル
swagger-node-slack/api/controllers/ticker.js
を開きます。
- この変数を特定し、コメントアウトを解除します:
var URL = "https://hooks.slack.com/services/GET/SLACK URL";
- URL 変数の値を Webhook URL に置き換えます。(この URL ではなく、あなたの URL を使用してください!):
var URL = "https://hooks.slack.com/services/X01234/BT1234/PSb1234abcdefghi";
- ファイルを保存します。
試してみる!
swagger-node
で構築されたプロジェクトの優れた点の1つは、組み込みの HTTP サーバーでローカルに構築およびテストできることです。新しいティッカーボットを試してみましょう!
Incoming WebHooks 統合では、別のサービスから Slack チャンネルにメッセージを送信するという考えであることを忘れないでください。
swagger-node-slack
ディレクトリに移動します。
- 以前に実行していない場合は、このコマンドを実行して Node.js の依存関係を更新します:
npm install
- プロジェクトを開始します:
swagger project start
- 別のターミナルウィンドウで、次のように API を呼び出します...
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" https://:10010/ticker -d "text=AAPL&user_name=Will"
...すると、Slack セッションでこのようにきれいにフォーマットされた応答が返されます。
何が起こったのか?
swagger-node
バックエンド API を使用して Slack WebHooks 統合コマンドを簡単に作成できることを確認しました。API は株価サービスへのリクエストをプロキシし、Slack WebHook 統合を介して応答を Slack に投稿しました。Slack は応答を取得し、チャットウィンドウに表示しました。
次は何ですか?
もう1つのクールな Slack 統合は「スラッシュコマンド」です。Slack スラッシュコマンドを使用すると、Slack 会話に直接コマンドを入力することで関数を実行できます。
swagger-node
を使用したスラッシュコマンドの例をご覧になりたい場合は、swagger-node-slack プロジェクトにアクセスしてください。このブログチュートリアルの拡張版があります。スラッシュコマンドの例では、提供したテキストを逆にするコマンドを構築します。これには、トークン検証と API をクラウドにデプロイする手順が含まれています。
したがって、Slack で次のようなことができます...
/reverse The quick brown fox jumps over the lazy dog

...すると Slack は文字を逆にして返します。
