OpenClaw

OpenClaw DingTalk 채널

엔터프라이즈
보통

커뮤니티 플러그인을 사용하여 OpenClaw를 DingTalk(钉钉)에 연결합니다. 이 통합은 DingTalk의 Stream 모드(WebSocket 롱 커넥션)를 사용하므로 공인 IP나 도메인이 필요 없습니다. 개인 채팅, 그룹 채팅, 텍스트/이미지/음성/동영상/파일 등의 메시지 유형과 AI Card 스트리밍 응답을 지원합니다. 플러그인을 설치하고 DingTalk 기업 내부 앱을 생성한 후 인증 정보를 입력하면 바로 시작할 수 있습니다.

기본 정보
난이도보통
카테고리엔터프라이즈
지원 기능 수4 / 6

DingTalk 지원 기능

텍스트 메시지

지원

미디어 및 파일

지원

리액션

미지원

스레드

미지원

음성 메시지

지원

그룹 채팅

지원

DingTalk 사전 요구사항

  • DingTalk 조직 관리자 권한 또는 앱 개발 권한
  • DingTalk 플러그인 설치: openclaw plugins install @soimy/dingtalk
  • OpenClaw Gateway 실행 및 구성 완료
  • 서버에 Node.js 18+ 설치

DingTalk 빠른 설정

1

DingTalk 플러그인 설치

터미널에서 'openclaw plugins install @soimy/dingtalk'을 실행하여 커뮤니티 DingTalk 플러그인을 설치합니다. AI Card 스트리밍 응답이 필요한 경우 '@dingtalk-real-ai/dingtalk-connector' 플러그인도 선택할 수 있습니다.

2

DingTalk 기업 내부 앱 생성

DingTalk 오픈 플랫폼(open-dev.dingtalk.com)에 로그인하여 기업 내부 앱을 생성합니다. 앱 인증 정보 페이지에서 ClientID(AppKey)와 ClientSecret(AppSecret)을 복사합니다. 앱 기능에서 '봇' 기능을 추가하고 메시지 수신 모드에서 Stream 모드를 선택합니다.

3

권한 구성 및 게시

권한 관리에서 필요한 권한을 부여합니다: Card.Instance.Write, Card.Streaming.Write, 봇 메시지 전송, 미디어 파일 업로드 등. 완료 후 앱을 게시하고 승인을 기다립니다.

4

OpenClaw 구성 및 테스트

~/.openclaw/openclaw.json에 DingTalk 채널 구성을 추가하고 clientId와 clientSecret을 입력합니다. 'openclaw gateway restart'로 Gateway를 재시작하고 DingTalk에서 봇에게 메시지를 보내 테스트합니다.

DingTalk 구성 예시

config.json
{
  "channels": {
    "dingtalk": {
      "enabled": true,
      "clientId": "dingXXXXXX",
      "clientSecret": "your-app-secret",
      "robotCode": "dingXXXXXX",
      "corpId": "dingXXXXXX",
      "dmPolicy": "open",
      "groupPolicy": "open",
      "messageType": "markdown"
    }
  }
}

DingTalk 통합 가이드

아키텍처 개요

OpenClaw는 DingTalk 오픈 플랫폼의 Stream 모드(WebSocket 롱 커넥션)로 DingTalk에 연결됩니다. 기존 Webhook과 달리 Stream 모드에서는 Gateway가 DingTalk 서버에 대한 WebSocket 연결을 능동적으로 시작하여 실시간으로 이벤트 푸시를 수신하므로 공인 IP나 도메인이 필요 없습니다. 메시지 흐름: 사용자가 DingTalk에서 메시지 전송 → DingTalk 오픈 플랫폼 → Stream으로 Gateway에 푸시 → OpenClaw가 AI로 처리 → DingTalk Bot API를 통해 응답 → DingTalk에서 메시지 전달. 이 아키텍처는 NAT 또는 기업 방화벽 뒤의 셀프 호스팅 배포에 이상적입니다. Gateway는 자동으로 연결을 유지하고 연결 끊김 시 지수 백오프 전략으로 재연결을 처리합니다.
Stream 모드는 공인 IP 불필요, SSL 인증서 불필요로 기업 내부 네트워크와 가정 네트워크에서도 정상 작동합니다.
DingTalk 플러그인은 커뮤니티에서 유지 관리하며 OpenClaw 코어와 분리되어 설치되므로 Gateway를 경량으로 유지합니다.

