Как использовать Telegraf (Telegram) в Firebase? - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь использовать библиотеку 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 не отвечает ( "Читатьистекло время ожидания ").

1 Ответ

2 голосов
/ 08 ноября 2019

удалить

bot.launch()

попробуйте добавить это

exports.YOURFUNCTIONNAME = functions.https.onRequest(
  (req, res) => bot.handleUpdate(req.body, res)
)

, затем вручную установить ur webhook

https://api.telegram.org/bot{BOTTOKEN}/setWebhook?url={FIREBASE FUCNTION URL}'

...