Отправка сообщения пользователям бота на 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 является ключом для данных соответствующего пользователя.

Не пойму ребят что не так .

Я начинающий разраб , не могу разобраться что не так. Строго не судите если что . Спасибо !


Ответы (0 шт):