플러그인 선택

DingTalk 연결에는 두 가지 주요 커뮤니티 플러그인이 있습니다: • @soimy/dingtalk — 가장 인기 있는 플러그인으로 커뮤니티가 활발하게 유지 관리합니다. Markdown과 AI Card 두 가지 응답 형식을 지원하며 기능이 풍부하고 안정적입니다. • @dingtalk-real-ai/dingtalk-connector — DingTalk 공식 연관 프로젝트로 AI Card 스트리밍 응답에 특화되어 있습니다. 멀티 에이전트 라우팅과 비동기 모드를 지원하며 OpenClaw v0.7.7+ 이상이 필요합니다. 두 플러그인 모두 Stream 모드로 연결하며 핵심 경험은 동일합니다. 선택 가이드: 초보자는 @soimy 버전(자료가 풍부함), 멀티 에이전트나 비동기 처리가 필요한 경우 @dingtalk-real-ai 버전을 추천합니다.
terminal
# @soimy 버전 설치 (권장)
openclaw plugins install @soimy/dingtalk

# 또는 @dingtalk-real-ai 버전 설치
openclaw plugins install @dingtalk-real-ai/dingtalk-connector

DingTalk 앱 생성 및 인증 정보 획득

DingTalk 통합 설정을 위해 DingTalk 오픈 플랫폼에서 앱을 생성해야 합니다: 1. DingTalk 오픈 플랫폼 open-dev.dingtalk.com에 로그인하고 개발자 대시보드로 이동합니다. 2. '앱 생성'을 클릭하고 '기업 내부 개발' → '봇' 유형을 선택합니다. 3. 앱 이름과 설명을 입력하고 생성 완료 후 '인증 정보 및 기본 정보' 페이지에서 ClientID(AppKey, 형식 dingXXX)와 ClientSecret(AppSecret)을 복사합니다. 4. '봇 구성'에서 메시지 수신 모드를 **Stream 모드**(HTTP 모드가 아님)로 설정합니다. 5. 권한 관리에서 필요한 권한을 추가합니다. 주요 권한: - qyapi_robot_sendmsg(봇 메시지 전송) - Card.Instance.Write(카드 인스턴스 쓰기) - Card.Streaming.Write(스트리밍 카드 쓰기) - mediaId.download 및 mediaId.upload(미디어 파일 업로드/다운로드) 6. 앱을 게시하고 조직 관리자의 승인을 기다립니다.
terminal
# 환경 변수 사용
export DINGTALK_CLIENT_ID="dingXXXXXX"
export DINGTALK_CLIENT_SECRET="your_app_secret"

# 또는 CLI 사용
openclaw channels add
ClientSecret을 안전하게 보관하세요. 버전 관리 시스템에 커밋하지 마세요. 프로덕션 환경에서는 환경 변수를 사용하세요. 유출 시 DingTalk 오픈 플랫폼 콘솔에서 즉시 재설정하세요.

개인 채팅 및 그룹 채팅 정책

