为什么节点js电报机器人放在heroku上用403回答

时间:2017-05-22 20:40:31

标签: node.js heroku telegram-bot telegraf telegram-webhook

我写电报机器人并使用Telegraf库。 我将机器人放在Heroku上。 我用这种方式设置webhook:

app.telegram.setWebhook(`${URL}/bot${BOT_TOKEN}`);
app.startWebhook(`/bot${BOT_TOKEN}`, null, PORT);

但是在Heroku日志中我看到了 at=info method=POST path="/bot" host=my-app.herokuapp.com request_id=a8f99998-5e9b-4fe4-9af6-9ac56e492ae3 fwd="149.154.167.206" dyno=web.1 connect=3ms service=4ms status=403 bytes=101 protocol=https

getWebhookInfo()也记录last_error_message: 'Wrong response from the webhook: 403 Forbidden。 从邮递员的电报webhook指南尝试测试示例也返回403

解决方案:我通过在我的脚本中添加Express解决了这个问题,就像在此example

一样

2 个答案:

答案 0 :(得分:0)

如果您的机器人无法访问他想要访问的内容,则会发生403 forbidden错误代码。一个示例可能是您使用 user_id 调用sendmessage函数而不是 chat_id ,或者您的机器人无法访问聊天(被踢/禁止)

由于你的代码有点短缺,我的回答可能不是100%准确。

修改:这是指向错误的official telegram error documentation的链接。也许这可能对你有额外的帮助。

答案 1 :(得分:-1)

在任何地方添加此代码,它应该可以正常工作:

const Telegraf = require('telegraf')
const API_TOKEN = process.env.API_TOKEN || 'your token';
const PORT = process.env.PORT || 3000;
const URL = process.env.URL || 'https://your-app.herokuapp.com';
const bot = new Telegraf(API_TOKEN);
bot.telegram.setWebhook(`${URL}/bot${API_TOKEN}`);
bot.startWebhook(`/bot${API_TOKEN}`, null, PORT);