Я написал простого бота Telegram, использующего инфраструктуру Telegraf, и развернул его в облачной функции Firebase, и все хорошо, пока однажды вечером не было ошибки, и бот просто перестал отвечать. После некоторой отладки я снова развернул резервное копирование в облачные функции, и целый ряд старых сообщений просто затопляет чат.
Я прочитал, что он как-то связан с getUpdates, и что мне нужно отправить ответ 200, когда сообщение было успешно отправлено. Это всегда было на месте, но почему-то это не работает.
Вот моя реализация:
//at functions/index.js
const functions = require('firebase-functions');
const bot = require('./bot')
exports.start = functions.https.onRequest((req, res) => {
return bot.handleUpdate(req.body, res)
.then(() => {
res.status(200).send();
})
.catch((err) => {
console.log('Function start err', err)
})
})
// at bot.js
const Telegraf = require('telegraf')
const constants = require('./constants')
const token = constants.telegramBotToken
const bot = new Telegraf(token)
let commands = [
require('./commands/start'),
require('./commands/settings'),
//and a few more commands
]
commands.map((command) => {
return command(bot)
})
bot.launch()
module.exports = bot
//An example at command code, ie at /commands/start
module.exports = (bot) => bot.start((ctx) => {
let msg = ctx.message
let userFirstName = msg.from.first_name
let startMessage = `
<b>Hello ${userFirstName}!</b> blahblah`
var option = {
"parse_mode": "HTML",
}
ctx.reply(startMessage)
.catch((err) => {
console.log('/start error', err)
})
})
Я следую этому учебнику по развертыванию, попробовал следующее, но не все решают:
- Удаление webhook
- Удаление функции запуска облака и повторное развертывание