TypeClawTypeClaw
Reference

KakaoTalk

LOCO adapter — encrypted login, token renewal, and capabilities

Part of the channel adapters family.

Transport: LOCO protocol (no public URL required). Setup walkthrough: Add a channel.

Use a dedicated account

Auto-acking every received message is a distinct non-human fingerprint. KakaoTalk abuse detection may ban accounts that exhibit this pattern. Run this adapter only on dedicated agent accounts you can afford to lose.

Auth

Sub-device login using email and password. Passwords are stored encrypted at rest (AES-256-GCM; the key lives outside the agent folder).

Unlike the other adapters, secrets.json#channels.kakaotalk is not a flat credential object — it wraps one or more account records:

{
  "channels": {
    "kakaotalk": {
      "currentAccount": "<accountId>",
      "accounts": {
        "<accountId>": {
          "account_id": "<accountId>",
          "oauth_token": "…",
          "user_id": "…",
          "device_uuid": "…",
          "device_type": "pc",
          "created_at": "…",
          "updated_at": "…"
        }
      }
    }
  }
}
FieldNotes
currentAccountstring | null — active account id, or null if none
accounts.<accountId>Map of account id → account record (fields below)

Each record under accounts.<accountId>:

FieldNotes
account_idAccount identifier (matches the map key)
oauth_tokenCurrent session token
user_idKakaoTalk user ID
device_uuidRegistered device UUID
device_type'pc' or 'tablet'
created_atRecord creation timestamp
updated_atLast-update timestamp
refresh_tokenoptional — refresh token when present
auth_methodoptional'login' or 'extract'
emailoptional — login email (needed for automatic renewal)
encryptedPasswordoptional — AES-256-GCM envelope (needed for automatic renewal)

A pendingLogin record may also appear under channels.kakaotalk mid-reauth; see secrets.json for the full schema.

CLI: typeclaw channel add kakaotalk (interactive). Do not use channel set for credential rotation — use typeclaw channel reauth kakaotalk instead.

Capabilities

FeatureSupportedNotes
Outbound messagesyes
Reactionsno
Typing indicatorno
Channel-name resolutionyes
Self identityno
HistoryyesLimit 200 messages
AttachmentsyesFiles sent before text; no combined text+file send in one call
Membershipno

Token renewal

Tokens expire after ~7 days. A host-side renewal cron refreshes them automatically. When a token goes stale, renewal can trigger a container restart via the host daemon. If automatic renewal fails, re-authenticate with:

typeclaw channel reauth kakaotalk

Quirks

  • KICKOUT recovery: if the same device_uuid logs in elsewhere, the adapter detects the KICKOUT event and retries with bounded backoff (2s / 10s / 60s, 5-minute budget total).
  • Mark-read: fires on every inbound message, clearing the unread "1" (노란숫자), except in open chats.
  • Provisional registration: chats not surfaced by getChats are registered provisionally on first message.
  • No combined send: files are sent first, then text, as separate API calls.

Config

{
  "channels": {
    "kakaotalk": {
      "enabled": true,
      "engagement": {
        "trigger": ["mention", "reply", "dm"],
        "stickiness": { "perReply": { "window": 900000 } }
      },
      "history": {
        "prefetch": {
          "thread": { "head": 3, "tail": 10 },
          "channel": { "tail": 10 }
        }
      },
      "quotedReply": { "enabled": true, "queueDelayMs": 10000 }
    }
  }
}

All fields above are shared across adapters. No adapter-specific extensions exist for kakaotalk. Credentials live in secrets.json#channels.kakaotalk.

See also

On this page