Бот Telegram _ хочет, чтобы я заменил меню, управляемое словом, на меню кнопки привода _ поправка 01 - PullRequest
2 голосов
/ 30 марта 2020

изменили Google Web App, основываясь на исходном коде JavaScript согласно 20200403, к сожалению, по-прежнему не работает

проблема: кнопки не отображаются в группе Telegram, связанной с группой chat_id, когда я печатаю : menu

JavaScript должен создать и отправить обратно в группу Telegram: объект InlineKeyboardMarkup (этот объект представляет собой встроенную клавиатуру, которая появляется рядом с сообщением, которому он принадлежит.)

Google Web App JavaScript исходный код выглядит следующим образом:

var vApiTokenTelegram = "????????????????????????"; // @MediaFlamengoBot API token
var vUrlTelegram = "https://api.telegram.org/bot" + vApiTokenTelegram;
var vWebAppUrl = "https://script.google.com/macros/s/?????????????????????/exec";

function sendReplyMarkupMessage( chat_id, text, oInlineKeyboard ) {
    var encodedText = encodeURIComponent(text);

    GmailApp.sendEmail(Session.getEffectiveUser().getEmail(), "Telegram Bot Update", JSON.stringify(oInlineKeyboard, null, 4));    

    var req = new Request(vUrlTelegram +    "/sendMessage?chat_id=" + chat_id + "&text=" + text + "&reply_markup=" + oInlineKeyboard );
    fetch(req)
    .then(response => response.blob())
    .then(blob => {
        console.log('Response: ', blob)
    });
    //Logger.log(response.getContentText());  
}

function menu( chat_id ) {
    var oInlineKeyboard = JSON.stringify({
        inline_keyboard: [
            [{ text: 'Some button text 1', callback_data: '1' }],
            [{ text: 'Some button text 2', callback_data: '2' }],
            [{ text: 'Some button text 3', callback_data: '3' }],
            [{ text: 'Some button text 4', callback_data: '4' }],            
            [{ text: 'Some button text 5', callback_data: '5' }]
        ]
    });
    sendReplyMarkupMessage( chat_id, "test", oInlineKeyboard );
}

gmail регистрирует следующее, нет JSON объекта: "{\" inline_keyboard \ ": [[{\ \ text \": \ "Some text text 1 \ ", \" callback_data \ ": \" 1 \ "}], [{\" text \ ": \" Некоторый текст кнопки 2 \ ", \" callback_data \ ": \" 2 \ "}], [{ \ "text \": \ "Некоторый текст кнопки 3 \", \ "callback_data \": \ "3 \"}], [{\ "text \": \ "Некоторый текст кнопки 4 \", \ "callback_data \ ": \" 4 \ "}], [{\" text \ ": \" Некоторый текст кнопки 5 \ ", \" callback_data \ ": \" 5 \ "}]]}"

спасибо заранее за любую помощь

Траяно

1 Ответ

1 голос
/ 30 марта 2020

Вы определяете reply_markup дважды. Вы используете этот "&reply_markup=" + reply_markup в функции «отправить». Но reply_markup также определяется в параметрах;

function menu( chat_id ) {
    var options = {
        reply_markup: JSON.stringify({
            inline_keyboard: [
            ...

Попробуйте удалить reply_markup и установить параметры в виде массива;

function sendReplyMarkupMessage( chat_id, text, reply_markup ) {
    var encodedText = encodeURIComponent(text);
    var response = UrlFetchApp.fetch(vUrlTelegram +    "/sendMessage?chat_id=" + chat_id + "&text=" + text + "&reply_markup=" + reply_markup );
    Logger.log(response.getContentText());  
}

function menu( chat_id ) {
    var options = JSON.stringify({
        inline_keyboard: [
            [{ text: 'Some button text 1', callback_data: '1' }],
            [{ text: 'Some button text 2', callback_data: '2' }],
            [{ text: 'Some button text 3', callback_data: '3' }]
        }
    ]);
    sendReplyMarkupMessage( chat_id, "test", options );
}   


Edit ; Я считаю, UrlFetchApp - это функция Google-скрипта.

Редактировать 2 ; Вы правы, массив в JSON.stringify должен быть объектом!

Я создал базы JSFiddle для вашего кода; Взгляните на это здесь .

Вывод

После размещения собственного токена бота + chat_id

enter image description here


На основе Google App Script , вы должны использовать что-то вроде этого (успешно протестировано);
function myFunction() {
    let token = '123456788:AAdadadadbMTcMvY10SZGsbIJ2rdFXJiXmbFw';
    let url = "https://api.telegram.org/bot" + token + "/sendMessage";

    var options = {
        'method' : 'post',
        'contentType': 'application/json',
        'payload' : JSON.stringify({
            'chat_id': 11111111,
            'text': 'fsdfdsfsdf',
            'reply_markup': {
                inline_keyboard: [
                    [{ text: 'Some button text 1', callback_data: '1' }],
                    [{ text: 'Some button text 2', callback_data: '2' }],
                    [{ text: 'Some button text 3', callback_data: '3' }]
                ]
            }
        })
    };
    var response = UrlFetchApp.fetch(url, options);  
    var res = UrlFetchApp.fetch(url);
    Logger.log(res);
}
...