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]);
}
}
Должно заработать.