iT邦幫忙

1

如何使用Google Apps Script製作line bot關鍵字回應

小弟沒有程式背景,看了幾位前輩的文章,使用Google Apps Script做了一個簡單的機器人

目前能做到如果LINE使用者,他即回應我設定的字串,但遇到的問題是不管使用者發送任何訊息,LINE BOT都會動作

想請教是否能做到只有使用者發送我設定好的關鍵字,Line bot才進行動作呢?

有試著使用switch case,但變成連動作都沒動作

以下為小弟的程式碼,還望有前輩能夠指點一二,感謝!!

function doPost(e) {
//與Line連結
var CHANNEL_ACCESS_TOKEN = 'iJWsCIoiy9ide49Vf / 7SlRLu8gjLhbLMkm + aHkMISFeT7CZJXn1Hy6NKSaDISMRSO4gj3GkDVvyS + WQdGiP04IKVPfLqXXG88Q4X9Rnony3v2z + Qf04u5S + l2VzQ7Mkz1pG4j0HXX6rpV3GYgV2bhQdB04t89 / 1O / w1cDnyilFU =';
var msg= JSON.parse(e.postData.contents);
console.log(msg);

//讀取儲存格數值
var url = 'https://docs.google.com/spreadsheets/d/1HvHYaVFuJijOJzbCfTLRaRVM8krwn2ooxtCIlYDKeY8/edit#gid=1602240186';
var name = '「2月傷害簽到」'
var SpreadSheet = SpreadsheetApp.openByUrl(url);
var SheetName = SpreadSheet.getSheetByName(name);
var Nowboss = SheetName.getSheetValues(2,2,1,1);

// 取出 replayToken 和發送的訊息文字
var replyToken = msg.events[0].replyToken;
var userMessage = msg.events[0].message.text;

//當line使用者發送訊息,即傳送指定訊息
if (typeof replyToken === 'undefined') {
return;
}
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': [{
'type': 'text',
'text': Nowboss,
}],
}),
});

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
Han
iT邦研究生 1 級 ‧ 2019-03-12 09:48:29
最佳解答

那就必須在前面過濾非指令式的訊息
UrlFetchApp.fetch 這段在發訊息
在這之前過濾就可以了

//加在發訊息前
if(usermessage.indexOf('關鍵字')==-1)
{
    return;
}

如果要寫多個指令就

switch(usermessage)
{
    //相似關鍵字 做一樣動作
    case '點名':
    case '點起來':
        doSomething();  //可以自己寫function看要做什麼動作
        replyText = '點名成功';
        break;
    case '晚安':
        doSomethingElse();  
        replyText = '晚安';
        break;
    default:
        doWhateverYouWant();
        replyText = '測試';
        break;
}
`UrlFetchApp.fetch` //replyText統一在這段發送

可以在最後在發送replyText 也可以在case裡面發送
看個人要怎寫囉

第一次回答,各位大老鞭小力點QQ

wadenba03 iT邦新手 5 級 ‧ 2019-03-12 11:18:06 檢舉

成功了,您的解釋非常詳細且淺顯易懂,非常感謝您 !!

1
海綿寶寶
iT邦大神 1 級 ‧ 2019-03-12 08:58:59

試試看

//當line使用者發送訊息,即傳送指定訊息
if (typeof replyToken === 'undefined') {
return;
}
var url = 'https://api.line.me/v2/bot/message/reply';

改成

//當line使用者發送訊息,即傳送指定訊息
if (typeof replyToken === 'undefined') {
return;
}
//----- 加這段,<=-1 表示找不到
if(msg.indexOf("設定好的關鍵字")<=-1){
return;
}
//----- 加這段
var url = 'https://api.line.me/v2/bot/message/reply';

另外我想請教您
是看了那一篇文章做出來 LINE BOT 的?
因為
看到卡米狗的做法有點複雜
想看看其他做法是否比較簡單些?
/images/emoticon/emoticon41.gif

wadenba03 iT邦新手 5 級 ‧ 2019-03-12 09:47:56 檢舉

感謝!! 我來試試看!!

我主要是參照這篇製作的,給您參考
https://www.oxxostudio.tw/articles/201804/line-bot-apps-script.html

wadenba03 iT邦新手 5 級 ‧ 2019-03-12 11:17:19 檢舉

成功了,非常感謝!!

謝謝指教

我要發表回答

立即登入回答