iT邦幫忙

0

LINEBOT輸入關鍵字判斷的寫法

  • 分享至 

  • xImage

各位大大好,最近想擴充以前做過的LINE BOT的功能,但是關鍵字的判斷式一直沒能夠成功判斷。
想問各位大大如果想判斷LINEBOT使用者那端輸入的字句是否為"查詢熱量"時的寫法
寫成
if((userData.events[0].message.text) == "查詢熱量")
{想做的事}
這樣有錯嗎?

//程式碼開始
var CHANNEL_ACCESS_TOKEN = "";
var ss = SpreadsheetApp.openByUrl("");//功能選單
var sheet2 = ss.getSheetByName("工作表1");
var lastRow2 = sheet2.getLastRow();
var lastColumn2 = sheet2.getLastColumn();
var sheet2Data = sheet2.getSheetValues(lastRow2, lastColumn2, 1, 1);


function doPost(e) {
  var userData = JSON.parse(e.postData.contents);
  var replyMessage = [];
  var replyContent;
  var replyToken = userData.events[0].replyToken;
  
  if((userData.events[0].message.text) == "查詢熱量")
  {replyMessage.push({type:"text", text:"請輸入要查詢的食物~"});
  sendReplyMessage(CHANNEL_ACCESS_TOKEN, replyToken, replyMessage);
  sheet2.appendRow([replyToken,"查詢熱量"]);                                                                                          
  }
  
   else if((userData.events[0].message.text) == "紀錄熱量")
   {replyMessage.push({type:"text", text:"請輸入要紀錄的食物~"});
  sendReplyMessage(CHANNEL_ACCESS_TOKEN, replyToken, replyMessage);
  sheet2.appendRow([replyToken,"紀錄熱量"]);                                                                                          
  }
  
}

//回送 Line Bot 訊息給使用者
function sendReplyMessage(CHANNEL_ACCESS_TOKEN, replyToken, replyMessage) {
  var url = "https://api.line.me/v2/bot/message/reply";
  UrlFetchApp.fetch(url, {
    "headers": {
      "Content-Type": "application/json; charset=UTF-8",
      "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN,
    },
    "method": "post",
    "payload": JSON.stringify({
      "replyToken": replyToken,
      "messages": replyMessage,
    }),
  });
}
//程式碼結束

看更多先前的討論...收起先前的討論...
單看判斷來說是沒有錯的 如果單看判斷熱量這個

另外建議你詢問時 CHANNEL_ACCESS_TOKEN 不要公開給其他人看見 有可能有人會拿來做壞事 建議你到時替換一組新的
好的十分感謝您,但是真的不知道我哪裡出錯,LINEBOT一直不會回覆我訊息
你可以檢查一下你的log 如果有錯誤的話 他會顯示是哪裡出錯
另外我建議你檢查 userData.events[0].message.text 這個變數的內容
show log出來看一下 有可能你抓錯了變數 以致於無法輸入
若晚上有空實做一下 幫你測試看看
請問GAP的LOG要怎麼看呢?如果不是按執行的他是不是不會顯示?
抱歉 一忙晚回覆了 稍微有點忙@@
稍微幫你測試了一下
他要整個執行完成才會紀錄log
如果中途有語法錯誤才會紀錄
另外
我分開了測試你第一個欄位
var sheet2Data = sheet2.getSheetValues(lastRow2, lastColumn2, 1, 1);
這行是有錯誤的
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
最佳解答

抱歉

請原諒有點自作主張修改了程式碼

你的問題僅僅出在這一行
var sheet2Data = sheet2.getSheetValues(lastRow2, lastColumn2, 1, 1);
失敗後就卡在這裡 沒有執行下去 去掉就會正常了

那你原本的問題 判斷是沒有錯的

你也可以使用switch去達成目的 也可能會比較好閱讀一點
以下是測試完稍微自己修改的部分 回覆跟紀錄開關分開 可斟酌是否使用

function doPost(e) {
    let CHANNEL_ACCESS_TOKEN = "";
    let ss = SpreadsheetApp.openByUrl("");
    let sheet = ss.getSheetByName("工作表1");

    let userData = JSON.parse(e.postData.contents);
    let userMessage = JSON.parse(userData.events[0].message.text);
    let replyToken = userData.events[0].replyToken;
    let replyMessage = [];
    let recordCheck = true; // 是否使用sheet紀錄
    let replyCheck = true; // 是否回覆訊息

    switch (userMessage){
        case '查詢熱量':
            replyMessage.push({type: "text", text: "請輸入要查詢的食物~"});
            break;
        case '紀錄熱量':
            replyMessage.push({type: "text", text: "請輸入要紀錄的食物~"});
            break;
        default:
            recordCheck = false; // 非需要被記錄的內容
            replyCheck = false; // 非需要回覆的內容
            break;
    }
    if(recordCheck){ // 如果紀錄開關為開
        sheet.appendRow([replyToken, userMessage]);
    }
    if(replyCheck){ // 如果應該被回覆
        sendReplyMessage(CHANNEL_ACCESS_TOKEN, replyToken, replyMessage);
    }
}

十分感謝,一直檢查後面找不到問題

我要發表回答

立即登入回答