2026년 06월 17일

카카오톡 채널 봇과 OpenClaw 연결 작업 정리

카카오톡 채널 봇과 OpenClaw 연결 작업 정리

작성일: 2026-06-17
기준 환경: 보스의 OpenClaw / n8n / Nextcloud Talk 운영 환경

결론

카카오톡 채널 봇은 현재 n8n 웹훅을 통해 요청을 받고, 로컬 OpenClaw 릴레이를 거쳐 OpenClaw 에이전트에 메시지를 전달하는 구조로 연결되어 있다.

  • KakaoTalk Channel Bot: 사용자 메시지 입력 지점
  • n8n workflow: Kakao OpenClaw Skill Webhook
  • n8n workflow ID: DfM6KE0uX1PBTTBT
  • n8n webhook path: kakao-openclaw-skill
  • 로컬 릴레이 스크립트: /home/mmm/.openclaw/workspace/scripts/kakao_openclaw_relay.py
  • 릴레이 주소: http://192.168.219.119:8791/kakao-openclaw
  • 릴레이 health check: http://192.168.219.119:8791/health
  • systemd user service: kakao-openclaw-relay.service
  • OpenClaw session key 형식: kakao-channel-{카카오 userId}

비밀값, API 키, 계정 비밀번호는 이 문서에 포함하지 않았다.

전체 구조

  1. 사용자가 카카오톡 채널 봇에 메시지를 보낸다.
  2. 카카오 챗봇 스킬 서버가 n8n webhook으로 요청을 보낸다.
  3. n8n의 Kakao Skill Webhook 노드가 요청을 받는다.
  4. Normalize Kakao Request 노드가 카카오 요청을 OpenClaw 입력 형식으로 정리한다.
  5. callbackUrl이 있으면 카카오에 먼저 useCallback: true 응답을 보낸다.
  6. n8n이 로컬 릴레이 kakao_openclaw_relay.py를 호출한다.
  7. 릴레이가 openclaw agent --session-key ... --message ... 명령으로 OpenClaw 에이전트에 요청한다.
  8. OpenClaw 응답을 릴레이가 JSON으로 반환한다.
  9. n8n이 응답을 카카오 callback URL로 다시 전송한다.
  10. 사용자는 카카오톡 채널에서 최종 답변을 받는다.

진행 순서

1. 카카오톡 측 연결 테스트 완료

먼저 카카오톡 쪽에서 n8n으로 요청이 들어오는지 테스트했다. 초기 상태에서는 n8n workflow가 단순 echo 응답을 반환하는 구조였다.

  • 카카오 챗봇 스킬 요청이 n8n까지 도착하는지 확인
  • userRequest.utterance 값을 읽어 응답으로 돌려줄 수 있는지 확인

이 단계에서 카카오톡과 n8n 사이의 기본 연결은 정상으로 확인되었다.

2. 목표 변경: Nextcloud Talk처럼 OpenClaw 작업 가능하게 만들기

보스의 요구사항은 단순 응답 봇이 아니라, Nextcloud Talk에서 하던 작업을 카카오톡 채널에서도 비슷하게 수행하는 것이었다.

  • 단순 echo 응답 제거
  • 카카오 메시지를 OpenClaw용 prompt로 변환
  • 사용자별 session key를 만들어 대화 맥락 유지
  • 긴 작업을 위해 카카오 callback 방식 사용

3. n8n workflow를 callback 구조로 변경

n8n workflow 이름은 Kakao OpenClaw Skill Webhook이다. 현재 활성 상태이며, 주요 노드는 다음과 같다.

  • Kakao Skill Webhook
  • Normalize Kakao Request
  • Has Kakao Callback URL
  • Respond Accepted to Kakao
  • Respond Direct to Kakao
  • Call OpenClaw Relay
  • Build Kakao Callback Response
  • Send Kakao Callback

핵심 분기는 callbackUrl 존재 여부다. callbackUrl이 있으면 카카오에 즉시 useCallback: true 응답을 보내고, 이후 OpenClaw 처리 결과를 callback URL로 전송한다. callbackUrl이 없으면 긴 작업 처리가 어렵기 때문에 카카오 챗봇 관리자센터에서 Callback 설정이 필요하다는 직접 안내 메시지를 반환한다.

확인 필요: 카카오 챗봇 관리자센터에서 실제 운영 스킬의 Callback 설정이 항상 켜져 있는지 확인해야 한다.

4. 로컬 OpenClaw 릴레이 추가

OpenClaw CLI를 n8n에서 직접 다루기보다, 로컬 릴레이 서버를 두었다.

/home/mmm/.openclaw/workspace/scripts/kakao_openclaw_relay.py
  • n8n에서 JSON 요청 수신
  • prompt, message, userId, sessionKey 처리
  • OpenClaw CLI 실행
  • OpenClaw 응답 추출
  • 카카오로 보내기 쉬운 JSON 반환
GET  /health
POST /kakao-openclaw

5. systemd user service로 릴레이 상시 실행

릴레이는 사용자 systemd 서비스로 등록했다.

서비스 이름: kakao-openclaw-relay.service
서비스 파일: /home/mmm/.config/systemd/user/kakao-openclaw-relay.service
[Unit]
Description=Kakao to OpenClaw local relay
After=network-online.target openclaw-gateway.service

[Service]
Type=simple
WorkingDirectory=/home/mmm/.openclaw/workspace
ExecStart=/home/mmm/.openclaw/workspace/scripts/kakao_openclaw_relay.py
Restart=on-failure
RestartSec=5
TimeoutStopSec=300
Environment=PATH=/home/mmm/.npm-global/bin:/usr/local/bin:/usr/bin:/bin

[Install]
WantedBy=default.target

