Как мне настроить так, чтобы при нажатии на инлайн кнопку с callback "writezakaz" активировался режим обратной связи между заказчиком и администратором?

<b>КОД:</b> <br/> <br/> <b>@router.callback_query(F.data.startswith('accept'))<br/>
async def accept_order(callback: CallbackQuery, bot: Bot):<br/>
    _, user_id, amount = callback.data.split("_")<br/>
    user_id = int(user_id)<br/>
    amount = int(amount)<br/>
    admin_id = callback.from_user.id<br/>
<br/>
    writezakaz = InlineKeyboardMarkup(inline_keyboard=[<br/>
        [<br/>
            InlineKeyboardButton(text='Написать заказчику', callback_data=f'writezakaz_{user_id}')<br/>
        ]<br/>
    ])<br/>
<br/>
    await callback.answer(f'Вы приняли заказ от пользователя {user_id}, сумма заказа: {amount} рублей.')<br/>
<br/>
    await bot.send_message(user_id, f'Ваш заказ на сумму {amount} рублей был принят и находится в обработке. В скором времени с вами свяжется Администратор для уточнения деталей.')<br/>
    await callback.message.edit_text(f'Администратор {admin_id} принял заказ от пользователя {user_id}! \nСумма заказа: {amount} рублей \nЗаказ:  Discord Nitro Full на 1 Месяц',<br/>
                                     reply_markup=kb.empty)<br/>
    await bot.send_message(admin_id,'Напишите заказчику',<br/>
                           reply_markup=writezakaz)<br/>
<br/>
<a href="https://qna.habr.com/user/router" rel="nofollow">router</a>.callback_query(F.data == 'writezakaz')<br/>
<br/>
</b>
  • 8 ноября 2024 г. 20:23
Ответы на вопрос 1
Чтобы настроить обратную связь между заказчиком и администратором при нажатии на инлайн-кнопку с `callback_data` "writezakaz", вам нужно создать функцию-обработчик, которая будет отвечать на этот запрос. При этом необходимо обработать информацию о том, кто нажал на кнопку (администратор или пользователь) и предоставить возможность администраторам отправлять сообщения пользователям. 

Вот пример кода, который расширяет ваш текущий функционал:

```python
from aiogram import Router, types
from aiogram.dispatcher import filters
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from aiogram.types import CallbackQuery, Bot

router = Router()  # Создаем экземпляр Router

@router.callback_query(filters.Text(startswith='accept'))
async def accept_order(callback: CallbackQuery, bot: Bot):
    _, user_id, amount = callback.data.split("_")
    user_id = int(user_id)
    amount = int(amount)
    admin_id = callback.from_user.id
    
    writezakaz = InlineKeyboardMarkup(inline_keyboard=[
        [
            InlineKeyboardButton(text='Написать заказчику', callback_data=f'writezakaz_{user_id}')
        ]
    ])
    
    await callback.answer(f'Вы приняли заказ от пользователя {user_id}, сумма заказа: {amount} рублей.')
    
    await bot.send_message(user_id, f'Ваш заказ на сумму {amount} рублей был принят и находится в обработке. В скором времени с вами свяжется Администратор для уточнения деталей.')
    await callback.message.edit_text(f'Администратор {admin_id} принял заказ от пользователя {user_id}! \nСумма заказа: {amount} рублей \nЗаказ: Discord Nitro Full на 1 Месяц',
                                      reply_markup=kb.empty)
    await bot.send_message(admin_id, 'Напишите заказчику', reply_markup=writezakaz)

@router.callback_query(filters.Text(startswith='writezakaz_'))
async def write_to_customer(callback: CallbackQuery, bot: Bot):
    _, user_id = callback.data.split("_")
    user_id = int(user_id)

    # Получаем текст сообщения от администратора (требуется дополнительная обработка)
    # Например, можете отправить сообщение, и ждать ответа от администратора.
    
    # Пожалуйста, уточните, как администраторам отправлять сообщения (например, полю ввода сообщение).
    
    await callback.answer()  # Подтверждаем нажатие кнопки.
    
    # Пример отправки сообщения заказчику от администратора с некоторым текстом
    # Это нужно будет активировать после получения текста от администратора
    message_from_admin = "Здравствуйте! У вас есть вопросы по вашему заказу?"
    await bot.send_message(user_id, message_from_admin)

    # Здесь вы можете добавлять логику для обработки последующих сообщений от администратора.
```

### Несколько моментов, на которые стоит обратить внимание:

1. **Дальнейшее взаимодействие**: В примере выше предполагается, что администратор сможет отправить текст сообщения. Для этого вам, возможно, потребуется использовать хендлеры для обработки текстовых сообщений, чтобы получить их текст после нажатия на кнопку.

2. **Переключение между пользователями**: Вам потребуется какой-то способ отслеживания сессий между пользователями и администраторами, чтобы убедиться, что сообщения отправляются правильным образом.

3. **Сообщения в обе стороны**: Если вы хотите, чтобы и администраторы могли писать заказчику, и заказчики могли отвечать, потребуется более сложная логика обработки сообщений.

Попробуйте интегрировать предложенный код в вашу программу, и если будут сложности, не стесняйтесь задавать вопросы!
Похожие вопросы