같은 검수 엔진을,
여러분의 자동화 흐름 안에
생성형 AI로 만든 문구가 게시되기 전에 AIMarker API를 한 번 거치게 하세요. 사내 콘텐츠 관리 도구 · 구글 시트 · n8n · Make · AI 에이전트 어디서든 부를 수 있습니다.
생성형 AI
ChatGPT · Gemini · 사내 LLM · 카피 자동화가 문구 · 이미지를 만듭니다.
AIMarker API
am.check · am.batch 가 위험 후보 · 근거 · 고칠 문구 · 붙일 표시를 돌려줍니다.
승인 링크
am.share 로 광고주 승인 링크를 만들고 am.status 로 답을 받습니다.
원장 기록
am.stamp 로 승인 · 보고서 해시를 남기고 누구나 /verify/ 에서 확인합니다.
요청 하나, 동작은 action 으로
모든 요청은 같은 주소로 보내고, 본문의 action 으로 동작을 고릅니다. 본문은 JSON(Content-Type: text/plain), 응답도 JSON입니다.
| action | 하는 일 | 주요 입력 | 주요 출력 |
|---|---|---|---|
| am.check | 문구 하나를 KR-AdLaw 규칙 팩으로 점검 | text, ind(비우면 업종 자동), flags{sponsored, aiPerson, aiMedia}, guide{ban, must} | score, decision, findings[](id · lv · cat · s · e · t · why · law · reps · tip), labels[] |
| am.batch | 최대 20개를 한 번에(콘텐츠 관리 도구 · 시트 일괄) | items[{id, text, ind, flags}], guide | results[{id, score, decision, findings}] |
| am.label | 붙일 표시 문구 · HTML · IPTC 값 | kind(image · video · person · text · sponsor), level(gen · edit) | text, long, html, markdown, iptc |
| am.scan | 사이트 공개 첫 화면 보수적 진단 | url | level, signals[], images{…}, ad{n, items} |
| am.share | 광고주 승인 링크 만들기(90일 보관) | data{title, brand, channel, ind, copy, score, dec, fnd[], h} | id, url |
| am.status | 승인 상태 받아 오기 | ids[](최대 60) | items{id: {st, by, done, memo}} |
| am.stamp | 보고서 · 승인 기록 해시를 원장에 남기기 | h(SHA-256 64자리), n, k(report · version · approval) | id(LG…), at(서버 시각) |
| am.verify | 원장 확인 | h 또는 id | found, kind, at, n |
인증 · 한도
본문에 "key": "amk_…" 를 넣습니다. 무료 키는 하루 300회(일괄 점검은 문구 수만큼). 한도를 늘리려면 문의해 주세요.
판정 값
decision: fix(수정 후 출고) · expert(전문가 검토 권장) · review(확인 후 출고) · clear(큰 위험 후보 없음). lv: 3 높음 · 2 주의 · 1 참고.
오류
ok:false 와 code(KEY · QUOTA · TEXT · BUSY · HASH · NOT_FOUND)를 돌려줍니다. 위치 s · e 는 보낸 문구 기준(필수 표시는 -1)입니다.
쓰는 도구에 맞춰 골라 보세요
시트의 확장 프로그램 → Apps Script 에 붙여 넣고 저장하면, 셀에서 =AIMARKER(A2) 처럼 씁니다. 카피 수백 줄을 한 번에 점검하는 가장 쉬운 방법입니다.
const AIMARKER_KEY = 'amk_여기에_발급받은_키';
const AIMARKER_URL = 'https://script.google.com/macros/s/AKfycbw3ZPLXHv92tfNVs7caH-Bf1OvMesqh0RfR8y4LCsT5DaE3otEbGWhyFLIY6FqoBEY/exec';
/**
* 광고 문구 위험 점검. 예: =AIMARKER(A2) · =AIMARKER(A2, "cos")
* 업종: gen 일반 · food 식품 · hfood 건강기능식품 · cos 화장품 · med 의료 · fin 금융
* @customfunction
*/
function AIMARKER(text, ind) {
if (!text) return '';
const res = UrlFetchApp.fetch(AIMARKER_URL, {
method: 'post', contentType: 'text/plain', muteHttpExceptions: true,
payload: JSON.stringify({ action: 'am.check', key: AIMARKER_KEY, text: String(text), ind: ind || '' })
});
const r = JSON.parse(res.getContentText());
if (!r.ok) return '오류: ' + r.message;
const dec = { fix: '수정 후 출고', expert: '전문가 검토', review: '확인 후 출고', clear: '큰 위험 없음' }[r.decision];
const top = r.findings.filter(f => f.lv >= 2).slice(0, 3).map(f => f.t || '필수 표시').join(', ');
return r.score + '점 · ' + dec + (top ? ' · ' + top : '');
}Apps Script 주소는 한 번 넘겨주기(302)를 하므로 -L 을 꼭 붙이세요.
curl -sL -H 'Content-Type: text/plain' \
-d '{"action":"am.check","key":"amk_발급받은_키","text":"부작용 없는 크림, 바르자마자 주름이 사라져요","ind":"cos"}' \
'https://script.google.com/macros/s/AKfycbw3ZPLXHv92tfNVs7caH-Bf1OvMesqh0RfR8y4LCsT5DaE3otEbGWhyFLIY6FqoBEY/exec'서버(Node.js 18+)에서 부르세요. 키를 브라우저 코드에 넣지 마세요.
const URL = 'https://script.google.com/macros/s/AKfycbw3ZPLXHv92tfNVs7caH-Bf1OvMesqh0RfR8y4LCsT5DaE3otEbGWhyFLIY6FqoBEY/exec';
export async function aimarkerBatch(items) {
const r = await fetch(URL, {
method: 'POST', headers: { 'Content-Type': 'text/plain' }, redirect: 'follow',
body: JSON.stringify({ action: 'am.batch', key: process.env.AIMARKER_KEY, items })
}).then(x => x.json());
if (!r.ok) throw new Error(r.code + ' ' + r.message);
return r.results; // [{ id, score, decision, findings, labels }]
}
// 게시 전 관문: 높음 후보가 있으면 사람 승인으로 넘김
const [res] = await aimarkerBatch([{ id: 'post-1024', text: '의사가 추천하는 다이어트 젤리' }]);
if (res.decision === 'fix' || res.decision === 'expert') console.log('사람 검토 필요', res.findings);import json, os, requests
URL = "https://script.google.com/macros/s/AKfycbw3ZPLXHv92tfNVs7caH-Bf1OvMesqh0RfR8y4LCsT5DaE3otEbGWhyFLIY6FqoBEY/exec"
def aimarker_check(text, ind="", **flags):
body = {"action": "am.check", "key": os.environ["AIMARKER_KEY"], "text": text, "ind": ind, "flags": flags}
r = requests.post(URL, data=json.dumps(body).encode("utf-8"), headers={"Content-Type": "text/plain"}, timeout=30).json()
if not r["ok"]:
raise RuntimeError(r["code"] + " " + r["message"])
return r
r = aimarker_check("원금 보장 확정 수익! 누구나 대출 가능", ind="fin")
print(r["score"], r["decision"], [f["t"] for f in r["findings"]])- HTTP Request 노드(Make 는 HTTP 모듈)를 추가하고 Method POST, URL 에 위 주소를 넣습니다.
- Body 는 Raw · text/plain, 내용은
{"action":"am.check","key":"amk_…","text":"{{ $json.caption }}"} - Follow Redirects(리다이렉트 따라가기)를 켭니다.
- 다음 노드에서
decision이 fix · expert 면 슬랙 · 메일로 담당자에게, clear 면 바로 게시하도록 나눕니다. - 승인이 필요하면
am.share로 링크를 만들어 보내고, 일정 간격으로am.status를 불러 승인되면 게시합니다.
ChatGPT · Claude · 사내 에이전트의 도구(함수 호출)로 등록하면, 에이전트가 문구를 만든 뒤 스스로 점검하고 고칩니다.
{
"name": "aimarker_check_ad_copy",
"description": "한국 광고 규칙(표시광고법 · 식품 · 건강기능식품 · 화장품 · 의료 · 금융 · 추천 · 보증 · 가상인물 · AI 표시)으로 광고 문구의 위험 후보와 근거, 고칠 문구, 붙일 표시를 돌려줍니다. 문구를 내보내기 전에 부르세요.",
"parameters": {
"type": "object",
"properties": {
"text": { "type": "string", "description": "점검할 광고 문구(5,000자까지)" },
"ind": { "type": "string", "enum": ["gen", "food", "hfood", "cos", "med", "fin"], "description": "업종. 모르면 비움(자동)" },
"sponsored": { "type": "boolean", "description": "대가를 받은 콘텐츠인지" },
"aiPerson": { "type": "boolean", "description": "AI로 만든 인물 · 목소리가 나오는지" },
"aiMedia": { "type": "boolean", "description": "AI로 만든 이미지 · 영상을 쓰는지" }
},
"required": ["text"]
}
}키 없이 응답 모양부터 보세요
이 화면에서는 키 없이 am.check 를 불러 실제 응답(JSON)을 보여 줍니다.
{ "ok": true, ... }키는 바로 나오고, 한 번만 보여 드립니다
하루 300회 무료. 서버에는 키 대신 해시만 남습니다. 연동 목적을 보고 도움이 필요하면 먼저 연락드릴 수 있어요.