この記事は、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 の組み合わせを試すことができました。
今回、シンプルな内容で試しましたが、さらに別のアプリやサービスとの連携なども加えたりできればと思います。
↧