Как правильно сформировать данные полученные из функции doPost(e)?

Рейтинг: 0Ответов: 1Опубликовано: 13.04.2023

Есть следующий код, который собирает нужные данные в переменные:

function doPost(e) {
  var contents = JSON.parse(e.postData.contents);
  var chat_id = contents.message.chat.id;
  var text = contents.message.text;
  var reply = contents.message.reply_to_message.message_id;
  var mesid = contents.message.message_id;
  var mesdat = contents.message.date
  var name = contents.message.chat.first_name;

  ss.getSheetByName('list1').getRange(1, 1).setValue(JSON.stringify(contents, null, 5));
  ss.getSheetByName('list2').appendRow([chat_id, text, name, mesid, mesdat, reply]);
  
}

Последняя строка записывает полученные данные в гугл-таблицу. Этот код работает хорошо, если это был ответ на сообщение. Данные записываются в таблицу как и ожидалось. Я получаю ID сообщения, на которое ответили. Проблема в том, что если приходит просто сообщение ( а не Reply), то в таблицу ничего не записывается, и я не могу отследить на какое сообщение ответили, в таблице его просто нет. Как можно построить сбор данных JSON так, чтоб в таблицу записывались как простые сообщения, так и ответы на другие сообщения? Ниже приведу пример отправленных данных JSON при просто сообщении и при ответе на какое-либо сообщение.

"{
     ""update_id"": 659375923,
     ""message"": {
          ""message_id"": 94,
          ""from"": {
               ""id"": 477013339,
               ""is_bot"": false,
               ""first_name"": ""a"",
               ""last_name"": ""a"",
               ""username"": ""aa"",
               ""language_code"": ""ru""
          },
          ""chat"": {
               ""id"": 477013339,
               ""first_name"": ""a"",
               ""last_name"": ""a"",
               ""username"": ""aa"",
               ""type"": ""private""
          },
          ""date"": 1681410647,
          ""text"": ""111111""
     }
}"

А это если ответили на сообщение

"{
     ""update_id"": 659375924,
     ""message"": {
          ""message_id"": 95,
          ""from"": {
               ""id"": 477013339,
               ""is_bot"": false,
               ""first_name"": ""a"",
               ""last_name"": ""a"",
               ""username"": ""aa"",
               ""language_code"": ""ru""
          },
          ""chat"": {
               ""id"": 477013339,
               ""first_name"": ""a"",
               ""last_name"": ""a"",
               ""username"": ""aa"",
               ""type"": ""private""
          },
          ""date"": 1681410799,
          ""reply_to_message"": {
               ""message_id"": 83,
               ""from"": {
                    ""id"": 477013339,
                    ""is_bot"": false,
                    ""first_name"": ""a"",
                    ""last_name"": ""a"",
                    ""username"": ""aa"",
                    ""language_code"": ""ru""
               },
               ""chat"": {
                    ""id"": 477813339,
                    ""first_name"": ""a"",
                    ""last_name"": ""a"",
                    ""username"": ""aa"",
                    ""type"": ""private""
               },
               ""date"": 1681410208,
               ""text"": ""Privet""
          },
          ""text"": ""Ответное сообщ.""
     }
}"

Ответы

▲ 0Принят

Для того, что бы проверить наличие ключа в JSON можно воспользоваться оператором необязательной цепочки вызовов ?.

var reply = contents.message.reply_to_message?.message_id; 

Если contents.message.reply_to_message не существует, вернется значение undefined

Вы можете задать "альтернативное значение", если ключа нет оператором ||

var reply = contents.message.reply_to_message?.message_id || -1; 

В примере выше, если contents.message.reply_to_message не существует, будет возвращено значение -1