11import json
22
3+ import httpx
34import structlog
45from fastapi import APIRouter , HTTPException , Request , Response
56
67from backend .config .lexicon import SLACK_UI
78from backend .workers .tasks .generate_draft import generate_draft_task
9+ from backend .workers .tasks .publish_post import publish_post_task
810
911logger = structlog .get_logger ()
1012router = APIRouter (prefix = "/slack" , tags = ["Slack Integration" ])
@@ -60,7 +62,6 @@ async def slack_slash_command(request: Request):
6062
6163@router .post ("/interactions" )
6264async def slack_interactions (request : Request ):
63- # ... код обробки кнопок залишається тим самим ...
6465 form_data = await request .form ()
6566 payload_str = form_data .get ("payload" )
6667
@@ -69,6 +70,7 @@ async def slack_interactions(request: Request):
6970
7071 payload = json .loads (str (payload_str ))
7172 user_id = payload .get ("user" , {}).get ("id" )
73+ response_url = payload .get ("response_url" )
7274
7375 if payload .get ("type" ) == "block_actions" :
7476 actions = payload .get ("actions" , [])
@@ -78,7 +80,50 @@ async def slack_interactions(request: Request):
7880 if action_id == "action_publish_draft" :
7981 logger .info ("slack_draft_approved_button" , user_id = user_id )
8082
83+ # TODO: Витягнути реальний контент з payload/DB
84+ await publish_post_task .kiq (
85+ post_id = "temp_id" ,
86+ platform = "telegram" ,
87+ content = "Згенерований контент" ,
88+ )
89+
90+ async with httpx .AsyncClient () as client :
91+ await client .post (
92+ response_url ,
93+ json = {
94+ "replace_original" : True ,
95+ "text" : SLACK_UI ["interact_approved_text" ],
96+ "blocks" : [
97+ {
98+ "type" : "section" ,
99+ "text" : {
100+ "type" : "mrkdwn" ,
101+ "text" : SLACK_UI ["interact_approved_section" ],
102+ },
103+ }
104+ ],
105+ },
106+ )
107+
81108 elif action_id == "action_reject_draft" :
82109 logger .info ("slack_draft_rejected_button" , user_id = user_id )
83110
111+ async with httpx .AsyncClient () as client :
112+ await client .post (
113+ response_url ,
114+ json = {
115+ "replace_original" : True ,
116+ "text" : SLACK_UI ["interact_rejected_text" ],
117+ "blocks" : [
118+ {
119+ "type" : "section" ,
120+ "text" : {
121+ "type" : "mrkdwn" ,
122+ "text" : SLACK_UI ["interact_rejected_section" ],
123+ },
124+ }
125+ ],
126+ },
127+ )
128+
84129 return Response (status_code = 200 )
0 commit comments