【问题标题】:JSON "text" content is preventing script from runningJSON“文本”内容阻止脚本运行
【发布时间】:2020-09-24 18:24:15
【问题描述】:

正在为电报机器人和 googlesheet 之间的通信编写应用脚本。这是用 googleapp 脚本编写的。在 Guru 的一些帮助下,我能够完成大部分工作,包括 APi 连接、webhook 和其他相关功能。在 JSON 上提取“文本”不知何故不起作用。我调试并发现var userInput = contents.result[1].date 导致我的脚本停止。

  1. 电报用户添加机器人
  2. pass 中的用户密钥(例如 applegate)
  3. 脚本将在 googlesheet 上搜索匹配项
  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")
    }
  }

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    鉴于您的 JSON 对象 date 的嵌套结构是 message 的子对象

    所以要访问date 的第二个resultyourJSON 你应该定义

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

    至于匹配输入,问题是

    1. var idIndex = idArr.indexOf(userInput) 行中 - 您可能的意思是 var idIndex = valueRange.indexOf(userInput) - indexOf() 无法成功应用于二维数组。

    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")
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2014-07-18
      • 2023-03-19
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多