프로그램 (PHP,Python)

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

날으는물고기 2024. 8. 3. 00:16

슬랙에서 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