Slack·Teams 연동

IT 엔지니어개발자

시작하기

기본 개념

협업 도구에서 파일 전송 작업을 실행하고 결과 확인하기

파일 전송이 필요한 업무에서는 요청 내용을 확인하고, 파일 전송 작업을 실행한 뒤 결과를 관련 담당자와 공유합니다.

Slack·Teams 연동은 협업 도구에서 발생한 요청을 지정된 파일 전송 작업과 연결하고, 실행 결과를 다시 해당 협업 공간으로 전송하는 방식입니다.

text
협업 요청
    │
    ▼
파일 전송 실행
    │
    ▼
파일 처리
    │
    ▼
결과 알림
    │
    ▼
다음 업무

이를 통해 협업 도구의 요청과 파일 전송 작업, 실행 결과를 하나의 업무 흐름으로 연결할 수 있습니다.

연동 흐름

작업 요청부터 파일 전송과 결과 알림까지 이어가기

협업 도구에서 사용자가 파일 전송을 요청하면 연동된 시스템이 요청 내용을 기준으로 지정된 작업을 실행합니다.

파일 전송이 완료되면 처리 결과가 협업 도구의 채널 또는 대화에 전달되고, 담당자는 결과를 확인한 후 다음 업무를 이어갈 수 있습니다.

text
┌──────────────┐
│ Slack / Teams│
│ 파일 전송 요청 │
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ Transfer Flow│
│ 작업 실행     │
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ File Transfer│
│ 파일 처리     │
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ Run Result   │
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ Slack / Teams│
│ 결과 확인     │
└──────────────┘

하나의 요청을 기준으로 파일 전송과 결과 공유까지 연결하면 관련 담당자가 같은 업무 공간에서 작업 흐름을 이어갈 수 있습니다.

업무 변화

협업 요청과 파일 전송을 하나의 업무 흐름으로 연결하기

협업 도구와 파일 전송 작업을 연결하면 업무 요청과 실제 파일 처리를 하나의 흐름으로 구성할 수 있습니다.

구분일반적인 업무 흐름Slack·Teams 연동
작업 요청담당자에게 요청 내용 공유협업 도구에서 작업 요청
작업 실행요청 확인 후 파일 전송 실행요청에 연결된 Flow 실행
결과 공유완료 후 결과 공유처리 결과 자동 알림
후속 업무결과 확인 후 다음 업무 진행결과를 기준으로 바로 다음 업무 연결

이렇게 구성하면 업무 요청부터 파일 전송 결과까지 협업 도구와 파일 전송 환경이 연결된 흐름으로 관리됩니다.

IT 엔지니어

협업 도구와 파일 전송을 연동하고 관리하기

서비스 연결

협업 도구와 파일 전송 환경 연결하기

먼저 Slack 또는 Microsoft Teams와 이노릭스 파일 전송 환경 사이의 연동 정보를 구성합니다.

협업 도구의 요청을 수신하고 작업 결과를 다시 전송할 수 있도록 서비스 연결을 설정합니다. 이때 사용할 서비스와 채널 또는 대화 범위, 연동 정보를 함께 구성합니다.

text
Slack / Teams
      │
      │ Service Connection
      ▼
┌───────────────────┐
│ Integration Layer │
└─────────┬─────────┘
          │
          ▼
     File Transfer

서비스 연결이 완료되면 협업 도구의 요청과 파일 전송 작업을 연결할 수 있습니다.

협업 도구의 요청을 지정된 파일 작업과 연결하기

서비스 연결 후에는 협업 도구에서 어떤 요청이 발생했을 때 어떤 파일 작업을 실행할지 구성합니다.

특정 채널의 요청이나 메시지, 버튼 또는 지정된 요청 형식을 작업 시작 조건으로 설정하고, 해당 요청을 파일 전송 Flow와 연결할 수 있습니다.

text
요청 유형
   │
   ├── 전송 요청 ─────→ Transfer Flow
   │
   ├── 수집 요청 ─────→ Collection Flow
   │
   └── 배포 요청 ─────→ Distribution Flow

각 요청에는 실행할 작업과 함께 필요한 실행 정보를 연결합니다.

구성 항목설정 내용
Request협업 도구에서 받을 요청
Trigger작업을 시작하는 조건
Flow실행할 파일 작업
Source파일이 준비된 위치
Target파일을 전송할 대상
Parameters요청에 따라 적용할 실행 값

요청과 작업을 연결하면 협업 도구의 업무 요청을 기준으로 지정된 파일 흐름을 실행할 수 있습니다.

권한 관리

사용자별 작업 실행 범위 설정하기

협업 도구의 사용자와 업무 역할에 따라 실행 가능한 파일 작업의 범위를 구성합니다.

