Тут вариантов масса. И еще зависит от версии aigramm которой пользуешься.
Для 3 версии есть переработанная CDF
https://docs.aiogram.dev/ru/latest/dispatcher/filt...
Для 2+ версии aigramm, можно по старым схемам:
task_cb = CallbackData("task_menu", "task_type", "task_num")
# array = [{name: 'task_name_1', type: 'c', num: 123456}]
def task_keyboard(array):
markup = InlineKeyboardMarkup(row_width=2)
for task in array:
markup.insert(InlineKeyboardButton(text=task.get('name'),
callback_data=task_cb.new(task_type=task.get("type"),
task_num= task.get("num"))))
return markup
# Ловим колбэк
@dp.callback_query_handler(task_cb.filter())
async def show_task(callback: types.CallbackQuery, callback_data: dict):
type = callback_data.get("task_type")
num = callback_data.get("task_num")
Ну либо лови колбэк как ты и описал и парси как обычный str.
type = callback[:1]
num= callback[1:]