728x90
챗지피티가 짜준 dialog 띄우기 코드를 복붙해서 실행 시켜 보았다.
@app.route('/dialog', methods=['POST', 'GET'])
def dialog():
trigger_id = request.form.get('trigger_id') # 슬래시 명령어의 트리거 ID
user_id = request.form.get('user_id') # 슬랙 사용자 ID
tmp_str = "ok to be seen"
# 모달을 열기 위한 페이로드 생성
dialog_payload = {
"trigger_id": trigger_id,
"view": {
"type": "modal",
"callback_id": "unittest_modal",
"title": {
"type": "plain_text",
"text": "자동화 도구 모음"
},
"blocks": [
{
"type": "input",
"block_id": "branch_block",
"element": {
"type": "plain_text_input",
"action_id": "branch_input",
"placeholder": {
"type": "plain_text",
"text": "Enter branch name"
}
},
"label": {
"type": "plain_text",
"text": f"Branch Name {tmp_str}"
}
},
{
"type": "input",
"block_id": "env_block",
"element": {
"type": "static_select",
"action_id": "env_select",
"placeholder": {
"type": "plain_text",
"text": "Select environment"
},
"options": [
{
"text": {
"type": "plain_text",
"text": "Staging"
},
"value": "staging"
},
{
"text": {
"type": "plain_text",
"text": "Production"
},
"value": "production"
}
]
},
"label": {
"type": "plain_text",
"text": "Environment"
}
}
],
"submit": {
"type": "plain_text",
"text": "Submit"
}
}
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {SLACK_BOT_TOKEN}"
}
response = requests.post(SLACK_API_URL, json=dialog_payload, headers=headers)
if response.status_code == 200:
return jsonify({"response_type": "ephemeral", "text": "Opening unit test dialog..."}), 200
else:
return jsonify({"response_type": "ephemeral", "text": "Failed to open dialog."}), 500
@app.route('/slack/interactions', methods=['POST'])
def handle_interactions():
# Slack은 x-www-form-urlencoded 형식으로 데이터를 보냄
payload = json.loads(request.form.get('payload'))
if payload.get('type') == 'view_submission':
callback_id = payload['view']['callback_id']
if callback_id == 'unittest_modal':
values = payload['view']['state']['values']
branch_name = values['branch_block']['branch_input']['value']
environment = values['env_block']['env_select']['selected_option']['value']
user_id = payload['user']['id']
# 외부 API 호출
call_external_api(branch_name, environment, user_id)
return jsonify({"response_action": "clear"})
return "", 200
Slack > slash command 명령어 실행 시
모달창이 뜨긴하는데, Submit 버튼 선택 시
에러가 발생된다.
Interactivity & Shortcuts 이 OFF 상태여서 그런듯 한데,
다음과 같이 자신의 서버 + /slack/interaction 을 Request URL 로 작성해준다. (/slack/interaction 부분은 코드와 맞추면 된다.)
이후 다시, 코드에서 입력한 값을 잘 받아오는지 확인하기 위해 print 문을 넣어주고...
한번더 슬래시 커맨드 > 모달 입력 시
모달에 입력한 값을 잘 가져옴을 확인할수 있다.
'CI+CD > Slack 연동' 카테고리의 다른 글
Jenkins + Slack 연동 - 4 (parameter 받기 + jenkins job 원격빌드) (0) | 2024.11.28 |
---|---|
Jenkins + Slack 연동 - 3 (Slash commands/Ngrok/Python Flask) (1) | 2024.10.22 |
Jenkins + Slack 연동 - 1 (Jenkins CI 통합 앱 연동) (0) | 2024.07.14 |
Jenkins + Slack 연동 - 2 (Incoming Webhooks) (0) | 2024.07.14 |
댓글