Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

KJH

Slack API (fastapi - slack_bolt) 본문

Python

Slack API (fastapi - slack_bolt)

모이스쳐라이징 2024. 7. 19. 01:39

본 게시글은 slackbot 를 만들어 볼건데요
지원을 잘 해주는 slack_bolt를 사용하고 fastAPI 기반 입니다.

 

아래 링크에서 개선된게 본 게시글이고 디테일한 설명은 아래 게시글을 참고해주세요

https://kimjanghyun1010.tistory.com/55

 

 

Event Subscriptions에 최초 등록시 challenge 요청을 통해 응답을 확인 합니다.

body에 challenge가 있다면 200을 리턴하여 Verified 시켜야 합니다.

 

from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from slack_bolt import App
from slack_bolt.adapter.fastapi import SlackRequestHandler

app = FastAPI()
slack_app = App(token="xoxb-slack-bot-token", signing_secret="signing-secret")
handler = SlackRequestHandler(app=slack_app)

@app.post("/slack/message")
async def get_message(request: Request):
    body = await request.json()
    challenge = body.get('challenge')
    if challenge is not None:
        logger.info("Received challenge: %s", challenge)
        return JSONResponse(content=challenge, status_code=200)
    event = body.get('event', {})
    channel_id = event.get('channel')
    user_id = event.get('user')
    ts = event.get('event_ts')
    try:
        result = slack_app.client.conversations_history(channel=channel_id, limit=1)
        messages = result['messages'][0]['text']
    except SlackApiError as e:
        logger.error("Slack API Error: %s", str(e))
        raise HTTPException(status_code=500, detail=str(e))
    if bot_id != user_id and messages is not None and "!" in messages:
	'''
	비즈니스 작성부분
	'''
    return JSONResponse(content={"message": "Data received successfully"}, status_code=203)

@app.post('/slack/event')
async def incoming_slack_message(payload: str = Form(...)):
    '''
    event 처리
    '''
    form_json = json.loads(payload)
    selected_user_name = form_json["user"]["name"]
    selected_value = form_json["actions"][0]["selected_options"][0]["value"]
    '''
    비즈니스 작성부분
    '''
  
    return JSONResponse(content=incoming_format, status_code=200)

 

 

실행

import uvicorn

if __name__ == "__main__":
    uvicorn.run("fastapi_web.__init__:app", host="0.0.0.0", port=80, reload=True)

'Python' 카테고리의 다른 글

args ??? kwargs ???  (0) 2024.07.30
lambda ???  (0) 2024.07.29
azure openAI (GPT4.0, ada-002)  (0) 2023.11.26
Slack API (Legacy)  (0) 2023.10.20
비동기 ??? asyncio ???  (0) 2022.05.15