Я пытаюсь использовать библиотеку Telegraf с функциями Firebase, но она работает не так, как я ожидал.
Я следую этой статье и инструкциям, приведенным в веб-перехватчики (как показано для экспресс-примера) и webhookcallback, как указано в документации Telegraf.
const Telegraf = require('telegraf')
// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions')
// The Firebase Admin SDK to access the Firebase Realtime or Firestore Database.
const admin = require('firebase-admin')
// set telegraf and responses.
const BOT_TOKEN = 'my-telegram-bot-token'
const bot = new Telegraf(BOT_TOKEN)
bot.start((ctx) => ctx.reply("Start instructions"))
bot.help((ctx) => ctx.reply("This is help"))
bot.hears('hi', (ctx) => ctx.reply('Hola'))
bot.on('text', (ctx) => ctx.reply('Response to any text'))
bot.catch((err, ctx) => {
console.log(`Ooops, ecountered an error for ${ctx.updateType}`, err)
})
// initialize bot
bot.launch() // <-- (2)
//appends middleware
exports.ideas2coolBot = functions.https.onRequest(bot.webhookCallback(`/my-path`));
На сервере firebase мне нужно добавить bot.launch () (2) для работы, но он работает только для максимального тайм-аута, установленного в функции Firebase. Мне нужно вспомнить API Telegram "setWebhook", чтобы снова заработать, и он работает для в то же время. Это похоже на создание одного экземпляра функции и завершение работы по истечении времени.
Я заметил, что у telegraf.launch () есть параметры для запуска в режиме опроса или веб-перехватчика, но мне не совсем понятно, как использовать эти параметры.
Как мне использовать telegram.launch () для работы в режиме веб-перехватчика в Firebase?
Изменить: когда я использовал getWebhookInfo, я получил следующий результат:
{
"ok": true,
"result": {
"url": "https://0dbee201.ngrok.io/test-app-project/us-central1/testAppFunction/bot",
"has_custom_certificate": false,
"pending_update_count": 7,
"last_error_date": 1573053003,
"last_error_message": "Read timeout expired",
"max_connections": 40
}
}
и консоль показывает входящее соединение, но ничего не делает ...
i functions: Beginning execution of "ideas2coolBot"
i functions: Finished "ideas2coolBot" in ~1s
Edit2:
Я тоже пробовал добавить Экспресс ...
app.use(bot.webhookCallback('/bot'))
app.get('/', (req, res) => {
res.send('Hello World from Firebase!')
})
exports.ideas2coolBot = functions.https.onRequest(app);
он работает по пути '/', но ничего не имеет с '/ bot'. POST на '/ bot' не отвечает.
Кстати, я попробовал экспресс-автономную версию и отлично работает, но использование ее с firebase не отвечает («Истекло время ожидания чтения»).