OpenClaw

OpenClaw LINE 채널

메시징
보통

공식 Messaging API를 사용하여 OpenClaw를 LINE에 연결합니다. 이 플러그인 기반 통합을 통해 AI 어시스턴트가 LINE에서 메시지를 주고받을 수 있습니다. LINE은 일본, 대만, 태국 및 동남아시아에서 가장 인기 있는 메시징 플랫폼 중 하나입니다. OpenClaw는 Webhook을 통해 이벤트를 수신하고 Messaging API를 통해 응답하며, Flex Message, 템플릿 메시지, 빠른 답장, 미디어 공유 등 풍부한 메시지 유형을 지원합니다.

기본 정보
난이도보통
카테고리메시징
지원 기능 수3 / 6

LINE 지원 기능

텍스트 메시지

지원

미디어 및 파일

지원

리액션

미지원

스레드

미지원

음성 메시지

미지원

그룹 채팅

지원

LINE 사전 요구사항

  • LINE Developers 계정 (developers.line.biz에서 무료 생성)
  • LINE Developers Console에서 Provider 및 Messaging API 채널 생성
  • Messaging API 채널 설정에서 채널 액세스 토큰 및 채널 시크릿 확인
  • 공개 HTTPS URL로 접근 가능한 OpenClaw Gateway 실행 (Webhook에 필요)
  • LINE 플러그인 설치: openclaw plugins install @openclaw/line

LINE 빠른 설정

1

LINE Messaging API 채널 생성

LINE Developers Console에 로그인하여 Provider를 생성(또는 기존 선택)한 다음 새 Messaging API 채널을 만듭니다. Channel ID, Channel secret을 확인하고 채널 설정 페이지에서 Channel access token을 발급합니다.

2

LINE 플러그인 설치 및 구성 추가

'openclaw plugins install @openclaw/line'을 실행하여 LINE 플러그인을 설치합니다. 그런 다음 ~/.openclaw/openclaw.json에 channelAccessToken과 channelSecret을 포함한 LINE 채널 구성을 추가합니다. 환경 변수 LINE_CHANNEL_ACCESS_TOKEN 및 LINE_CHANNEL_SECRET을 사용할 수도 있습니다.

3

Webhook URL 구성

LINE Developers Console에서 채널의 Messaging API 탭으로 이동합니다. Webhook URL을 'https://<your-gateway-host>/line/webhook'으로 설정하고 'Use webhook'을 활성화합니다. Verify를 클릭하여 엔드포인트에 접근 가능한지 확인합니다. 중복 응답을 방지하기 위해 LINE Official Account Manager에서 자동 응답 및 인사 메시지를 비활성화합니다.

4

테스트 메시지 전송

Console에서 확인할 수 있는 QR 코드를 스캔하여 LINE 봇을 친구로 추가합니다. 봇에게 메시지를 보냅니다. 기본 pairing 정책을 사용하는 경우 터미널에서 'openclaw pairing approve line <code>'로 발신자를 승인합니다.

LINE 구성 예시

config.json
{
  "channels": {
    "line": {
      "enabled": true,
      "channelAccessToken": "YOUR_CHANNEL_ACCESS_TOKEN",
      "channelSecret": "YOUR_CHANNEL_SECRET",
      "dmPolicy": "pairing"
    }
  }
}

LINE 상세 문서

아키텍처 개요

