見出し画像

LINEからAmbientにデータを送る

こんにちは、かーでぃです。3連休最終日ですが、酸欠であたまがぼーっとしながら生きてます。
昨日から鼻水がジュルジュルで、今日はジュルジュルはしてないのですが、鼻が詰まっており、酸素摂取量が少ない状態……つらい。。。
花粉症?寒暖差アレルギー?
よくわかりませんが、ボーっとしながら書いてるので、誤字脱字が過ごそうな気がする(笑)

さて、10月14日(土)に下記イベントに登壇します。

こちらは初登壇!すっごい初心者ネタで恐縮なのですが、せっかくの機会なので楽しんでLTしてこようとおもっています。
さて、この中でLINEで送ったメッセージを、応援メッセージとして画面に表示する仕組みの説明をします。
実際に画面に表示するところは、デスクトップアプリを組んでいるので、また機会として…ここでは、LINEから送ったメッセージを蓄積するところまでをやりたいと思います。

じゃ、ゼロから……と言いたいところですが、検索すれば情報がいっぱいヒットしますし、ChatGPTに聞いても答えてくれるので、自分が参考にした動画だけご紹介。

こちらの動画で、LINEとGAS(Google App Script)の連携については、ご理解頂けるんじゃないかと思います。
※「仲条高幸 Tech School for Change Makers」は、私もチャネル登録してますので、良かったら是非ー

さて次は、LINEで送られたメッセージをAmbientに送る方法です。
Ambientとは…

AmbientはIoTデータの可視化サービスです。

マイコンなどから送られるセンサデータを受信し、蓄積し、可視化(グラフ化)します。

https://ambidata.io/

主目的としては、IoTデータの格納と可視化になるのですが、LINEから送られたデータもIoTデータとみてしまえば、蓄積できちゃうわけですね。

さて、そのAmbientの使い方ですが、JavaScriptでの使い方がこちらに記載があります。GASとJavaScriptは、友達みたいなものなので大丈夫ですw

ここまでくれば…この流れもわかるんじゃないかと思います。

ちゃんとコードも載せておきますね。

doPostが、LINEから投稿があった時に起動するAPIになります。
LINEから送られてきたメッセージを取得し、それをambientに送信しています。最後に、LINE側にちゃんと登録されたかどうかのメッセージを返信しているだけの簡単なコードです。

// LINE developersのメッセージ送受信設定に記載のアクセストークン
const LINE_URL  = "https://api.line.me/v2/bot/message/reply";
const LINE_TOKEN  = "YOUR_LINE_TOKEN";

const AMBIENT_CHANNEL_ID = "YOUR_AMBIENT_CHANNEL_ID";
const AMBIENT_WRITE_KEY = "YOUR_AMBIENT_CHANNEL_WRITE_KEY";
const AMBIENT_API = "http://ambidata.io/api/v2/channels/YOUR_AMBIENT_CHANNEL_ID/data";

function doPost(e) {
  
  // 応答用Tokenを取得
  const replyToken = JSON.parse(e.postData.contents).events[0].replyToken;
  // メッセージを取得
  const userMessage = JSON.parse(e.postData.contents).events[0].message.text;
  
  // メッセージを改行ごとに分割
  const all_msg = userMessage.split("\n");
  
  //ambientSend("テストです")

  // 返答用メッセージを追加
  const messages = [
    {
      'type': 'text',
      'text': "データを入力しました。",
    }
  ]
  
  ambientSend(all_msg[0].substr(0,10));

  // lineで返答する
  UrlFetchApp.fetch(LINE_URL, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': `Bearer ${LINE_TOKEN}`,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': messages,
    }),
  });
  
  ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}


function ambientSend(cmnt_text) {

  const data = {
    "writeKey": AMBIENT_WRITE_KEY,
    "cmnt": cmnt_text
  }
  const options = {
    "method" : "post",
    "contentType": "application/json",
    "payload": JSON.stringify(data)
  }
  UrlFetchApp.fetch(AMBIENT_API, options)
}

簡単ではありますが、これでLINE→Ambientへのデータ送信をGASを経由して実施できました。

今回は、Ambientにデータを蓄積することを目的としていましたが、LINEへのデータ送受信ができているので、例えば間にChatGPTを入れて、ChatGPTとの会話を楽しむチャットボットだってこれで出来ちゃいますよね。


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