Nodejs电报机器人:等待网络呼叫时sendChatAction

时间:2020-03-21 13:26:55

标签: node.js telegram-bot telegraf

我正在使用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中显示的日志语句如下所示: enter image description here

如您所见,控制台日志在功能结束后打印,并且相隔将近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上。

0 个答案:

没有答案