DingTalk 플러그인은 유연한 메시지 정책 구성을 지원합니다: **개인 채팅 정책(dmPolicy)**: • open — 누구나 봇과 개인 채팅으로 응답을 받을 수 있음 • disabled — 개인 채팅 기능 비활성화 **그룹 채팅 정책(groupPolicy)**: • open — 그룹 내 누구나 @봇으로 응답을 트리거할 수 있음 • disabled — 그룹 채팅 메시지를 완전히 무시 그룹 채팅에서는 기본적으로 @봇이 필요하여 활발한 그룹에서 모든 메시지에 응답하는 것을 방지합니다.
openclaw.json
{
  "channels": {
    "dingtalk": {
      "dmPolicy": "open",
      "groupPolicy": "open"
    }
  }
}
그룹 채팅에서 @봇 이름으로 트리거할 수 있으며 추가 구성은 필요 없습니다.
세션은 대화 단위로 격리되며 서로 다른 채팅에는 각각 독립적인 컨텍스트가 있습니다. 30분 동안 활동이 없으면 세션이 자동 초기화됩니다.

응답 형식 및 AI Card 스트리밍 출력

DingTalk 플러그인은 여러 응답 형식을 지원합니다: • **텍스트(text)** — 가장 기본적인 일반 텍스트 응답 • **Markdown** — 제목, 목록, 링크 등 서식이 있는 콘텐츠 지원. 기본 권장 • **AI Card(스트리밍)** — ChatGPT와 같은 타이핑 효과로 메시지가 카드 안에서 점진적으로 업데이트됨 AI Card 스트리밍 출력은 최고의 사용자 경험을 제공하며 메시지가 그 자리에서 업데이트되어 여러 메시지가 생성되지 않습니다. DingTalk 앱에서 Card 관련 권한을 부여해야 합니다.
openclaw.json
{
  "channels": {
    "dingtalk": {
      "messageType": "markdown",
      "streaming": true
    }
  }
}
AI Card 스트리밍 출력에는 Card.Instance.Write와 Card.Streaming.Write 권한 부여가 필요합니다.
스트리밍 효과가 필요 없으면 messageType을 markdown으로 설정하고 streaming을 비활성화하세요.

메시지 유형 및 미디어 지원

OpenClaw DingTalk 플러그인은 다양한 메시지 유형을 처리합니다: **수신 지원**: 텍스트, 이미지, 음성(자동 음성 인식), 동영상, 파일 **파일 분석**: .docx, .pdf, .txt, .md, .json, .xlsx, .pptx, .zip 등의 형식을 AI가 읽고 분석 가능 **송신 지원**: 텍스트, Markdown, AI Card, 이미지, 파일 음성 메시지는 자동으로 텍스트로 변환된 후 AI에 전달됩니다. 추가 구성은 필요 없습니다.
대용량 파일을 보내기 전에 DingTalk 앱에 미디어 업로드 권한이 부여되었는지 확인하세요.
음성 메시지는 자동으로 텍스트로 인식됩니다.

멀티 에이전트 라우팅

@dingtalk-real-ai 버전의 플러그인을 사용하면 멀티 에이전트 라우팅을 구성하여 서로 다른 AI 에이전트가 서로 다른 유형의 대화를 처리할 수 있습니다. 예를 들어 개인 채팅은 범용 어시스턴트, 특정 그룹 채팅은 전문 분야 에이전트에 할당할 수 있습니다. OpenClaw의 bindings 구성을 통해 각 대화의 에이전트 할당을 세밀하게 제어할 수 있습니다.
openclaw.json
{
  "bindings": [
    { "agentId": "main", "match": { "channel": "dingtalk", "peer": { "kind": "direct" } } },
    { "agentId": "tech-support", "match": { "channel": "dingtalk", "peer": { "kind": "group" } } }
  ]
}
멀티 에이전트 라우팅은 @dingtalk-real-ai 버전만 지원하며, @soimy 버전은 현재 지원하지 않습니다.

유용한 명령어

OpenClaw는 DingTalk 봇 관리를 위한 여러 명령어를 제공합니다: • openclaw gateway status — Gateway 연결 상태 확인 • openclaw gateway restart — Gateway 서비스 재시작 • openclaw logs --follow — 실시간 로그 보기 • openclaw channels add — 대화형으로 채널 추가 • openclaw plugins list — 설치된 플러그인 보기 • openclaw plugins update @soimy/dingtalk — DingTalk 플러그인 업데이트 • openclaw doctor — 종합 진단

