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

    Это ошибка возникает в том случае если пользователь подал заявку в канал, ему написал бот но пользователь в течении 5 минут не взаимодействовал с ботом. Следите за обновлениями BOT API.
    Код конечно не понятный. И для чего тоже не пойму. Пожалуйста ознакомьтесь с Asyncio.

    import logging
    import asyncio
    from contextlib import suppress
    from aiogram import Bot, Dispatcher, F, types
    from aiogram.types import ChatJoinRequest
    from aiogram.filters import Text
    from aiogram.exceptions import TelegramForbiddenError
    from markups import *
    
    
    CHANNEL_ID = -********
    ADMIN_ID = ******
    
    
    async def approve_request(chat_join: ChatJoinRequest, bot: Bot):
        try:
            await bot.send_message(chat_id=chat_join.from_user.id, text='Здравствуйте, чтобы получить файл пройдите тест')
            await asyncio.sleep(1)
            await bot.send_message(chat_id=chat_join.from_user.id, text='Каков ваш вид деятельности', reply_markup=profesii)
            await chat_join.approve()
        except TelegramForbiddenError as e:
            logging.error(f'TelegramForbiddenError: {e} - Unable to initiate conversation with user.')
    
    
    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)
    
        async def callback_template(callback: types.CallbackQuery, next_question: str):
            await bot.send_message(callback.message.chat.id, 'Приступим к следующему вопросу')
            await asyncio.sleep(1)
            await bot.send_message(callback.message.chat.id, next_question, reply_markup=izol)
    
        async def callback_template_link(callback: types.CallbackQuery):
            await bot.send_message(callback.message.chat.id, 'Вот ваша ссылка:')
    
        callbacks = {
            'first': 'Как часто сталкиваетесь со звукоизоляцией на объектах?',
            'second': 'Как часто сталкиваетесь со звукоизоляцией на объекте?',
            'third': 'Как часто сталкиваетесь со звукоизоляцией на объекте?',
            'fourth': 'Как часто сталкиваетесь со звукоизоляцией на объекте?',
            '1': 'Чем мы можем быть для вас полезны?',
            '2': 'Чем мы можем быть для вас полезны?',
            '3': 'Чем мы можем быть для вас полезны?',
            '4': 'Чем мы можем быть для вас полезны?'
        }
    
        for callback_data, question in callbacks.items():
            dp.callback_query_handler(Text(callback_data))(lambda cb: callback_template(cb, question))
    
        link_callbacks = ['5', '6', '7', '8', '9', '10', '11', '12']
    
        for callback_data in link_callbacks:
            dp.callback_query_handler(Text(callback_data))(callback_template_link)
    
        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 suppress(KeyboardInterrupt, SystemExit):
            asyncio.run(start())


    В обработчике approve_request добавлена обработка исключения TelegramForbiddenError, которое возникает, когда бот не может начать разговор с пользователем. При возникновении этой ошибки будет выводиться сообщение об ошибке, и код будет продолжать работу без прерывания.