사용자 또는 그룹별로 실행 가능한 Flow를 지정하고, 접근할 수 있는 장비와 파일 경로, 전송 대상을 설정합니다.

text
User Group A
     │
     ├── Transfer A
     ├── Collect A
     └── Status View

User Group B
     │
     ├── Transfer B
     ├── Distribution
     └── Result View

관리 대상설정 범위
사용자작업 요청이 가능한 사용자
그룹업무별 사용자 그룹
Flow실행 가능한 파일 작업
Device접근 가능한 장비
Path사용할 수 있는 파일 경로
Target전송 가능한 대상 작업 공간

권한 범위를 구성하면 협업 도구의 요청과 실제 파일 작업의 실행 범위를 함께 관리할 수 있습니다.

결과 알림

파일 전송 결과를 협업 도구로 자동 전송하기

파일 작업의 실행 결과를 Slack 또는 Teams의 지정된 채널과 대화에 알림으로 전송하도록 구성할 수 있습니다.

작업 완료 결과와 추가 확인이 필요한 결과에 따라 알림 대상을 설정하면 관련 담당자가 협업 공간에서 결과를 바로 확인할 수 있습니다.

text
                 File Flow
                     │
          ┌──────────┴──────────┐
          │                     │
          ▼                     ▼
      Completed            Attention
          │                     │
          └──────────┬──────────┘
                     ▼
              Result Message
                     │
          ┌──────────┴──────────┐
          ▼                     ▼
       Slack                 Teams

알림에는 업무에 필요한 실행 정보를 포함할 수 있습니다.

  • 실행된 작업 이름

  • 요청 사용자 또는 채널

  • 처리된 파일 수와 용량

  • 실행 시간

  • 최종 처리 결과

  • 결과 확인 정보

이렇게 파일 작업의 결과를 협업 도구로 연결하면 담당자가 업무 대화와 함께 처리 결과를 확인할 수 있습니다.

실행 기록

요청부터 파일 처리까지 실행 이력 확인하기

연동된 작업이 실행되면 Runs에서 실제 실행된 파일 작업과 처리 결과를 확인합니다.

협업 도구의 요청은 작업을 시작하는 기준으로 활용하고, Runs에서는 어떤 Flow가 실행되었는지와 파일이 어느 경로에서 처리되었는지를 관리합니다.

text
Request
   │
   ▼
Trigger
   │
   ▼
Transfer Flow
   │
   ├── Source
   ├── Target
   ├── Files
   └── Progress
   │
   ▼
Run Result

확인 항목확인 내용
Trigger작업을 시작한 요청 또는 조건
Flow실행된 파일 작업
Source파일이 준비된 위치
Target파일이 처리된 대상
Files처리된 파일 정보
Progress작업 진행률
Status최종 실행 결과

실행 기록을 통해 협업 요청으로 시작된 파일 작업의 실제 처리 과정과 결과를 관리할 수 있습니다.

예외 대응

연동 과정의 실행 상태를 확인하고 필요한 작업 다시 처리하기

확인이 필요한 작업이 발생하면 요청 수신, 서비스 연결, 권한, 파일 작업 순서로 실행 상태를 확인합니다.

RunsAudit Log를 활용하면 작업이 진행된 단계와 상세 기록을 기준으로 확인 범위를 정리할 수 있습니다.

text
협업 요청
    │
    ▼
서비스 연결
    │
    ▼
권한 확인
    │
    ▼
Flow 실행
    │
    ▼
실행 기록 확인
    │
    ▼
설정 조정
    │
    ▼
작업 재실행

점검 항목확인 내용
요청협업 도구의 작업 요청 정보
서비스 연결Slack 또는 Teams 연동 상태
권한요청 사용자의 작업 실행 범위
Flow요청과 연결된 파일 작업
파일 경로Source와 Target 설정
실행 기록Run과 Audit Log

이처럼 협업 도구의 요청부터 파일 작업 실행, 결과 확인까지 각 단계의 연결 상태를 관리하면 협업 환경과 파일 전송 환경을 하나의 자동화 흐름으로 운영할 수 있습니다.

개발자

협업 도구 연동을 등록하고, 워크스페이스의 전송 이벤트가 자동으로 알림으로 발송되게 하기

연동 준비

공통 호출 코드와 상태 값 준비하기

import os
import requests

BASE_URL = os.getenv("INNORIX_BASE_URL", "https://app.innorix.com").rstrip("/")
TOKEN = os.environ["INNORIX_ACCESS_TOKEN"]
WORKSPACE_ID = os.getenv("INNORIX_WORKSPACE_ID")

STATUS_COMPLETE = 2
TERMINAL = {2, 4, 5, 9, 99}          # complete / error / cancelled / partial / failed


