diff --git a/agent-office/app/telegram/webhook.py b/agent-office/app/telegram/webhook.py index b66d38a..82a1e63 100644 --- a/agent-office/app/telegram/webhook.py +++ b/agent-office/app/telegram/webhook.py @@ -37,6 +37,9 @@ async def _handle_callback(callback_query: dict) -> Optional[dict]: if callback_id.startswith("realestate_bookmark_"): return await _handle_realestate_bookmark(callback_query, callback_id) + if callback_id.startswith("render_"): + return await _handle_insta_render(callback_query, callback_id) + cb = get_telegram_callback(callback_id) if not cb: return None @@ -97,6 +100,38 @@ async def _handle_realestate_bookmark(callback_query: dict, callback_id: str) -> return {"ok": False, "error": str(e)} +async def _handle_insta_render(callback_query: dict, callback_id: str) -> dict: + """render_{keyword_id} 콜백 → InstaAgent.on_callback('render', ...). + + 텔레그램 인라인 버튼이 보낸 callback_data가 `render_` 형식. + InstaAgent._push_keyword_candidates가 callback_data를 그대로 박아 보내며, + 별도 DB lookup 없이 keyword_id를 파싱해 dispatch한다.""" + from .messaging import send_raw + from ..agents import AGENT_REGISTRY + + await api_call( + "answerCallbackQuery", + {"callback_query_id": callback_query["id"], "text": "카드 생성 시작"}, + ) + + try: + keyword_id = int(callback_id.removeprefix("render_")) + except ValueError: + await send_raw("⚠️ 잘못된 render 콜백 데이터") + return {"ok": False, "error": "invalid_callback_data"} + + agent = AGENT_REGISTRY.get("insta") + if not agent: + await send_raw("⚠️ insta agent 미등록") + return {"ok": False, "error": "agent_missing"} + + try: + return await agent.on_callback("render", {"keyword_id": keyword_id}) + except Exception as e: + await send_raw(f"⚠️ 카드 생성 실패: {e}") + return {"ok": False, "error": str(e)} + + async def _handle_message(message: dict, agent_dispatcher) -> Optional[dict]: """슬래시 명령 메시지 처리.""" from .router import parse_command, resolve_agent_command, HELP_TEXT