LINE Messaging API(プッシュメッセージ)をAzure Functionsで試してみた

# やってみたこと
LINE Messaging APIのプッシュメッセージを、Azure Functions(Node.js)を使ってやってみました。
LINE公式アカウン x Azure でプッシュメッセージを使った配信の情報があまり多くなかったのと（チャットボットを作ってる記事が多い）、LINE公式アカウントでのメッセージ配信を自動化したかったので、Azure Functions(Node.js)を使って試した内容をメモしておきます。用途的に、公式アカウントのすべての友だち（1対多）に配信したかったので、サンプルではブロードキャストメッセージを使用しています。

# 全体の流れ
1. LINE公式アカウント作成(アクセストークンも取得)　＊事前準備(今回は割愛)
2. Visual Studio CodeでAzure Functionsの開発環境の準備　＊事前準備(今回は割愛)
3. Azure Functionsのプロジェクト作成
4. LINE SDK(Node.js)のインストール
5. ソースコード
6. ローカル環境での動作確認
7. Azure Functionsへのデプロイ
8. Azure環境での動作確認

＊LINE公式アカウントの開設やVisualStudioCodeの環境構築などは割愛して、最後に参考にしたページを記載しておきます。


# 詳細
###Azure FunctionsのProjectを作成
今回は、Node.js環境を使用するので、サンプルは言語はJavaScriptを選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475457/c931cf16-0071-4aea-5c95-661fbf4164b7.png)

###とりあえず、サンプルで動作確認
とりあえず、サンプルのままでStart Debugging[F5]で実行してみます。ローカル環境で動作が確認出来たら一安心です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475457/c3ee2b9f-f35b-80bb-750a-fefced816b80.png)


###LINE SDKのインストール
[LINE公式ページ](https://github.com/line/line-bot-sdk-nodejs)を参考にSDKをインストールします。

```
$ npm install @line/bot-sdk --save
```

### ソースコード

「channalAccessToken」はLINE Messaging APIのアクセストークンを記載します。Channalに投稿されるメッセージは、クエリーで渡せるようにしています。

```Javascript:index.js
const line = require('@line/bot-sdk');

const client = new line.Client({
    channelAccessToken: '<channel access token>'
});

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    if (req.query.message || (req.body && req.body.name)) {

        message = {
            type: 'text',
            text: req.query.message
        };
    
        client.broadcast(message)
        .then(() => {
            // ...
        })
        .catch((err) => {
            // error handling
        });

        context.res = {
            // status: 200, /* Defaults to 200 */
            body: "Hello " + (req.query.message || req.body.name)
        };
    }
    else {
        context.res = {
            status: 400,
            body: "Please pass a name on the query string or in the request body"
        };
    }
};
```

### ローカル環境でのテスト
[Start Debugging(F5)]を実行すると、URLがターミナルに表示されますが、クエリーで[message]を渡してやると、LINEのchannelにメッセージが届くことを確認できると思います。

```
http://localhost:7071/api/HttpTriggerLineMessagingApiTest?message=test
```

### Azure Functionsへのデプロイ
詳細は割愛しますが、Azure Functionsへデプロイすると、完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475457/caed86a0-9d6e-57c4-5a8f-f60887cb2d32.png)

デプロイ先のサブスクリプションを右クリックするとAzure FunctionsのURLが取得できるので、ブラウザでアクセスして、クエリーに[message]を入れることで、LINEのChannelにプッシュメッセージを送ることが出来るようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475457/22b99ce4-ab67-d60b-bd9d-9ca78e1f477e.png)

# やってみて
LINE × Azureの組み合わせだと、チャットボットの例は割と見かけたのですが、一方向のプッシュメッセージの例があまりなかったので、試しにやってみました。LINEの公式アカウントアプリとかでも配信は可能ですが、自動化しておきたい配信などがあれば、サーバーレスなAzure Functionsと連携すると便利な時もあるかと思います。

# 参考
・Visual Studio Codeを使ってAzureで関数を作成する
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-create-first-function-vs-code?pivots=programming-language-javascript

・LINE SDKまわり
https://github.com/line/line-bot-sdk-nodejs