Телеграф с базой данных реального времени Firebase не работает в AWS Lambda - PullRequest
0 голосов
/ 03 апреля 2020

Контекст

  • Телеграф. js Версия: 3.36
  • Node.js Версия: 12.16.1

Ожидаемое поведение

Бот в AWS Лямбда с firebase и telegraf должна отправлять значение базы данных в реальном времени только один раз при запросе.

Текущее поведение

Бот отправляет значение из базы данных реального времени firebase на неопределенный срок без остановки .

Шаги для воспроизведения

  1. Создание лямбда-функции (ZIP node_modules и всех необходимых файлов, таких как index. js) и установите все переменные окружения. 1.2 index.js должно быть:
require('dotenv').config();
const Telegraf = require('telegraf');
const bot = new Telegraf(process.env.TOKEN);

const firebase = require('firebase');

const app = firebase.initializeApp({
  apiKey: process.env.APIKEY,
  authDomain: process.env.AUTHDOMAIN,
  databaseURL: process.env.DATABASEURL,
  projectId: process.env.PROJECTID,
  storageBucket: process.env.STORAGEBUCKET,
  messagingSenderId: process.env.MESSAGINGSENDERID,
  appId: process.env.APPID
});

bot.command('value', (ctx) => {
  const rootRef = firebase.database().ref();
  let ordersRef = rootRef.child("last");

  ordersRef.once('value', function (dataSnapshot) {
    let data = dataSnapshot.val();
    ctx.reply(data);
  })
})

exports.handler = (event, context, callback) => {
  const tmp = JSON.parse(event.body); // get data passed to us
  bot.handleUpdate(tmp); // make Telegraf process that data
  return callback(null, { // return something for webhook, so it doesn't try to send same stuff again
    statusCode: 200,
    body: '',
  });
};
Создать API-шлюз -> Добавить метод POST -> Лямбда-функция -> Развернуть -> Скопировать URL-адрес вызова Установить URL-адрес вызова как webhook

Возможно возвращаемое значение обработчик не отправляется на серверы Telegram, поэтому они продолжают отправлять одно и то же сообщение?

Я открыл проблему в репозитории Telegraf на GitHub, но они не нашли, что не так либо.


Обновление

Я кое-что замечаю. Пока этот код работает просто отлично:

const Telegraf = require('telegraf');
require('dotenv').config();
const bot = new Telegraf(process.env.TOKEN);

const firebase = require('firebase');
const app = firebase.initializeApp({
  apiKey: process.env.APIKEY,
  authDomain: process.env.AUTHDOMAIN,
  databaseURL: process.env.DATABASEURL,
  projectId: process.env.PROJECTID,
  storageBucket: process.env.STORAGEBUCKET,
  messagingSenderId: process.env.MESSAGINGSENDERID,
  appId: process.env.APPID
});

bot.command('value', (ctx) => {
//  const rootRef = firebase.database().ref();
  ctx.reply("Hello")
})

exports.handler = (event, context, callback) => {
  const tmp = JSON.parse(event.body);
  bot.handleUpdate(tmp);
  return callback(null, {
    statusCode: 200,
    body: '',
  });
};

Просто раскомментируя ссылку, она начинает давать сбой, отвечая " Привет "много раз, если снова.

WebhookInfo говорит "last_error_message": "Wrong response from the webhook: 502 Bad Gateway".

...