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を選択してください。

とりあえず、サンプルで動作確認

とりあえず、サンプルのままでStart Debugging[F5]で実行してみます。ローカル環境で動作が確認出来たら一安心です。

LINE SDKのインストール

LINE公式ページを参考にSDKをインストールします。

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

ソースコード

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

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へデプロイすると、完了です。

デプロイ先のサブスクリプションを右クリックするとAzure FunctionsのURLが取得できるので、ブラウザでアクセスして、クエリーに[message]を入れることで、LINEのChannelにプッシュメッセージを送ることが出来るようになります。

やってみて

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