やってみたこと
LINE Messaging APIのプッシュメッセージを、Azure Functions(Node.js)を使ってやってみました。
LINE公式アカウン x Azure でプッシュメッセージを使った配信の情報があまり多くなかったのと(チャットボットを作ってる記事が多い)、LINE公式アカウントでのメッセージ配信を自動化したかったので、Azure Functions(Node.js)を使って試した内容をメモしておきます。用途的に、公式アカウントのすべての友だち(1対多)に配信したかったので、サンプルではブロードキャストメッセージを使用しています。
全体の流れ
- LINE公式アカウント作成(アクセストークンも取得) *事前準備(今回は割愛)
- Visual Studio CodeでAzure Functionsの開発環境の準備 *事前準備(今回は割愛)
- Azure Functionsのプロジェクト作成
- LINE SDK(Node.js)のインストール
- ソースコード
- ローカル環境での動作確認
- Azure Functionsへのデプロイ
- 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に投稿されるメッセージは、クエリーで渡せるようにしています。
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