好吧,我对使用电报机器人很陌生,但是到目前为止,我对一些基本的机器人都做得很好。现在,我想改善一些事情,让我的网站“喂”机器人。
这是场景
我有一个Google电子表格,可以进行一些计算,然后使用经典网址将消息发送给机器人。像这样...
var optionsUG = {
'method' : 'post',
'payload' : formDataUG,
'muteHttpExceptions':true
};
var optionsLG = {
'method' : 'post',
'payload' : formDataLG
};
//SpreadsheetApp.getUi().alert('UrlFetchApp options ['+options+"]");
//UrlFetchApp.fetch('https://api.telegram.org/bot'+token+'/sendMessage?chat_id='+channelNumber+'&text='+text);
var result = UrlFetchApp.fetch('https://api.telegram.org/bot'+token+'/sendMessage',optionsUG);
Utilities.sleep(5 * 1000);
result = UrlFetchApp.fetch('https://api.telegram.org/bot'+token+'/sendMessage',optionsLG);
现在我想做类似的事情,但是我想代替我的sendMessage来调用我的机器人的方法 我使用javascript Telegraf框架ATM,但我可以更改不是问题。 我想实现
var result = UrlFetchApp.fetch('https://api.telegram.org/bot'+token+'/register',optionsUG);
这是当前配置的机器人
const serverPath = "/home/bots/PlatoonAdvisor/telegram";
const commands = require(serverPath+'/package/modules/commands.js');
const config = require(serverPath+'/config.json');
var helpText = require(serverPath+'/package/help.txt');
const token = config.TELEGRAM_BOT_SECRET;
const Telegraf = require('telegraf');
const bot = new Telegraf(token);
const REGISTER_COM = 'register';
const HELP_COM = 'help';
const REQUIREMENTS_COM = 'requirements';
const CAHT_ID_COM = 'chatid';
const getCommandParameters = function (text, command) {
var reg = "/\/"+command+" (.*)/g";
var arr = text.match(reg);
return arr;
}
/*
bot.on('text', message=> {
return message.reply('I am Grooth');
})
*/
bot.command(HELP_COM, ctx=> {
return ctx.reply(helpText);
});
bot.command(REGISTER_COM, ctx=> {
var replyMsg;
var param = getCommandParameters(ctx.message.text, REGISTER_COM);
var player_name, allycode;
if (param != null) {
try {
var params = param.split(",");
if (params.length < 2) {
replyMsg = "Missing parameters, try /help if you need help :)";
throw replyMsg;
}
player_name = params[1];
allycode = params[0];
var channel = ctx.chat.id;
commands.registerTPlayer(player_name, allycode, channel);
replyMsg = "Successfully registered player ${player_name} with allycode ${allycode}!"
} catch (ex) {
console.log (ex);
}
}
return ctx.reply(replyMsg);
});
bot.command(REQUIREMENTS_COM, ctx=> {
var param = getCommandParameters(ctx.message.text, REQUIREMENTS_COM);
var params = param.split(",");
var json = ctx.chat.id;
return ctx.reply(json);
});
bot.command(CAHT_ID_COM, ctx=> {
var id = ctx.chat.id;
var msg = "The chat id requested is ${id}";
return ctx.reply(msg);
});
bot.startPolling();
那有可能吗?我正在互联网上浏览了一会儿,却找不到任何线索。
任何帮助表示赞赏 tnx
编辑:做了更多的挖掘工作,我发现当机器人中发生某些事情时,webhooks会将内容发送到Web服务器,但反之则不...我感到沮丧
我的目标是使用电子表格中包含的信息更新本地数据库,但该bot仍然没有,因此用户以后可以要求bot检索这些信息。
我的意思是,如果它是真正的Web服务器,那么我可以拨打Ajax电话,但它只是一个电子表格,不充当服务器...:(
答案 0 :(得分:0)
好吧,我忘了用找到的解决方案回答这个问题。
确实没有办法从外部调用bot的特定功能,因为它不是真正的功能,它是用户输入并且bot解释为命令的解析字符串。
所以我必须要有创造力,并从bot本身公开一个RestServer(nodejs快递库可以解决问题),然后我才能从脚本中调用它。
Here an handy guide for Express.js
这是我的解决方案,目前效果很好。 Tnx:)