Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

GAS スプレッドシートの情報をLINEbotで返したい

GAS上でスプレッドシートの情報をLINEで返したい

 やりたいことは下記の通りです

20200316214556.gif

 koduekai.PNG

 GIFの通りLINEbotで語句を打ち込むとA列から検索し、
 B列語句が返信させたいと思っています。

 シートの例でいくと「5」と打ち込むと「445」と返信が来るようにしたいです。

GASのコード

//★★LINE Messaging APIのチャネルアクセストークン★★
var LINE_ACCESS_TOKEN = "*******";

//★★スプレッドシートID★★
var ss = SpreadsheetApp.openById("*******");

//★★シート名★★
var sh = ss.getSheetByName("wordList");


//LINE Messaging APIからPOST送信を受けたときに起動する
// e はJSON文字列
function doPost(e){
  if (typeof e === "undefined"){
    //動作を終了する
    return;
  } else {
    //JSON文字列をパース(解析)し、変数jsonに格納する
    var json = JSON.parse(e.postData.contents);

    //変数jsonを関数replyFromSheetに渡し、replyFromSheetを実行する
    replyFromSheet(json)
  }
}

//返信用の関数replyFromSheet
// data には変数jsonが代入される
function replyFromSheet(data) {
  //返信先URL
  var replyUrl = "https://api.line.me/v2/bot/message/reply";

  //シートの最終行を取得する
  var lastRow = sh.getLastRow();

  //シートの全受信語句と返信語句を二次元配列で取得する
  var wordList = sh.getRange(1,1,lastRow,2).getValues();

  //受信したメッセージ情報を変数に格納する
  var reply_token = data.events[0].replyToken; //reply token
  var text = data.events[0].message.text; //ユーザーが送信した語句

  //返信語句を格納するための空配列を宣言する
  var replyTextList = [];

  //LINEで受信した語句がシートの受信語句と同じ場合、返信語句をreplyTextにpushする
  for(var i = 1; i < wordList.length; i++) {
    if(wordList[i][0] == text) {
     replyTextList.push(wordList[i][1]);
    }
  }
//LINEで受信した語句がシートの受信語句と一致しない場合、関数を終了する
  if(replyTextList.length < 1) {
    return;

  //replyTextListのLengthが5より大きい場合、messageLengthを5にする
  //※※一度に最大5つの吹き出ししか返信できないためです※※
  } else if(replyTextList.length > 5) {
    var messageLength = 5;
  } else {
    var messageLength = replyTextList.length;
  }

  //"messages"に渡す配列を格納するための空配列を宣言する
  //[{"type": "text", "text": "返信語句その1"},{"type": "text", "text": "返信語句その2"}....]
  var messageArray = [];

  //replyTextListに格納されている返信語句を最大5つ、messageArrayにpushする
  for(var j = 0; j < messageLength; j++) {
    messageArray.push({"type": "text", "text": replyTextList[j]});
  }

  var headers = {
    "Content-Type": "application/json; charset=UTF-8",
    "Authorization": "Bearer " + LINE_ACCESS_TOKEN,
  };

  var postData = {
    "replyToken": reply_token,
    "messages": messageArray
  };

  var options = {
    "method" : "post",
    "headers" : headers,
    "payload" : JSON.stringify(postData)
  };

  //LINE Messaging APIにデータを送信する
  UrlFetchApp.fetch(replyUrl, options);
}

詰まっているところ

 上記コードの***を入力した後
 デプロイ 新しいデプロイ ウェブアプリ
 自分のメアド+アクセスユーザーは全員 デプロイ URLコピー とGASで操作
 その語 LINEWebhook設定箇所に入力 成功 まではいけますが

 LINE上で何も返ってきません。。。既読はつきます。

 何度かwebhookの検証のオン・オフもしてみましたがダメでした。

試してみてできなかったもの

 もっとシンプルな下記のサイトも試してみましたが、
 既読はつくものの、返信はありません。

GAS関連でうまく動いたもの

 どなたか教えてください。よろしくお願いいたします。

0

1Answer

こちらのQAを参考にして、解決できました!!

var json = JSON.parse(e.postData.contents);

var json = JSON.parse(e.postData.getDataAsString());
と変更

0Like

Your answer might help someone💌