JSON 값을 블록 키트 형식으로 슬랙에 보기 쉬운 구조로 출력
슬랙에서 JSON 값을 보기 쉽고 효율적으로 출력하기 위해, 슬랙 API를 통해 메시지를 전송할 때 블록 키트를 사용할 수 있습니다. 블록 키트는 슬랙에서 다양한 포맷을 지원하여 구조화된 메시지를 쉽게 작성할 수 있게 합니다.
아래는 파이썬을 사용하여 슬랙 API를 통해 JSON 데이터를 블록 키트 형식으로 슬랙 채널에 전송하는 예제입니다. 이 예제에서는 requests
라이브러리를 사용하여 슬랙 API 호출을 수행합니다.
import requests
import json
# 슬랙 봇 토큰과 채널 ID를 설정합니다.
slack_bot_token = 'YOUR_SLACK_BOT_TOKEN'
slack_channel_id = 'YOUR_SLACK_CHANNEL_ID'
# 전송할 JSON 데이터를 준비합니다.
data = {
"name": "Example",
"value": 123,
"status": "active",
"details": {
"description": "This is a test message.",
"timestamp": "2024-07-09T12:34:56Z"
}
}
# JSON 데이터를 블록 키트 형식으로 변환합니다.
blocks = [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*JSON Data*\n"
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": f"*Name:*\n{data['name']}"
},
{
"type": "mrkdwn",
"text": f"*Value:*\n{data['value']}"
},
{
"type": "mrkdwn",
"text": f"*Status:*\n{data['status']}"
},
{
"type": "mrkdwn",
"text": f"*Description:*\n{data['details']['description']}"
},
{
"type": "mrkdwn",
"text": f"*Timestamp:*\n{data['details']['timestamp']}"
}
]
}
]
# 슬랙 API에 메시지를 전송합니다.
response = requests.post('https://slack.com/api/chat.postMessage',
headers={
'Content-Type': 'application/json',
'Authorization': f'Bearer {slack_bot_token}'
},
data=json.dumps({
'channel': slack_channel_id,
'blocks': blocks
})
)
# 응답을 확인합니다.
if response.status_code == 200:
print('Message sent successfully.')
else:
print('Failed to send message:', response.text)
이 코드는 다음을 수행합니다.
- JSON 데이터를 블록 키트 형식으로 변환하여 슬랙 메시지의
blocks
필드에 삽입합니다. - 슬랙 API의
chat.postMessage
엔드포인트에 POST 요청을 보내 메시지를 전송합니다.
이 방식으로 JSON 데이터를 슬랙에서 보기 쉽고 효율적으로 출력할 수 있습니다. 필요에 따라 blocks
필드를 더 커스터마이즈하여 다양한 형식의 메시지를 구성할 수 있습니다.
n8n에서 JSON 데이터를 슬랙에 보내기 위한 워크플로우를 구성하는 방법을 설명하겠습니다. 이 예제에서는 Webhook
노드를 사용하여 JSON 데이터를 수신하고, Slack
노드를 사용하여 해당 데이터를 슬랙 채널에 전송합니다.
- Webhook 노드 설정
- n8n 에디터 UI에서
Webhook
노드를 추가합니다. - 메서드를
POST
로 설정합니다. - 웹훅 URL을 설정합니다.
- n8n 에디터 UI에서
- Function 노드 설정
- JSON 데이터를 블록 키트 형식으로 변환하기 위해
Function
노드를 추가합니다. - 다음 코드를 입력합니다.
const data = items[0].json; // JSON 데이터를 블록 키트 형식으로 변환합니다. const blocks = [ { "type": "section", "text": { "type": "mrkdwn", "text": "*JSON Data*\n" } }, { "type": "section", "fields": [ { "type": "mrkdwn", "text": `*Name:*\n${data.name}` }, { "type": "mrkdwn", "text": `*Value:*\n${data.value}` }, { "type": "mrkdwn", "text": `*Status:*\n${data.status}` }, { "type": "mrkdwn", "text": `*Description:*\n${data.details.description}` }, { "type": "mrkdwn", "text": `*Timestamp:*\n${data.details.timestamp}` } ] } ]; return [{ json: { blocks } }];
- JSON 데이터를 블록 키트 형식으로 변환하기 위해
- Slack 노드 설정
Slack
노드를 추가하고, 트리거를Function
노드의 출력으로 설정합니다.Resource
를Message
로 설정하고Operation
을Post
로 설정합니다.- 슬랙 인증을 설정합니다 (OAuth2를 사용하거나 API 토큰을 입력합니다).
- 메시지 채널을 선택합니다.
Text
필드를 빈 칸으로 두고,Blocks
필드에{{ $json.blocks }}
를 입력합니다.
- 워크플로우 연결 및 활성화
Webhook
노드,Function
노드,Slack
노드를 순서대로 연결합니다.- 워크플로우를 활성화합니다.
최종 워크플로우는 다음과 같이 구성됩니다.
Webhook (POST) --> Function (JSON 변환) --> Slack (메시지 전송)
이 워크플로우는 JSON 데이터를 수신하고, 이를 슬랙에서 보기 쉬운 블록 키트 형식으로 변환한 후, 지정된 슬랙 채널로 전송합니다. n8n에서 이러한 설정을 통해 JSON 데이터를 효율적으로 관리하고 슬랙에서 시각화할 수 있습니다.
JSON 구조가 고정되지 않은 경우, n8n에서 이를 동적으로 처리하고 슬랙에 보기 쉽게 출력하는 방법입니다. 이 경우, JSON 데이터를 재귀적으로 탐색하여 블록 키트 형식으로 변환하는 방법을 사용합니다.
function convertToBlocks(data, indent = 0) {
let blocks = [];
const indentation = ' '.repeat(indent * 4);
for (const key in data) {
if (typeof data[key] === 'object' && data[key] !== null) {
blocks.push({
type: "section",
text: {
type: "mrkdwn",
text: `${indentation}*${key}:*`
}
});
blocks = blocks.concat(convertToBlocks(data[key], indent + 1));
} else {
blocks.push({
type: "section",
text: {
type: "mrkdwn",
text: `${indentation}*${key}:* ${data[key]}`
}
});
}
}
return blocks;
}
const data = items[0].json;
const blocks = convertToBlocks(data);
return [{ json: { blocks } }];
이와 같이 수신된 JSON 데이터를 재귀적으로 탐색하여 슬랙 블록 키트 형식으로 변환합니다. 이 방식으로 JSON의 구조가 고정되지 않은 경우에도 동적으로 처리하여 보기 쉽게 출력할 수 있습니다.