动态创建多维嵌入式键盘电报bot API?

时间:2020-11-03 03:09:03

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

我的代码:

onChange

结果是:

        .onChange(of: selectedTab) { newValue in
            model.myFunction(item: newValue)
        }

但是我试图得到:

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};

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

在这里有问题:'{“ a” :( menu [i]),“ b” :( menu [i])}'这适合嵌入式键盘,但menu [i])被当作文本。 如果我删除单引号,则可以获取数据,但嵌入式键盘不起作用。

任何建议。

1 个答案:

答案 0 :(得分:0)

请勿通过对字符串进行硬编码来创建

使用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));

enter image description here