为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕仙森 2022-06-16 16:42:20
我正在开发一个谷歌网络应用程序 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" );
查看完整描述

2 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

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


有!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 );

    }

}  


查看完整回答
反对 回复 2022-06-16
?
温温酱

TA贡献1752条经验 获得超4个赞

不确定我是否得到了您想要实现的目标,但看起来您可以使用 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 对象的信息。


查看完整回答
反对 回复 2022-06-16
  • 2 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号