今回は、Node.jsとAzure Functionsを利用してSlack botを作ってみようと思います。
Azure Functionsとは、サーバーレスで小規模なコードをクラウドで手軽に実行できる仕組みです。言語はC#・F#・Node.js・Python・PHPなどが利用できます。 コードが実行された時間に対してだけ料金を支払うので必要に応じてスケールもできます。
下記流れで進めていこうと思います。
① SlackでWebhook URLを取得 ② Node.jsでSlack bot実装 ③ Azure FunctionsでSlack bot実装
まずは、SlackにアクセスするためにWebhook URLを取得する必要があります。Slack botを作成したいSlack上で「Configure Apps」を選択。
次に、検索窓で「Incoming Webhooks」を検索。
検索できたら、「Add Configuration」を選択。
登録画面が表示されるので、適用するチャンネルを選択して「Add Incoming Webhooks integration」を選択。
すると、「Webhook URL」が表示されます。あとでコード内にパラメータで指定することも可能ですが、今回はここで事前にbot名やアイコンなども登録しておきます。
「Webhook URL」を取得できたので次に、Node.jsでSlack botを実装してみます。 まず、「request」モジュールが必要なので事前にインストールしておきます。
npm install request```
[![try_005_06](../img/migration/2017/01/try_005_06-1024x345.png)](../img/migration/2017/01/try_005_06.png)
<br>
そして、下記のようなスクリプトを記述します。
### script.js
```javascript
var request = require('request');
var options = {
url: 'https://hooks.slack.com/services/キー',
form: 'payload={"text": "テスト"}',
json :true
};
request.post(options, function(error, response, body){
if (!error && response.statusCode == 200) {
console.log('送信完了!');
} else {
console.log('error: '+ response.statusCode + body);
}
});
url:に取得した「Webhook URL」を記述 form:のtext部分に表示内容を記述
Node.jsで実装ができたのでそのコードを移植して、Azure Functionsで実装してみたいと思います。 ちなみにAzure Functionsは下記リンクからお試しでも利用できます。
今回は、本番のAzureで実装していきたいと思います。Azureで「Functions App」を検索して選択します。
詳細情報が表示されるので、アプリ名やリソースグループやプランなどを任意で選択して作成ボタンを押します。
デプロイされたら、「Functions App」が起動するのでシナリオと言語を選択して実行します。今回は、タイマーとJavaScript(Node.js)を選択しました。
実行すると、タイマートリガーが作成されるのでこれを1つのプロジェクトとして実装していきます。 統合 → スケジュールからスクリプトを実行するスケジュールを設定します。今回は、1分おきにスクリプトを実行する設定にしました。
次にAzure FunctionsでもNode.jsで記述する場合には、「request」モジュールが必要なので事前にインストールしておきます。 Functions Appの設定 → 開発者コンソールを開くを実行します。
するとコンソールが開くのでここで「request」モジュールをインストールします。
npm install request```
[![try_005_16](../img/migration/2017/01/try_005_16-1024x697.png)](../img/migration/2017/01/try_005_16.png)
<br>
そして、開発 → コードに下記のようなスクリプトを記述します。
### index.js
```javascript
module.exports = function (context, myTimer) {
if(myTimer.isPastDue)
{
context.log('Node.js is running late!');
}
var request = require('request');
var options = {
url: 'https://hooks.slack.com/services/キー',
form: 'payload={"text": "そろそろ寝る時間ですよ!!"}',
json :true
};
request.post(options, function(error, response, body){
if (!error && response.statusCode == 200) {
context.log('run!');
} else {
context.log('error: '+ response.statusCode + body);
}
});
context.done();
};
url:に取得した「Webhook URL」を記述 form:のtext部分に表示内容を記述
Slack上でbotが1分おきにコメントしたのが確認できました。
シンプルなbotであれば、手軽に実装できることが確認できました。SlackだけではなくLINEや他のチャットでも応用できそうです。bot作成にはGUIで操作できるサービスなどもありますが、Node.jsやAzure Functionsを利用することでよりカスタマイズ性の高いbotが作成できそうです。
Node.jsについて、他にも記事を書いています。よろしければぜひ。
tags - Node.js
- 参考文献 Azure Functions Node.js Azure Functions NodeJS 開発者向けリファレンス Azure Functions におけるタイマー トリガー node.jsでSlackのBotにポストする簡単なサンプル