OpenClaw๋ฅผ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ด๋ํด ํ์ฒ๋ผ ํจ๊ป ์ผํ๋ ค๋ฉด, ์๋ฒ ์ ์ฑ ์ ์ฉ โ BotFather ๊ถํ/ํ๋ผ์ด๋ฒ์ ์ค์ โ ๊ทธ๋ฃน ์ฌ์ด๋/๊ฒ์ฆ ์์๋ก ์ธํ ํ๋ ๊ฒ ๊ฐ์ฅ ์์ ํฉ๋๋ค. ์ด ๋ฌธ์๋ ์ค๋ฌด์์ ๋ฐ๋ก ์ฐ๋ ๊ธฐ์ค์ผ๋ก, ์๋ฒ ์ชฝ ๋ณ๊ฒฝ๊ณผ ํ ๋ ๊ทธ๋จ ์ชฝ ์ค์ ์ ํ ๋ฒ์ ์ ๋ฆฌํ์ต๋๋ค.
์๋ด: ๋ณธ๋ฌธ์ ์์ฑํ AI๋ฅผ ํ์ฉํด ์์ฑยท์ ๋ฆฌํ์ต๋๋ค.
flowchart LR A[๊ธฐ์กด ๋ด ํ์ธ/ํ ํฐ ์ค๋น] --> B[์๋ฒ ์ค์ ๋ฐ์] B --> C[hot reload ๋ก๊ทธ ํ์ธ] C --> D[BotFather ๊ถํ/ํ๋ผ์ด๋ฒ์ ์ค์ ] D --> E[๊ทธ๋ฃน์์ ๋ด ์ฌ์ด๋] E --> F[๋ฉ์ /์ฌ๋์ ํ ์คํธ] F --> G[๋ณด์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๊ณ ์ ]
1) ์์ ์ ์: ๋ชฉํ๋ฅผ ๋จผ์ ์ ํ๊ธฐ
๋จผ์ โ์ด ๊ทธ๋ฃน์์ OpenClaw๊ฐ ์ด๋๊น์ง ๋ฐ์ํ ์งโ๋ฅผ ์ ํฉ๋๋ค.
- ๊ถ์ฅ ๊ธฐ๋ณธ๊ฐ(์์ ์ฐ์ )
- ๊ทธ๋ฃน์์ ๋ด ํธ์ถ ์์๋ง ๋ฐ์ (
requireMention: true) - DM์ ์น์ธ์ (
dmPolicy: pairing) - ๊ทธ๋ฃน ๋ฐํ์๋ ์ ํ (
groupPolicy: allowlist)
- ๊ทธ๋ฃน์์ ๋ด ํธ์ถ ์์๋ง ๋ฐ์ (
- ์ ๊ฒ/๋ณต๊ตฌ ๋ชจ๋(์ ์ ์ํ)
- ํน์ ๊ทธ๋ฃน์์ ๋ฉ์
์์ด ๋ฐ์ (
requireMention: false) - ํน์ ๊ทธ๋ฃน์์ ์คํ (
groupPolicy: open)
- ํน์ ๊ทธ๋ฃน์์ ๋ฉ์
์์ด ๋ฐ์ (
ํต์ฌ์ ๊ฐ๋จํฉ๋๋ค. ์ ๊ฒํ ๋๋ง ์ด๊ณ , ์ ์ํ๋๋ฉด ๋ค์ ์ขํ์ธ์.
2) 15๋ถ ์ธํ : ์๋ฒ + BotFather + ๊ทธ๋ฃน ๊ฒ์ฆ
Step A. ์ ๋ด ์์ฑ์ โํ์ ์๋โ (๊ธฐ์กด ๋ด ์ฌ์ฌ์ฉ ๊ฐ๋ฅ)
์ด๋ฏธ ์ด์ ์ค์ธ ๋ด์ด ์์ผ๋ฉด ๊ทธ ๋ด์ ๊ทธ๋๋ก ๊ทธ๋ฃน์ ์ด๋ํ๋ฉด ๋ฉ๋๋ค. ๊ตณ์ด ์ ๋ด์ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค.
- ๊ธฐ์กด ๋ด ํ์ธ:
@BotFatherโ/mybotsโ ๋ด ์ ํ - ํ ํฐ ์ฌ๋ฐ๊ธ/ํ์ธ:
/token - ์ ๋ด์ ์ ๋ง ํ์ํ ๋๋ง
/newbot
ํ ํฐ์ ๋น๋ฐ๋ฒํธ์ ๊ฐ์ต๋๋ค. ์ฑํ ๋ฐฉ/๋ฌธ์/๊น์ ์ฌ๋ฆฌ์ง ๋ง์ธ์.
Step B. ์๋ฒ(OpenClaw) ์ค์ ๋จผ์ ๋ฐ์
1) ์ด์ ๊ธฐ๋ณธ ํ ํ๋ฆฟ(๊ถ์ฅ, ID ๊ฐ๋ณ๋ฑ๋ก ์ต์ํ)
{
channels: {
telegram: {
enabled: true,
botToken: "123:abc",
dmPolicy: "pairing",
groupPolicy: "allowlist", // ๊ทธ๋ฃน ์์ฒด๋ ํ์ดํธ๋ฆฌ์คํธ
groups: {
"-1001234567890": {
requireMention: true,
groupPolicy: "open" // ์ด ๊ทธ๋ฃน ์์์๋ ์ฌ์ฉ์ ID ๊ฐ๋ณ๋ฑ๋ก ์์ด ํ์ฉ
}
}
}
}
}- ์ด ํ ํ๋ฆฟ์ ํ์ฉํ ๊ทธ๋ฃน์์๋ง ๋์ํ๋ฉด์, ๊ทธ๋ฃน ๋ด๋ถ ์ฌ์ฉ์ ID๋ฅผ ํ๋์ฉ ๋ฃ์ง ์์๋ ๋ฉ๋๋ค.
- ์ฌ์ฉ์๊น์ง ์ ํํ๊ณ ์ถ์ ๋๋ง
groupAllowFrom์ ์ถ๊ฐํ์ธ์.
2) ์ ๊ฒ์ฉ ์คํ ํ ํ๋ฆฟ(์ผ์์ )
{
channels: {
telegram: {
enabled: true,
botToken: "123:abc",
groups: {
"-1001234567890": {
requireMention: false,
groupPolicy: "open"
}
}
}
}
}- ์ด ๋ชจ๋๋ ํ ์คํธ/๋ณต๊ตฌ์ฉ์ผ๋ก๋ง ์ ๊น ์ฌ์ฉํ๊ณ , ์ ์ ๋์ ํ์ธ ํ ๊ถ์ฅ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋๋๋ฆฌ์ธ์.
3) ๋ฐ์ ํ์ธ
openclaw gateway status
openclaw logs --follow๋ก๊ทธ์์ ์๋์ ๊ฐ์ ๋ฌธ๊ตฌ๊ฐ ๋ณด์ด๋ฉด ์ค์ ๋ฐ์ ์ฑ๊ณต:
config hot reload applied
ํ์ ์ ์ฌ์์:
openclaw gateway restartStep C. BotFather์์ ๊ถํ/ํ๋ผ์ด๋ฒ์ ์ค์
์๋๋ฅผ ๋ฐ๋์ ํ์ธํ์ธ์.
/setprivacyโ@OC0201botโ Disable/setjoingroupsโ@OC0201botโ ๊ทธ๋ฃน ์ฐธ์ฌ ํ์ฉ(Enable)- ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน ๋ด ๋ด ๊ถํ์์ ๋ฉ์์ง ๋ณด๋ด๊ธฐ ํ์ฉ
Step D. ๊ทธ๋ฃน์์ ๋ด ์ ๊ฑฐ ํ ์ฌ์ด๋ (์ค์)
ํ๋ผ์ด๋ฒ์ ์ค์ ์ ๋ฐ๊ฟจ๋ค๋ฉด, ์ ์ฉ์ ์ํด ์๋๋ฅผ ๊ถ์ฅํฉ๋๋ค.
- ๊ทธ๋ฃน์์ ๋ด ์ ๊ฑฐ
- ๊ฐ์ ๋ด์ ๋ค์ ์ด๋
- ํ
์คํธ ๋ฉ์์ง ์คํ
@OC0201bot ํ ์คํธ/start@OC0201bot
Step E. DM ํ์ด๋ง ์น์ธ(๊ถ์ฅ)
openclaw pairing list telegram
openclaw pairing approve telegram <CODE>pairing๋ชจ๋์์๋ ์น์ธ ์ DM์ ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค.- ์ฝ๋ ์ ํจ์๊ฐ์ 1์๊ฐ์ ๋๋ค.
3) ์ด์ ๋ชจ๋ 2๊ฐ์ง + mentionPatterns ์ฐจ์ด (์ค๋ฌด ํต์ฌ)
๋ชจ๋ 1) ๋ฉ์ ํธ์ถํ (๊ถ์ฅ)
- ์์น: ๋ด์ โํธ์ถโํ์ ๋๋ง ๋ฐ์
- ๊ธฐ๋ณธ ํธ๋ฆฌ๊ฑฐ: ํ
๋ ๊ทธ๋จ ๋ค์ดํฐ๋ธ ๋ฉ์
(
@๋ด์ด๋ฆ) - ํ์ฅ ํธ๋ฆฌ๊ฑฐ:
mentionPatterns์ ๋ฑ๋กํ ํธ์ถ์ด - ์ฅ์ : ์์ ์ ๊ณ , ์ค์๋ ์ํ ๋ฎ์
- ์ค์ :
requireMention: true
๋ชจ๋ 2) ์์ ๋ฐ์ํ (์ฃผ์)
- ๊ทธ๋ฃน ๋ํ ๋๋ถ๋ถ์ ๋ฐ์ ๊ฐ๋ฅ
- ์ฅ์ : ์๋ํ ๋ฐ๋ ๋์
- ๋ฆฌ์คํฌ: ๋ถํ์ ์๋ต, ๊ถํ ์ค๋จ์ฉ ๊ฐ๋ฅ์ฑ ์ฆ๊ฐ
- ์ค์ :
requireMention: false+ ๊ฐํ ์ด์ ํต์ ํ์
@๋ฉ์
vs mentionPatterns ์ฐจ์ด
| ๊ตฌ๋ถ | ํธ๋ฆฌ๊ฑฐ ๋ฐฉ์ | ์ฅ์ | ์ฃผ์์ | ์ถ์ฒ ์ํฉ |
|---|---|---|---|---|
@๋ด์ด๋ฆ | ํ ๋ ๊ทธ๋จ ๋ค์ดํฐ๋ธ ๋ฉ์ | ๊ฐ์ฅ ๋ช ํ, ์ค์๋ ์ ์ | ์ฌ์ฉ์๊ฐ ๋งค๋ฒ @๋ฅผ ์จ์ผ ํจ | ๊ธฐ๋ณธ ์ด์(๊ถ์ฅ) |
mentionPatterns | ์ง์ ํ ํค์๋/๋ฌธ๊ตฌ(์: openclaw, ์ค์จ)๋ ๋ฉ์
์ผ๋ก ์ธ์ | @ ์์ด๋ ํธ์ถ ๊ฐ๋ฅํด UX ์ข์ | ํจํด์ ๋๊ฒ ์ก์ผ๋ฉด ์คํ ๊ฐ๋ฅ | ์ต์ํ ํ ํ์ ํ๊ฒฝ |
์ฆ, mentionPatterns๋ โ@๋ฅผ ์์ ํ ์์ ๋ ๊ธฐ๋ฅโ์ด๋ผ๊ธฐ๋ณด๋ค, requireMention:true๋ฅผ ์ ์งํ ์ฑ ํธ์ถ ๋ฐฉ๋ฒ์ ๋ํ๋ ์ฅ์น์
๋๋ค.
์์ ์ค์ (@ ์์ด๋ ์ง์ ํค์๋๋ก ํธ์ถ)
{
messages: {
groupChat: {
mentionPatterns: ["@?oc0201bot", "@?openclaw", "์ค์จ", "ํ๋ญ์ค"]
}
},
channels: {
telegram: {
groups: {
"-1001234567890": {
requireMention: true,
groupPolicy: "open"
}
}
}
}
}groupPolicy: allowlist์ผ ๋ ๊ถํ์ ์ด๋๊น์ง ์ ๊ธ์ง (๋ ํท๊ฐ๋ฆฌ๊ฒ)
allowlist๋ ์ฌ์ค 2๋จ๊ณ์
๋๋ค.
- ๊ทธ๋ฃน ํ์ดํธ๋ฆฌ์คํธ:
channels.telegram.groups- ์ด๋ค ๊ทธ๋ฃน์ ํ์ฉํ ์ง ์ ํจ
- ๊ทธ๋ฃน ๋ด๋ถ ์ฌ์ฉ์ ํ์ดํธ๋ฆฌ์คํธ(์ ํ):
channels.telegram.groupAllowFrom- ํ์ฉ๋ ๊ทธ๋ฃน ์์์๋ ํน์ ์ฌ๋๋ง ํธ๋ฆฌ๊ฑฐํ๊ฒ ์ ํ
์ฒ์์๋ ๋ณดํต ์๋์ฒ๋ผ ์์ํ๋ฉด ๊ฐ์ฅ ๋ ๋ณต์กํฉ๋๋ค.
- ๋ฃจํธ:
groupPolicy: "allowlist" - ๊ทธ๋ฃน๋ณ:
groups.<chatId>.groupPolicy: "open" - ํธ๋ฆฌ๊ฑฐ:
requireMention: true(+ ํ์ ์mentionPatterns)
์ด๋ ๊ฒ ํ๋ฉด ํ์ฉํ ๊ทธ๋ฃน ์์์๋ ์ฌ์ฉ์ ID๋ฅผ ํ๋์ฉ ๋ฃ์ ํ์๊ฐ ์์ต๋๋ค.
์ ๋ง ๋ณด์์ด ํ์ํ ๊ทธ๋ฃน์์๋ง groupAllowFrom์ ์ถ๊ฐํด โํน์ ์ฌ์ฉ์๋งโ์ผ๋ก ์ขํ์ธ์.
3๋จ๊ณ ๊ถํ ํ๋ฆฌ์
- ํ๋ฆฌ์
A (๊ถ์ฅ ์์์ )
- ๊ทธ๋ฃน๋ง ์ ํ:
groupPolicy=allowlist,groups.<id>.groupPolicy=open,requireMention=true
- ๊ทธ๋ฃน๋ง ์ ํ:
- ํ๋ฆฌ์
B (์ค๊ฐ ๋ณด์)
- A +
mentionPatterns์ต์ ๋ฑ๋ก(ํ ํธ์ถ์ด 2~4๊ฐ)
- A +
- ํ๋ฆฌ์
C (๊ฐ๋ณด์)
- A ๋๋ B +
groupAllowFrom=["<userId>", ...]
- A ๋๋ B +
4) ๋ณด์ ์ฃผ์์ฌํญ (๊ผญ ์งํฌ 10๊ฐ)
- ํ ํฐ์ ์ฝ๋/๊น์ ์ปค๋ฐํ์ง ์๊ธฐ
- ๊ฐ๋ฅํ๋ฉด
tokenFile๋๋ ํ๊ฒฝ๋ณ์ ์ฌ์ฉ
- ๊ฐ๋ฅํ๋ฉด
- DM์ pairing ๋๋ allowlist๋ก ์ ํ
dmPolicy: open์ ํน๋ณํ ์ด์ ์์ผ๋ฉด ๊ธ์ง
- ๊ทธ๋ฃน์ allowlist๋ถํฐ ์์
groupPolicy: open์ ํน์ ๊ทธ๋ฃน์๋ง ์ ํ ์ ์ฉ
- ์ด๊ธฐ์ ๋ฉ์
ํ์ ์ ์ง
requireMention: true๋ก ์ก์/์ค์๋ ๋ฐฉ์ง
- ํ
๋ ๊ทธ๋จ Privacy Mode ๋ณ๊ฒฝ ์ ์ฌ์ด๋ ํ์
/setprivacy๋ณ๊ฒฝ๋ง์ผ๋ก ๋๋ด์ง ๋ง๊ณ ์ ๊ฑฐโ์ฌ์ด๋
- ๊ฐํ ๋๊ตฌ๋ ๊ธฐ๋ณธ ์ฐจ๋จ
gateway,cron,sessions_spawn,sessions_send๋ฑ์ ์ ์คํ ์ด๊ธฐ
- ์ ๊ธฐ ๋ณด์ ์ง๋จ ์คํ
openclaw security auditopenclaw security audit --deep
- ๊ถํ ํ์ผ ์ ๊ทผ๊ถํ ์ ๊ฒ
~/.openclaw๋๋ ํ ๋ฆฌ ํผ๋ฏธ์ ์ ๊ธฐ ํ์ธ
- ๊ทธ๋ฃน๋ณ ์ ์ฑ
๋ถ๋ฆฌ
- ๋ชจ๋ ๊ทธ๋ฃน์ ๋์ผ ์ ์ฑ ์ ์ฐ์ง ๋ง๊ณ , ๊ทธ๋ฃน ์ฑ๊ฒฉ๋ณ๋ก ๋ถ๋ฆฌ
- ์ฌ๊ณ ์ ์ฆ์ ์ฐจ๋จ ๋ฃจํด ๋ง๋ จ
- ํ ํฐ ์ฌ๋ฐ๊ธ, ๊ทธ๋ฃน ์ ๊ทผ ์ ํ, ํ์ด๋ง ์ฌ๊ฒํ ์์ผ๋ก ๋์
flowchart TD A[์ ๊ทธ๋ฃน ์ถ๊ฐ ์์ฒญ] --> B{์ ๋ขฐ ๊ฐ๋ฅํ ๊ทธ๋ฃน์ธ๊ฐ?} B -- ์๋์ค --> C[์ถ๊ฐ ๋ณด๋ฅ] B -- ์ --> D{๊ธฐ๋ณธ์ ์ฑ ์ ์ง ๊ฐ๋ฅ?} D -- ์ --> E[requireMention=true + allowlist] D -- ์๋์ค --> F[์์ธ์ ์ฑ ๋ฌธ์ํ] F --> G[์ฃผ๊ฐ ์ฌ๊ฒํ ] E --> G
5) ์์ฃผ ๋งํ๋ ๋ฌธ์ ๋น ๋ฅธ ํด๊ฒฐ
์๋ฒ ์ค์ ์ ๋ฐ์๋๋๋ฐ ๋ฌด์๋ต
- ๋ก๊ทธ์
config hot reload applied๊ฐ ๋ณด์ด๋ฉด ์๋ฒ ๋ฐ์์ ๋ ์ํ - ์ด ๊ฒฝ์ฐ ๋จ์ ์์ธ์ ๋๋ถ๋ถ ํ
๋ ๊ทธ๋จ ์ธก ์ค์ :
/setprivacy Disable- ๊ทธ๋ฃน ๊ถํ(๋ฉ์์ง ๋ณด๋ด๊ธฐ)
- ๋ด ์ ๊ฑฐ ํ ์ฌ์ด๋
@๋ด ํ ์คํธ,/start@๋ด์ฌ๊ฒ์ฆ
๋ด์ด ๊ทธ๋ฃน์์ ๋ฉ์ ์์ด ๋ฐ์ ์ ํจ
requireMention์ค์ ํ์ธgroupPolicy๊ฐopen์ธ์ง(์ ๊ฒ ๋ชจ๋ ๊ธฐ์ค) ํ์ธ- Privacy Mode(
/setprivacy) ๋ณ๊ฒฝ + ์ฌ์ด๋ ์ ์ฉ ์ฌ๋ถ ํ์ธ
๊ทธ๋ฃน ๋ฉ์์ง๋ฅผ ์์ ๋ชป ์ฝ์
channels.telegram.groups์ ํด๋น ๊ทธ๋ฃน ID๊ฐ ์๋์ง ํ์ธopenclaw logs --follow๋ก skip reason ํ์ธ
๋ช ๋ น์ด ์ผ๋ถ๋ง ๋์
- sender๊ฐ allowlist/pairing ์น์ธ ์ํ์ธ์ง ํ์ธ
- DNS/HTTPS ๋ฌธ์ ์
setMyCommands failed๋ก๊ทธ ํ์ธ
6) ์ด์ ์ฒดํฌ๋ฆฌ์คํธ (๋ณต๋ถ์ฉ)
- ๊ธฐ์กด ๋ด ์ฌ์ฌ์ฉ ์ฌ๋ถ ๊ฒฐ์ (
/mybotsํ์ธ) - ์๋ฒ ์ค์ ๋ฐ์ ์๋ฃ (
groupPolicy,requireMention,groups.<chatId>, ํ์ ์groupAllowFrom) - ๋ก๊ทธ์์
config hot reload appliedํ์ธ - BotFather
/setprivacy Disable์ ์ฉ - BotFather
/setjoingroupsํ์ฉ ํ์ธ - ๊ทธ๋ฃน์์ ๋ด ๋ฉ์์ง ๊ถํ ํ์ฉ ํ์ธ
- ๋ด ์ ๊ฑฐ ํ ์ฌ์ด๋ ์๋ฃ
-
@๋ด ํ ์คํธ,/start@๋ด๋์ ํ์ธ -
mentionPatterns์ฌ์ฉ ์ ์คํ ์๋ ํธ์ถ์ด(ํ ๋ด ๋ณ์นญ)๋ก ์ต์ ํจํด๋ง ๋ฑ๋ก - DM pairing ์น์ธ ํ๋ฆ ํ ์คํธ ์๋ฃ
- ๋ณด์ ๊ฐ์ฌ 1ํ ์คํ (
security audit)
7) ์ค๋ฌด ์นํธ์ํธ (๋ช ๋ น์ด)
# ์ฑ๋ ์ฐ๊ฒฐ/์ํ
openclaw channels add --channel telegram --token <TOKEN>
openclaw gateway status
openclaw gateway restart
# ํ์ด๋ง ์น์ธ
openclaw pairing list telegram
openclaw pairing approve telegram <CODE>
# ๋ก๊ทธ ์ถ์ (๋ฐ์/์คํต ์ฌ์ ํ์ธ)
openclaw logs --follow
# ๋ณด์ ์ ๊ฒ
openclaw security audit
openclaw security audit --deep