OpenClaw는 공식 Messaging API를 통해 LINE과 통합됩니다. LINE 플랫폼이 이벤트(메시지, 팔로우, 참여)를 Gateway에 푸시하고 OpenClaw가 REST API를 통해 응답하는 Webhook 기반 아키텍처입니다. 흐름은 다음과 같습니다: 사용자가 메시지 전송 → LINE 플랫폼 → Gateway로 Webhook POST → OpenClaw가 AI로 처리 → Messaging API를 통해 응답 → LINE 플랫폼 → 사용자가 응답 수신. 리버스 엔지니어링된 프로토콜과 달리 Messaging API는 LINE Corporation이 공식으로 지원하여 안정적이고 문서화된 엔드포인트와 호환성을 보장합니다. OpenClaw는 모든 수신 이벤트가 인증되도록 Webhook 서명 검증(채널 시크릿을 사용한 HMAC-SHA256)을 자동으로 처리합니다. LINE 플러그인은 'openclaw plugins install @openclaw/line'으로 별도 설치됩니다. 이 모듈형 아키텍처는 코어 Gateway를 경량으로 유지하면서 LINE 전용 기능을 독립적으로 유지보수할 수 있게 합니다.
Gateway는 유효한 SSL 인증서가 있는 공개 HTTPS URL을 통해 접근 가능해야 합니다. 자체 서명 인증서는 LINE의 Webhook 시스템에서 허용되지 않습니다.
다중 계정 설정의 경우 각 계정은 동일한 Gateway의 다른 엔드포인트에서 이벤트를 수신하기 위해 사용자 정의 webhookPath를 가질 수 있습니다.

LINE Developers Console 설정

LINE 봇 설정에는 LINE Developers Console에서 올바른 리소스를 생성해야 합니다: 1. Provider 생성 — 본인 또는 조직을 나타냅니다. 하나의 Provider에 여러 채널을 포함할 수 있습니다. 2. Messaging API 채널 생성 — Messaging API 유형(LINE Login이 아님)을 선택합니다. 필수 정보를 입력합니다: 채널 이름, 설명, 카테고리 및 하위 카테고리. 3. Channel access token 발급 — 채널 설정의 Messaging API 탭에서 'Issue'를 클릭하여 장기 유효 채널 액세스 토큰을 생성합니다. 이 토큰이 API 호출을 인증합니다. 4. Channel secret 확인 — Basic Settings 탭에서 확인할 수 있습니다. Webhook 서명 검증에 사용됩니다. 5. Webhook 구성 — Messaging API 탭에서 Webhook URL을 Gateway의 LINE 엔드포인트로 설정하고 'Use webhook'을 활성화합니다. 6. 자동 응답 비활성화 — LINE Official Account Manager(Console에서 링크)에서 인사 메시지와 자동 응답을 꺼서 AI 봇과의 충돌을 방지합니다. LINE은 특정 ID 형식을 사용합니다: 사용자 ID는 'U' + 32자리 16진수, 그룹 ID는 'C'로 시작, 룸 ID는 'R'로 시작합니다.
openclaw.json
{
  "channels": {
    "line": {
      "channelAccessToken": "YOUR_TOKEN",
      "channelSecret": "YOUR_SECRET"
    }
  }
}
채널 시크릿과 액세스 토큰을 안전하게 보관하세요. 버전 관리에 절대 커밋하지 마세요. 프로덕션 배포에는 환경 변수(LINE_CHANNEL_ACCESS_TOKEN, LINE_CHANNEL_SECRET) 또는 파일 기반 토큰(tokenFile, secretFile)을 사용하세요.

채널 액세스 토큰

LINE은 수명과 사용 사례가 다른 네 가지 유형의 채널 액세스 토큰을 제공합니다: • 장기 유효 토큰 — 만료되지 않습니다. Console에서 발급합니다. 채널당 하나만 존재할 수 있으며, 재발급 시 이전 토큰이 무효화됩니다. 자체 호스팅 봇에 가장 간단한 옵션입니다. • 단기 토큰 (v2.1) — 최대 30일 후 만료됩니다. JWT 어설션을 사용하여 API를 통해 발급합니다. 채널당 최대 30개의 토큰. 토큰 교체가 필요한 프로덕션 배포에 권장됩니다. • 상태 비저장 토큰 — 15분 후 만료됩니다. 발급 횟수 제한 없음. 취소 불가. 매우 짧은 토큰 수명이 필요한 높은 보안 시나리오에 유용합니다. • 단기 (레거시) — 30일 후 만료됩니다. 채널당 최대 30개; 제한 초과 시 가장 오래된 토큰이 자동 취소됩니다. OpenClaw는 모든 토큰 유형을 지원합니다. 대부분의 자체 호스팅 설정에서는 장기 유효 토큰이 가장 간단한 선택입니다. 구성에 직접 설정하거나 LINE_CHANNEL_ACCESS_TOKEN 환경 변수를 통해 구성합니다.
토큰 교체가 필요한 프로덕션에서는 tokenFile 구성 옵션을 사용하여 외부 토큰 갱신 프로세스에 의해 업데이트되는 파일을 지정하세요.
토큰을 너무 자주 발급하지 마세요 — LINE은 짧은 시간 내에 너무 많은 토큰이 생성되면 발급을 일시적으로 제한할 수 있습니다.

