この記事は、Azure Functions に HTTPリクエストを送ると、LINEアプリに通知が来る(LINE Notify を利用)という仕組みを軽く試したものです。
Azure Functions周りの開発や設定は、Azure のポータル上で行いました。
手順の概要
今回の手順は、おおまかには以下のとおりです。
- LINE Notify のトークンを取得
- Azure のポータル上で Azure Functions を使えるようにする
- Azure Functions でのコーディング前の準備
- axios をインストール
- 環境変数を設定
- Azure Functions でのコーディング
実際に進めていく
LINE Notify のトークンを取得
LINEアプリへの通知を簡単化するため、LINE Notify を利用します。
ググったりすると情報が出てくると思いますので、手順の詳細は割愛しますが、おおまかには以下のような流れです。
まず、LINE Notify のページにログインをして、画面右上のメニューから「マイページ」へ移動します。
そこで、「アクセストークンの発行(開発者向け)」という部分があるので、「トークンを発行する」と書かれたボタンを押します。
その後のトークンの発行画面では、トークンの名前(何か自分が分かりやすいもの)と、LINEアプリ上で通知を送る先となるトークルームを指定します。
上記の設定を行って、「発行する」ボタンを押すと、以下のトークンが表示される画面が出てきます。
以下の画面で表示されるトークンは、再表示ができないため、ここで必ずコピーしてメモなどしておいてください。
Azure Functions 関連
サンプルを動かす
まずは、以下の公式ドキュメントの手順の「関数をテストする」の部分まで進めてください。
●Azure Portal で初めての関数を作成する | Microsoft Docs
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-create-function-app-portal
サンプルは、以下のような内容になるかと思います。
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
const name = (req.query.name || (req.body && req.body.name));
const responseMessage = name
? "Hello, " + name + ". This HTTP triggered function executed successfully."
: "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";
context.res = {
// status: 200, /* Defaults to 200 */
body: responseMessage
};
}
プログラムを書いた後、ブラウザなどから HTTPリクエストを送り、意図した通りのレスポンスが返ってくれば OK です。
axios を使えるようにする
この後、LINE Notify を使った通知の処理で、axios を利用していきます。
Azure Functions で axios を使えるようにするために、パッケージのインストールを行います。
今回は、ポータル上でそれを進めます。
ポータルのメニューで「開発ツール」 > 「コンソール」と進み、以下のような画面を開きます。
あとは以下の記事にもあるように、上記の画像の右側の部分で npm init
や npm install
を行っていき、axios をインストールします。
●Azure Functions に npm install で Node モジュールを追加する|まくろぐ
https://maku.blog/p/9t7hs4e/
環境変数を追加する
上の手順で発行した LINE Notify のトークンを、プログラムの中に直書きするのではなく、環境変数として設定して利用する形にしていきます。
そのために、ポータル上で環境変数の追加を行います。
ポータルのメニューで「設定」 > 「構成」と進み、「アプリケーション設定」の中の「新しいアプリケーション設定」を押します。
そうすると、以下の画面が出てくるので、名前と値をそれぞれ設定しましょう。
自分は、以下のようにしました。
名前: LINE_NOTIFY_TOKEN
値: 【LINE Notify のトークン】
プログラムに手を加える
あとは、LINE Notify と連携する処理を加えたプログラムを作成します。
上で試したサンプルを元に、axios で POST する処理を加えたりしました。
LINE Notify のトークンは、上で環境変数に追加していたので、そこから読み込みます。
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
const name = (req.query.name || (req.body && req.body.name));
const responseMessage = name
? "Hello, " + name + ". This HTTP triggered function executed successfully."
: "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";
context.res = {
body: responseMessage
};
const axios = require('axios');
const querystring = require('querystring');
const messageLineNotify = name
?`Hello! ${name} from Azure`
:`Hello! from Azure`;
const res = await axios({
method: 'post',
url: 'https://notify-api.line.me/api/notify',
headers: {
'Authorization': 'Bearer ' + process.env["LINE_NOTIFY_TOKEN"],
'Content-Type': 'application/x-www-form-urlencoded',
},
data: querystring.stringify({
message: messageLineNotify,
}),
});
context.log(res.data)
}
あとは、動作確認を行うだけです。
動作確認
以下のように、HTTPリクエストをトリガーにして、LINE Notify を使った LINEアプリへの通知ができました。
元の仕組みの中で、URL の末尾に「クエリ文字列の値 ?name=【文字列】 」があった場合、その文字列がレスポンスに使われるという部分がありました。
LINEアプリへの通知の処理でも、この文字列の有無によって、通知の文章を少し変えるようなことをやっています。
おわりに
環境変数を設定したり、axios による POST の処理を使うような形で、Azure Functions と LINE Notify の組み合わせを試すことができました。
今回、シンプルな内容で試しましたが、さらに別のアプリやサービスとの連携なども加えたりできればと思います。