OpenClaw DingTalk 채널
커뮤니티 플러그인을 사용하여 OpenClaw를 DingTalk(钉钉)에 연결합니다. 이 통합은 DingTalk의 Stream 모드(WebSocket 롱 커넥션)를 사용하므로 공인 IP나 도메인이 필요 없습니다. 개인 채팅, 그룹 채팅, 텍스트/이미지/음성/동영상/파일 등의 메시지 유형과 AI Card 스트리밍 응답을 지원합니다. 플러그인을 설치하고 DingTalk 기업 내부 앱을 생성한 후 인증 정보를 입력하면 바로 시작할 수 있습니다.
DingTalk 지원 기능
텍스트 메시지
지원
미디어 및 파일
지원
리액션
미지원
스레드
미지원
음성 메시지
지원
그룹 채팅
지원
DingTalk 사전 요구사항
- DingTalk 조직 관리자 권한 또는 앱 개발 권한
- DingTalk 플러그인 설치: openclaw plugins install @soimy/dingtalk
- OpenClaw Gateway 실행 및 구성 완료
- 서버에 Node.js 18+ 설치
DingTalk 빠른 설정
DingTalk 플러그인 설치
터미널에서 'openclaw plugins install @soimy/dingtalk'을 실행하여 커뮤니티 DingTalk 플러그인을 설치합니다. AI Card 스트리밍 응답이 필요한 경우 '@dingtalk-real-ai/dingtalk-connector' 플러그인도 선택할 수 있습니다.
DingTalk 기업 내부 앱 생성
DingTalk 오픈 플랫폼(open-dev.dingtalk.com)에 로그인하여 기업 내부 앱을 생성합니다. 앱 인증 정보 페이지에서 ClientID(AppKey)와 ClientSecret(AppSecret)을 복사합니다. 앱 기능에서 '봇' 기능을 추가하고 메시지 수신 모드에서 Stream 모드를 선택합니다.
권한 구성 및 게시
권한 관리에서 필요한 권한을 부여합니다: Card.Instance.Write, Card.Streaming.Write, 봇 메시지 전송, 미디어 파일 업로드 등. 완료 후 앱을 게시하고 승인을 기다립니다.
OpenClaw 구성 및 테스트
~/.openclaw/openclaw.json에 DingTalk 채널 구성을 추가하고 clientId와 clientSecret을 입력합니다. 'openclaw gateway restart'로 Gateway를 재시작하고 DingTalk에서 봇에게 메시지를 보내 테스트합니다.
DingTalk 구성 예시
{
"channels": {
"dingtalk": {
"enabled": true,
"clientId": "dingXXXXXX",
"clientSecret": "your-app-secret",
"robotCode": "dingXXXXXX",
"corpId": "dingXXXXXX",
"dmPolicy": "open",
"groupPolicy": "open",
"messageType": "markdown"
}
}
}DingTalk 통합 가이드
아키텍처 개요
플러그인 선택
# @soimy 버전 설치 (권장)
openclaw plugins install @soimy/dingtalk
# 또는 @dingtalk-real-ai 버전 설치
openclaw plugins install @dingtalk-real-ai/dingtalk-connectorDingTalk 앱 생성 및 인증 정보 획득
# 환경 변수 사용
export DINGTALK_CLIENT_ID="dingXXXXXX"
export DINGTALK_CLIENT_SECRET="your_app_secret"
# 또는 CLI 사용
openclaw channels add개인 채팅 및 그룹 채팅 정책
{
"channels": {
"dingtalk": {
"dmPolicy": "open",
"groupPolicy": "open"
}
}
}응답 형식 및 AI Card 스트리밍 출력
{
"channels": {
"dingtalk": {
"messageType": "markdown",
"streaming": true
}
}
}메시지 유형 및 미디어 지원
멀티 에이전트 라우팅
{
"bindings": [
{ "agentId": "main", "match": { "channel": "dingtalk", "peer": { "kind": "direct" } } },
{ "agentId": "tech-support", "match": { "channel": "dingtalk", "peer": { "kind": "group" } } }
]
}유용한 명령어
DingTalk 구성 참조
| Key | Type | Default | Description |
|---|---|---|---|
| enabled | boolean | true | DingTalk 채널 활성화/비활성화 |
| clientId | string | "" | DingTalk 앱의 ClientID(AppKey), 형식 dingXXX, DingTalk 오픈 플랫폼에서 획득 |
| clientSecret | string | "" | DingTalk 앱의 ClientSecret(AppSecret), DingTalk 오픈 플랫폼에서 획득 |
| robotCode | string | "" | 봇의 고유 식별 코드, DingTalk 오픈 플랫폼의 봇 구성 페이지에서 획득 |
| corpId | string | "" | 기업의 CorpId, 형식 dingXXX, DingTalk 관리 콘솔에서 획득 |
| agentId | string | "" | 앱의 AgentId, DingTalk 오픈 플랫폼에서 획득 |
| dmPolicy | string | "open" | 개인 채팅 정책. 옵션: open(개방), disabled(비활성화) |
| groupPolicy | string | "open" | 그룹 채팅 정책. 옵션: open(개방), disabled(비활성화) |
| messageType | string | "markdown" | 응답 메시지 형식. 옵션: text(일반 텍스트), markdown, card(AI Card) |
| streaming | boolean | true | AI Card 스트리밍 응답(타이핑 효과) 활성화 |
| debug | boolean | false | 디버그 모드를 활성화하여 상세한 연결 및 메시지 로그 출력 |
DingTalk 채널 활성화/비활성화
DingTalk 앱의 ClientID(AppKey), 형식 dingXXX, DingTalk 오픈 플랫폼에서 획득
DingTalk 앱의 ClientSecret(AppSecret), DingTalk 오픈 플랫폼에서 획득
봇의 고유 식별 코드, DingTalk 오픈 플랫폼의 봇 구성 페이지에서 획득
기업의 CorpId, 형식 dingXXX, DingTalk 관리 콘솔에서 획득
앱의 AgentId, DingTalk 오픈 플랫폼에서 획득
개인 채팅 정책. 옵션: open(개방), disabled(비활성화)
그룹 채팅 정책. 옵션: open(개방), disabled(비활성화)
응답 메시지 형식. 옵션: text(일반 텍스트), markdown, card(AI Card)
AI Card 스트리밍 응답(타이핑 효과) 활성화
디버그 모드를 활성화하여 상세한 연결 및 메시지 로그 출력
DingTalk 자주 묻는 질문
DingTalk 문제 해결
앱이 게시되지 않았거나, Stream 모드가 활성화되지 않았거나, ClientID 또는 ClientSecret이 잘못되었거나, 플러그인이 올바르게 설치되지 않았을 수 있습니다.
OpenClaw 버전 업그레이드 후 호환성 문제이거나 AI 모델의 API Key가 구성되지 않았을 수 있습니다.
네트워크 불안정 또는 DingTalk Stream 모드의 알려진 메시지 유실 문제.
그룹 파일 및 DingTalk 드라이브 API에는 기업 인증이 필요할 수 있으며, 미인증 조직에서는 이러한 기능을 사용할 수 없을 수 있습니다.
Card 관련 권한이 부족하거나 messageType 구성이 올바르지 않습니다.