JSON"文本"内容阻止脚本运行



我正在编写一个应用程序脚本,用于telegram bot和谷歌表单之间的通信。这是用谷歌应用程序脚本编写的。在这里的导师的一些帮助下,我能够让大部分功能正常工作,包括APi连接、webhook和其他相关功能。提取";文本";在JSON上不起作用。我调试后发现var userInput = contents.result[1].date导致我的脚本停止。

  1. Telegram用户添加Bot
  2. 通行证中的用户密钥(例如applegate(
  3. 脚本将在谷歌主页上搜索匹配项
  4. sendMessage将通过电报向用户返回成功或失败消息

从我的手机到机器人的电报消息的实际JSON内容如图所示;欢迎":

var yourJSON = {
ok: true,
result: [
{
update_id: 11111111,
message: {
message_id: 412,
from: {
id: 22222222,
is_bot: false,
first_name: "don",
username: "king",
language_code: "en",
},
chat: {
id: 333333333,
first_name: "Don",
username: "king",
type: "private",
},
date: 1600865179,
text: "Test",
},
},
{
update_id: 111111111,
message: {
message_id: 413,
from: {
id: 1111111111,
is_bot: false,
first_name: "Don",
username: "king",
language_code: "en",
},
chat: {
id: 44444444,
first_name: "don",
username: "king",
type: "private",
},
date: 1600865186,
text: "applegate",
},
},
],
};

以下是当我弹出//var userInput = contents.result[1].date;时一直停止的脚本

function doPost(e){
var contents = JSON.parse(e.postData.contents);
var id = contents.message.from.id;
var username = contents.message.chat.username;
//var userInput = contents.result[1].date;
sendMessage(id, username +", " + "Please wait");
var ssId = "XXXXXXX";
var sheet = SpreadsheetApp.openById(ssId).getSheetByName("Sheet1");
var idArr = sheet.getRange("A2:A").getValues();
idArr = idArr.map(row => row[0]);
var idIndex = idArr.indexOf(userInput);
if(idIndex < 0){
sendMessage(id, "User not found")
}else{
let rowNumber = idIndex + 2;
let colNumber = 4; //col D
var dateNow = new Date;
sheet.getRange(rowNumber, colNumber).setValue(dateNow);
sendMessage(id, "You have successfully registered");

}
}

有人能给我指正确的方向吗?

编辑:我发现,出于某种原因,var userInput=contents.message.text可以将文本输出。但是输入和返回成功或失败的匹配不起作用。这是代码。

function doPost(e){
var contents = JSON.parse(e.postData.contents);
var id = contents.message.from.id;
var username = contents.message.chat.username;
var userInput = contents.message.text;
sendMessage(id, username + userInput +", " + "Please wait");
var ssId = "XXXX";
var sheet = SpreadsheetApp.openById(ssId).getSheetByName("Sheet1");
var idArr = sheet.getRange("A2:A").getValues();
var valueRange = idArr.map(row => row[0]);
var idIndex = idArr.indexOf(userInput);
if(userInput == valueRange){
sendMessage(id, "You have successfully inpro")
let rowNumber = idIndex + 2;
let colNumber = 4; //col D
var dateNow = new Date;
sheet.getRange(rowNumber, colNumber).setValue(dateNow);

}else{

sendMessage(id, "User not found")
}
}

给定JSON对象的嵌套结构,datemessage的子对象

因此,要访问yourJSON的第二个resultdate,您应该定义

var userInput = yourJSON.result[1].message.date;

至于匹配输入,问题是

  1. var idIndex = idArr.indexOf(userInput)-行中,您可能是指var idIndex = valueRange.indexOf(userInput)-indexOf()无法成功应用于2D阵列。

  2. 在线路中if(userInput == valueRange)

在这里,您试图将单个字符串与包含字符串数组的值范围进行比较。。。

将函数的末尾重写如下:

var idArr = sheet.getRange("A2:A").getValues();
var valueRange = idArr.map(row => row[0]);
var idIndex = valueRange.indexOf(userInput);
if(idIndex > - 1){
sendMessage(id, "You have successfully inpro");
let rowNumber = idIndex + 2;
let colNumber = 4; //col D
var dateNow = new Date;
sheet.getRange(rowNumber, colNumber).setValue(dateNow);    
}else{        
sendMessage(id, "User not found")
}