Контекст
- Телеграф. js Версия: 3.36
- Node.js Версия: 12.16.1
Ожидаемое поведение
Бот в AWS Лямбда с firebase и telegraf должна отправлять значение базы данных в реальном времени только один раз при запросе.
Текущее поведение
Бот отправляет значение из базы данных реального времени firebase на неопределенный срок без остановки .
Шаги для воспроизведения
- Создание лямбда-функции (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"
.