我正在使用Node.js中的Telegraf框架编写Telegram机器人,并希望在机器人执行网络通话时显示“机器人正在输入...”标语。
我遇到的问题是我的功能没有按照预期的方式执行,即“键入”标语在5秒钟后出现并消失(根据文档),但是直到收到发票后才发送至少30秒后。评估日志还显示在功能结束之后执行了控制台日志。
这是我的实现方式
module.exports = (bot) => bot.command('buy', (ctx) => {
let catalogueId = //some regex
return Promise.all([
ctx.replyWithChatAction('typing'),
sendInvoice(catalogueId, ctx)
])
})
function sendInvoice(catalogueId, ctx) {
console.log('1')
return helper.getItem(catalogueId)
.then((item) => {
console.log('2')
return createInvoice(item, ctx)
.then((invoice) => {
console.log('3')
return ctx.replyWithInvoice(invoice)
})
})
}
Firebase Cloud Functions中显示的日志语句如下所示:
如您所见,控制台日志在功能结束后打印,并且相隔将近15秒。其他尝试:
//Attempt 2, same result as above
module.exports = (bot) => bot.command('buy', (ctx) => {
let catalogueId = //some regex
return ctx.replyWithChatAction('typing')
.then(() => sendInvoice(catalogueId, ctx))
})
//Attempt 3, log statements are printed before function ends, but the 'typing' only shows at the end. Need it to show when the networking calls starts
module.exports = (bot) => bot.command('buy', (ctx) => {
let catalogueId = //some regex
return sendInvoice(catalogueId, ctx))
})
function sendInvoice(catalogueId, ctx) {
console.log('1')
return helper.getItem(catalogueId)
.then((item) => {
console.log('2')
return createInvoice(item, ctx)
.then((invoice) => {
console.log('3')
return ctx.replyWithChatAction('typing')
.then(() => ctx.replyWithInvoice(invoice))
})
})
}
我的机器人当前已部署在Firebase Cloud Function上。