DM 정책

DM(다이렉트 메시지) 정책은 LINE 봇과 1:1 채팅에서 상호작용할 수 있는 사용자를 제어합니다. OpenClaw는 네 가지 정책을 지원합니다: • pairing (기본값) — 봇에 메시지를 보내는 새 사용자는 무작위 페어링 코드를 받습니다. 터미널에서 'openclaw pairing approve line <code>'로 승인합니다. 승인 후 자유롭게 채팅할 수 있습니다. 코드는 1시간 후 만료되며 최대 3개의 대기 중인 요청이 허용됩니다. • allowlist — allowFrom에 나열된 LINE 사용자 ID만 봇에 메시지를 보낼 수 있습니다. 나머지는 무시됩니다. LINE 사용자 ID 형식은 'U' + 32자리 16진수입니다. • open — 봇을 친구로 추가하고 메시지를 보내는 모든 사용자가 응답을 받습니다. 안전 확인으로 allowFrom에 '*'를 추가해야 합니다. • disabled — DM 기능이 완전히 비활성화됩니다. 사용자의 LINE ID를 확인하려면 메시지를 보낼 때 Gateway 로그를 확인하세요 — 각 Webhook 이벤트와 함께 소스 userId가 기록됩니다.
openclaw.json
{
  "channels": {
    "line": {
      "dmPolicy": "allowlist",
      "allowFrom": ["U1234567890abcdef1234567890abcdef"]
    }
  }
}
LINE 사용자 ID는 Provider별로 고유합니다 — 같은 물리적 사용자도 다른 Provider에서 다른 ID를 갖습니다. allowFrom ID가 올바른 Provider와 일치하는지 확인하세요.
'openclaw pairing list line'을 사용하여 모든 대기 중인 페어링 요청과 코드를 확인할 수 있습니다.

그룹 채팅 관리

OpenClaw는 구성 가능한 접근 제어를 통해 LINE 그룹 채팅 및 다중 사용자 채팅을 지원합니다: • disabled (기본값) — 모든 그룹 및 룸 메시지 무시 • open — 모든 그룹 멤버의 메시지에 응답 • allowlist — 승인된 사용자 ID(groupAllowFrom을 통해)만 그룹에서 봇을 트리거 가능 LINE 봇이 그룹에 참여하면 'join' 이벤트를 수신합니다. 그룹 대화는 DM과 분리됩니다 — 각 그룹은 자체 대화 컨텍스트와 기록을 유지합니다. LINE의 그룹 ID 형식은 'C' + 32자리 16진수입니다. 룸 ID는 'R' + 32자리 16진수를 사용합니다. 그룹 메시지가 수신될 때 Gateway 로그에서 확인할 수 있습니다. 참고: 봇은 멤버에 의해 그룹에 추가되어야 합니다. LINE 봇은 자체적으로 그룹에 참여할 수 없습니다.
openclaw.json
{
  "channels": {
    "line": {
      "groupPolicy": "open",
      "historyLimit": 50
    }
  }
}

리치 메시지: Flex 및 템플릿

