Callback в Телеграм боте на Google apps script

Бот отправляет меню но не отвечает на клики по нему. Подскажите, пожалуйста, что я делаю не так? В инете искал искал. Так и не могу разобраться никак

https://docs.google.com/spreadsheets/d/1XPbjxWH1sL-rLF-rGPOI08KvNNCBKTt5DPev2i_Vums/edit?usp=sharing


Ответы (1 шт):

Автор решения: contributorpw

У вас блоки условий идут не в том порядке.

  • Обновил ваш код
  • Добавил перехват ошибок и лог в Таблицу (не забудьте выдать права)
  • поменял местами блоки условий. Блок с message для /start стал вложенным

Скорее всего, вам просто нужно заменить код файла doPost.gs на следующий:

/*
ниже – пример сообщения, которое отправит бот нам как только ему что-то напишут
это – объект, в коде мы его парсим, достаём имя отправителя, никнейм, само сообщение и записываем в наш лог

 {"updateid":000000000,
   "message":{"messageid":00,
     "from":{"id":000000000,"isbot":false,"firstname":"<your name>","lastname":"<your surname>","languagecode":"en"},
     "chat":{"id":000000000,"firstname":"<your name>","lastname":"<your name>","type":"private"},
     "date":0000000000,
     "text":"<текст сообщения>",
     "entities":{"offset":0,"length":11,"type":"bot_command"} // в случае если это команда
   }
 }

*/

function doPost(e) {
  try {
    var contents = JSON.parse(e.postData.contents),
      contents_s = JSON.stringify(contents);

    SpreadsheetApp.openById(ssID).appendRow([new Date(), 'doPost', contents_s]);
    if (contents.message) {

      const msg = contents.message,
        chatType = msg.chat.type,
        messageText = (msg.text || '') + (msg.caption || ''), //или само сообщение или подпись к файлу / фото
        user = msg.from.hasOwnProperty('username') ? msg.from.username : '',
        userId = msg.from.id,
        userFirstName = msg.from.first_name,
        userLastName = msg.from.last_name,
        chatId = msg.chat.id,
        src_msg = msg.hasOwnProperty('reply_to_message') ? msg.reply_to_message.text : '',
        src_sender = msg.hasOwnProperty('reply_to_message') ? msg.reply_to_message.from.username : '';

      if (messageText == "/start") {
        var title = "Заголовок/вопрос меню 1 уровня";
        var inlineKeyboard = [
          [{ "text": "Опция1", 'callback_data': 'option1' }],
          [{ "text": "Опция2", 'callback_data': 'option2' }]
        ];
        sendMessageInlineMenu(chatId, title, inlineKeyboard);
        return;
      }

      const checkPm = chatType == 'private',
        chat = checkPm ? '' : msg.chat.username,   //если отправлено не ЛС, то добавляем username чата
        chatTitle = checkPm ? '' : msg.chat.title; //и название чата

      const checkFile = msg.hasOwnProperty('document'),
        fileId = checkFile ? msg.document.file_id : msg.hasOwnProperty('photo') ? msg.photo[1].file_id : '',
        fileMime = checkFile ? msg.document.mime_type : '',
        fileName = checkFile ? msg.document.file_name : '';

      var answer = "нет данных";

      //==========================================================================================================================


      sendMessage(chatId, JSON.stringify(e));
      return;
    }

    if (contents.callback_query) {
      var callback_query_id = contents.callback_query.id;
      var callback_userId = contents.callback_query.from.id;
      var callback_data = contents.callback_query.data;

      answerCallbackQuery(callback_query_id, "Ура работает!"); // по факту нихера не работает)))

      sendMessage(contents_s);
      if (callback_data == 'option1') {
        sendMessage(callback_userId, "Ответ на пункт меню 1 уровня");

      } else if (callback_data == 'option2') {
        var title = "Заголовок/вопрос меню 2 уровня";
        var inlineKeyboard = [
          [{ 'text': 'Подопция1', 'callback_data': 'suboption1' }],
          [{ 'text': 'Подопция2', 'callback_data': 'suboption2' }]
        ];
        sendMessageInlineMenu(chatId, title, inlineKeyboard);

      } else if (callback_data == 'suboption1' || callback_data == 'suboption2') {
        sendMessage(chatId, 'Ответ на пункт меню 2 уровня');
      }

      // Если отправлено сообщение а не callback
    }
    SpreadsheetApp.openById(ssID).appendRow([new Date(), 'doPost', 'nothing']);
  } catch (err) {
    console.error(err.stack, err.message);
    SpreadsheetApp.openById(ssID).appendRow([new Date(), err.stack, err.message]);
  }
}

Должно заработать.

→ Ссылка