본문 바로가기
프로그램 (PHP,Python)

JSON 값을 블록 키트 형식으로 슬랙에 보기 쉬운 구조로 출력

by 날으는물고기 2024. 8. 3.

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)

이 코드는 다음을 수행합니다.

  1. JSON 데이터를 블록 키트 형식으로 변환하여 슬랙 메시지의 blocks 필드에 삽입합니다.
  2. 슬랙 API의 chat.postMessage 엔드포인트에 POST 요청을 보내 메시지를 전송합니다.

이 방식으로 JSON 데이터를 슬랙에서 보기 쉽고 효율적으로 출력할 수 있습니다. 필요에 따라 blocks 필드를 더 커스터마이즈하여 다양한 형식의 메시지를 구성할 수 있습니다.

 

n8n에서 JSON 데이터를 슬랙에 보내기 위한 워크플로우를 구성하는 방법을 설명하겠습니다. 이 예제에서는 Webhook 노드를 사용하여 JSON 데이터를 수신하고, Slack 노드를 사용하여 해당 데이터를 슬랙 채널에 전송합니다.

  1. Webhook 노드 설정
    • n8n 에디터 UI에서 Webhook 노드를 추가합니다.
    • 메서드를 POST로 설정합니다.
    • 웹훅 URL을 설정합니다.
  2. 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 } }];
  3. Slack 노드 설정
    • Slack 노드를 추가하고, 트리거를 Function 노드의 출력으로 설정합니다.
    • ResourceMessage로 설정하고 OperationPost로 설정합니다.
    • 슬랙 인증을 설정합니다 (OAuth2를 사용하거나 API 토큰을 입력합니다).
    • 메시지 채널을 선택합니다.
    • Text 필드를 빈 칸으로 두고, Blocks 필드에 {{ $json.blocks }}를 입력합니다.
  4. 워크플로우 연결 및 활성화
    • 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의 구조가 고정되지 않은 경우에도 동적으로 처리하여 보기 쉽게 출력할 수 있습니다.

728x90

댓글