首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我用node- telegram - bot -api创建了一个电报bot对象,为什么dialogflow bot在电报中停止响应?

如果我用node- telegram - bot -api创建了一个电报bot对象,为什么dialogflow bot在电报中停止响应?
EN

Stack Overflow用户
提问于 2020-08-25 19:48:59
回答 1查看 443关注 0票数 0

我已经建立了一个对话流聊天机器人与电报集成,我需要采取的路径,由用户发送的图像在电报聊天。据我所知,dialogflow bot不会侦听图像,因此我使用telegram bot对象来轮询消息以获取图像,但这样dialogflow bot就会停止响应,即使在telegram bot的轮询停止之后也是如此。这两个机器人之间有一些冲突。“恢复”dialogflow机器人的唯一方法是在dialogflow UI中手动重新启动电报集成。有一种方法可以解决两个机器人之间的冲突,以便dialogflow机器人在电报机器人获得图像后继续响应?下面是我写的代码:

代码语言:javascript
复制
const TG = require('node-telegram-bot-api');

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
    const agent = new WebhookClient({ request, response });

function takeImagePath() {
    agent.add(`send an image/photo`);   // work
    const token = 'my telegram bot token';
    let telegramBot = new TG(token, {polling: true});
    agent.add(`tg bot created`);  // work

    telegramBot.on('message',  async function (msg) {
        const chatId = msg.chat.id;
        agent.add('bot dialogflow in the listener');   // don't work

        if (msg.photo) {
            let ImgID = msg.photo[msg.photo.length - 1].file_id;
            let imgPath = "";

            if (ImgID) {
                telegramBot.getFile(ImgID).then((fileObject) => {
                    imgPath = fileObject.file_path;
                }).then(() => telegramBot.sendMessage(chatId, 'image taken'))   //work
                  .catch(error => console.log("error: " + error.message));
            }
        }
        else { await telegramBot.sendMessage(chatId, "it's not an image, telegram bot shutting down");   //work
               await telegramBot.stopPolling();
               agent.add("bot dialogflow active");   // don't work
        }
    });

}

let intentMap = new Map();
intentMap.set('Image intent', takeImagePath);
agent.handleRequest(intentMap);
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-27 22:22:05

解决了。问题是webhook和轮询是两种相互排斥的获取消息的方法。因此,dialogflow-telegram bot使用webhook,而我创建的电报bot对象使用polling let telegramBot = new TG(token, {polling: true});,它会自动删除webhook。要解决此问题,必须在停止轮询后重新设置set挂钩:await bot.stopPolling(); bot.setWebHook("your webhook url").then(r => console.log("webhook response: "+r)).catch(err => console.log("webhook error: "+err.message));

你可以在这里找到你的dialogflow-telegram机器人正在使用的webhook url:

https://api.telegram.org/botYourTelegramBotToken/getWebhookInfo

希望这能帮助到别人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63578214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档