DingTalk 구성 참조

enabled
Type: booleanDefault: true

DingTalk 채널 활성화/비활성화

clientId
Type: stringDefault: ""

DingTalk 앱의 ClientID(AppKey), 형식 dingXXX, DingTalk 오픈 플랫폼에서 획득

clientSecret
Type: stringDefault: ""

DingTalk 앱의 ClientSecret(AppSecret), DingTalk 오픈 플랫폼에서 획득

robotCode
Type: stringDefault: ""

봇의 고유 식별 코드, DingTalk 오픈 플랫폼의 봇 구성 페이지에서 획득

corpId
Type: stringDefault: ""

기업의 CorpId, 형식 dingXXX, DingTalk 관리 콘솔에서 획득

agentId
Type: stringDefault: ""

앱의 AgentId, DingTalk 오픈 플랫폼에서 획득

dmPolicy
Type: stringDefault: "open"

개인 채팅 정책. 옵션: open(개방), disabled(비활성화)

groupPolicy
Type: stringDefault: "open"

그룹 채팅 정책. 옵션: open(개방), disabled(비활성화)

messageType
Type: stringDefault: "markdown"

응답 메시지 형식. 옵션: text(일반 텍스트), markdown, card(AI Card)

streaming
Type: booleanDefault: true

AI Card 스트리밍 응답(타이핑 효과) 활성화

debug
Type: booleanDefault: false

디버그 모드를 활성화하여 상세한 연결 및 메시지 로그 출력

DingTalk 자주 묻는 질문

DingTalk 문제 해결

봇이 전혀 응답하지 않음

앱이 게시되지 않았거나, Stream 모드가 활성화되지 않았거나, ClientID 또는 ClientSecret이 잘못되었거나, 플러그인이 올바르게 설치되지 않았을 수 있습니다.

순서대로 확인하세요: 1) 앱이 게시되고 승인되었는지, 2) 메시지 수신 모드가 Stream 모드인지, 3) ClientID와 ClientSecret을 재확인, 4) openclaw plugins list로 플러그인 설치 확인, 5) openclaw gateway status로 연결 상태 확인.
메시지는 수신되지만 AI가 응답하지 않음

OpenClaw 버전 업그레이드 후 호환성 문제이거나 AI 모델의 API Key가 구성되지 않았을 수 있습니다.

AI 모델의 API Key가 올바르게 구성되었는지 확인하세요. DingTalk 플러그인 업데이트를 시도하세요: openclaw plugins update @soimy/dingtalk. openclaw logs --follow로 상세 오류 정보를 확인하세요.
Stream 연결이 자주 끊김

네트워크 불안정 또는 DingTalk Stream 모드의 알려진 메시지 유실 문제.

Gateway는 자동으로 연결 끊김을 재연결합니다(지수 백오프 전략). 자주 끊기면 서버 네트워크 안정성을 확인하고 방화벽이 아웃바운드 WebSocket 연결을 허용하는지 확인하세요. 디버그 모드를 활성화하여 상세 연결 로그를 확인하세요.
그룹 파일 또는 DingTalk 드라이브 파일에 접근 불가

그룹 파일 및 DingTalk 드라이브 API에는 기업 인증이 필요할 수 있으며, 미인증 조직에서는 이러한 기능을 사용할 수 없을 수 있습니다.

조직이 기업 인증을 완료했는지 확인하세요. 미인증인 경우 일부 고급 파일 API를 사용할 수 없습니다. DingTalk 드라이브 공유 대신 파일을 직접 전송하여 이 제한을 우회할 수 있습니다.
AI Card 스트리밍 출력이 작동하지 않음

Card 관련 권한이 부족하거나 messageType 구성이 올바르지 않습니다.

DingTalk 오픈 플랫폼에서 Card.Instance.Write와 Card.Streaming.Write 권한이 부여되었는지 확인하세요. 구성에서 streaming이 true인지 확인하세요. 권한 변경 후 앱을 다시 게시해야 합니다.