谷歌网络应用 JavaScript _ Telegram 机器人状态机

我正在开发一个谷歌网络应用程序 JavaScript 应用程序来与电报机器人通信。


Telegram 用户通过使用 InlineKeyboardMarkup (InlineKeyboardButton) 键入某些单词或单击 Telegram 组上出现的按钮;


我已经实现了一个 Telegram Bot 状态机来检测输入了哪些命令,以确定要执行的相应操作;


问题:是否有更有效的方法来满足上述要求?


我正在使用的 Google 网络应用 JavaScript 源代码示例:


function menu( chat_id ) {

    let url = vUrlTelegram + "/sendMessage";


    var keyboard = {

        'inline_keyboard' : 

        [

            [{'text' : 'admin',      'callback_data' : 'admin'}], // Row 1 

            [{'text' : 'squad',      'callback_data' : 'squad'}], // Row 2


            [{'text' : 'carioca',    'callback_data' : 'carioca'}], // Row 3

            [{'text' : 'brasileiro', 'callback_data' : 'brasileiro'}], // Row 4


            [{'text' : 'sponsors',   'callback_data' : 'sponsors'}], // Row 5       

            [{'text' : 'test',       'callback_data' : 'test'}] // Row 6       

        ]

    };  


    var data = {

        'chat_id': chat_id,

        'text': "main menu",

        'reply_markup': keyboard

    };   


    var options = {

        'method' : 'post',

        'contentType': 'application/json',

        'payload' : JSON.stringify(data)

    };

    var response = UrlFetchApp.fetch(url, options);  

    Logger.log(response);

}



function telegramBotMachine( chat_id, text, name, data ) {

    var sUpperData = data.toUpperCase();

    var sResponse = " ";


//    var sContent = "chat_id: " + chat_id + " \ntext: " + text + " \nname: " + name + " \ndata: " + data + " \nsUpperData: " + sUpperData;

//    sendFormattedMessage( chat_id, sContent, "HTML", "false", "false" );


慕仙森
浏览 169回答 2
2回答

慕村9548890

问题:是否有更有效的方法来满足上述要求?有!Telegram Inlinekeyboardbutton提供,callback_data因此您可以轻松区分回调!而不是使用回调文本,降低字符并检查按钮值var text = contents.message.text;var name = contents.message.from.first_name + " " +  contents.message.from.last_name;var sResponse = telegramBotMachine( chat_id, text, name );if ( sUpperText.substr( 0, 4 ) === "MENU" ) {    menu( chat_id );} else if    ....你应该使用callback_data你已经在keyboard函数中提供的,但只是不使用!像这样的东西;function telegramBotMachine( chat_id, callbackData, name ) {    switch (callbackData) {        case 'menu':            menu( chat_id );            break;        case 'admin':            adminReport( chat_id );            break;        case 'squad':             squadReport( chat_id );            break;        // ...        default:             sendFormattedMessage( chat_id, "Test", "HTML", "false", "false" );            break;    }}  function doPost(e) {    var contents = JSON.parse(e.postData.contents);    var chat_id = contents.message.chat.id;    // Check for callback_query    if (typeof contents.callback_query !== 'undefined') {        var callbackData = contents.callback_query.data;   // admin, squad, ...        var name = contents.message.from.first_name + " " +  contents.message.from.last_name;        var sResponse = telegramBotMachine( chat_id, callbackData, name );    }}  

温温酱

不确定我是否得到了您想要实现的目标,但看起来您可以使用 inline_keyboard 中的回调数据来跟踪用户单击按钮后的操作。your_bot.on('callback_query', (callbackData) => {   if (callbackData.data === 'value1') {   // some action   }   else if (callbackData.data === 'value2') {   // some action   }}用户单击按钮后,您将获得“callback_query”并使用“on”方法添加事件“callback_query”。然后,您从 inline_keyboard 的 callback_data 中获取数据并考虑操作取决于您收到的数据。这是有关 callbackQuery 对象的信息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript