giip
SES Proposal
2 min read

Openclaw ๋™๊ธฐํ™” API (Openclaw Sync API)

๊ฐœ์š”

Openclaw ๋™๊ธฐํ™” API๋Š” ๋กœ์ปฌ Openclaw ์ธ์Šคํ„ด์Šค์™€ GIIP ํ”Œ๋žซํผ ๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ(์„ค์ • ๋ฐ ๋ฌธ์„œ) ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค. giipAgentWin์ด๋‚˜ ๋‹ค๋ฅธ ๋กœ์ปฌ ์—์ด์ „ํŠธ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์—ฌ ์ตœ์‹  ์„ค์ •์„ ๋ฐ›์•„์˜ค๊ณ , ๋กœ์ปฌ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ค‘์•™ ์„œ๋ฒ„์— ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๋น ๋ฅธ ์‹œ์ž‘

์ด API๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, Agent Token (at)๊ณผ ๋กœ์ปฌ ์„œ๋ฒ„ ์‹๋ณ„์ž (lssn)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋™๊ธฐํ™” ํ”„๋กœ์„ธ์Šค๋Š” ๋‘ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

  1. GetOpenclawSync๋ฅผ ํ†ตํ•ด ์ตœ์‹  ํ•ด์‹œ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ฆ/์ˆ˜์‹ 
  2. PutOpenclawSync๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ GIIP ์„œ๋ฒ„๋กœ ์—…๋กœ๋“œ

์ƒ์„ธ ๊ธฐ๋Šฅ ๋ฐ API

1. ๋™๊ธฐํ™” ๋ฐ์ดํ„ฐ ์กฐํšŒ (GetOpenclawSync)

๋กœ์ปฌ ์ธ์Šคํ„ด์Šค์˜ Hash ๊ฐ’์„ ์ „๋‹ฌํ•˜์—ฌ GIIP ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ์™€ ๋น„๊ต ํ›„ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ตœ์‹  ๋™๊ธฐํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • URL: https://api.netbako.com/api/GetOpenclawSync
  • Method: POST
  • Content-Type: application/json

์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ (Request)

ํ•„๋“œ๋ช…ํƒ€์ž…ํ•„์ˆ˜์„ค๋ช…
atStringYAgent Token (์ธ์ฆ์šฉ)
lssnIntegerY๋กœ์ปฌ ์„œ๋ฒ„ ์‹๋ณ„์ž
configHashStringNํ˜„์žฌ ๋กœ์ปฌ ์„ค์ •์˜ Hash ๊ฐ’
docHashStringNํ˜„์žฌ ๋กœ์ปฌ ๋ฌธ์„œ์˜ Hash ๊ฐ’

์‘๋‹ต ํ˜•์‹ (Response)

Hash ๋ถˆ์ผ์น˜๋กœ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด Hash ๊ฐ’๊ณผ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

{
  "RstVal": 1,
  "RstMsg": "Update required",
  "Data": {
    "newConfigHash": "...",
    "newDocHash": "...",
    "configData": { ... },
    "docData": [ { "doc_path": "...", "doc_content": "..." } ]
  }
}

๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†์„ ๊ฒฝ์šฐ, HTTP 200 ์ƒํƒœ์™€ ํ•จ๊ป˜ RstVal: 304๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2. ๋™๊ธฐํ™” ๋ฐ์ดํ„ฐ ๋ฐ˜์˜ (PutOpenclawSync)

๋กœ์ปฌ์—์„œ ๋ณ€๊ฒฝ๋œ ์„ค์ •์ด๋‚˜ ๋ฌธ์„œ๋ฅผ GIIP ์„œ๋ฒ„๋กœ ์—…๋กœ๋“œํ•˜์—ฌ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • URL: https://api.netbako.com/api/PutOpenclawSync
  • Method: PUT
  • Content-Type: application/json

์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ (Request)

ํ•„๋“œ๋ช…ํƒ€์ž…ํ•„์ˆ˜์„ค๋ช…
atStringYAgent Token
lssnIntegerY๋กœ์ปฌ ์„œ๋ฒ„ ์‹๋ณ„์ž
changedConfigsObjectN๋ณ€๊ฒฝ๋œ ์„ค์ • ํ•ญ๋ชฉ (Key-Value)
changedDocsArrayN๋ณ€๊ฒฝ๋œ ๋ฌธ์„œ ๋ชฉ๋ก (doc_path, doc_content ํฌํ•จ)

์‘๋‹ต ํ˜•์‹ (Response)

์—…๋ฐ์ดํŠธ์— ์„ฑ๊ณตํ•˜๋ฉด ์ƒˆ๋กœ ๊ณ„์‚ฐ๋œ Hash ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

{
  "RstVal": 1,
  "RstMsg": "Successfully updated",
  "Data": {
    "newConfigHash": "...",
    "newDocHash": "..."
  }
}

๋ฌธ์ œ ํ•ด๊ฒฐ

API ํ˜ธ์ถœ ์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ์ƒํ™ฉ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • RstVal: -1 (Unauthorized): at ํ† ํฐ์ด ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ† ํฐ์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ์žฌ๋ฐœ๊ธ‰ ๋ฐ›์œผ์„ธ์š”.
  • RstVal: 400 (Invalid Parameter): ํ•„์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ(at, lssn)๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ JSON ํ˜•์‹์„ ํ™•์ธํ•˜์„ธ์š”.
  • RstVal: 500 (Internal Server Error): DB ํ†ต์‹  ์—๋Ÿฌ ๋˜๋Š” SP ์‹คํ–‰ ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค. tErrorLogs๋ฅผ ํ™•์ธํ•˜์—ฌ ์ •ํ™•ํ•œ ์›์ธ์„ ๋ถ„์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.