2026-06-17 21:24 KST 기준으로 서비스는 active running 상태이며, python3 /home/mmm/.openclaw/workspace/scripts/kakao_openclaw_relay.py로 실행 중이다.

6. timeout 문제 확인 및 보강

운영 테스트 중 일부 요청이 약 60초 후 실패했다. n8n은 카카오 요청을 정상 수신했지만 Call OpenClaw Relay 노드에서 504 openclaw_timeout으로 끝나는 경우가 있었다.

  • 릴레이의 OpenClaw CLI timeout을 240초로 조정
  • Python subprocess timeout을 250초로 조정
  • n8n Call OpenClaw Relay timeout을 260000ms로 조정
  • timeout 발생 시 HTTP 504가 아니라 HTTP 200 fallback JSON 반환

이렇게 바꾼 이유는 n8n workflow가 relay 실패로 끊기지 않게 하고, 카카오 사용자에게 아무 응답도 없는 상태를 줄이기 위해서다.

7. 릴레이 재시작 중 연결 끊김 문제 보강

운영 중 릴레이 서비스를 재시작했을 때, 이미 처리 중이던 n8n 요청이 끊기는 문제가 있었다. 확인된 사례는 n8n execution 25054이며, 2026-06-17 20:27:53 KST에 시작된 요청이 릴레이 재시작으로 중간 종료되었다.

  • 릴레이에 graceful shutdown 추가
  • SIGTERM / SIGINT 수신 시 draining 모드 진입
  • 처리 중인 요청 수 추적
  • 최대 270초까지 active request 완료 대기
  • systemd TimeoutStopSec=300 적용

8. 사용자별 OpenClaw 세션 분리

카카오톡 채널에서는 사용자별 맥락이 필요하다. 현재 session key 규칙은 다음과 같다.

kakao-channel-{safe userId}

n8n이 sessionKey를 넘기면 그 값을 사용한다. n8n 또는 다른 호출자가 sessionKey를 생략하면 릴레이가 userId 또는 user_id를 기준으로 자동 생성한다.

현재 n8n workflow 요약

Kakao Skill Webhook
  -> Normalize Kakao Request
  -> Has Kakao Callback URL
      -> true: Respond Accepted to Kakao
          -> Call OpenClaw Relay
          -> Build Kakao Callback Response
          -> Send Kakao Callback
      -> false: Respond Direct to Kakao
  • 워크플로우: Kakao OpenClaw Skill Webhook
  • 상태: active
  • 워크플로우 ID: DfM6KE0uX1PBTTBT
  • 릴레이 호출 주소: http://192.168.219.119:8791/kakao-openclaw
  • 릴레이 timeout: 260000ms

운영 확인 명령

systemctl --user status kakao-openclaw-relay.service --no-pager
systemctl --user cat kakao-openclaw-relay.service
curl -fsS http://192.168.219.119:8791/health
curl -fsS -X POST http://192.168.219.119:8791/kakao-openclaw \
  -H 'Content-Type: application/json' \
  -d '{
    "userId": "relay-session-test",
    "message": "OK라고만 답해줘",
    "prompt": "OK라고만 답해줘"
  }'

장애 대응 기준

카카오에서 답변이 아예 안 올 때:

  1. 카카오 챗봇 관리자센터에서 Callback 설정이 켜져 있는지 확인
  2. n8n workflow가 active인지 확인
  3. n8n execution에서 실패 노드 확인
  4. 릴레이 health check 확인
  5. kakao-openclaw-relay.service 상태 확인
  6. OpenClaw CLI 직접 호출 가능 여부 확인

n8n에서 Respond Direct to Kakao로 끝날 때: 카카오 요청에 callbackUrl이 없었다는 뜻이다. 카카오 챗봇 관리자센터 Callback 설정을 우선 확인해야 한다.

n8n에서 Call OpenClaw Relay가 실패할 때: 릴레이 서비스 중지, 릴레이 재시작 중 요청 유입, OpenClaw CLI 응답 지연, 로컬 네트워크 주소 변경, n8n의 릴레이 접근 실패를 순서대로 확인한다.

현재 남은 확인 사항

  • 확인 필요: 카카오 챗봇 관리자센터에서 운영 스킬의 Callback 설정이 켜져 있는지
  • 확인 필요: 실제 카카오 사용자 메시지에서 항상 callbackUrl이 들어오는지
  • 확인 필요: 외부 접속 경로에서 n8n webhook URL이 안정적으로 접근 가능한지
  • 확인 필요: 장시간 작업을 카카오톡에서 어느 정도까지 허용할지 운영 기준

다음 개선 후보

  1. n8n execution 로그를 기준으로 실패 유형별 알림 만들기
  2. 릴레이 로그 파일 저장 추가
  3. 사용자에게 긴 작업 접수 메시지를 더 자연스럽게 조정
  4. OpenClaw 응답이 1000자를 넘을 때 분할 전송 전략 검토
  5. 카카오 세션별 최근 대화 상태 점검 명령 추가
  6. 릴레이 주소가 바뀌었을 때 n8n 설정을 쉽게 갱신하는 절차 문서화

현재 상태 요약

2026-06-17 21:24 KST 기준으로 서버 측 구성은 정상이다. n8n workflow는 active 상태이고, 로컬 릴레이 서비스는 running 상태이며, 릴레이 health check가 가능하다. 카카오 callback flow는 n8n에서 구성되어 있고, OpenClaw 세션은 카카오 사용자별로 분리된다. timeout과 재시작 중 연결 끊김 문제에 대한 1차 보강도 적용되었다.

즉, 현재 단계는 기본 연결 구현 완료 후 운영 안정화와 카카오 관리자센터 설정 확인 단계로 보면 된다.