Отправка сообщения пользователям бота на JS
Коллеги всем привет ! Подскажите пожалуйста , не могу настроить отправку сообщения ботом . Мне нужно отправлять рекламное сообщение всем пользователям , которые находятся в БД Realtime Database FB .
Возникает ошибка 400 мол означает ошибку запроса (Bad Request). В теле ответа указана причина ошибки: "chat_id is empty" (ID чата пустое).
у меня уже есть в коде обращение к chatid в другом месте , и всё работает нормально. Но в данном коде :
// Глобальная переменная для хранения текущего шага ввода рекламы
const adSteps = {};
// Обработчик команды /send_ad
bot.onText(/\/send_ad/, (msg) => {
const chatId = msg.chat.id;
console.log("chatId:", chatId); // Проверяем значение chatId
// Устанавливаем шаг ввода для этого чата
adSteps[chatId] = { step: 1 };
// Запрашиваем текст рекламы
bot.sendMessage(chatId, 'Введите текст рекламы:');
console.log(`Шаг 1: Запрошен текст рекламы для пользователя с chatId ${chatId}.`);
});
// Обработчик сообщений
bot.on('message', async (msg) => {
const chatId = msg.chat.id;
// Проверяем, существует ли текущий шаг для этого чата
if (adSteps[chatId]) {
switch (adSteps[chatId].step) {
case 1:
// Получаем текст рекламного сообщения
const adText = msg.text;
// Сохраняем текст в шаге
adSteps[chatId].text = adText;
// Увеличиваем шаг на 1 и запрашиваем прикрепление файла
adSteps[chatId].step++;
bot.sendMessage(chatId, 'Хотите прикрепить файл к рекламе?', {
reply_markup: {
keyboard: [['Да'], ['Нет']],
resize_keyboard: true,
one_time_keyboard: true
}
});
console.log(`Шаг 2: Получен текст рекламы для пользователя с chatId ${chatId}. Запрошено прикрепление файла.`);
break;
case 2:
// Проверяем, есть ли медиа в сообщении
const media = msg.photo ? msg.photo : msg.video ? msg.video : null;
if (media) {
// Сохраняем медиа в шаге
adSteps[chatId].media = media;
// Увеличиваем шаг на 1 и запрашиваем подтверждение
adSteps[chatId].step++;
bot.sendMessage(chatId, 'Вы уверены, что хотите отправить это сообщение?\n\n1. Да\n2. Нет');
} else {
bot.sendMessage(chatId, 'Вы не загрузили медиа. Пожалуйста, загрузите фото или видео.');
}
break;
case 3:
// Получаем ответ на подтверждение
const confirmation = msg.text.trim();
if (confirmation === '1' || confirmation.toLowerCase() === 'да') {
// Отправляем рекламное сообщение всем пользователям из базы данных
console.log(`Пользователь с chatId ${chatId} хочет отправить сообщение.`);
// Получаем текст рекламы и имя пользователя
const text = adSteps[chatId].text;
const username = msg.from.username;
try {
// Получаем список всех пользователей из базы данных
const usersSnapshot = await admin.database().ref('/users').once('value');
const usersData = usersSnapshot.val();
if (usersData) {
console.log('Данные пользователей:', usersData); // Логируем данные пользователей
// Проходимся по каждому пользователю и отправляем рекламное сообщение
Object.keys(usersData).forEach((userId) => {
const userChatId = usersData[userId]; // Получаем chat_id пользователя
console.log(`Отправка сообщения пользователю с chat_id: ${userChatId}`); // Логируем chat_id
// Отправляем рекламное сообщение
bot.sendMessage(userChatId, text).catch(error => {
console.error('Ошибка при отправке сообщения:', error);
});
});
} else {
console.log('Нет пользователей в базе данных.');
}
} catch (error) {
console.error('Ошибка при отправке сообщения:', error);
}
// Сбрасываем шаги для этого чата
delete adSteps[chatId];
} else if (confirmation === '2' || confirmation.toLowerCase() === 'нет') {
// Если подтверждения нет, сбрасываем шаги для этого чата
delete adSteps[chatId];
bot.sendMessage(chatId, 'Отправка рекламного сообщения отменена.');
} else {
// Некорректный ответ, повторяем вопрос
bot.sendMessage(chatId, 'Пожалуйста, ответьте "1" или "да", чтобы подтвердить отправку сообщения, или "2" или "нет", чтобы отменить.');
}
break;
}
}
});
по какой -то причине не работает отправка . Пишет ошибку 400.
В БД выглядит так : -users: -123123011 -123123111 -123123121 -123123123 -123123222
GPT пишет следующее : В этой базе данных chat_id должен сохраняться в виде ключа записи, а соответствующие данные пользователя должны быть вложены в этот ключ. Здесь "123123011", "123123111" и т.д. - это chat_id пользователей, а каждый chat_id является ключом для данных соответствующего пользователя.
Не пойму ребят что не так .
Я начинающий разраб , не могу разобраться что не так. Строго не судите если что . Спасибо !