Multi-channel customer service auto-responder with FAQ matching, escalation, and daily summaries.
---
name: cs-autoresponder
description: Multi-channel customer service auto-responder with FAQ matching, escalation, and daily summaries.
homepage: https://github.com/openclaw/skills
metadata:
{
"openclaw":
{
"emoji": "π§",
"requires": { "bins": ["node"] },
"install":
[
{
"id": "node-brew",
"kind": "brew",
"formula": "node",
"bins": ["node"],
"label": "Install Node.js (brew)",
},
],
},
}
disable-model-invocation: true
---
# π§ CS Auto-Responder
κ³ κ°μ¬μ© CS μλμλ΅ μ€ν¬. λ©ν°μ±λ κ³ κ° λ¬Έμλ₯Ό μμ νκ³ , FAQ κΈ°λ° μλ μλ΅, μμ€μ»¬λ μ΄μ
, μΌμΌ μμ½μ μ 곡ν©λλ€.
## ν΅μ¬ κΈ°λ₯
1. **λ©ν°μ±λ μμ ** β μΉ΄μΉ΄μ€ν‘ μλ¦Όν‘, μΈμ€ν DM, μ΄λ©μΌ λ±μμ κ³ κ° λ¬Έμ κ°μ§
2. **FAQ λ§€μΉ** β κ³ κ°μ¬λ³ FAQ DB (JSON)μμ μλ―Έ κΈ°λ° λ§€μΉ β μλ λ΅λ³
3. **μμ€μ»¬λ μ΄μ
** β 볡μ‘ν λ¬Έμ / λΆλ§ κ°μ§ μ μ¬μ₯λνν
Discord/μΉ΄ν‘ μλ¦Ό
4. **μλ΅ ν€ μ»€μ€ν
** β κ³ κ°μ¬ λΈλλ ν€μ λ§μΆ λ΅λ³ μμ±
5. **λ‘κ·Έ κΈ°λ‘** β λͺ¨λ CS λν λ‘κ·Έ μ μ₯ (μΌλ³)
6. **λμ보λ μμ½** β μΌμΌ CS μμ½ (μ΄ λ¬Έμμ, μλμ²λ¦¬μ¨, μμ€μ»¬λ μ΄μ
건μ)
## μ΄κΈ° μ€μ
### 1. κ³ κ°μ¬ μ€μ νμΌ μμ±
```bash
cd {baseDir}
cp config/template.json config/κ³ κ°μ¬λͺ
.json
```
`config/κ³ κ°μ¬λͺ
.json` νΈμ§:
- `clientId`: κ³ μ ID
- `name`: κ³ κ°μ¬ μ΄λ¦
- `channels`: μ°λν μ±λ (kakao, instagram, email)
- `tone`: μλ΅ ν€ (formal, friendly, casual)
- `escalationTarget`: Discord μ±λ ID λλ μΉ΄ν‘ λ²νΈ
- `faqPath`: FAQ DB νμΌ κ²½λ‘
### 2. FAQ DB μμ±
```bash
cp config/faq-template.json config/κ³ κ°μ¬λͺ
-faq.json
```
FAQ νλͺ© μΆκ° (JSON λ°°μ΄):
```json
[
{
"id": "faq001",
"question": "μμ
μκ°μ΄ μ΄λ»κ² λλμ?",
"keywords": ["μμ
μκ°", "λͺμ", "μΈμ ", "μ΄μ"],
"answer": "μ ν¬λ νμΌ 10:00-22:00, μ£Όλ§ 12:00-20:00 μμ
ν©λλ€.",
"category": "μ΄μμ 보"
}
]
```
## μ¬μ©λ²
### μ±λ λͺ¨λν°λ§ μμ
```bash
node {baseDir}/scripts/monitor.js --config config/κ³ κ°μ¬λͺ
.json
```
λ°±κ·ΈλΌμ΄λ μ€ν (pm2 κΆμ₯):
```bash
pm2 start {baseDir}/scripts/monitor.js --name cs-mufi -- --config config/κ³ κ°μ¬λͺ
.json
pm2 logs cs-mufi
```
### μλ μλ΅ ν
μ€νΈ
```bash
node {baseDir}/scripts/respond.js \
--config config/κ³ κ°μ¬λͺ
.json \
--channel instagram \
--user "iam.dawn.kim" \
--message "μμ
μκ° μλ €μ£ΌμΈμ"
```
### μΌμΌ λμ보λ μμ½
```bash
node {baseDir}/scripts/dashboard.js --config config/κ³ κ°μ¬λͺ
.json --date 2026-02-18
```
μΆλ ₯ μμ:
```
π CS λμ보λ - MUFI ν¬ν λΆμ€ (2026-02-18)
βββββββββββββββββββββββββββββββββ
μ΄ λ¬Έμμ: 47건
μλ μ²λ¦¬: 38건 (80.9%)
μμ€μ»¬λ μ΄μ
: 9건 (19.1%)
μΉ΄ν
κ³ λ¦¬λ³:
β’ μ΄μμ 보: 18건
β’ κ°κ²©/μμ½: 15건
β’ κΈ°μ λ¬Έμ : 9건
β’ λΆλ§/νλΆ: 5건
μ±λλ³:
⒠Instagram DM: 28건
β’ μΉ΄μΉ΄μ€ν‘: 13건
β’ μ΄λ©μΌ: 6건
νκ· μλ΅μκ°: 3.2μ΄
βββββββββββββββββββββββββββββββββ
```
### μμ€μ»¬λ μ΄μ
μλ λ°μ‘
```bash
node {baseDir}/scripts/escalate.js \
--config config/κ³ κ°μ¬λͺ
.json \
--channel instagram \
--user "angry_customer" \
--message "νλΆ μμ²ν©λλ€" \
--reason "νλΆ μμ²"
```
## λλ ν 리 ꡬ쑰
```
cs-autoresponder/
βββ SKILL.md
βββ scripts/
β βββ monitor.js # μ±λ λͺ¨λν°λ§ λ©μΈ 루ν
β βββ respond.js # FAQ λ§€μΉ & μλ μλ΅
β βββ escalate.js # μμ€μ»¬λ μ΄μ
μλ¦Ό
β βββ dashboard.js # μΌμΌ μμ½ λμ보λ
βββ lib/
β βββ channels.js # μ±λ μ΄λν° (mock API)
β βββ matcher.js # μλ―Έ κΈ°λ° FAQ λ§€μΉ
β βββ logger.js # λν λ‘κ·Έ κΈ°λ‘
βββ config/
β βββ template.json # κ³ κ°μ¬ μ€μ ν
νλ¦Ώ
β βββ faq-template.json # FAQ DB ν
νλ¦Ώ
βββ logs/
βββ YYYY-MM-DD/ # μΌλ³ λν λ‘κ·Έ (clientIdλ³)
```
## μ±λ μ΄λν° (Mock)
νμ¬λ mock APIλ‘ λμ. Production μ°λ μ `lib/channels.js` μμ :
- **μΉ΄μΉ΄μ€ν‘**: Kakao Alimtalk API
- **Instagram**: `tools/insta-cli/v2.js` νμ©
- **μ΄λ©μΌ**: himalaya λλ Gmail API
## μλ―Έ κΈ°λ° λ§€μΉ λ‘μ§
`lib/matcher.js`λ κ°λ¨ν ν€μλ λ§€μΉμ μ¬μ©:
1. κ³ κ° λ¬Έμλ₯Ό μλ¬Έμλ‘ λ³ν
2. FAQ ν€μλμ λΉκ΅ (λΆλΆ μΌμΉ)
3. λ§€μΉ μ μ κ³μ° (μ¬λ¬ ν€μλ λ§€μΉ μ κ°μ€μΉ μ¦κ°)
4. μκ³κ°(0.6) μ΄μμ΄λ©΄ μλ μλ΅, λ―Έλ§μ΄λ©΄ μμ€μ»¬λ μ΄μ
Production μ OpenAI Embeddings λλ Claude νμ© κΆμ₯.
## μμ€μ»¬λ μ΄μ
쑰건
λ€μ 쑰건 μ€ νλλΌλ ν΄λΉνλ©΄ μμ€μ»¬λ μ΄μ
:
- FAQ λ§€μΉ μ μ < 0.6
- λΆμ ν€μλ κ°μ§ (νλΆ, λΆλ§, νλ¨, μ€λ§, μ΅μ
)
- κ³ κ°μ΄ "λ΄λΉμ", "μ¬λ", "μ¬μ₯λ" μμ²
- μ°μ 3ν μ΄μ λμΌ κ³ κ° λ¬Έμ
## λ‘κ·Έ νμ
`logs/YYYY-MM-DD/{clientId}.jsonl`:
```jsonl
{"timestamp":"2026-02-18T12:34:56.789Z","channel":"instagram","user":"iam.dawn.kim","message":"μμ
μκ°?","response":"νμΌ 10-22μ μμ
ν©λλ€","faqId":"faq001","score":0.85,"escalated":false}
{"timestamp":"2026-02-18T12:40:11.123Z","channel":"kakao","user":"010-1234-5678","message":"νλΆνκ³ μΆμ΄μ","response":null,"faqId":null,"score":0.0,"escalated":true,"reason":"νλΆ ν€μλ"}
```
## μ£Όμμ¬ν
- **ν€ μΌκ΄μ±**: κ³ κ°μ¬λ³ ν€ μ€μ μ μ€μνμΈμ
- **κ°μΈμ 보**: λ‘κ·Έμ λ―Όκ°ν μ 보(μ£Όλ―Όλ²νΈ, μΉ΄λλ²νΈ) μ μ₯ κΈμ§
- **μλ΅ μλ**: FAQ λ§€μΉμ 3μ΄ μ΄λ΄ μλ΅ λͺ©ν
- **μμ€μ»¬λ μ΄μ
νΌλ‘**: λ무 λ§μ μμ€μ»¬λ μ΄μ
μ νΌλ‘κ° μ λ° β FAQ μ§μ 보κ°
## νμ₯ κ°λ₯μ±
- [ ] OpenAI Embeddings κΈ°λ° μλ―Έ λ§€μΉ
- [ ] λν 컨ν
μ€νΈ μ μ§ (μΈμ
κ΄λ¦¬)
- [ ] A/B ν
μ€νΈ (μλ΅ ν€ μ€ν)
- [ ] λ©ν°ν΄ λν μ§μ
- [ ] μλ FAQ νμ΅ (κ³ λΉλ μ§λ¬Έ κ°μ§)
- [ ] κ³ κ° λ§μ‘±λ μ€λ¬Έ (μλ΅ ν λ³μ )
---
**Note**: μ΄ μ€ν¬μ mock APIλ‘ μ μλμμ΅λλ€. Production νκ²½μμλ μ€μ μ±λ API μ°λμ΄ νμν©λλ€.
don't have the plugin yet? install it then click "run inline in claude" again.