cat_kitty_t
@cat_kitty_t

Как передать сообщение оператору?

Не удается отдать переменную машины состояний оператору:

@dp.callback_query_handler(text_contains="some_butn")  #отлавливаю некую кнопку
async def buying_pear(call: CallbackQuery):

    await call.answer(cache_time=60)
    callback_data = call.data
    logging.info(f"{callback_data=}")

    await call.message.edit_reply_markup(reply_markup=None)  
    await call.message.answer("Формируем заявку.",
                              reply_markup=call_operator2)
    await UserState.adress.set()                            #записываю выбор

call_operator2 = ReplyKeyboardMarkup(
    keyboard=[
        [
            KeyboardButton(text="Некий текст для оператора")
        ]
    ],
    resize_keyboard=True
)


Не буду расписывать свои неудачные попытки, дабы лишний раз не путать.
Вот простой вывод выбора пользователя, который отдаст
Сообщение: Некий текст для оператора

@dp.message_handler(state=UserState.adress)
async def get_address(message: types.Message, state: FSMContext):
    await state.update_data(address=message.text)
    data = await state.get_data()
    await message.answer(f"Сообщение: {data['address']}")


Мне необходимо интегрировать его в этот обработчик:
@dp.message_handler(Text(equals=["Некий текст для оператора"]))  #отлавливаем сообщение кнопки по которому создается чат с оператором
async def ask_support_call(message: types.Message):
    text = f"Сейчас будет сформирована заявка {swap_usdt_to_alpha}"
    text2 = "Для подтверждения нажмите «Связаться с оператором» \nЕсли Вы передумали, нажмите «Завершить сеанс»"
    keyboard = await support_keyboard(messages="many")

    if not keyboard:
        await message.answer("К сожалению, сейчас нет свободных операторов. Попробуйте позже.")
        return
    await message.answer(text, reply_markup=ReplyKeyboardRemove()) 
    await message.answer(text2, reply_markup=keyboard)

@dp.callback_query_handler(support_callback.filter(messages="many", as_user="yes"))
async def send_to_support_call(call: types.CallbackQuery, state: FSMContext, callback_data: dict):
    await call.message.edit_text("Ждем ответа от оператора!")

    user_id = int(callback_data.get("user_id"))
    if not await check_support_available(user_id):
        support_id = await get_support_manager()
    else:
        support_id = user_id

    if not support_id:
        await call.message.edit_text("К сожалению, сейчас нет свободных операторов. Попробуйте позже.")
        await state.reset_state()
        return
    await state.set_state("wait_in_support")
    await state.update_data(second_id=support_id)

    keyboard = await support_keyboard(messages="many", user_id=call.from_user.id)

    await bot.send_message(support_id,
                           f"<b>С вами хочет связаться пользователь:</b> {call.from_user.full_name}\n"
                           f"<b>User ID пользователя:</b> {call.from_user.id}\n"
                           f"<b>Username пользователя:</b> {call.from_user.username}\n"
                           f"Сообщение: {data['address']}",                 #здесь переменная из машины
                           reply_markup=keyboard
                           )

К сожалению не хватает скила чтобы решить задачу. Надеюсь на помощь.
Сразу оговорюсь что все необходимые модули импортированы.
  • Вопрос задан
  • 252 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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