LINE은 일반 텍스트 외에도 풍부한 메시지 유형을 지원하며 OpenClaw는 이를 활용합니다: • Flex Message — JSON 구조를 사용하는 고도로 커스터마이즈 가능한 카드 기반 레이아웃. OpenClaw는 가능한 경우 AI 응답의 코드 블록을 자동으로 Flex Message 카드로 변환합니다. '/card' 명령으로 미리 설정된 Flex 템플릿을 생성할 수도 있습니다. • 템플릿 메시지 — 버튼, 캐러셀, 확인, 이미지 캐러셀이 포함된 구조화된 메시지. 사용자에게 선택지를 제시할 때 유용합니다. • 빠른 답장 — 메시지 하단에 표시되는 최대 13개의 액션 버튼. 메시지 액션, URI 액션, 포스트백 액션, 날짜/시간 선택기, 카메라/카메라 롤 액션, 위치 액션을 지원합니다. 빠른 답장은 사용자가 하나를 탭하면 사라집니다. • 스티커 — LINE의 대표 기능. 봇은 packageId와 stickerId를 지정하여 공식 스티커를 전송할 수 있습니다. API를 통해 사용 가능한 스티커는 LINE의 발송 가능 스티커 목록에 있는 것만 해당됩니다. • 위치 메시지 — 주소 라벨과 함께 위도/경도 좌표를 공유합니다. LINE은 기본적으로 Markdown 서식을 지원하지 않으므로 AI 응답에서 Markdown 서식이 자동으로 제거됩니다. 코드 블록은 가독성을 위해 Flex 카드로 변환됩니다.
Console에서 제공하는 LINE Flex Message Simulator를 사용하여 코딩 전에 사용자 정의 Flex 레이아웃을 디자인하고 미리보기하세요.
빠른 답장은 iOS 및 Android용 LINE에서만 지원됩니다 — 데스크톱이나 웹 클라이언트에서는 표시되지 않습니다.

미디어 및 첨부파일

OpenClaw는 이미지, 비디오, 오디오, 파일을 포함한 LINE의 미디어 파일을 처리합니다. 사용자로부터 수신된 미디어 콘텐츠는 Gateway에 의해 자동으로 다운로드되어 처리됩니다. 수신 미디어는 LINE의 콘텐츠 API에서 가져와 AI 처리(예: 이미지 분석)에 전달됩니다. 기본 최대 파일 크기는 10 MB(mediaMaxMb를 통해 구성 가능)입니다. 발신 미디어는 Messaging API를 통해 업로드됩니다. LINE은 다음을 지원합니다: • 이미지 — JPEG 및 PNG, 최대 10 MB • 비디오 — MP4, 최대 200 MB (일부 컨텍스트에서 최대 1분) • 오디오 — M4A, 최대 200 MB LINE은 메시지 ID를 사용하는 콘텐츠 검색 API를 사용합니다 — 미디어 콘텐츠는 Webhook 페이로드에 직접 포함되지 않고 별도로 가져와야 합니다. OpenClaw는 이를 자동으로 처리합니다.
openclaw.json
{
  "channels": {
    "line": {
      "mediaMaxMb": 10
    }
  }
}

Webhook 보안

LINE은 Webhook 이벤트가 인증되었는지 확인하기 위해 HMAC-SHA256 서명 검증을 사용합니다. 모든 Webhook 요청에는 채널 시크릿을 키로 사용하여 요청 본문의 Base64 인코딩된 HMAC-SHA256 다이제스트를 포함하는 'x-line-signature' 헤더가 포함됩니다. OpenClaw는 모든 수신 Webhook 이벤트에 대해 이 서명을 자동으로 검증합니다. 검증에 실패하면 이벤트는 403 상태로 거부됩니다. 이를 통해 위조되거나 변조된 이벤트가 처리되는 것을 방지합니다. 중요: 서명은 원시 요청 본문 문자열에 대해 계산됩니다. 검증 전에 JSON을 파싱, 역직렬화 또는 재포맷하지 마세요. OpenClaw는 이를 올바르게 처리합니다 — 리버스 프록시 또는 로드 밸런서가 요청 본문을 Gateway에 도달하기 전에 수정하지 않는지 확인하세요.
Webhook 검증이 계속 실패하면 channelSecret이 LINE Developers Console(Basic Settings 탭)의 값과 일치하는지 다시 확인하세요.
Console의 'Verify' 버튼을 사용하여 Webhook 엔드포인트를 테스트하세요. 빈 events 배열과 함께 테스트 이벤트를 전송합니다.

