Beebotteを使ってLINEメッセージでLEDをON/OFFする(その2)LINEリッチメニューからGASの設定

(その1)からしばらく開いちゃいましたね。💦

今回はLINEリッチメニューという機能を使ってGASにメッセージを送りたいと思います。💪

1、LINEの設定

LINEは予めMessagingAPIの設定をしておいて下さい。参考は下記まで!

LINE for Businessから管理画面にログインします。

スクリーンショット 2021-01-30 21.03.50

ログインするとMessageingAPIで作成したAPIが出てきます。

スクリーンショット 2021-01-30 21.04.07

今回使用するAPIを選択します。自分は以前作ったLED On/OffというAPIを利用しました。

APIとGASの連結は下記を参考にしてください。

APIをクリックすると右に下記のようなメニューが出て来ます。

この中から『リッチメニュー』をクリックします。

スクリーンショット 2021-01-30 21.04.35

自分はすでに作成しちゃってありますが、作成をクリックします。

スクリーンショット 2021-01-30 21.05.17

ここの使い方はあえて説明しませんが、ボタンの数、ボタンのアイコン、ボタンが押されたときのアクションを設定できます。

スクリーンショット 2021-01-30 21.06.21

完成したLINEが下記です。アイコンをクリックすると設定したメッセージが送信されます。💯

画像6

2、GASの設定

前回、pythonを使って確認したBeebotteへのアクセス方法をGASに組み込んみます!

LINEからGASの接続は下記を参考にしてください。

今回GASに組み込んだソースコードです。

function doPost(e) {
 // WebHookで受信した応答用Token
 var replyToken = JSON.parse(e.postData.contents).events[0].replyToken;
 // ユーザーのメッセージを取得
 var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
 var resMessage = ".....";
 
 var pubData = "***";
 if(userMessage == "LED ON"){
           pubData = '{"DEVICE":"LED","ACTION":"ON"}';
           //pubData = 'LED ON';
           }
 if(userMessage == "LED OFF"){
           pubData = '{"DEVICE":"LED","ACTION":"OFF"}';
           //pubData = 'LED OFF';
           }
 if(pubData != "***"){
           resMessage = userMessage + "ですね!かしこまりました!";
           mqttPub(pubData);
           }
 
 // 応答メッセージ用のAPI URL
 var url = 'https://api.line.me/v2/bot/message/reply';
 // LINE developersのメッセージ送受信設定に記載のアクセストークン
 var ACCESS_TOKEN = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
 UrlFetchApp.fetch(url, {
   'headers': {
     'Content-Type': 'application/json; charset=UTF-8',
     'Authorization': 'Bearer ' + ACCESS_TOKEN,
   },
   'method': 'post',
   'payload': JSON.stringify({
     'replyToken': replyToken,
     'messages': [{
       'type': 'text',
       'text': resMessage,
     }],
   }),
   });
 return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
function mqttPub(ledMessage) {
 var headers = {
   "Content-Type": "application/json",
   "X-Auth-Token": "token_xxxxxxxxxxxxxx"
 };
 
 var json = '{"data":['+ ledMessage +']}';
 
 var options = {
   "headers": headers,
   "method": "post",
   "payload": json
 };
 UrlFetchApp.fetch("https://api.beebotte.com/v1/data/publish/lineChatBot/message", options);
}

LINEからもらったメッセージ『LED ON』『LED OFF』をMQTTデータとしてBeebotteへ送るので下記の部分でjsonデータに変更しています。

if(userMessage == "LED ON"){
           pubData = '{"DEVICE":"LED","ACTION":"ON"}';
           //pubData = 'LED ON';
           }
 if(userMessage == "LED OFF"){
           pubData = '{"DEVICE":"LED","ACTION":"OFF"}';
           //pubData = 'LED OFF';
           }

送信データはmttPubモジュールで下記のように"data"を付加して送っています。

なぜ、そのようなデータにしているかというと、HTTP POSTでBeebotteにPublishするとどんなデータが送られるか確認すると分かります。

var json = '{"data":['+ ledMessage +']}';

3、Publishデータの確認

MQTTXでGASからPublishされたデータを確認してみましょう!

スクリーンショット 2021-01-30 20.55.44

自分か送ったデータの他に『ispublic』『ts』というデータが付加されています。

ということで、RaspberryPiでプログラムを作成した時に取り出しやすいようにしておきます。

ここまでで、LINE → GAS → Beebotte →(パソコン)まで繋がりました。

これは以前flaskを使って作ったローカルな環境での接続でななく、グローバルな環境で接続されているので、外出先からもメッセージを送ることができます。💯

次回はBeebotteにPublishされたデータをRaspberryPiでSubscribeしてLEDを光らせます。

もうここまでくれば楽勝ですね。

では✋




この記事が気に入ったらサポートをしてみませんか?