看了幾位前輩的文章,使用Google Apps Script做了一個簡單的機器人(第一段程式碼)
但我現在想在其中再加入第二段程式碼
希望若使用者發送"查詢",則跑第一段程式碼的回覆
如果發送的是"我想填問券"則發送第二段程式碼的回覆
請問以上功能該如何寫呢?
我自己的嘗試是在第一段程式碼的IF判斷,TURE的地方加入第二段程式碼,但不知道哪裡有問題,失敗了xd
我的嘗試:
//第一段程式碼IF的部分
if(userMessage.indexOf("查詢")<=-1){
//自己加上一個if跟第二段程式碼
if(userMessage.indexOf("我想填問券")<=-1){
return;
}
第二段程式碼
}
第一段程式碼
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;
}
//----- 加這段,<=-1 表示找不到
if(userMessage.indexOf("查詢")<=-1){
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': ' 《PCR-1》戰隊戰目前存活Boss為: '+Nowboss,
}],
}),
});
}
第二段程式碼
var CHANNEL_ACCESS_TOKEN = 'iJWsCIoiy9ide49Vf / 7SlRLu8gjLhbLMkm + aHkMISFeT7CZJXn1Hy6NKSaDISMRSO4gj3GkDVvyS + WQdGiP04IKVPfLqXXG88Q4X9Rnony3v2z + Qf04u5S + l2VzQ7Mkz1pG4j0HXX6rpV3GYgV2bhQdB04t89 / 1O / w1cDnyilFU =';
var spreadSheetID = '1gBwNE6vlWTkNvsVAST91D_pdxJLLFjk-1e7WMJI4VA8';
var welcomeTitle = "您好,歡迎使用問卷段查,請依照下列問題填入相應回答";
var finishTitle = "記錄google表格完畢,感謝填寫";
var spreadSheet = SpreadsheetApp.openById(spreadSheetID);
var sheet = spreadSheet.getActiveSheet();
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
var sheetData = sheet.getSheetValues(1, 1, lastRow, lastColumn);
function doPost(e) {
var userData = JSON.parse(e.postData.contents);
console.log(userData);
// 取出 replayToken 和發送的訊息文字
var replyToken = userData.events[0].replyToken;
var clientMessage = userData.events[0].message.text;
var clientID = userData.events[0].source.userId;
var QandO = [sheetData[0], sheetData[1]]; //取得題目和選項
var replyData = getUserAnswer(clientID, clientMessage);
switch (replyData[1]) {
case 0:
var replyMessage = finishTitle;
break;
case 2:
var replyMessage = welcomeTitle + "\n\n" + QandO[0][replyData[1] - 1] + "\n\n" + QandO[1][replyData[1] - 1];
break;
default:
var replyMessage = QandO[0][replyData[1] - 1] + "\n\n" + QandO[1][replyData[1] - 1];
}
sendReplyMessage(CHANNEL_ACCESS_TOKEN, replyToken, replyMessage);
}
//傳送訊息給使用者
function sendReplyMessage(CHANNEL_ACCESS_TOKEN, replyToken, replyMessage) {
UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", {
"headers": {
"Content-Type": "application/json; charset=UTF-8",
"Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN,
},
"method": "post",
"payload": JSON.stringify({
"replyToken": replyToken,
"messages": [{
"type": "text",
"text":replyMessage,
}],
}),
});
}
//判斷使用者回答到第幾題
function getUserAnswer(clientID, clientMessage) {
var returnData = [];
for (var i = lastRow - 1; i >= 0; i--) {
if (sheetData[i][0] == clientID && sheetData[i][lastColumn - 1] == "") {
for (var j = 1; j <= lastColumn -1; j++) {
if (sheetData[i][j] == "") {break;}
}
sheet.getRange(i + 1, j + 1).setValue(clientMessage);
//如果使用者已經回答了最後一題,就把完成時間填上。不然就送出下一題給使用者
if (j + 2 == lastColumn) {
sheet.getRange(i + 1, lastColumn).setValue(Date());
returnData = [i + 1, 0];
}
else {
returnData = [i + 1, j + 2];
}
return returnData;
break;
}
}
//如果使用者還沒有回答過任何資料,就新增加一列在最後,把使用者ID輸入並開始送出題目
sheet.insertRowAfter(lastRow);
sheet.getRange(lastRow + 1, 1).setValue(clientID);
returnData = [lastRow + 1, 2];
return returnData;
}
中午時段腦袋空空沒看懂XD
原來意思是
如果沒有 '查詢' 這兩個字
則判斷
有沒有 '我想填問卷' 這五個字
沒有就return
如果沒被return 就會執行到第二段程式
那問題就在於
你第二段如果真的是你po的那樣
裡面還放上doPost 是不會被驅動的
Google Apps Script是使用post請求時
會進入doPost的function
你程式的進入點已經是doPost了
也就是你po的第一段程式碼
第二段你放在 我想填問卷那邊
裡面全部都是function
沒有去呼叫他 他是不會驅動的
應該寫成
function doPost(e)
{
//Line常數宣告
//.
//.
//.
//先定義一下message為使用者傳的內容
if(message.indexOf('查詢')<=-1) //如果關鍵字不是查詢
{
//進這裡代表內容不包含'查詢'這兩字
if(message.indexOf('我想填問卷')<=-1)
{
//進這裡代表內容不包含'我想填問卷'五個字
return;
}
//到這裡還能執行到 代表使用者想填問卷了
feedback();
return; //return 才能避免繼續執行後續動作
}
search();
}
function search() //定義你查詢想做的動作
{
//查詢起來
}
function feedback() //定義你問卷 想做的動作
{
//填問卷囉
}
看不懂可以私我
最近使用Line bot小有心得
希望可以藉由回答來驗收一下是否有哪裡不足XD