@hadd1s

Как исправить ошибку отправки сообщения пользователю в Telegrame от бота при заходе в канал?

написал бота, который автоматически принимает в канал и пишет пользователю первым. Протестил, все работает, дал двум потестить друзьям - у них тоже работает, а у остальных нет, всплывает данная ошибка когда клацают на кнопки в боте:
aiogram.exceptions.TelegramForbiddenError: Telegram server says Forbidden: bot can't initiate conversation with a user
не понимаю в чем проблема, помогите пожалуйста.

сам код:
from aiogram import Bot, Dispatcher, F, types
from aiogram.types import ChatJoinRequest
import logging
import contextlib
import asyncio
from markups import * 
import time
from aiogram.filters import Text


CHANNEL_ID = -********
ADMIN_ID = ******


async def approve_request(chat_join: ChatJoinRequest, bot: Bot):
    await bot.send_message(chat_id=chat_join.from_user.id, text='Здравствуйте, чтобы получить файл пройдите тест')
    time.sleep(1)
    await bot.send_message(chat_id=chat_join.from_user.id, text='Каков ваш вид деятельности', reply_markup=profesii)
    await chat_join.approve()


async def start():
    logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s - [%(levelname)s] - %(name)s - (%(filename)s).%(funcName)s(%(lineno)d) - %(message)s')

    bot = Bot('*************')
    dp = Dispatcher()

    dp.chat_join_request.register(approve_request, F.chat.id ==CHANNEL_ID)
    
    @dp.callback_query(Text('first'))
    async def first(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Приступим к следующему вопросу')
        time.sleep(1)
        await bot.send_message(callback.message.chat.id, 'Как часто сталкиваетесь со звукоизоляцией на объектах?', reply_markup=izol)

    @dp.callback_query(Text('second'))
    async def second(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Приступим к следующему вопросу')
        time.sleep(1)
        await bot.send_message(callback.message.chat.id, 'Как часто сталкиваетесь со звукоизоляцией на объекте?', reply_markup=izol)

    @dp.callback_query(Text('third'))
    async def third(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Приступим к следующему вопросу')
        time.sleep(1)
        await bot.send_message(callback.message.chat.id, 'Как часто сталкиваетесь со звукоизоляцией на объекте?', reply_markup=izol)

    @dp.callback_query(Text('fourth'))
    async def fourth(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Приступим к следующему вопросу')
        time.sleep(1)
        await bot.send_message(callback.message.chat.id, 'Как часто сталкиваетесь со звукоизоляцией на объекте?', reply_markup=izol)
 

    @dp.callback_query(Text('1'))
    async def odin(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Чем мы можем быть для вас полезны?', reply_markup=uslugi)


    @dp.callback_query(Text('2'))
    async def dva(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Чем мы можем быть для вас полезны?', reply_markup=uslugi)


    @dp.callback_query(Text('3'))
    async def tri(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Чем мы можем быть для вас полезны?', reply_markup=uslugi)


    @dp.callback_query(Text('4'))
    async def chetire(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Чем мы можем быть для вас полезны?', reply_markup=uslugi)


    @dp.callback_query(Text('5'))
    async def pyat(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Вот ваша ссылка:')


    @dp.callback_query(Text('6'))
    async def shest(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Вот ваша ссылка:')


    @dp.callback_query(Text('7'))
    async def sem(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Вот ваша ссылка:')


    @dp.callback_query(Text('8'))
    async def vosem(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Вот ваша ссылка:')


    @dp.callback_query(Text('9'))
    async def devyat(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Вот ваша ссылка:')


    @dp.callback_query(Text('10'))
    async def desyat(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Вот ваша ссылка:')
        
        
    @dp.callback_query(Text('11'))
    async def desyat(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Вот ваша ссылка:')


    @dp.callback_query(Text('12'))
    async def desyat(callback: types.CallbackQuery):
        await bot.send_message(callback.message.chat.id, 'Вот ваша ссылка:')


    try:
        await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())
    except Exception as ex:
        logging.error(f'[Exception] - {ex}', exc_info=True)
    finally:
        await Bot.session.close()


if __name__ == '__main__':
    with contextlib.suppress(KeyboardInterrupt, SystemExit):
        asyncio.run(start())


markups:

from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup

first = InlineKeyboardButton(text='Дизайнер', callback_data='first')
second = InlineKeyboardButton(text='Строитель', callback_data='second')
third = InlineKeyboardButton(text='Прораб/Компания', callback_data='third')
fourth = InlineKeyboardButton(text='Частное лицо', callback_data='fourth')
profesii = InlineKeyboardMarkup(inline_keyboard=[
    [first, second],
    [third, fourth],
])

pervaya = InlineKeyboardButton(text='Никогда', callback_data='1')
vtoraya = InlineKeyboardButton(text='До 3-х раз в год', callback_data='2')
tretiy = InlineKeyboardButton(text='До 10 раз в году', callback_data='3')
chetire = InlineKeyboardButton(text='Более 10', callback_data='4')
izol = InlineKeyboardMarkup(inline_keyboard=[
    [pervaya, vtoraya],
    [tretiy, chetire]
])

montaj = InlineKeyboardButton(text='Монтаж звукоизоляции', callback_data='5')
postavka = InlineKeyboardButton(text='Поставка материалов по звукоизоляции', callback_data='6')
resheniya = InlineKeyboardButton(text='Консультации и подбор решений', callback_data='7')
dizain = InlineKeyboardButton(text='Аудит дизайн-проекта', callback_data='8')
kompleksnoe = InlineKeyboardButton(text='Комплексное решение вопроса', callback_data='9')
dekor = InlineKeyboardButton(text='Декоративные материалы', callback_data='10')
shef = InlineKeyboardButton(text='Шеф монтаж', callback_data='11')
akust = InlineKeyboardButton(text='Акустические расчёты', callback_data='12')
uslugi = InlineKeyboardMarkup(inline_keyboard=[
    [montaj],
    [postavka],
    [resheniya],
    [dizain],
    [kompleksnoe],
    [akust],
    [dekor],
    [shef]
])
  • Вопрос задан
  • 686 просмотров
Пригласить эксперта
Ответы на вопрос 1
@tbwanderer
Мне кажется я с этим сталкивался.
Проблема в том, что человек сам должен разрешить/написать боту первым.
Иначе вылезает ошибка. Возможно Вам удастся это сделать. Удачи!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы