花粉のピークは過ぎたかもしれないけど、enebularで花粉bot作ってみた

**2022年2月28日にenebularのクラウド実行環境の機能がリリースされました**

今までenebularで作成したフローをサービスとして動かすには、HerokuやAWS Lambdaの環境を自前で用意してデプロイする必要があったけど、その必要が無くなった感じです❗
実はAWSとかHerokuとか無料枠を超えてそのうち請求が来るんじゃないかとビクビクしながら使ってましたｗ
（勝手に請求されることは無いと思いますが）

イメージ的にはこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/9a92a03f-34ad-780b-e04f-5a13647b3c9a.png)

このクラウド実行環境では、定期的にフローを動作させるか、URLを発行してアクセスするか、2通りの方法でフローをサービスとして動作させることができます。例えば、定期的に情報をチェックして、更新されていたら通知するとか、他のサービスのWebhookを受け先に使うとか、Webページを作ることも可能です。

無料でも以下の条件で利用することができます。
* 1ヶ月のHTTPリクエスト回数が50000回まで
* 1ヶ月の合計実行時間が24時間まで

詳しくはオフィシャルのドキュメント「[実行環境とは](https://docs.enebular.com/ja/ExecutionEnvironment/Overview.html)」を確認して下さい。

ちょっとLINEbotを作ってみたかったので、LINEbotに対して、位置情報を共有するとその場所の花粉量を教えてくれるというものを作ってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/401b36c9-c893-743b-9b0a-9dc95cdf9f45.png)
次の流れで作ってみたので、手順を紹介します。

1. [クラウド実行環境の準備](#クラウド実行環境の準備)
1. [公式LINEとLINE Messaging APIの設定](#公式lineとline-messaging-apiの設定)
1. [フローの作成とデプロイ](#フローの準備とデプロイ)

# クラウド実行環境の準備
enebularのユーザー登録とプロジェクトの作成が済んでいれば、クラウド実行環境を作れます。（enebularのはじめ方は[はじめよう、enebular (1)](https://blog.enebular.com/enebular/start-enebular-video1/)を参照ください）

プロジェクトのダッシュボードのメニューに「実行環境」があるので、そこをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/846a0827-62c0-e18c-e8e3-88e2c868cbf2.png)
実行環境の画面右下の[+]ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/6fa11e93-9880-a166-1fd9-f148f79ee5eb.png)
実行環境作成のダイアログが表示されるので、名前を入力して「OK」をクリックします。実行環境作成には1～2分ほどかかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/190eb081-45a0-0e3b-f762-731754f554e4.png)
次にURLの生成を行います。
実行環境の設定を開き、「設定を編集する」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/b1deb451-125d-f918-9a38-92f159c6831d.png)
HTTPトリガーの項目で、スイッチをOFFからONにするとパス欄にパスを入力します。
このパスはenebular全体でユニークなものになります。すでに同じパスが存在する場合はエラーになりますので、その場合は異なるパスを入力して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/4413eb08-207d-fda7-5ead-fab1949d5318.png)
設定編集画面の右下に「保存」ボタンがあるので、それをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/58a399aa-4376-15c1-ce94-dbcb26c95e76.png)
以下の場所のコピーボタンをクリックするとURLがクリップボードにコピーされます。
このURLをLINE Messaging APIのWebhook URLに登録します。
（LINE Messaging APIの設定方法は次項参照）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/fdca7e66-a55f-4740-b826-8b5c65ebed6b.png)

# 公式LINEとLINE Messaging APIの設定
LINEbotを作るにはまず、LINE公式アカウントを準備する必要があります。
[LINE for Business](https://www.linebiz.com/)から「アカウントの開設（無料）」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/1b2f0171-838c-e1ab-3d2b-34c1bc41fa1f.png)

次のページで、「LINE公式アカウント開設（無料）」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/587948a0-13cf-dbad-08d9-d03f99cd25bd.png)

次のページで、「アカウントを作成」をクリックします。次に「メールアドレスで登録」をクリックします。
メールアドレスを入力し、「登録用のリンクを送信」をクリックするとメールが送られてくるので、メール内の「登録画面に進む」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/bf6b750e-1329-b2a6-ec53-a5e8274151fa.png)

登録画面では、名前とパスワードを入力し、「登録」をクリックします。確認画面が表示されるので、問題なければ次に進み、最後に「サービスに移動」をクリックして下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/ac7eccaf-cde2-3b62-7830-a90d05c6c764.png)

次の画面で作成するLINE公式アカウントの情報を入力します。個人的に使うものであれば業種は個人にすればOKです。入力後、「確認」をクリックし、問題なければ「完了」をクリックします。LINE公式アカウントの作成が完了したら、「LINE Official Account Managerへ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/0b61987d-c72c-e4e3-016f-81b3002d0810.png)

最初にLINE Official Account Managerに入ると公式アカウントをLINEの友達に登録するQRコードが表示されるので、このタイミングで自分のLINEに友達登録しておいたほうが便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/08daf649-0faa-354d-d71c-17595a3207f2.png)

次にLINE Messaging APIを設定を行うため、画面上部の「応答モード:bot」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/1a9f7f63-dab8-68d6-c153-36cb71267858.png)