def api(method, path, body=None, params=None):
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {TOKEN}",
    }

    # When omitted the account's current workspace is used.
    if WORKSPACE_ID:
        headers["x-workspace-id"] = WORKSPACE_ID

    response = requests.request(method, BASE_URL + path, headers=headers,
                                json=body, params=params, timeout=30)

    if not response.ok:
        raise RuntimeError((response.json() or {}).get("message") or response.status_code)

    return (response.json() or {}).get("data")

연동 규칙 조회

연동이 요구하는 필드를 미리 확인하기

연동 유형마다 필요한 필드가 다릅니다. 등록 전에 규칙을 조회해 어떤 값을 채워야 하는지 확인합니다.

data = api("GET", "/api/integrations/rules/slack") or {}

# the response nests once more under the type name: data.slack.fields
rule = data.get("slack") or next(iter(data.values()), {})

print(rule.get("category"), rule.get("modes"))

for field in rule.get("fields") or []:
    mark = "required" if field.get("required") else "optional"
    print(f"  {field.get('id'):20} {field.get('type'):10} {mark}")

응답은 유형 이름으로 한 번 더 중첩되어, 필드 목록은 data.slack.fields에 있습니다. Teams 연동은 slack 대신 teams로 조회합니다.

연동 등록

알림을 보낼 이벤트를 지정해 연동 등록하기

연동을 등록할 때 notificationConfig.events에 알림을 발송할 이벤트를 지정합니다. 이후 같은 워크스페이스의 전송·자동화가 그 이벤트에 도달하면 서버가 자동으로 알림을 발송합니다. 전송마다 연동을 붙일 필요가 없습니다.

def create_slack_integration(name, webhook_url, channel, on=None):
    # events mapped to true are the ones that fire
    events = {e: True for e in (on or ["completed", "error"])}

    body = {
        "name": name,
        "type": "slack",
        "mode": "webhook",
        "webhookUrl": webhook_url,
        "config": {
            "name": name,
            "webhookUrl": webhook_url,
            "channel": channel,
        },
        # this is what wires transfer/automation events to the integration
        "notificationConfig": {"events": events},
    }

    result = api("POST", "/api/integrations", body) or {}
    return result.get("integrationId")


integration_id = create_slack_integration(
    "transfer alerts", "https://hooks.slack.com/services/...",
    "#file-ops", on=["completed", "error"])

지정할 수 있는 이벤트는 다음과 같습니다.

이벤트시점
started전송 시작
completed전송 완료
paused · resumed일시정지 · 재개
recovered중단 후 복구
canceled취소
error실패
skipped정책으로 건너뜀

true로 지정한 이벤트에만 알림이 발송됩니다. Teams 연동은 typeteams로 두고 같은 구조로 등록합니다.

자동 알림 확인

연동 등록 후 전송이 자동으로 알림을 발송하는지 확인하기

연동이 등록되면 그 워크스페이스의 전송은 별도 설정 없이 알림을 발송합니다. 일반 전송을 하나 만들어 확인합니다.

import time


def is_terminal(detail):
    return detail.get("isTerminal", detail.get("status") in TERMINAL)


def send(source, target, files, target_path):
    transfer = api("POST", "/api/transfers/manual", {
        "sourceDevice": source,
        "targetDevice": target,
        "targetPath": target_path,
        "sourceItem": [{"path": p, "isDir": False} for p in files],
        "sendAllFolder": False,
        "transferOptions": {"target-action": "numbering"},
    })
    return transfer["monitorId"]


# with an integration in place, this transfer fires completed·error notifications
monitor_id = send("device-a", "device-b", ["/data/report.pdf"], "/archive")

deadline = time.time() + 1800
while time.time() < deadline:
    detail = api("GET", f"/api/transfers/{monitor_id}")
    if is_terminal(detail):
        break
    time.sleep(3)

알림은 연동에 걸린 이벤트에만 발송됩니다. 전송 코드에는 알림에 관한 지정이 없습니다. 연동 등록이 워크스페이스 단위로 적용되기 때문입니다.

연동 관리

등록된 연동을 조회하고 정리하기

result = api("GET", "/api/integrations", params={"page": 1, "size": 100}) or {}

for item in result.get("data") or []:
    print(item.get("integrationId"), item.get("type"),
          item.get("name"), item.get("notificationConfig", {}).get("events"))


# Delete an integration you no longer use.
api("DELETE", f"/api/integrations/{integration_id}")
확인 항목확인 내용
연동 규칙유형이 요구하는 필드
연동 등록notificationConfig.events에 지정한 이벤트
자동 알림워크스페이스 전송의 이벤트 발송
관리등록된 연동 조회와 삭제