로딩 표시기 및 전달

OpenClaw는 AI 응답을 생성하는 동안 로딩 표시기(타이핑 애니메이션)를 전송합니다. LINE의 로딩 표시기 API는 최대 60초 동안 채팅에 스피너를 표시하여 봇이 처리 중임을 시각적으로 알려줍니다. 긴 AI 응답의 경우 텍스트가 자동으로 메시지당 5,000자로 청킹됩니다(LINE의 메시지 크기 제한). 청킹은 사용자에게 투명합니다 — 여러 개의 연속 메시지를 수신합니다. 스트리밍은 완료될 때까지 버퍼링됩니다 — LINE은 다른 일부 플랫폼과 달리 스트리밍 메시지 전달을 지원하지 않습니다. 전체 응답이 먼저 생성된 다음 하나 이상의 메시지로 전송됩니다. LINE의 Messaging API는 단일 응답에서 최대 5개의 메시지 객체 전송을 지원합니다. OpenClaw는 가능한 경우 짧은 메시지를 일괄 처리하여 전달을 최적화합니다.
openclaw.json
{
  "channels": {
    "line": {
      "textChunkLimit": 5000,
      "chunkMode": "newline"
    }
  }
}

다중 계정 설정

OpenClaw는 단일 Gateway 인스턴스에서 여러 LINE 봇 계정을 실행하는 것을 지원합니다. 각 계정은 자체 인증 정보, Webhook 경로 및 구성 재정의를 갖습니다. 이는 서로 다른 LINE 계정에서 다른 AI 개성을 실행하거나 같은 인프라에서 프로덕션과 스테이징 봇을 분리할 때 유용합니다. 각 계정은 자체 경로에서 Webhook 이벤트를 수신합니다: /line/<accountId>/webhook (기본 /line/webhook 대신). 각 계정의 LINE Developers Console에서 일치하는 Webhook URL을 구성하세요.
openclaw.json
{
  "channels": {
    "line": {
      "accounts": {
        "main": {
          "channelAccessToken": "TOKEN_1",
          "channelSecret": "SECRET_1",
          "webhookPath": "/line/main/webhook"
        },
        "support": {
          "channelAccessToken": "TOKEN_2",
          "channelSecret": "SECRET_2",
          "webhookPath": "/line/support/webhook"
        }
      }
    }
  }
}

LINE 구성 참조

enabled
Type: booleanDefault: true

LINE 채널 활성화 또는 비활성화

channelAccessToken
Type: stringDefault: ""

LINE Messaging API 채널 액세스 토큰. LINE_CHANNEL_ACCESS_TOKEN 환경 변수도 사용 가능

channelSecret
Type: stringDefault: ""

Webhook 서명 검증용 LINE 채널 시크릿. LINE_CHANNEL_SECRET 환경 변수도 사용 가능

tokenFile
Type: stringDefault: ""

채널 액세스 토큰이 포함된 파일 경로 (인라인 구성의 대안)

secretFile
Type: stringDefault: ""

채널 시크릿이 포함된 파일 경로 (인라인 구성의 대안)

dmPolicy
Type: stringDefault: "pairing"

봇에 DM을 보낼 수 있는 사용자 제어. 옵션: pairing, allowlist, open, disabled

allowFrom
Type: string[]Default: []

dmPolicy가 allowlist일 때 봇에 메시지를 보낼 수 있는 LINE 사용자 ID (U + 32자리 16진수)

dmHistoryLimit
Type: numberDefault: 50

대화별 AI 컨텍스트에 포함할 최근 DM 메시지 수

groupPolicy
Type: stringDefault: "disabled"

그룹 채팅 정책. 옵션: disabled, allowlist, open

groupAllowFrom
Type: string[]Default: []

그룹에서 봇을 트리거할 수 있는 LINE 사용자 ID (groupPolicy가 allowlist일 때)

historyLimit
Type: numberDefault: 50