応答は、enebularのクラウド実行環境上のアプリから行なうようにするため、「応答メッセージ」はOFF、「Webhook」はONにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/f4000617-ea7b-cc02-3f6f-ce9694680eb0.png)

次にMessaging APIを使用開始するため、左のメニューから「Messaging API」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/fee2eb83-c821-e65e-181b-e8d628ea8af5.png)

「Messaging APIを利用する」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/cb036dd0-317a-839a-a881-36a29de41ace.png)

開発者情報を入力する必要があるため、入力します。
* メールアドレスはLINE公式アカウントと同じものでもOKです。
* プロバイダーは個人であれば、個人等を入力して下さい。
* プライバシーポリシーや利用規約は入力しなくてもOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/241fd3f8-fc57-9533-c36c-fbf083d42996.png)

最後に問題なければ「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/5945c455-f060-58be-f79b-86ce98507099.png)

作成されたMessaging APIにアクセスするための「Channel secret」が表示されます。
フローで使用しますので、コピーして控えておきます。
ここで、Webhook URLに控えておいたenebularのクラウド実行環境のURLを入力し、保存をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/5e30af69-8dcf-ffae-ffb7-0424771652ea.png)

次にチャンネルアクセストークンを発行するため、「https://developers.line.biz/console/ 」にアクセスします。
作成したプロバイダーが表示されているので、それをクリックし、チャンネル設定から作成したチャンネルをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/5a5da3f2-9931-b028-fa78-9d1bc56d849d.png)

次の画面で、最初に作成した公式チャンネルが表示されるので、それをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/1a4987fc-bf3b-d387-da70-20f286f8acc7.png)

チャンネルの「Messaging API」タブを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/7eaac156-a176-7366-7deb-b599d18f0cc3.png)

チャンネルアクセストークン（長期）の「発行」ボタンをクリックし、トークンを発行します。
フローで使用しますので、コピーして控えておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/e7e591fb-f399-afff-59a1-609c0328a7ac.png)

これで公式LINEとLINE Messaging APIの設定完了です。
ここで控えた`Channel secret`と`チャンネルアクセストークン`はフローのLINEノードで使用します。

# フローの準備とデプロイ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/34019ec9-50eb-c1d6-93ea-7eff7945a74e.png)
作ったフローはこんな感じです。`ReplyMessage`と書いてあるノードがLINEで応答するノードです。
クラウド実行環境では、`LCDP in`ノードから始まります。そして、`LCDP out`ノードで終わる必要があります。
`LCDP out`ノードに到達しない場合は、毎回設定したタイムアウト時間で実行終了することになり、月の実行時間を使い切ってしまうことになります。
逆に`LCDP out`ノードに到達するとすぐにフローが終了してしまうので、時間のかかる処理を行う際は、完了を待つようにして下さい。
上記のフローでは、LINEの返信完了やエラーのキャッチで`LCDP out`ノードに行くようにしてあります。
（基本的には意識する必要ないですが、`LCDP in`ノードが出力する`msg.uhuru.lcdpNode`オブジェクトを`LCDP out`ノードに入れる必要があるので、その点も注意して下さい。）

作成したフローは、以下で公開しています。`LCDPノード`と花粉量を取得する`Pollenノード`も必要になるので、合わせてインポートして下さい。

* [フロー](https://enebular.com/discover/flow/e9691a26-5ff1-47bb-a4fd-f05cb2228b55)
* [LCDPノード](https://enebular.com/discover/privatenode/7861b7c9-35cd-4ad7-bb0a-840251568a8d)
* [Pollenノード](https://enebular.com/discover/privatenode/23e9960c-c34a-416a-bd89-4b52bca28e39)

すべてインポートしたらフローを開き、`ReplyMessage`ノードのプロパティを開きます。ここで、控えておいたLINE公式チャンネルの`Channel secret`と`チャンネルアクセストークン`を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/70aeb320-6840-a391-7dd3-d7887eb20ecc.png)

入力が終わったら、右上の「デプロイ」ボタンをクリックし、保存します。

次にクラウド実行環境に作成したフローをデプロイします。クラウド実行環境の「概要」を開き、「デプロイ」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/13dd77d6-5096-a181-186f-a25bfb81c4b2.png)

インポートしたフローを選択し、「デプロイ」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/ebda491b-0c7e-0ac6-c6ca-1a883cedde81.png)

以下の画面に移るので、「デプロイ中」から「デプロイ済み」になるまで待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/cf5fbd07-30b1-a862-f35f-e24401c2026e.png)

これで準備は完了です。

# 動作確認
実際にLINEで位置を送って確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/f9c73369-f634-3957-d895-35d87f8b7af0.png)


クラウド実行環境は初回起動に若干時間がかかるので、送ってから10秒ぐらい返ってくるのにかかりますが、ちゃんと花粉の量が返ってきました。
今回のフローでは、位置情報が送られてくるのが前提となっているので、文字を送るとエラーになります。
`LCDPinノード`と`ReplyMessageノード`の間に受け取るメッセージに応じたメッセージを返すこともできるので試してみて下さい。