dayjournal memo

Total 975 articles!!

Try #005 – Node.jsとAzure FunctionsでSlack botを作ってみた

Yasunori Kirimoto's avatar

try_005_99


今回は、Node.jsAzure 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」を選択。 try_005_01


次に、検索窓で「Incoming Webhooks」を検索。 try_005_02


検索できたら、「Add Configuration」を選択。 try_005_03


登録画面が表示されるので、適用するチャンネルを選択して「Add Incoming Webhooks integration」を選択。 try_005_04


すると、「Webhook URL」が表示されます。あとでコード内にパラメータで指定することも可能ですが、今回はここで事前にbot名やアイコンなども登録しておきます。 try_005_05


「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部分に表示内容を記述


スクリプトを実行してみます。 try_005_07


Slack上でbotがコメントしたのが確認できました。 try_005_08


Node.jsで実装ができたのでそのコードを移植して、Azure Functionsで実装してみたいと思います。 ちなみにAzure Functionsは下記リンクからお試しでも利用できます。 try_005_09


今回は、本番のAzureで実装していきたいと思います。Azureで「Functions App」を検索して選択します。 try_005_10


選択されたら、作成ボタンを押します。 try_005_11


詳細情報が表示されるので、アプリ名やリソースグループやプランなどを任意で選択して作成ボタンを押します。 try_005_12


デプロイされたら、「Functions App」が起動するのでシナリオと言語を選択して実行します。今回は、タイマーとJavaScript(Node.js)を選択しました。 try_005_13


実行すると、タイマートリガーが作成されるのでこれを1つのプロジェクトとして実装していきます。 統合 → スケジュールからスクリプトを実行するスケジュールを設定します。今回は、1分おきにスクリプトを実行する設定にしました。 try_005_14


次にAzure FunctionsでもNode.jsで記述する場合には、「request」モジュールが必要なので事前にインストールしておきます。 Functions Appの設定 → 開発者コンソールを開くを実行します。 try_005_15


するとコンソールが開くのでここで「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部分に表示内容を記述


スクリプトを保存して実行してみます。 try_005_17


Slack上でbotが1分おきにコメントしたのが確認できました。 try_005_18


シンプルなbotであれば、手軽に実装できることが確認できました。SlackだけではなくLINEや他のチャットでも応用できそうです。bot作成にはGUIで操作できるサービスなどもありますが、Node.jsやAzure Functionsを利用することでよりカスタマイズ性の高いbotが作成できそうです。


Node.jsについて、他にも記事を書いています。よろしければぜひ。
tags - Node.js



book

Q&A