AI 컨텍스트에 포함할 최대 그룹 메시지 수. 0으로 설정하면 비활성화

textChunkLimit
Type: numberDefault: 5000

청킹 전 발신 메시지당 최대 문자 수

chunkMode
Type: stringDefault: "length"

텍스트 청킹 모드. 옵션: length (강제 분할), newline (단락 인식)

mediaMaxMb
Type: numberDefault: 10

최대 수신 미디어 파일 크기(MB)

webhookPath
Type: stringDefault: "/line/webhook"

이 계정의 사용자 정의 Webhook 경로 (다중 계정 설정에 유용)

accounts.<id>.channelAccessToken
Type: stringDefault: ""

다중 계정 설정을 위한 계정별 채널 액세스 토큰

accounts.<id>.channelSecret
Type: stringDefault: ""

다중 계정 설정을 위한 계정별 채널 시크릿

accounts.<id>.webhookPath
Type: stringDefault: "/line/<id>/webhook"

다중 계정 설정을 위한 계정별 Webhook 경로

configWrites
Type: booleanDefault: true

런타임에 /config 명령으로 채널 설정 수정 허용

LINE 자주 묻는 질문

LINE 문제 해결

LINE Console에서 Webhook 검증 실패

Gateway가 인터넷에서 접근 불가능하거나, URL이 올바르지 않거나, SSL 인증서 문제입니다.

Gateway가 실행 중이고 공개 URL을 통해 접근 가능한지 확인합니다. URL이 정확히 'https://<host>/line/webhook'이고 유효한 SSL 인증서(자체 서명 아님)를 사용하는지 확인합니다. 방화벽 규칙과 포트 포워딩을 확인합니다. 외부 머신에서 'curl -X POST https://<host>/line/webhook'으로 테스트합니다.
봇이 친구로 추가되었지만 메시지에 응답하지 않음

Console에서 Webhook이 활성화되지 않았거나, 자동 응답이 간섭하거나, pairing 정책에서 발신자가 승인되지 않았습니다.

LINE Developers Console에서 Messaging API 탭의 'Use webhook'이 활성화되어 있는지 확인합니다. LINE Official Account Manager에서 자동 응답과 인사 메시지를 모두 비활성화합니다. pairing 정책을 사용하는 경우 'openclaw pairing list line'으로 대기 중인 페어링을 확인하고 발신자를 승인합니다.
응답 전송 시 Error 401 Unauthorized

채널 액세스 토큰이 유효하지 않거나, 만료되었거나, 취소되었습니다.

LINE Developers Console로 이동하여 채널의 Messaging API 탭에서 새 채널 액세스 토큰을 발급합니다. OpenClaw 구성 또는 LINE_CHANNEL_ACCESS_TOKEN 환경 변수를 새 토큰으로 업데이트합니다. 토큰 교체를 사용하는 경우 갱신 프로세스가 올바르게 작동하는지 확인합니다.
메시지가 수신되지만 응답에 'Invalid reply token' 표시

LINE 응답 토큰은 Webhook 이벤트가 전송된 후 1분 후에 만료됩니다. AI 처리에 더 오래 걸리면 토큰이 무효화됩니다.

이것은 LINE 플랫폼의 제한입니다. OpenClaw는 응답 토큰이 만료되면 대체로 푸시 메시지를 사용합니다. channelAccessToken에 푸시 메시지 권한이 있는지, 월별 푸시 메시지 할당량을 초과하지 않았는지 확인하세요.
수신 Webhook에서 서명 검증 오류

구성의 channelSecret이 LINE Developers Console의 채널 시크릿과 일치하지 않거나, 리버스 프록시가 요청 본문을 수정하고 있습니다.

channelSecret 값이 LINE Developers Console의 Basic Settings 탭에 표시된 'Channel secret'과 일치하는지 다시 확인합니다. 리버스 프록시(nginx, Apache)를 사용하는 경우 원시 요청 본문을 수정 없이 전달하는지 확인합니다. Content-Type이 application/json으로 유지되는지 확인합니다.