Я пытаюсь использовать библиотеку Telegraf с функциями Firebase, но она не работает так, как я ожидал.
Я следую этим этой статье и инструкциям, которые появляются в webhooks (как появляетсядля экспресс-примера) и 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 () имеет опции для запуска в опрос или webhook , но мне не совсем понятно, как использовать эти опции.
Как мне использовать telegram.launch () , чтобы работать врежим webhook в 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:
Я тоже пытался добавить Express ...
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 не отвечает ( "Читатьистекло время ожидания ").