70일차 정답(A 문서, answers/ 워크플로우·LAB-TEST-RESULT) 공개
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
2478da876f
commit
505dcd313f
54 files changed
+7878
No files matched your search
@@ -0,0 +1,51 @@
|
||||
$ uv run tools/flow.py call sample-maintenance requests/kit-maintenance.json -v
|
||||
HTTP 200 · 3.4s
|
||||
→ request POST /webhook/sample-maintenance
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] \n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검 종료 후 메일 프로그램을 다시 열어 주시기 바랍니다.",
|
||||
"codes": []
|
||||
}
|
||||
|
||||
$ uv run tools/flow.py call sample-security requests/kit-security.json -v
|
||||
HTTP 200 · 2.2s
|
||||
→ request POST /webhook/sample-security
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의 \n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n의심스러운 메일 내 링크를 절대 클릭하지 마십시오. \n메일을 받은 경우 즉시 삭제 후 보안팀에 신고해 주시기 바랍니다. \n의심 메일은 IT 포털 '신고' 메뉴에서 신고해 주세요. \nIT팀은 절대 비밀번호를 묻지 않습니다.",
|
||||
"codes": []
|
||||
}
|
||||
|
||||
$ uv run tools/flow.py call sample-training requests/kit-training.json -v
|
||||
HTTP 200 · 1.4s
|
||||
→ request POST /webhook/sample-training
|
||||
{
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 안내\n\n- 일시: 11월 5일(수) 14:00~16:00 \n- 장소: 본관 3층 교육장 \n- 대상: 신규 입사자와 희망자 \n- 정원: 20명 \n- 신청은 IT 포털에서 할 수 있습니다.",
|
||||
"codes": []
|
||||
}
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"cases": "lab01.json",
|
||||
"webhook": "my-notice-kit",
|
||||
"passed": 5,
|
||||
"total": 5,
|
||||
"results": [
|
||||
{
|
||||
"case": "점검 · 머리말",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 3.2,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "보안 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 2.2,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] 피싱 주의 공지\n\n10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있습니다. \n링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고해 주시기 바랍니다. \n의심 메일은 IT 포털 '신고' 메뉴에서 신고해 주세요. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n비밀번호를 요구하는 메일은 모두 피싱으로 간주해 주십시오.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "교육 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.7,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
},
|
||||
"response": {
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지\n\n- 일시: 11월 5일(수) 14:00~16:00 \n- 장소: 본관 3층 교육장 \n- 대상: 신규 입사자와 희망자 \n- 정원: 20명 \n- 신청은 IT 포털에서 할 수 있습니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "종류 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사실 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
POST http://localhost:5678/webhook/my-notice-kit · 5 case(s) × 1
|
||||
✔ 점검 · 머리말 · 3.2s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 보안 · 꼭 넣을 문장 · 2.2s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] 피싱 주의 공지\n\n10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있습니다. \n링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고해 주시기 바랍니다. \n의심 메일은 IT 포털 '신고' 메뉴에서 신고해 주세요. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n비밀번호를 요구하는 메일은 모두 피싱으로 간주해 주십시오.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 교육 · 꼭 넣을 문장 · 1.7s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지\n\n- 일시: 11월 5일(수) 14:00~16:00 \n- 장소: 본관 3층 교육장 \n- 대상: 신규 입사자와 희망자 \n- 정원: 20명 \n- 신청은 IT 포털에서 할 수 있습니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 종류 없음 · 0.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
✔ 사실 없음 · 0.1s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
Passed 5/5
|
||||
report: runs/lab01-20261021-182244.json
|
||||
@@ -0,0 +1,99 @@
|
||||
{
|
||||
"cases": "lab01-challenge.json",
|
||||
"webhook": "my-notice-kit",
|
||||
"passed": 1,
|
||||
"total": 4,
|
||||
"results": [
|
||||
{
|
||||
"case": "새 종류 · 설문",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": false,
|
||||
"problems": [
|
||||
"notice has none of ['[설문 안내]']"
|
||||
],
|
||||
"seconds": 1.2,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "survey",
|
||||
"request": "IT 만족도 설문 공지",
|
||||
"facts": "11월 7일(금)까지 사내 IT 만족도 설문 진행. 약 5분 소요. 결과는 IT 서비스 개선에 사용."
|
||||
},
|
||||
"response": {
|
||||
"kind": "survey",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[IT 공지] 사내 IT 만족도 설문 안내\n\n11월 7일(금)까지 사내 IT 만족도 설문을 진행합니다. \n설문 참여 시간은 약 5분 정도 소요됩니다. \n설문 결과는 IT 서비스 개선에 활용될 예정입니다. \n많은 참여 부탁드립니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "설문 · 익명 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": false,
|
||||
"problems": [
|
||||
"notice has none of ['익명']"
|
||||
],
|
||||
"seconds": 1.2,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "survey",
|
||||
"request": "IT 만족도 설문 공지",
|
||||
"facts": "11월 7일(금)까지 사내 IT 만족도 설문 진행. 약 5분 소요. 결과는 IT 서비스 개선에 사용."
|
||||
},
|
||||
"response": {
|
||||
"kind": "survey",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[IT 공지] 사내 IT 만족도 설문 안내\n\n11월 7일(금)까지 사내 IT 만족도 설문을 진행합니다. \n설문 참여 시간은 약 5분 정도 소요됩니다. \n설문 결과는 IT 서비스 개선에 활용될 예정입니다. \n많은 참여 부탁드립니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "없는 종류",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": false,
|
||||
"problems": [
|
||||
"status 200 (expected 400)",
|
||||
"kinds has none of ['maintenance']"
|
||||
],
|
||||
"seconds": 1.3,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "party",
|
||||
"request": "송년회 공지",
|
||||
"facts": "12월 20일(금) 18:00 송년회."
|
||||
},
|
||||
"response": {
|
||||
"kind": "party",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[공지] 12월 20일(금) 18:00 송년회 안내\n\n- 송년회가 12월 20일(금) 18:00에 진행됩니다.\n- 참석하시는 분들은 시간 엄수 부탁드립니다.\n- 즐거운 시간 되시기 바랍니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "원래 종류도 그대로",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 2.0,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] 피싱 주의 공지 \n10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있습니다. \n링크를 누르지 말고 메일을 삭제해 주세요. \n의심 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"codes": []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
POST http://localhost:5678/webhook/my-notice-kit · 4 case(s) × 1
|
||||
✘ 새 종류 · 설문 · 1.2s · notice has none of ['[설문 안내]']
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "survey",
|
||||
"request": "IT 만족도 설문 공지",
|
||||
"facts": "11월 7일(금)까지 사내 IT 만족도 설문 진행. 약 5분 소요. 결과는 IT 서비스 개선에 사용."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "survey",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[IT 공지] 사내 IT 만족도 설문 안내\n\n11월 7일(금)까지 사내 IT 만족도 설문을 진행합니다. \n설문 참여 시간은 약 5분 정도 소요됩니다. \n설문 결과는 IT 서비스 개선에 활용될 예정입니다. \n많은 참여 부탁드립니다.",
|
||||
"codes": []
|
||||
}
|
||||
✘ 설문 · 익명 문장 · 1.2s · notice has none of ['익명']
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "survey",
|
||||
"request": "IT 만족도 설문 공지",
|
||||
"facts": "11월 7일(금)까지 사내 IT 만족도 설문 진행. 약 5분 소요. 결과는 IT 서비스 개선에 사용."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "survey",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[IT 공지] 사내 IT 만족도 설문 안내\n\n11월 7일(금)까지 사내 IT 만족도 설문을 진행합니다. \n설문 참여 시간은 약 5분 정도 소요됩니다. \n설문 결과는 IT 서비스 개선에 활용될 예정입니다. \n많은 참여 부탁드립니다.",
|
||||
"codes": []
|
||||
}
|
||||
✘ 없는 종류 · 1.3s · status 200 (expected 400); kinds has none of ['maintenance']
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "party",
|
||||
"request": "송년회 공지",
|
||||
"facts": "12월 20일(금) 18:00 송년회."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "party",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[공지] 12월 20일(금) 18:00 송년회 안내\n\n- 송년회가 12월 20일(금) 18:00에 진행됩니다.\n- 참석하시는 분들은 시간 엄수 부탁드립니다.\n- 즐거운 시간 되시기 바랍니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 원래 종류도 그대로 · 2.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] 피싱 주의 공지 \n10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있습니다. \n링크를 누르지 말고 메일을 삭제해 주세요. \n의심 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"codes": []
|
||||
}
|
||||
Passed 1/4
|
||||
report: runs/lab01-challenge-20261021-182250.json
|
||||
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"cases": "lab01-challenge.json",
|
||||
"webhook": "my-notice-kit",
|
||||
"passed": 4,
|
||||
"total": 4,
|
||||
"results": [
|
||||
{
|
||||
"case": "새 종류 · 설문",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 3.0,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "survey",
|
||||
"request": "IT 만족도 설문 공지",
|
||||
"facts": "11월 7일(금)까지 사내 IT 만족도 설문 진행. 약 5분 소요. 결과는 IT 서비스 개선에 사용."
|
||||
},
|
||||
"response": {
|
||||
"kind": "survey",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[설문 안내] 사내 IT 만족도 설문 공지\n\n사내 IT 서비스 개선을 위한 만족도 조사를 실시합니다. \n설문 응답은 약 5분 정도 소요됩니다. \n응답은 익명으로 처리됩니다. \n설문 마감일은 11월 7일(금)까지입니다. \n많은 참여 부탁드립니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "설문 · 익명 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 2.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "survey",
|
||||
"request": "IT 만족도 설문 공지",
|
||||
"facts": "11월 7일(금)까지 사내 IT 만족도 설문 진행. 약 5분 소요. 결과는 IT 서비스 개선에 사용."
|
||||
},
|
||||
"response": {
|
||||
"kind": "survey",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[설문 안내] 사내 IT 만족도 설문 공지\n\n사내 IT 서비스 개선을 위한 만족도 조사를 실시합니다. \n설문 응답은 약 5분 정도 소요됩니다. \n응답은 익명으로 처리됩니다. \n설문 마감일은 11월 7일(금)까지입니다. \n많은 참여 부탁드립니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "없는 종류",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.3,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"kind": "party",
|
||||
"request": "송년회 공지",
|
||||
"facts": "12월 20일(금) 18:00 송년회."
|
||||
},
|
||||
"response": {
|
||||
"error": "unknown kind",
|
||||
"kinds": [
|
||||
"maintenance",
|
||||
"security",
|
||||
"training",
|
||||
"survey"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "원래 종류도 그대로",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.7,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"codes": []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
POST http://localhost:5678/webhook/my-notice-kit · 4 case(s) × 1
|
||||
✔ 새 종류 · 설문 · 3.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "survey",
|
||||
"request": "IT 만족도 설문 공지",
|
||||
"facts": "11월 7일(금)까지 사내 IT 만족도 설문 진행. 약 5분 소요. 결과는 IT 서비스 개선에 사용."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "survey",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[설문 안내] 사내 IT 만족도 설문 공지\n\n사내 IT 서비스 개선을 위한 만족도 조사를 실시합니다. \n설문 응답은 약 5분 정도 소요됩니다. \n응답은 익명으로 처리됩니다. \n설문 마감일은 11월 7일(금)까지입니다. \n많은 참여 부탁드립니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 설문 · 익명 문장 · 2.1s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "survey",
|
||||
"request": "IT 만족도 설문 공지",
|
||||
"facts": "11월 7일(금)까지 사내 IT 만족도 설문 진행. 약 5분 소요. 결과는 IT 서비스 개선에 사용."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "survey",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[설문 안내] 사내 IT 만족도 설문 공지\n\n사내 IT 서비스 개선을 위한 만족도 조사를 실시합니다. \n설문 응답은 약 5분 정도 소요됩니다. \n응답은 익명으로 처리됩니다. \n설문 마감일은 11월 7일(금)까지입니다. \n많은 참여 부탁드립니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 없는 종류 · 0.3s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "party",
|
||||
"request": "송년회 공지",
|
||||
"facts": "12월 20일(금) 18:00 송년회."
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "unknown kind",
|
||||
"kinds": [
|
||||
"maintenance",
|
||||
"security",
|
||||
"training",
|
||||
"survey"
|
||||
]
|
||||
}
|
||||
✔ 원래 종류도 그대로 · 1.7s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"codes": []
|
||||
}
|
||||
Passed 4/4
|
||||
report: runs/lab01-challenge-20261021-182312.json
|
||||
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"cases": "lab01.json",
|
||||
"webhook": "my-notice-kit",
|
||||
"passed": 5,
|
||||
"total": 5,
|
||||
"results": [
|
||||
{
|
||||
"case": "점검 · 머리말",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.5,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "보안 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.7,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "교육 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.4,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
},
|
||||
"response": {
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지 \n11월 5일(수) 14:00~16:00 본관 3층 교육장에서 진행됩니다. \n대상은 신규 입사자와 희망자이며, 정원은 20명입니다. \n신청은 IT 포털에서 할 수 있습니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "종류 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사실 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
POST http://localhost:5678/webhook/my-notice-kit · 5 case(s) × 1
|
||||
✔ 점검 · 머리말 · 1.5s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 보안 · 꼭 넣을 문장 · 1.7s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 교육 · 꼭 넣을 문장 · 1.4s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지 \n11월 5일(수) 14:00~16:00 본관 3층 교육장에서 진행됩니다. \n대상은 신규 입사자와 희망자이며, 정원은 20명입니다. \n신청은 IT 포털에서 할 수 있습니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 종류 없음 · 0.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
✔ 사실 없음 · 0.1s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
Passed 5/5
|
||||
report: runs/lab01-20261021-182316.json
|
||||
@@ -0,0 +1,138 @@
|
||||
{
|
||||
"cases": "lab02-module.json",
|
||||
"webhook": "my-rule-check",
|
||||
"passed": 5,
|
||||
"total": 5,
|
||||
"results": [
|
||||
{
|
||||
"case": "좋은 초안",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.0,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "시간 빠짐",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 밤에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"missing_fact"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "missing_fact",
|
||||
"detail": "22:00, 24:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "전화번호",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n문의: 010-1234-5678",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"personal_info"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "personal_info",
|
||||
"detail": "010-1234-5678"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "꼭 넣을 문장 빠짐",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.2,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 600,
|
||||
"required_phrases": [
|
||||
"IT팀은 절대 비밀번호를 묻지 않습니다."
|
||||
]
|
||||
},
|
||||
"response": {
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"missing_phrase"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "missing_phrase",
|
||||
"detail": "IT팀은 절대 비밀번호를 묻지 않습니다."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "짧은 한도",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 80,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"too_long"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "too_long",
|
||||
"detail": "82자 (80자 이하)"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
POST http://localhost:5678/webhook/my-rule-check · 5 case(s) × 1
|
||||
✔ 좋은 초안 · 1.0s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
✔ 시간 빠짐 · 0.1s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 밤에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"missing_fact"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "missing_fact",
|
||||
"detail": "22:00, 24:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
✔ 전화번호 · 0.1s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n문의: 010-1234-5678",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"personal_info"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "personal_info",
|
||||
"detail": "010-1234-5678"
|
||||
}
|
||||
]
|
||||
}
|
||||
✔ 꼭 넣을 문장 빠짐 · 0.2s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 600,
|
||||
"required_phrases": [
|
||||
"IT팀은 절대 비밀번호를 묻지 않습니다."
|
||||
]
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"missing_phrase"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "missing_phrase",
|
||||
"detail": "IT팀은 절대 비밀번호를 묻지 않습니다."
|
||||
}
|
||||
]
|
||||
}
|
||||
✔ 짧은 한도 · 0.1s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 80,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"too_long"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "too_long",
|
||||
"detail": "82자 (80자 이하)"
|
||||
}
|
||||
]
|
||||
}
|
||||
Passed 5/5
|
||||
report: runs/lab02-module-20261021-182335.json
|
||||
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"cases": "lab01.json",
|
||||
"webhook": "my-notice-kit",
|
||||
"passed": 5,
|
||||
"total": 5,
|
||||
"results": [
|
||||
{
|
||||
"case": "점검 · 머리말",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 3.2,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "보안 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.7,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] 피싱 주의 공지 \n10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있습니다. \n링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고해 주시기 바랍니다. \n의심 메일은 IT 포털 '신고' 메뉴에서 신고해 주세요. \nIT팀은 절대 비밀번호를 묻지 않습니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "교육 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.3,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
},
|
||||
"response": {
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지 \n11월 5일(수) 14:00~16:00 본관 3층 교육장에서 진행됩니다. \n대상은 신규 입사자와 희망자이며, 정원은 20명입니다. \n신청은 IT 포털에서 할 수 있습니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "종류 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사실 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
POST http://localhost:5678/webhook/my-notice-kit · 5 case(s) × 1
|
||||
✔ 점검 · 머리말 · 3.2s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 보안 · 꼭 넣을 문장 · 1.7s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] 피싱 주의 공지 \n10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있습니다. \n링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고해 주시기 바랍니다. \n의심 메일은 IT 포털 '신고' 메뉴에서 신고해 주세요. \nIT팀은 절대 비밀번호를 묻지 않습니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 교육 · 꼭 넣을 문장 · 1.3s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지 \n11월 5일(수) 14:00~16:00 본관 3층 교육장에서 진행됩니다. \n대상은 신규 입사자와 희망자이며, 정원은 20명입니다. \n신청은 IT 포털에서 할 수 있습니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 종류 없음 · 0.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
✔ 사실 없음 · 0.1s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
Passed 5/5
|
||||
report: runs/lab01-20261021-182355.json
|
||||
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"cases": "lab02-challenge.json",
|
||||
"webhook": "my-sms",
|
||||
"passed": 4,
|
||||
"total": 4,
|
||||
"results": [
|
||||
{
|
||||
"case": "보안 SMS",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 2.4,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 28일부터 IT팀 사칭 피싱 메일 증가, 링크 클릭 금지 후 보안팀 신고 바랍니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "점검 SMS · 시간",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.5,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 23일(목) 22:00~24:00 메일 서버 점검, 점검 중 메일 송수신 불가입니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "연락처가 든 사실",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.0,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가. 문의 김민지 010-1234-5678."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가합니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사실 없음",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"facts": ""
|
||||
},
|
||||
"response": {
|
||||
"error": "facts are required"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
POST http://localhost:5678/webhook/my-sms · 4 case(s) × 1
|
||||
✔ 보안 SMS · 2.4s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 28일부터 IT팀 사칭 피싱 메일 증가, 링크 클릭 금지 후 보안팀 신고 바랍니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
✔ 점검 SMS · 시간 · 1.5s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 23일(목) 22:00~24:00 메일 서버 점검, 점검 중 메일 송수신 불가입니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
✔ 연락처가 든 사실 · 1.0s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가. 문의 김민지 010-1234-5678."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가합니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
✔ 사실 없음 · 0.1s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": ""
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "facts are required"
|
||||
}
|
||||
Passed 4/4
|
||||
report: runs/lab02-challenge-20261021-182411.json
|
||||
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"cases": "lab01.json",
|
||||
"webhook": "my-notice-kit",
|
||||
"passed": 5,
|
||||
"total": 5,
|
||||
"results": [
|
||||
{
|
||||
"case": "점검 · 머리말",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.5,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "보안 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.8,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "교육 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.5,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
},
|
||||
"response": {
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지 \n11월 5일(수) 14:00~16:00 본관 3층 교육장에서 진행됩니다. \n대상은 신규 입사자와 희망자이며, 정원은 20명입니다. \n신청은 IT 포털에서 할 수 있습니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "종류 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사실 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
POST http://localhost:5678/webhook/my-notice-kit · 5 case(s) × 1
|
||||
✔ 점검 · 머리말 · 1.5s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 보안 · 꼭 넣을 문장 · 1.8s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 교육 · 꼭 넣을 문장 · 1.5s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지 \n11월 5일(수) 14:00~16:00 본관 3층 교육장에서 진행됩니다. \n대상은 신규 입사자와 희망자이며, 정원은 20명입니다. \n신청은 IT 포털에서 할 수 있습니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 종류 없음 · 0.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
✔ 사실 없음 · 0.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
Passed 5/5
|
||||
report: runs/lab01-20261021-182416.json
|
||||
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"cases": "lab03.json",
|
||||
"webhook": "my-rule-check",
|
||||
"passed": 3,
|
||||
"total": 4,
|
||||
"results": [
|
||||
{
|
||||
"case": "바깥 링크",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": false,
|
||||
"problems": [
|
||||
"codes = [] (expected [\"external_link\"])"
|
||||
],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n자세한 내용: http://bit.ly/mail-check",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사내 링크는 통과",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n자세한 내용: https://intra.example.com/notice/23",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "허용 도메인을 직접 줌",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n자세한 내용: http://bit.ly/mail-check",
|
||||
"max_length": 600,
|
||||
"required_phrases": [],
|
||||
"allowed_domains": [
|
||||
"bit.ly"
|
||||
]
|
||||
},
|
||||
"response": {
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "예전 호출(allowed_domains 없음)도 그대로",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n문의: 010-1234-5678",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"personal_info"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "personal_info",
|
||||
"detail": "010-1234-5678"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
POST http://localhost:5678/webhook/my-rule-check · 4 case(s) × 1
|
||||
✘ 바깥 링크 · 0.1s · codes = [] (expected ["external_link"])
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n자세한 내용: http://bit.ly/mail-check",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
✔ 사내 링크는 통과 · 0.1s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n자세한 내용: https://intra.example.com/notice/23",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
✔ 허용 도메인을 직접 줌 · 0.1s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n자세한 내용: http://bit.ly/mail-check",
|
||||
"max_length": 600,
|
||||
"required_phrases": [],
|
||||
"allowed_domains": [
|
||||
"bit.ly"
|
||||
]
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
✔ 예전 호출(allowed_domains 없음)도 그대로 · 0.1s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n문의: 010-1234-5678",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"personal_info"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "personal_info",
|
||||
"detail": "010-1234-5678"
|
||||
}
|
||||
]
|
||||
}
|
||||
Passed 3/4
|
||||
report: runs/lab03-20261021-182416.json
|
||||
@@ -0,0 +1,105 @@
|
||||
{
|
||||
"cases": "lab03.json",
|
||||
"webhook": "my-rule-check",
|
||||
"passed": 4,
|
||||
"total": 4,
|
||||
"results": [
|
||||
{
|
||||
"case": "바깥 링크",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.0,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n자세한 내용: http://bit.ly/mail-check",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"external_link"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "external_link",
|
||||
"detail": "http://bit.ly/mail-check"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사내 링크는 통과",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n자세한 내용: https://intra.example.com/notice/23",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "허용 도메인을 직접 줌",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n자세한 내용: http://bit.ly/mail-check",
|
||||
"max_length": 600,
|
||||
"required_phrases": [],
|
||||
"allowed_domains": [
|
||||
"bit.ly"
|
||||
]
|
||||
},
|
||||
"response": {
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "예전 호출(allowed_domains 없음)도 그대로",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.2,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n문의: 010-1234-5678",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"personal_info"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "personal_info",
|
||||
"detail": "010-1234-5678"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
POST http://localhost:5678/webhook/my-rule-check · 4 case(s) × 1
|
||||
✔ 바깥 링크 · 1.0s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n자세한 내용: http://bit.ly/mail-check",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"external_link"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "external_link",
|
||||
"detail": "http://bit.ly/mail-check"
|
||||
}
|
||||
]
|
||||
}
|
||||
✔ 사내 링크는 통과 · 0.1s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n자세한 내용: https://intra.example.com/notice/23",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
✔ 허용 도메인을 직접 줌 · 0.1s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n자세한 내용: http://bit.ly/mail-check",
|
||||
"max_length": 600,
|
||||
"required_phrases": [],
|
||||
"allowed_domains": [
|
||||
"bit.ly"
|
||||
]
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
✔ 예전 호출(allowed_domains 없음)도 그대로 · 0.2s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n문의: 010-1234-5678",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"personal_info"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "personal_info",
|
||||
"detail": "010-1234-5678"
|
||||
}
|
||||
]
|
||||
}
|
||||
Passed 4/4
|
||||
report: runs/lab03-20261021-182435.json
|
||||
@@ -0,0 +1,138 @@
|
||||
{
|
||||
"cases": "lab02-module.json",
|
||||
"webhook": "my-rule-check",
|
||||
"passed": 5,
|
||||
"total": 5,
|
||||
"results": [
|
||||
{
|
||||
"case": "좋은 초안",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "시간 빠짐",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 밤에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"missing_fact"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "missing_fact",
|
||||
"detail": "22:00, 24:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "전화번호",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n문의: 010-1234-5678",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"personal_info"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "personal_info",
|
||||
"detail": "010-1234-5678"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "꼭 넣을 문장 빠짐",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 600,
|
||||
"required_phrases": [
|
||||
"IT팀은 절대 비밀번호를 묻지 않습니다."
|
||||
]
|
||||
},
|
||||
"response": {
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"missing_phrase"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "missing_phrase",
|
||||
"detail": "IT팀은 절대 비밀번호를 묻지 않습니다."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "짧은 한도",
|
||||
"webhook": "my-rule-check",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 80,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"too_long"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "too_long",
|
||||
"detail": "82자 (80자 이하)"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
POST http://localhost:5678/webhook/my-rule-check · 5 case(s) × 1
|
||||
✔ 좋은 초안 · 0.1s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": true,
|
||||
"codes": [],
|
||||
"issues": []
|
||||
}
|
||||
✔ 시간 빠짐 · 0.1s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 밤에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"missing_fact"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "missing_fact",
|
||||
"detail": "22:00, 24:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
✔ 전화번호 · 0.1s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n문의: 010-1234-5678",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"personal_info"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "personal_info",
|
||||
"detail": "010-1234-5678"
|
||||
}
|
||||
]
|
||||
}
|
||||
✔ 꼭 넣을 문장 빠짐 · 0.1s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 600,
|
||||
"required_phrases": [
|
||||
"IT팀은 절대 비밀번호를 묻지 않습니다."
|
||||
]
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"missing_phrase"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "missing_phrase",
|
||||
"detail": "IT팀은 절대 비밀번호를 묻지 않습니다."
|
||||
}
|
||||
]
|
||||
}
|
||||
✔ 짧은 한도 · 0.1s
|
||||
→ request POST /webhook/my-rule-check
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 80,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": false,
|
||||
"codes": [
|
||||
"too_long"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "too_long",
|
||||
"detail": "82자 (80자 이하)"
|
||||
}
|
||||
]
|
||||
}
|
||||
Passed 5/5
|
||||
report: runs/lab02-module-20261021-182435.json
|
||||
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"cases": "lab01.json",
|
||||
"webhook": "my-notice-kit",
|
||||
"passed": 5,
|
||||
"total": 5,
|
||||
"results": [
|
||||
{
|
||||
"case": "점검 · 머리말",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 2.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "보안 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.4,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "교육 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.5,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
},
|
||||
"response": {
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지\n\n- 일시: 11월 5일(수) 14:00~16:00 \n- 장소: 본관 3층 교육장 \n- 대상: 신규 입사자와 희망자 \n- 정원: 20명 \n- 신청은 IT 포털에서 할 수 있습니다.",
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "종류 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사실 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
POST http://localhost:5678/webhook/my-notice-kit · 5 case(s) × 1
|
||||
✔ 점검 · 머리말 · 2.1s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 보안 · 꼭 넣을 문장 · 1.4s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 교육 · 꼭 넣을 문장 · 1.5s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지\n\n- 일시: 11월 5일(수) 14:00~16:00 \n- 장소: 본관 3층 교육장 \n- 대상: 신규 입사자와 희망자 \n- 정원: 20명 \n- 신청은 IT 포털에서 할 수 있습니다.",
|
||||
"codes": []
|
||||
}
|
||||
✔ 종류 없음 · 0.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
✔ 사실 없음 · 0.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
Passed 5/5
|
||||
report: runs/lab01-20261021-182440.json
|
||||
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"cases": "lab02-challenge.json",
|
||||
"webhook": "my-sms",
|
||||
"passed": 4,
|
||||
"total": 4,
|
||||
"results": [
|
||||
{
|
||||
"case": "보안 SMS",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.0,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 28일부터 IT팀 사칭 피싱 메일 증가, 링크 클릭 금지 후 보안팀 신고 바랍니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "점검 SMS · 시간",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 23일(목) 22:00~24:00 메일 서버 점검, 점검 중 메일 송수신 불가입니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "연락처가 든 사실",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가. 문의 김민지 010-1234-5678."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가합니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사실 없음",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"facts": ""
|
||||
},
|
||||
"response": {
|
||||
"error": "facts are required"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
POST http://localhost:5678/webhook/my-sms · 4 case(s) × 1
|
||||
✔ 보안 SMS · 1.0s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 28일부터 IT팀 사칭 피싱 메일 증가, 링크 클릭 금지 후 보안팀 신고 바랍니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
✔ 점검 SMS · 시간 · 1.1s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 23일(목) 22:00~24:00 메일 서버 점검, 점검 중 메일 송수신 불가입니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
✔ 연락처가 든 사실 · 1.1s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가. 문의 김민지 010-1234-5678."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가합니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
✔ 사실 없음 · 0.1s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": ""
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "facts are required"
|
||||
}
|
||||
Passed 4/4
|
||||
report: runs/lab02-challenge-20261021-182444.json
|
||||
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"cases": "lab03-v2.json",
|
||||
"webhook": "my-rule-check-v2",
|
||||
"passed": 5,
|
||||
"total": 5,
|
||||
"results": [
|
||||
{
|
||||
"case": "v2 · 길이는 경고",
|
||||
"webhook": "my-rule-check-v2",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.0,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 80,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": true,
|
||||
"blocking": [],
|
||||
"warnings": [
|
||||
"too_long"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "too_long",
|
||||
"detail": "82자 (80자 이하)"
|
||||
}
|
||||
],
|
||||
"version": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "v2 · 전화번호는 막음",
|
||||
"webhook": "my-rule-check-v2",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n문의: 010-1234-5678",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": false,
|
||||
"blocking": [
|
||||
"personal_info"
|
||||
],
|
||||
"warnings": [],
|
||||
"issues": [
|
||||
{
|
||||
"code": "personal_info",
|
||||
"detail": "010-1234-5678"
|
||||
}
|
||||
],
|
||||
"version": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "키트(v2) · 점검",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.9,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "키트(v2) · 보안",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.7,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "SMS는 v1 그대로",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.0,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 28일부터 IT팀 사칭 피싱 메일 증가, 링크 클릭 금지 후 보안팀 신고 바랍니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
POST http://localhost:5678/webhook/my-rule-check-v2 · 5 case(s) × 1
|
||||
✔ v2 · 길이는 경고 · 1.0s
|
||||
→ request POST /webhook/my-rule-check-v2
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 80,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": true,
|
||||
"blocking": [],
|
||||
"warnings": [
|
||||
"too_long"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "too_long",
|
||||
"detail": "82자 (80자 이하)"
|
||||
}
|
||||
],
|
||||
"version": 2
|
||||
}
|
||||
✔ v2 · 전화번호는 막음 · 0.1s
|
||||
→ request POST /webhook/my-rule-check-v2
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n문의: 010-1234-5678",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": false,
|
||||
"blocking": [
|
||||
"personal_info"
|
||||
],
|
||||
"warnings": [],
|
||||
"issues": [
|
||||
{
|
||||
"code": "personal_info",
|
||||
"detail": "010-1234-5678"
|
||||
}
|
||||
],
|
||||
"version": 2
|
||||
}
|
||||
✔ 키트(v2) · 점검 · 1.9s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 키트(v2) · 보안 · 1.7s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ SMS는 v1 그대로 · 1.0s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 28일부터 IT팀 사칭 피싱 메일 증가, 링크 클릭 금지 후 보안팀 신고 바랍니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
Passed 5/5
|
||||
report: runs/lab03-v2-20261021-182509.json
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"cases": "lab01.json",
|
||||
"webhook": "my-notice-kit",
|
||||
"passed": 5,
|
||||
"total": 5,
|
||||
"results": [
|
||||
{
|
||||
"case": "점검 · 머리말",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.3,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "보안 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.8,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 누르지 말고 메일을 즉시 삭제해 주시기 바랍니다. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고해 주세요. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고하여 피해를 예방해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "교육 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.3,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
},
|
||||
"response": {
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지\n\n- 일시: 11월 5일(수) 14:00~16:00 \n- 장소: 본관 3층 교육장 \n- 대상: 신규 입사자와 희망자 \n- 정원: 20명 \n- 신청은 IT 포털에서 할 수 있습니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "종류 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사실 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
POST http://localhost:5678/webhook/my-notice-kit · 5 case(s) × 1
|
||||
✔ 점검 · 머리말 · 1.3s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 보안 · 꼭 넣을 문장 · 1.8s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 누르지 말고 메일을 즉시 삭제해 주시기 바랍니다. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고해 주세요. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고하여 피해를 예방해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 교육 · 꼭 넣을 문장 · 1.3s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지\n\n- 일시: 11월 5일(수) 14:00~16:00 \n- 장소: 본관 3층 교육장 \n- 대상: 신규 입사자와 희망자 \n- 정원: 20명 \n- 신청은 IT 포털에서 할 수 있습니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 종류 없음 · 0.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
✔ 사실 없음 · 0.1s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
Passed 5/5
|
||||
report: runs/lab01-20261021-182514.json
|
||||
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"cases": "lab02-challenge.json",
|
||||
"webhook": "my-sms",
|
||||
"passed": 4,
|
||||
"total": 4,
|
||||
"results": [
|
||||
{
|
||||
"case": "보안 SMS",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.2,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 28일부터 IT팀 사칭 피싱 메일 증가, 링크 클릭 금지 후 보안팀 신고 바랍니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "점검 SMS · 시간",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 23일(목) 22:00~24:00 메일 서버 점검, 점검 중 메일 송수신 불가입니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "연락처가 든 사실",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.0,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가. 문의 김민지 010-1234-5678."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가합니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사실 없음",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"facts": ""
|
||||
},
|
||||
"response": {
|
||||
"error": "facts are required"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
POST http://localhost:5678/webhook/my-sms · 4 case(s) × 1
|
||||
✔ 보안 SMS · 1.2s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 28일부터 IT팀 사칭 피싱 메일 증가, 링크 클릭 금지 후 보안팀 신고 바랍니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
✔ 점검 SMS · 시간 · 1.1s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 23일(목) 22:00~24:00 메일 서버 점검, 점검 중 메일 송수신 불가입니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
✔ 연락처가 든 사실 · 1.0s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가. 문의 김민지 010-1234-5678."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가합니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
✔ 사실 없음 · 0.0s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": ""
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "facts are required"
|
||||
}
|
||||
Passed 4/4
|
||||
report: runs/lab02-challenge-20261021-182517.json
|
||||
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"cases": "70-lab03-challenge-cases.json",
|
||||
"webhook": "my-notice-kit",
|
||||
"passed": 3,
|
||||
"total": 7,
|
||||
"results": [
|
||||
{
|
||||
"case": "종류에 대문자·공백",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": false,
|
||||
"problems": [
|
||||
"kind = Security (expected security)"
|
||||
],
|
||||
"seconds": 1.5,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": " Security ",
|
||||
"request": "피싱 주의",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": " Security ",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[IT 공지] 피싱 메일 주의 안내\n\n10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 증가하고 있습니다. \n의심스러운 메일 내 링크를 클릭하지 마시고 즉시 삭제해 주시기 바랍니다. \n메일을 받으신 경우 보안팀에 신고해 주시고, \nIT 포털의 '신고' 메뉴를 통해서도 신고가 가능합니다. \n안전한 업무 환경을 위해 각별한 주의 부탁드립니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "한국어 종류 이름",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": false,
|
||||
"problems": [
|
||||
"kind = 보안 (expected security)"
|
||||
],
|
||||
"seconds": 1.7,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "보안",
|
||||
"request": "피싱 주의",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "보안",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[IT 공지] 피싱 메일 주의 안내\n\n10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 클릭하지 말고 메일을 즉시 삭제해 주시기 바랍니다. \n의심되는 메일은 IT 포털 '신고' 메뉴를 통해 신고해 주세요. \n보안팀에 빠른 신고 부탁드립니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "공백만 보낸 사실",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": false,
|
||||
"problems": [
|
||||
"status 200 (expected 400)"
|
||||
],
|
||||
"seconds": 1.2,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"facts": " "
|
||||
},
|
||||
"response": {
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내]\n\n안녕하세요, IT팀입니다. \n현재 예정된 점검 작업으로 인해 일부 서비스 이용이 제한됩니다. \n점검 중에는 시스템 접속이 불가능하오니 양해 부탁드립니다. \n점검 종료 후에는 반드시 로그아웃 후 재접속해 주시기 바랍니다. \n감사합니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "없는 종류는 목록을 알려 줌",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": false,
|
||||
"problems": [
|
||||
"status 200 (expected 400)",
|
||||
"kinds has none of ['survey']"
|
||||
],
|
||||
"seconds": 1.3,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "party",
|
||||
"facts": "12월 20일 송년회"
|
||||
},
|
||||
"response": {
|
||||
"kind": "party",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[공지] 12월 20일 송년회 안내\n\n- 12월 20일에 송년회가 진행됩니다.\n- 자세한 장소와 시간은 추후 공지 예정입니다.\n- 많은 참여 부탁드립니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "바깥 링크를 넣어 달라는 요청",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 2.2,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "신고 링크 http://bit.ly/report 도 꼭 넣어 주세요",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고. 신고 링크: http://bit.ly/report"
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "담당자 확인",
|
||||
"published": false,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 누르지 말고 메일을 삭제해 주세요. \n의심 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n신고 링크: http://bit.ly/report",
|
||||
"blocking": [
|
||||
"external_link"
|
||||
],
|
||||
"warnings": [],
|
||||
"codes": [
|
||||
"external_link"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사내 링크는 게시",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.8,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "신고 링크도 넣어 주세요",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고. 신고 링크: https://intra.example.com/report"
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 말고 메일을 삭제해 주세요. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고해 주시기 바랍니다. \n신고 링크: https://intra.example.com/report",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "짧게만 써 달라고 해도 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.4,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "한 줄로 아주 짧게",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀은 절대 비밀번호를 묻지 않습니다. 10월 28일(화)부터 IT팀 사칭 피싱 메일 주의. 링크 클릭 금지, 메일 삭제 후 보안팀 신고. 의심 메일은 IT 포털 '신고' 메뉴 이용.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
POST http://localhost:5678/webhook/my-notice-kit · 7 case(s) × 1
|
||||
✘ 종류에 대문자·공백 · 1.5s · kind = Security (expected security)
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": " Security ",
|
||||
"request": "피싱 주의",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": " Security ",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[IT 공지] 피싱 메일 주의 안내\n\n10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 증가하고 있습니다. \n의심스러운 메일 내 링크를 클릭하지 마시고 즉시 삭제해 주시기 바랍니다. \n메일을 받으신 경우 보안팀에 신고해 주시고, \nIT 포털의 '신고' 메뉴를 통해서도 신고가 가능합니다. \n안전한 업무 환경을 위해 각별한 주의 부탁드립니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✘ 한국어 종류 이름 · 1.7s · kind = 보안 (expected security)
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "보안",
|
||||
"request": "피싱 주의",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "보안",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[IT 공지] 피싱 메일 주의 안내\n\n10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 클릭하지 말고 메일을 즉시 삭제해 주시기 바랍니다. \n의심되는 메일은 IT 포털 '신고' 메뉴를 통해 신고해 주세요. \n보안팀에 빠른 신고 부탁드립니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✘ 공백만 보낸 사실 · 1.2s · status 200 (expected 400)
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"facts": " "
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내]\n\n안녕하세요, IT팀입니다. \n현재 예정된 점검 작업으로 인해 일부 서비스 이용이 제한됩니다. \n점검 중에는 시스템 접속이 불가능하오니 양해 부탁드립니다. \n점검 종료 후에는 반드시 로그아웃 후 재접속해 주시기 바랍니다. \n감사합니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✘ 없는 종류는 목록을 알려 줌 · 1.3s · status 200 (expected 400); kinds has none of ['survey']
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "party",
|
||||
"facts": "12월 20일 송년회"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "party",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[공지] 12월 20일 송년회 안내\n\n- 12월 20일에 송년회가 진행됩니다.\n- 자세한 장소와 시간은 추후 공지 예정입니다.\n- 많은 참여 부탁드립니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 바깥 링크를 넣어 달라는 요청 · 2.2s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "신고 링크 http://bit.ly/report 도 꼭 넣어 주세요",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고. 신고 링크: http://bit.ly/report"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "담당자 확인",
|
||||
"published": false,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 누르지 말고 메일을 삭제해 주세요. \n의심 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n신고 링크: http://bit.ly/report",
|
||||
"blocking": [
|
||||
"external_link"
|
||||
],
|
||||
"warnings": [],
|
||||
"codes": [
|
||||
"external_link"
|
||||
]
|
||||
}
|
||||
✔ 사내 링크는 게시 · 1.8s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "신고 링크도 넣어 주세요",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고. 신고 링크: https://intra.example.com/report"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 말고 메일을 삭제해 주세요. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고해 주시기 바랍니다. \n신고 링크: https://intra.example.com/report",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 짧게만 써 달라고 해도 꼭 넣을 문장 · 1.4s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "한 줄로 아주 짧게",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀은 절대 비밀번호를 묻지 않습니다. 10월 28일(화)부터 IT팀 사칭 피싱 메일 주의. 링크 클릭 금지, 메일 삭제 후 보안팀 신고. 의심 메일은 IT 포털 '신고' 메뉴 이용.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
Passed 3/7
|
||||
report: runs/70-lab03-challenge-cases-20261021-182528.json
|
||||
@@ -0,0 +1,165 @@
|
||||
{
|
||||
"cases": "70-lab03-challenge-cases.json",
|
||||
"webhook": "my-notice-kit",
|
||||
"passed": 7,
|
||||
"total": 7,
|
||||
"results": [
|
||||
{
|
||||
"case": "종류에 대문자·공백",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 3.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": " Security ",
|
||||
"request": "피싱 주의",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "한국어 종류 이름",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.6,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "보안",
|
||||
"request": "피싱 주의",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 말고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "공백만 보낸 사실",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"facts": " "
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "없는 종류는 목록을 알려 줌",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"kind": "party",
|
||||
"facts": "12월 20일 송년회"
|
||||
},
|
||||
"response": {
|
||||
"error": "unknown kind",
|
||||
"kinds": [
|
||||
"maintenance",
|
||||
"security",
|
||||
"training",
|
||||
"survey"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "바깥 링크를 넣어 달라는 요청",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.4,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "신고 링크 http://bit.ly/report 도 꼭 넣어 주세요",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고. 신고 링크: http://bit.ly/report"
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "담당자 확인",
|
||||
"published": false,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 누르지 말고 메일을 삭제해 주세요. \n의심 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \n신고 링크: http://bit.ly/report \nIT팀은 절대 비밀번호를 묻지 않습니다.",
|
||||
"blocking": [
|
||||
"external_link"
|
||||
],
|
||||
"warnings": [],
|
||||
"codes": [
|
||||
"external_link"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사내 링크는 게시",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.6,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "신고 링크도 넣어 주세요",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고. 신고 링크: https://intra.example.com/report"
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의 안내\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 말고 메일을 삭제해 주시기 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고해 주세요. \n신고 링크: https://intra.example.com/report",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "짧게만 써 달라고 해도 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.5,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "한 줄로 아주 짧게",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀은 절대 비밀번호를 묻지 않습니다. \n10월 28일(화)부터 IT팀 사칭 피싱 메일 증가 \n링크 클릭 금지, 메일 삭제 후 보안팀 신고 \n의심 메일은 IT 포털 '신고' 메뉴 이용 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
POST http://localhost:5678/webhook/my-notice-kit · 7 case(s) × 1
|
||||
✔ 종류에 대문자·공백 · 3.1s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": " Security ",
|
||||
"request": "피싱 주의",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 한국어 종류 이름 · 1.6s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "보안",
|
||||
"request": "피싱 주의",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 말고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 공백만 보낸 사실 · 0.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"facts": " "
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
✔ 없는 종류는 목록을 알려 줌 · 0.1s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "party",
|
||||
"facts": "12월 20일 송년회"
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "unknown kind",
|
||||
"kinds": [
|
||||
"maintenance",
|
||||
"security",
|
||||
"training",
|
||||
"survey"
|
||||
]
|
||||
}
|
||||
✔ 바깥 링크를 넣어 달라는 요청 · 1.4s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "신고 링크 http://bit.ly/report 도 꼭 넣어 주세요",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고. 신고 링크: http://bit.ly/report"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "담당자 확인",
|
||||
"published": false,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 누르지 말고 메일을 삭제해 주세요. \n의심 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \n신고 링크: http://bit.ly/report \nIT팀은 절대 비밀번호를 묻지 않습니다.",
|
||||
"blocking": [
|
||||
"external_link"
|
||||
],
|
||||
"warnings": [],
|
||||
"codes": [
|
||||
"external_link"
|
||||
]
|
||||
}
|
||||
✔ 사내 링크는 게시 · 1.6s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "신고 링크도 넣어 주세요",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고. 신고 링크: https://intra.example.com/report"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의 안내\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 말고 메일을 삭제해 주시기 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고해 주세요. \n신고 링크: https://intra.example.com/report",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 짧게만 써 달라고 해도 꼭 넣을 문장 · 1.5s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "한 줄로 아주 짧게",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀은 절대 비밀번호를 묻지 않습니다. \n10월 28일(화)부터 IT팀 사칭 피싱 메일 증가 \n링크 클릭 금지, 메일 삭제 후 보안팀 신고 \n의심 메일은 IT 포털 '신고' 메뉴 이용 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
Passed 7/7
|
||||
report: runs/70-lab03-challenge-cases-20261021-182550.json
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"cases": "lab01.json",
|
||||
"webhook": "my-notice-kit",
|
||||
"passed": 5,
|
||||
"total": 5,
|
||||
"results": [
|
||||
{
|
||||
"case": "점검 · 머리말",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.7,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "보안 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.8,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "교육 · 꼭 넣을 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.4,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
},
|
||||
"response": {
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지\n\n- 일시: 11월 5일(수) 14:00~16:00 \n- 장소: 본관 3층 교육장 \n- 대상: 신규 입사자와 희망자 \n- 정원: 20명 \n- 신청은 IT 포털에서 할 수 있습니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "종류 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사실 없음",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
},
|
||||
"response": {
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
POST http://localhost:5678/webhook/my-notice-kit · 5 case(s) × 1
|
||||
✔ 점검 · 머리말 · 1.7s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 보안 · 꼭 넣을 문장 · 1.8s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 교육 · 꼭 넣을 문장 · 1.4s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "training",
|
||||
"request": "n8n 기초 교육 공지",
|
||||
"facts": "11월 5일(수) 14:00~16:00 본관 3층 교육장에서 n8n 기초 교육. 대상은 신규 입사자와 희망자. 정원 20명."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "training",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[교육 안내] n8n 기초 교육 공지\n\n- 일시: 11월 5일(수) 14:00~16:00 \n- 장소: 본관 3층 교육장 \n- 대상: 신규 입사자와 희망자 \n- 정원: 20명 \n- 신청은 IT 포털에서 할 수 있습니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 종류 없음 · 0.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"request": "공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
✔ 사실 없음 · 0.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "공지",
|
||||
"facts": ""
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "kind and facts are required"
|
||||
}
|
||||
Passed 5/5
|
||||
report: runs/lab01-20261021-182556.json
|
||||
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"cases": "lab01-challenge.json",
|
||||
"webhook": "my-notice-kit",
|
||||
"passed": 4,
|
||||
"total": 4,
|
||||
"results": [
|
||||
{
|
||||
"case": "새 종류 · 설문",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.5,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "survey",
|
||||
"request": "IT 만족도 설문 공지",
|
||||
"facts": "11월 7일(금)까지 사내 IT 만족도 설문 진행. 약 5분 소요. 결과는 IT 서비스 개선에 사용."
|
||||
},
|
||||
"response": {
|
||||
"kind": "survey",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[설문 안내] 사내 IT 만족도 설문 진행 안내\n\n사내 IT 서비스 개선을 위한 만족도 조사를 실시합니다.\n설문 응답은 익명으로 처리됩니다.\n설문 소요 시간은 약 5분입니다.\n응답 마감일은 11월 7일(금)까지입니다.\n많은 참여 부탁드립니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "설문 · 익명 문장",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.2,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "survey",
|
||||
"request": "IT 만족도 설문 공지",
|
||||
"facts": "11월 7일(금)까지 사내 IT 만족도 설문 진행. 약 5분 소요. 결과는 IT 서비스 개선에 사용."
|
||||
},
|
||||
"response": {
|
||||
"kind": "survey",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[설문 안내] 사내 IT 만족도 설문 진행 안내 \n11월 7일(금)까지 설문에 참여해 주세요. \n설문은 약 5분 정도 소요됩니다. \n응답은 익명으로 처리됩니다. \n설문 결과는 IT 서비스 개선에 사용됩니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "없는 종류",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"kind": "party",
|
||||
"request": "송년회 공지",
|
||||
"facts": "12월 20일(금) 18:00 송년회."
|
||||
},
|
||||
"response": {
|
||||
"error": "unknown kind",
|
||||
"kinds": [
|
||||
"maintenance",
|
||||
"security",
|
||||
"training",
|
||||
"survey"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "원래 종류도 그대로",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.7,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
POST http://localhost:5678/webhook/my-notice-kit · 4 case(s) × 1
|
||||
✔ 새 종류 · 설문 · 1.5s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "survey",
|
||||
"request": "IT 만족도 설문 공지",
|
||||
"facts": "11월 7일(금)까지 사내 IT 만족도 설문 진행. 약 5분 소요. 결과는 IT 서비스 개선에 사용."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "survey",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[설문 안내] 사내 IT 만족도 설문 진행 안내\n\n사내 IT 서비스 개선을 위한 만족도 조사를 실시합니다.\n설문 응답은 익명으로 처리됩니다.\n설문 소요 시간은 약 5분입니다.\n응답 마감일은 11월 7일(금)까지입니다.\n많은 참여 부탁드립니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 설문 · 익명 문장 · 1.2s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "survey",
|
||||
"request": "IT 만족도 설문 공지",
|
||||
"facts": "11월 7일(금)까지 사내 IT 만족도 설문 진행. 약 5분 소요. 결과는 IT 서비스 개선에 사용."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "survey",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[설문 안내] 사내 IT 만족도 설문 진행 안내 \n11월 7일(금)까지 설문에 참여해 주세요. \n설문은 약 5분 정도 소요됩니다. \n응답은 익명으로 처리됩니다. \n설문 결과는 IT 서비스 개선에 사용됩니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 없는 종류 · 0.0s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "party",
|
||||
"request": "송년회 공지",
|
||||
"facts": "12월 20일(금) 18:00 송년회."
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "unknown kind",
|
||||
"kinds": [
|
||||
"maintenance",
|
||||
"security",
|
||||
"training",
|
||||
"survey"
|
||||
]
|
||||
}
|
||||
✔ 원래 종류도 그대로 · 1.7s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
Passed 4/4
|
||||
report: runs/lab01-challenge-20261021-182600.json
|
||||
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"cases": "lab03-v2.json",
|
||||
"webhook": "my-rule-check-v2",
|
||||
"passed": 5,
|
||||
"total": 5,
|
||||
"results": [
|
||||
{
|
||||
"case": "v2 · 길이는 경고",
|
||||
"webhook": "my-rule-check-v2",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 80,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": true,
|
||||
"blocking": [],
|
||||
"warnings": [
|
||||
"too_long"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "too_long",
|
||||
"detail": "82자 (80자 이하)"
|
||||
}
|
||||
],
|
||||
"version": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "v2 · 전화번호는 막음",
|
||||
"webhook": "my-rule-check-v2",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n문의: 010-1234-5678",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
},
|
||||
"response": {
|
||||
"passed": false,
|
||||
"blocking": [
|
||||
"personal_info"
|
||||
],
|
||||
"warnings": [],
|
||||
"issues": [
|
||||
{
|
||||
"code": "personal_info",
|
||||
"detail": "010-1234-5678"
|
||||
}
|
||||
],
|
||||
"version": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "키트(v2) · 점검",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.3,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "키트(v2) · 보안",
|
||||
"webhook": "my-notice-kit",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.8,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "SMS는 v1 그대로",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.3,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 28일부터 IT팀 사칭 피싱 메일 증가, 링크 클릭 금지 및 보안팀 신고 바랍니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
POST http://localhost:5678/webhook/my-rule-check-v2 · 5 case(s) × 1
|
||||
✔ v2 · 길이는 경고 · 0.1s
|
||||
→ request POST /webhook/my-rule-check-v2
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.",
|
||||
"max_length": 80,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": true,
|
||||
"blocking": [],
|
||||
"warnings": [
|
||||
"too_long"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"code": "too_long",
|
||||
"detail": "82자 (80자 이하)"
|
||||
}
|
||||
],
|
||||
"version": 2
|
||||
}
|
||||
✔ v2 · 전화번호는 막음 · 0.1s
|
||||
→ request POST /webhook/my-rule-check-v2
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨.",
|
||||
"draft": "[점검 안내] 메일 서버 점검\n10월 23일(목) 22:00~24:00에 메일 서버 점검이 있습니다.\n점검 중에는 메일을 보내고 받을 수 없습니다.\n문의: 010-1234-5678",
|
||||
"max_length": 600,
|
||||
"required_phrases": []
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"passed": false,
|
||||
"blocking": [
|
||||
"personal_info"
|
||||
],
|
||||
"warnings": [],
|
||||
"issues": [
|
||||
{
|
||||
"code": "personal_info",
|
||||
"detail": "010-1234-5678"
|
||||
}
|
||||
],
|
||||
"version": 2
|
||||
}
|
||||
✔ 키트(v2) · 점검 · 1.3s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"request": "메일 서버 점검 공지",
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "maintenance",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[점검 안내] 메일 서버 점검 안내\n\n10월 23일(목) 22:00~24:00 메일 서버 점검이 진행됩니다. \n점검 중에는 메일을 보내고 받을 수 없습니다. \n점검이 끝나면 메일 프로그램을 다시 열어 주시기 바랍니다. \n이용에 불편을 드려 죄송합니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ 키트(v2) · 보안 · 1.8s
|
||||
→ request POST /webhook/my-notice-kit
|
||||
{
|
||||
"kind": "security",
|
||||
"request": "피싱 주의 공지",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"kind": "security",
|
||||
"route": "게시 가능",
|
||||
"published": true,
|
||||
"notice": "[보안 안내] IT팀 사칭 피싱 메일 주의\n\n10월 28일(화)부터 IT팀을 사칭한 피싱 메일이 증가하고 있습니다. \n링크를 절대 누르지 마시고 메일을 삭제해 주세요. \n의심스러운 메일은 IT 포털 '신고' 메뉴에서 신고 바랍니다. \nIT팀은 절대 비밀번호를 묻지 않습니다. \n보안팀에 즉시 신고해 주시기 바랍니다.",
|
||||
"blocking": [],
|
||||
"warnings": [],
|
||||
"codes": []
|
||||
}
|
||||
✔ SMS는 v1 그대로 · 1.3s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 28일부터 IT팀 사칭 피싱 메일 증가, 링크 클릭 금지 및 보안팀 신고 바랍니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
Passed 5/5
|
||||
report: runs/lab03-v2-20261021-182605.json
|
||||
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"cases": "lab02-challenge.json",
|
||||
"webhook": "my-sms",
|
||||
"passed": 4,
|
||||
"total": 4,
|
||||
"results": [
|
||||
{
|
||||
"case": "보안 SMS",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.4,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 28일부터 IT팀 사칭 피싱 메일 증가, 링크 클릭 금지 후 보안팀 신고 바랍니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "점검 SMS · 시간",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.2,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 23일(목) 22:00~24:00 메일 서버 점검, 점검 중 메일 송수신 불가입니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "연락처가 든 사실",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 1.1,
|
||||
"status": 200,
|
||||
"request": {
|
||||
"facts": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가. 문의 김민지 010-1234-5678."
|
||||
},
|
||||
"response": {
|
||||
"sms": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가합니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"case": "사실 없음",
|
||||
"webhook": "my-sms",
|
||||
"run": 1,
|
||||
"passed": true,
|
||||
"problems": [],
|
||||
"seconds": 0.0,
|
||||
"status": 400,
|
||||
"request": {
|
||||
"facts": ""
|
||||
},
|
||||
"response": {
|
||||
"error": "facts are required"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
POST http://localhost:5678/webhook/my-sms · 4 case(s) × 1
|
||||
✔ 보안 SMS · 1.4s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 28일부터 IT팀 사칭 피싱 메일 증가, 링크 클릭 금지 후 보안팀 신고 바랍니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
✔ 점검 SMS · 시간 · 1.2s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 23일(목) 22:00~24:00 메일 서버 점검. 점검 중에는 메일을 보내고 받을 수 없음. 점검이 끝나면 메일 프로그램을 다시 열면 됨."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 23일(목) 22:00~24:00 메일 서버 점검, 점검 중 메일 송수신 불가입니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
✔ 연락처가 든 사실 · 1.1s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가. 문의 김민지 010-1234-5678."
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"sms": "10월 30일(목) 18:00~19:00 프린터 드라이버 업데이트로 출력 불가합니다.",
|
||||
"published": true,
|
||||
"codes": []
|
||||
}
|
||||
✔ 사실 없음 · 0.0s
|
||||
→ request POST /webhook/my-sms
|
||||
{
|
||||
"facts": ""
|
||||
}
|
||||
← response HTTP 400
|
||||
{
|
||||
"error": "facts are required"
|
||||
}
|
||||
Passed 4/4
|
||||
report: runs/lab02-challenge-20261021-182609.json
|
||||
@@ -0,0 +1,350 @@
|
||||
{
|
||||
"name": "answer · 70 Lab 01 challenge (new kind, unknown kind)",
|
||||
"nodes": [
|
||||
{
|
||||
"name": "Kit webhook",
|
||||
"type": "n8n-nodes-base.webhook",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
0,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"httpMethod": "POST",
|
||||
"path": "my-notice-kit",
|
||||
"responseMode": "responseNode",
|
||||
"options": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Has kind and facts?",
|
||||
"type": "n8n-nodes-base.if",
|
||||
"typeVersion": 2.2,
|
||||
"position": [
|
||||
200,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"conditions": {
|
||||
"options": {
|
||||
"caseSensitive": true,
|
||||
"leftValue": "",
|
||||
"typeValidation": "strict",
|
||||
"version": 2
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"id": "c0",
|
||||
"leftValue": "={{ $json.body.facts }}",
|
||||
"rightValue": "",
|
||||
"operator": {
|
||||
"type": "string",
|
||||
"operation": "notEmpty",
|
||||
"singleValue": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "c1",
|
||||
"leftValue": "={{ $json.body.kind }}",
|
||||
"rightValue": "",
|
||||
"operator": {
|
||||
"type": "string",
|
||||
"operation": "notEmpty",
|
||||
"singleValue": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"combinator": "and"
|
||||
},
|
||||
"options": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Reject empty",
|
||||
"type": "n8n-nodes-base.respondToWebhook",
|
||||
"typeVersion": 1.1,
|
||||
"position": [
|
||||
420,
|
||||
560
|
||||
],
|
||||
"parameters": {
|
||||
"respondWith": "json",
|
||||
"responseBody": "{ \"error\": \"kind and facts are required\" }",
|
||||
"options": {
|
||||
"responseCode": 400
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Kind settings",
|
||||
"type": "n8n-nodes-base.code",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
420,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"jsCode": "// The only per-kind part of the template: one row per notice kind.\nconst KINDS = {\n \"maintenance\": {\n \"label\": \"점검\",\n \"prefix\": \"[점검 안내]\",\n \"max_length\": 600,\n \"required_phrases\": [],\n \"extra\": \"Say clearly what cannot be used during the work and what to do after it.\"\n },\n \"security\": {\n \"label\": \"보안\",\n \"prefix\": \"[보안 안내]\",\n \"max_length\": 500,\n \"required_phrases\": [\n \"IT팀은 절대 비밀번호를 묻지 않습니다.\"\n ],\n \"extra\": \"Tell readers what to do and what never to do. Never ask for passwords.\"\n },\n \"training\": {\n \"label\": \"교육\",\n \"prefix\": \"[교육 안내]\",\n \"max_length\": 800,\n \"required_phrases\": [\n \"신청은 IT 포털에서 할 수 있습니다.\"\n ],\n \"extra\": \"Say who should attend, when and where, and how to apply.\"\n },\n \"survey\": {\n \"label\": \"설문\",\n \"prefix\": \"[설문 안내]\",\n \"max_length\": 500,\n \"required_phrases\": [\n \"응답은 익명으로 처리됩니다.\"\n ],\n \"extra\": \"Say the purpose of the survey, the deadline and how long it takes.\"\n }\n};\nconst body = $('Kit webhook').first().json.body;\nconst kind = String(body.kind ?? '');\nif (!KINDS[kind]) return [{ json: { known: false, kinds: Object.keys(KINDS) } }];\nreturn [{ json: { known: true, kind, ...KINDS[kind] } }];"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Known kind?",
|
||||
"type": "n8n-nodes-base.if",
|
||||
"typeVersion": 2.2,
|
||||
"position": [
|
||||
620,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"conditions": {
|
||||
"options": {
|
||||
"caseSensitive": true,
|
||||
"leftValue": "",
|
||||
"typeValidation": "strict",
|
||||
"version": 2
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"id": "c0",
|
||||
"leftValue": "={{ $json.known }}",
|
||||
"rightValue": "",
|
||||
"operator": {
|
||||
"type": "boolean",
|
||||
"operation": "true",
|
||||
"singleValue": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"combinator": "and"
|
||||
},
|
||||
"options": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Reject unknown kind",
|
||||
"type": "n8n-nodes-base.respondToWebhook",
|
||||
"typeVersion": 1.1,
|
||||
"position": [
|
||||
840,
|
||||
560
|
||||
],
|
||||
"parameters": {
|
||||
"respondWith": "json",
|
||||
"responseBody": "={{ JSON.stringify({ error: 'unknown kind', kinds: $json.kinds }) }}",
|
||||
"options": {
|
||||
"responseCode": 400
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Writer agent",
|
||||
"type": "@n8n/n8n-nodes-langchain.agent",
|
||||
"typeVersion": 3.1,
|
||||
"position": [
|
||||
840,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"promptType": "define",
|
||||
"text": "=제목 머리말(prefix): {{ $('Kind settings').first().json.prefix }}\n꼭 넣을 문장: {{ ($('Kind settings').first().json.required_phrases ?? []).join(' / ') || '없음' }}\n이 종류의 주의: {{ $('Kind settings').first().json.extra }}\n요청: {{ $('Kit webhook').first().json.body.request || '공지' }}\n사실:\n{{ $('Kit webhook').first().json.body.facts }}",
|
||||
"options": {
|
||||
"systemMessage": "You write one company IT notice in Korean from the facts only. The first line is the title and it starts with the given prefix. Then 3 to 6 short lines. Copy every date and time exactly as written in the facts. Do not add promises, compensation, dates, people or contacts that are not in the facts. If required sentences are given, include each of them exactly as written. Return only the notice text.",
|
||||
"maxIterations": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "OpenAI chat model",
|
||||
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
|
||||
"typeVersion": 1.2,
|
||||
"position": [
|
||||
800,
|
||||
520
|
||||
],
|
||||
"parameters": {
|
||||
"model": {
|
||||
"__rl": true,
|
||||
"mode": "id",
|
||||
"value": "gpt-4.1-mini"
|
||||
},
|
||||
"options": {
|
||||
"temperature": 0
|
||||
}
|
||||
},
|
||||
"credentials": {
|
||||
"openAiApi": {
|
||||
"id": "openAiCourse0001",
|
||||
"name": "OpenAI (.env)"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Build draft",
|
||||
"type": "n8n-nodes-base.code",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
1060,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"jsCode": "// The writer's text, without code fences.\nreturn [{ json: { draft: String($json.output ?? '').trim().replace(/^```\\w*\\s*|```$/g, '').trim() } }];"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Rule checks",
|
||||
"type": "n8n-nodes-base.code",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
1280,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"jsCode": "// Rule checks. Same answer every time, so code, not the LLM.\nconst facts = String({ facts: $('Kit webhook').first().json.body.facts, draft: $json.draft, max_length: $('Kind settings').first().json.max_length, required_phrases: $('Kind settings').first().json.required_phrases }.facts ?? '');\nconst draft = String({ facts: $('Kit webhook').first().json.body.facts, draft: $json.draft, max_length: $('Kind settings').first().json.max_length, required_phrases: $('Kind settings').first().json.required_phrases }.draft ?? '');\nconst maxLength = Number({ facts: $('Kit webhook').first().json.body.facts, draft: $json.draft, max_length: $('Kind settings').first().json.max_length, required_phrases: $('Kind settings').first().json.required_phrases }.max_length ?? 600);\nconst required = Array.isArray({ facts: $('Kit webhook').first().json.body.facts, draft: $json.draft, max_length: $('Kind settings').first().json.max_length, required_phrases: $('Kind settings').first().json.required_phrases }.required_phrases) ? { facts: $('Kit webhook').first().json.body.facts, draft: $json.draft, max_length: $('Kind settings').first().json.max_length, required_phrases: $('Kind settings').first().json.required_phrases }.required_phrases : [];\nconst squeeze = text => text.replace(/\\s+/g, '');\nconst tokens = [...new Set(facts.match(/\\d{1,2}월\\s?\\d{1,2}일|\\d{1,2}:\\d{2}/g) ?? [])];\nconst issues = [];\nconst missing = tokens.filter(token => !squeeze(draft).includes(squeeze(token)));\nif (missing.length) issues.push({ code: 'missing_fact', detail: missing.join(', ') });\nconst personal = draft.match(/01[016789]-?\\d{3,4}-?\\d{4}|[\\w.+-]+@[\\w-]+\\.[\\w.]+/g) ?? [];\nif (personal.length) issues.push({ code: 'personal_info', detail: personal.join(', ') });\nif (draft.length > maxLength) issues.push({ code: 'too_long', detail: `${draft.length}자 (${maxLength}자 이하)` });\nconst absent = required.filter(phrase => !squeeze(draft).includes(squeeze(String(phrase))));\nif (absent.length) issues.push({ code: 'missing_phrase', detail: absent.join(' / ') });\n\nreturn [{ json: { passed: issues.length === 0, codes: issues.map(issue => issue.code), issues } }];"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Build result",
|
||||
"type": "n8n-nodes-base.code",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
1500,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"jsCode": "// The kit's contract: { kind, route, published, notice, codes }.\nconst review = $json;\nconst draft = $('Build draft').first().json.draft;\nreturn [{ json: { kind: $('Kind settings').first().json.kind, route: review.passed ? '게시 가능' : '담당자 확인',\n published: review.passed === true, notice: draft, codes: review.codes ?? [] } }];"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Send result",
|
||||
"type": "n8n-nodes-base.respondToWebhook",
|
||||
"typeVersion": 1.1,
|
||||
"position": [
|
||||
1720,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"respondWith": "json",
|
||||
"responseBody": "={{ $json }}",
|
||||
"options": {}
|
||||
}
|
||||
}
|
||||
],
|
||||
"connections": {
|
||||
"Kit webhook": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Has kind and facts?",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Has kind and facts?": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Kind settings",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"node": "Reject empty",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Kind settings": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Known kind?",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Known kind?": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Writer agent",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"node": "Reject unknown kind",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"OpenAI chat model": {
|
||||
"ai_languageModel": [
|
||||
[
|
||||
{
|
||||
"node": "Writer agent",
|
||||
"type": "ai_languageModel",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Writer agent": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Build draft",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Build draft": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Rule checks",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Rule checks": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Build result",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Build result": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Send result",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"executionOrder": "v1"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,309 @@
|
||||
{
|
||||
"name": "answer · 70 Lab 02 challenge (SMS uses the module)",
|
||||
"nodes": [
|
||||
{
|
||||
"name": "SMS webhook",
|
||||
"type": "n8n-nodes-base.webhook",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
0,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"httpMethod": "POST",
|
||||
"path": "my-sms",
|
||||
"responseMode": "responseNode",
|
||||
"options": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Has facts?",
|
||||
"type": "n8n-nodes-base.if",
|
||||
"typeVersion": 2.2,
|
||||
"position": [
|
||||
200,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"conditions": {
|
||||
"options": {
|
||||
"caseSensitive": true,
|
||||
"leftValue": "",
|
||||
"typeValidation": "strict",
|
||||
"version": 2
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"id": "c0",
|
||||
"leftValue": "={{ $json.body.facts }}",
|
||||
"rightValue": "",
|
||||
"operator": {
|
||||
"type": "string",
|
||||
"operation": "notEmpty",
|
||||
"singleValue": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"combinator": "and"
|
||||
},
|
||||
"options": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Reject empty",
|
||||
"type": "n8n-nodes-base.respondToWebhook",
|
||||
"typeVersion": 1.1,
|
||||
"position": [
|
||||
420,
|
||||
520
|
||||
],
|
||||
"parameters": {
|
||||
"respondWith": "json",
|
||||
"responseBody": "{ \"error\": \"facts are required\" }",
|
||||
"options": {
|
||||
"responseCode": 400
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "SMS agent",
|
||||
"type": "@n8n/n8n-nodes-langchain.agent",
|
||||
"typeVersion": 3.1,
|
||||
"position": [
|
||||
420,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"promptType": "define",
|
||||
"text": "=사실:\n{{ $('SMS webhook').first().json.body.facts }}",
|
||||
"options": {
|
||||
"systemMessage": "You write one Korean SMS (text message) from the facts only: at most 80 characters, one or two sentences. Copy every date and time exactly. No phone numbers, e-mail addresses or links. Return only the SMS text.",
|
||||
"maxIterations": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "OpenAI chat model",
|
||||
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
|
||||
"typeVersion": 1.2,
|
||||
"position": [
|
||||
380,
|
||||
520
|
||||
],
|
||||
"parameters": {
|
||||
"model": {
|
||||
"__rl": true,
|
||||
"mode": "id",
|
||||
"value": "gpt-4.1-mini"
|
||||
},
|
||||
"options": {
|
||||
"temperature": 0
|
||||
}
|
||||
},
|
||||
"credentials": {
|
||||
"openAiApi": {
|
||||
"id": "openAiCourse0001",
|
||||
"name": "OpenAI (.env)"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Build draft",
|
||||
"type": "n8n-nodes-base.code",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
640,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"jsCode": "// The writer's text, without code fences.\nreturn [{ json: { draft: String($json.output ?? '').trim().replace(/^```\\w*\\s*|```$/g, '').trim() } }];"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Rule check module",
|
||||
"type": "n8n-nodes-base.executeWorkflow",
|
||||
"typeVersion": 1.2,
|
||||
"position": [
|
||||
860,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"workflowId": {
|
||||
"__rl": true,
|
||||
"mode": "id",
|
||||
"value": "modRuleCheck01"
|
||||
},
|
||||
"workflowInputs": {
|
||||
"mappingMode": "defineBelow",
|
||||
"value": {
|
||||
"facts": "={{ $('SMS webhook').first().json.body.facts }}",
|
||||
"draft": "={{ $json.draft }}",
|
||||
"max_length": 80,
|
||||
"required_phrases": "={{ [] }}"
|
||||
},
|
||||
"matchingColumns": [],
|
||||
"schema": [
|
||||
{
|
||||
"id": "facts",
|
||||
"displayName": "facts",
|
||||
"required": false,
|
||||
"defaultMatch": false,
|
||||
"display": true,
|
||||
"canBeUsedToMatch": true,
|
||||
"type": "string",
|
||||
"removed": false
|
||||
},
|
||||
{
|
||||
"id": "draft",
|
||||
"displayName": "draft",
|
||||
"required": false,
|
||||
"defaultMatch": false,
|
||||
"display": true,
|
||||
"canBeUsedToMatch": true,
|
||||
"type": "string",
|
||||
"removed": false
|
||||
},
|
||||
{
|
||||
"id": "max_length",
|
||||
"displayName": "max_length",
|
||||
"required": false,
|
||||
"defaultMatch": false,
|
||||
"display": true,
|
||||
"canBeUsedToMatch": true,
|
||||
"type": "number",
|
||||
"removed": false
|
||||
},
|
||||
{
|
||||
"id": "required_phrases",
|
||||
"displayName": "required_phrases",
|
||||
"required": false,
|
||||
"defaultMatch": false,
|
||||
"display": true,
|
||||
"canBeUsedToMatch": true,
|
||||
"type": "array",
|
||||
"removed": false
|
||||
}
|
||||
],
|
||||
"attemptToConvertTypes": false,
|
||||
"convertFieldsToString": true
|
||||
},
|
||||
"options": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Build result",
|
||||
"type": "n8n-nodes-base.code",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
1080,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"jsCode": "// The SMS contract: { sms, published, codes }.\nreturn [{ json: { sms: $('Build draft').first().json.draft, published: $json.passed === true, codes: $json.codes ?? [] } }];"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Send result",
|
||||
"type": "n8n-nodes-base.respondToWebhook",
|
||||
"typeVersion": 1.1,
|
||||
"position": [
|
||||
1300,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"respondWith": "json",
|
||||
"responseBody": "={{ $json }}",
|
||||
"options": {}
|
||||
}
|
||||
}
|
||||
],
|
||||
"connections": {
|
||||
"SMS webhook": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Has facts?",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Has facts?": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "SMS agent",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"node": "Reject empty",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"OpenAI chat model": {
|
||||
"ai_languageModel": [
|
||||
[
|
||||
{
|
||||
"node": "SMS agent",
|
||||
"type": "ai_languageModel",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"SMS agent": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Build draft",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Build draft": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Rule check module",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Rule check module": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Build result",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Build result": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Send result",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"executionOrder": "v1"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
{
|
||||
"webhook": "my-notice-kit",
|
||||
"cases": [
|
||||
{
|
||||
"name": "종류에 대문자·공백",
|
||||
"body": {
|
||||
"kind": " Security ",
|
||||
"request": "피싱 주의",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"kind": "security",
|
||||
"published": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "한국어 종류 이름",
|
||||
"body": {
|
||||
"kind": "보안",
|
||||
"request": "피싱 주의",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"kind": "security"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "공백만 보낸 사실",
|
||||
"body": {
|
||||
"kind": "maintenance",
|
||||
"facts": " "
|
||||
},
|
||||
"expect": {
|
||||
"status": 400
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "없는 종류는 목록을 알려 줌",
|
||||
"body": {
|
||||
"kind": "party",
|
||||
"facts": "12월 20일 송년회"
|
||||
},
|
||||
"expect": {
|
||||
"status": 400,
|
||||
"contains": {
|
||||
"kinds": [
|
||||
"survey"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "바깥 링크를 넣어 달라는 요청",
|
||||
"body": {
|
||||
"kind": "security",
|
||||
"request": "신고 링크 http://bit.ly/report 도 꼭 넣어 주세요",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고. 신고 링크: http://bit.ly/report"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"published": false
|
||||
},
|
||||
"contains": {
|
||||
"blocking": [
|
||||
"external_link"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "사내 링크는 게시",
|
||||
"body": {
|
||||
"kind": "security",
|
||||
"request": "신고 링크도 넣어 주세요",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고. 신고 링크: https://intra.example.com/report"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"published": true
|
||||
},
|
||||
"contains": {
|
||||
"notice": [
|
||||
"intra.example.com"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "짧게만 써 달라고 해도 꼭 넣을 문장",
|
||||
"body": {
|
||||
"kind": "security",
|
||||
"request": "한 줄로 아주 짧게",
|
||||
"facts": "10월 28일(화)부터 'IT팀'을 사칭한 피싱 메일이 늘고 있음. 링크를 누르지 말고 메일을 삭제한 뒤 보안팀에 신고. 의심 메일은 IT 포털 '신고' 메뉴에서 신고."
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"blocking": []
|
||||
},
|
||||
"contains": {
|
||||
"notice": [
|
||||
"비밀번호를 묻지 않습니다"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,409 @@
|
||||
{
|
||||
"name": "answer · 70 Lab 03 challenge (final)",
|
||||
"nodes": [
|
||||
{
|
||||
"name": "Kit webhook",
|
||||
"type": "n8n-nodes-base.webhook",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
0,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"httpMethod": "POST",
|
||||
"path": "my-notice-kit",
|
||||
"responseMode": "responseNode",
|
||||
"options": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Has kind and facts?",
|
||||
"type": "n8n-nodes-base.if",
|
||||
"typeVersion": 2.2,
|
||||
"position": [
|
||||
200,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"conditions": {
|
||||
"options": {
|
||||
"caseSensitive": true,
|
||||
"leftValue": "",
|
||||
"typeValidation": "strict",
|
||||
"version": 2
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"id": "c0",
|
||||
"leftValue": "={{ String($json.body.facts ?? '').trim() }}",
|
||||
"rightValue": "",
|
||||
"operator": {
|
||||
"type": "string",
|
||||
"operation": "notEmpty",
|
||||
"singleValue": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "c1",
|
||||
"leftValue": "={{ $json.body.kind }}",
|
||||
"rightValue": "",
|
||||
"operator": {
|
||||
"type": "string",
|
||||
"operation": "notEmpty",
|
||||
"singleValue": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"combinator": "and"
|
||||
},
|
||||
"options": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Reject empty",
|
||||
"type": "n8n-nodes-base.respondToWebhook",
|
||||
"typeVersion": 1.1,
|
||||
"position": [
|
||||
420,
|
||||
560
|
||||
],
|
||||
"parameters": {
|
||||
"respondWith": "json",
|
||||
"responseBody": "{ \"error\": \"kind and facts are required\" }",
|
||||
"options": {
|
||||
"responseCode": 400
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Kind settings",
|
||||
"type": "n8n-nodes-base.code",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
420,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"jsCode": "// The only per-kind part of the template: one row per notice kind.\nconst KINDS = {\n \"maintenance\": {\n \"label\": \"점검\",\n \"prefix\": \"[점검 안내]\",\n \"max_length\": 600,\n \"required_phrases\": [],\n \"extra\": \"Say clearly what cannot be used during the work and what to do after it.\"\n },\n \"security\": {\n \"label\": \"보안\",\n \"prefix\": \"[보안 안내]\",\n \"max_length\": 500,\n \"required_phrases\": [\n \"IT팀은 절대 비밀번호를 묻지 않습니다.\"\n ],\n \"extra\": \"Tell readers what to do and what never to do. Never ask for passwords.\"\n },\n \"training\": {\n \"label\": \"교육\",\n \"prefix\": \"[교육 안내]\",\n \"max_length\": 800,\n \"required_phrases\": [\n \"신청은 IT 포털에서 할 수 있습니다.\"\n ],\n \"extra\": \"Say who should attend, when and where, and how to apply.\"\n },\n \"survey\": {\n \"label\": \"설문\",\n \"prefix\": \"[설문 안내]\",\n \"max_length\": 500,\n \"required_phrases\": [\n \"응답은 익명으로 처리됩니다.\"\n ],\n \"extra\": \"Say the purpose of the survey, the deadline and how long it takes.\"\n }\n};\nconst body = $('Kit webhook').first().json.body;\nconst ALIASES = { '점검': 'maintenance', '보안': 'security', '교육': 'training', '설문': 'survey' };\nconst raw = String(body.kind ?? '').trim().toLowerCase();\nconst kind = ALIASES[raw] ?? raw;\nif (!KINDS[kind]) return [{ json: { known: false, kinds: Object.keys(KINDS) } }];\nreturn [{ json: { known: true, kind, ...KINDS[kind] } }];"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Known kind?",
|
||||
"type": "n8n-nodes-base.if",
|
||||
"typeVersion": 2.2,
|
||||
"position": [
|
||||
620,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"conditions": {
|
||||
"options": {
|
||||
"caseSensitive": true,
|
||||
"leftValue": "",
|
||||
"typeValidation": "strict",
|
||||
"version": 2
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"id": "c0",
|
||||
"leftValue": "={{ $json.known }}",
|
||||
"rightValue": "",
|
||||
"operator": {
|
||||
"type": "boolean",
|
||||
"operation": "true",
|
||||
"singleValue": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"combinator": "and"
|
||||
},
|
||||
"options": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Reject unknown kind",
|
||||
"type": "n8n-nodes-base.respondToWebhook",
|
||||
"typeVersion": 1.1,
|
||||
"position": [
|
||||
840,
|
||||
560
|
||||
],
|
||||
"parameters": {
|
||||
"respondWith": "json",
|
||||
"responseBody": "={{ JSON.stringify({ error: 'unknown kind', kinds: $json.kinds }) }}",
|
||||
"options": {
|
||||
"responseCode": 400
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Writer agent",
|
||||
"type": "@n8n/n8n-nodes-langchain.agent",
|
||||
"typeVersion": 3.1,
|
||||
"position": [
|
||||
840,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"promptType": "define",
|
||||
"text": "=제목 머리말(prefix): {{ $('Kind settings').first().json.prefix }}\n꼭 넣을 문장: {{ ($('Kind settings').first().json.required_phrases ?? []).join(' / ') || '없음' }}\n이 종류의 주의: {{ $('Kind settings').first().json.extra }}\n요청: {{ $('Kit webhook').first().json.body.request || '공지' }}\n사실:\n{{ $('Kit webhook').first().json.body.facts }}",
|
||||
"options": {
|
||||
"systemMessage": "You write one company IT notice in Korean from the facts only. The first line is the title and it starts with the given prefix. Then 3 to 6 short lines. Copy every date and time exactly as written in the facts. Do not add promises, compensation, dates, people or contacts that are not in the facts. If required sentences are given, include each of them exactly as written. Return only the notice text.",
|
||||
"maxIterations": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "OpenAI chat model",
|
||||
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
|
||||
"typeVersion": 1.2,
|
||||
"position": [
|
||||
800,
|
||||
520
|
||||
],
|
||||
"parameters": {
|
||||
"model": {
|
||||
"__rl": true,
|
||||
"mode": "id",
|
||||
"value": "gpt-4.1-mini"
|
||||
},
|
||||
"options": {
|
||||
"temperature": 0
|
||||
}
|
||||
},
|
||||
"credentials": {
|
||||
"openAiApi": {
|
||||
"id": "openAiCourse0001",
|
||||
"name": "OpenAI (.env)"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Build draft",
|
||||
"type": "n8n-nodes-base.code",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
1060,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"jsCode": "// The writer's text, without code fences.\nreturn [{ json: { draft: String($json.output ?? '').trim().replace(/^```\\w*\\s*|```$/g, '').trim() } }];"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Rule check module",
|
||||
"type": "n8n-nodes-base.executeWorkflow",
|
||||
"typeVersion": 1.2,
|
||||
"position": [
|
||||
1280,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"workflowId": {
|
||||
"__rl": true,
|
||||
"mode": "id",
|
||||
"value": "modRuleCheck02"
|
||||
},
|
||||
"workflowInputs": {
|
||||
"mappingMode": "defineBelow",
|
||||
"value": {
|
||||
"facts": "={{ $('Kit webhook').first().json.body.facts }}",
|
||||
"draft": "={{ $json.draft }}",
|
||||
"max_length": "={{ $('Kind settings').first().json.max_length }}",
|
||||
"required_phrases": "={{ $('Kind settings').first().json.required_phrases }}"
|
||||
},
|
||||
"matchingColumns": [],
|
||||
"schema": [
|
||||
{
|
||||
"id": "facts",
|
||||
"displayName": "facts",
|
||||
"required": false,
|
||||
"defaultMatch": false,
|
||||
"display": true,
|
||||
"canBeUsedToMatch": true,
|
||||
"type": "string",
|
||||
"removed": false
|
||||
},
|
||||
{
|
||||
"id": "draft",
|
||||
"displayName": "draft",
|
||||
"required": false,
|
||||
"defaultMatch": false,
|
||||
"display": true,
|
||||
"canBeUsedToMatch": true,
|
||||
"type": "string",
|
||||
"removed": false
|
||||
},
|
||||
{
|
||||
"id": "max_length",
|
||||
"displayName": "max_length",
|
||||
"required": false,
|
||||
"defaultMatch": false,
|
||||
"display": true,
|
||||
"canBeUsedToMatch": true,
|
||||
"type": "number",
|
||||
"removed": false
|
||||
},
|
||||
{
|
||||
"id": "required_phrases",
|
||||
"displayName": "required_phrases",
|
||||
"required": false,
|
||||
"defaultMatch": false,
|
||||
"display": true,
|
||||
"canBeUsedToMatch": true,
|
||||
"type": "array",
|
||||
"removed": false
|
||||
}
|
||||
],
|
||||
"attemptToConvertTypes": false,
|
||||
"convertFieldsToString": true
|
||||
},
|
||||
"options": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Build result",
|
||||
"type": "n8n-nodes-base.code",
|
||||
"typeVersion": 2,
|
||||
"position": [
|
||||
1500,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"jsCode": "// The kit's contract with module v2: blocking stops, warnings are reported.\nconst review = $json;\nconst draft = $('Build draft').first().json.draft;\nconst ok = review.passed === true;\nreturn [{ json: { kind: $('Kind settings').first().json.kind, route: ok ? '게시 가능' : '담당자 확인',\n published: ok, notice: draft, blocking: review.blocking ?? [], warnings: review.warnings ?? [],\n // Keep the old field so callers of the kit do not break.\n codes: [...(review.blocking ?? []), ...(review.warnings ?? [])] } }];"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Send result",
|
||||
"type": "n8n-nodes-base.respondToWebhook",
|
||||
"typeVersion": 1.1,
|
||||
"position": [
|
||||
1720,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"respondWith": "json",
|
||||
"responseBody": "={{ $json }}",
|
||||
"options": {}
|
||||
}
|
||||
}
|
||||
],
|
||||
"connections": {
|
||||
"Kit webhook": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Has kind and facts?",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Has kind and facts?": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Kind settings",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"node": "Reject empty",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Kind settings": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Known kind?",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Known kind?": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Writer agent",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"node": "Reject unknown kind",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"OpenAI chat model": {
|
||||
"ai_languageModel": [
|
||||
[
|
||||
{
|
||||
"node": "Writer agent",
|
||||
"type": "ai_languageModel",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Writer agent": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Build draft",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Build draft": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Rule check module",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Rule check module": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Build result",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Build result": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Send result",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"executionOrder": "v1"
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user