【问题标题】:Dynamically creating multidimensional inline keyboard telegram bot api?动态创建多维内联键盘电报 bot api?
【发布时间】:2020-11-03 03:09:03
【问题描述】:

我的代码:

var keyBoardData = [];
var menu = ['Nightclub', 'Parks'];
for (var i = 0; i < menu.length; i++) {
  keyBoardData.push([{'text': menu[i], 'callback_data': '{"a":(menu[i]),"b":(menu[i])}' }]);
}
var keyBoard = {"inline_keyboard": keyBoardData};

结果是:

{"inline_keyboard":[[{"text":"Nightclub","callback_data":"{\"a\":(menu[i]),\"b\":(menu[i])}"}],
[{"text":"Parks","callback_data":"{\"a\":(menu[i]),\"b\":(menu[i])}"}]]}

但我想得到:

{"inline_keyboard":[[{"text":"Nightclub","callback_data":'{"a":"Nightclub","b":"Nightclub"}'}],
[{"text":"Parks","callback_data":'{"a":"Parks","b":"Parks"}'}]]}

使用电报机器人 API 和谷歌表格应用脚本。 需要在电报中将列数据显示为按钮,并且在选择按钮时需要使用 callback_data 过滤工作表数据并返回结果。

这里有问题:'{"a":(menu[i]),"b":(menu[i])}' 这适合内联键盘,但 menu[i]) 被视为文本。 如果我删除单引号能够获取数据但内联键盘不起作用。

任何建议。

【问题讨论】:

  • 在您的情况下,当您想使用包含变量的'{"a":(menu[i]),"b":(menu[i])}' 的值作为字符串时,我认为您可以将keyBoardData.push([{'text': menu[i], 'callback_data': '{"a":(menu[i]),"b":(menu[i])}' }]); 修改为keyBoardData.push([{'text': menu[i], 'callback_data': JSON.stringify({"a":menu[i],"b":menu[i]})}]);。但我无法理解but inline keyboard not works.。我可以问你问题的细节吗?

标签: javascript google-apps-script telegram-bot


【解决方案1】:

不要通过硬编码字符串来创建

使用JSON.stringify()URLSearchParams()格式化所需数据;

一个例子,使用相同的数据;结果如下;

// Create keyBoard data
var keyBoardData = [];
var menu = ['Nightclub', 'Parks'];
for (var i = 0; i < menu.length; i++) {
  keyBoardData.push({
      text: menu[i],
      callback_data: menu[i]
  });
}

// Create fetch options
var requestOptions = new URLSearchParams({
  reply_markup: JSON.stringify({ "inline_keyboard": [ keyBoardData ]}),
  chat_id: 12345678,
  text: 'Test Keyboard'
}).toString();

// Send test
const token = '1134534202?????????????';
fetch("https://api.telegram.org/bot" + token + "/sendMessage?" + requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 2017-02-14
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多