OpenClaw Nostr 채널
선택적 플러그인을 통해 OpenClaw를 Nostr 탈중앙화 네트워크에 연결합니다. 이 통합을 통해 AI 어시스턴트가 모든 Nostr relay에서 NIP-04 암호화 DM을 수신하고 응답할 수 있습니다. 중앙화된 서버도, 등록할 계정도 필요 없으며, 암호화 키 쌍과 relay 연결만 있으면 됩니다. 검열 저항성과 자기 주권이 중요한 프라이버시 중심 배포에 적합합니다.
Nostr 지원 기능
텍스트 메시지
지원
미디어 및 파일
미지원
리액션
지원
스레드
미지원
음성 메시지
미지원
그룹 채팅
미지원
Nostr 사전 요구사항
- OpenClaw Gateway 설치 및 실행 중
- Nostr 키 쌍 (nsec 또는 hex 형식의 개인 키) — 'nak key generate'로 생성
- WebSocket을 통해 접근 가능한 Nostr relay 최소 1개 (예: wss://relay.damus.io)
- 서버에 Node.js 18+ 설치
Nostr 빠른 설정
Nostr 플러그인 설치
'openclaw plugins install @openclaw/nostr'를 실행하여 Nostr 채널을 추가합니다. 또는 'openclaw onboard' 또는 'openclaw channels add'를 사용하여 플러그인 목록에서 Nostr를 선택할 수 있습니다. 설치 후 Gateway를 재시작합니다.
키 쌍 생성 및 설정
'nak key generate'를 사용하여 Nostr 키 쌍을 생성합니다. 개인 키를 환경 변수로 설정하고 (export NOSTR_PRIVATE_KEY="nsec1...") openclaw.json 설정에서 ${NOSTR_PRIVATE_KEY}로 참조합니다.
시작 및 테스트 DM 전송
'openclaw start'로 Gateway를 재시작합니다. 시작 로그에서 봇의 공개 키(npub)를 확인합니다. 아무 Nostr 클라이언트(예: Damus, Amethyst, Primal)를 열고 봇의 npub으로 암호화된 DM을 전송합니다. 기본 페어링 정책을 사용하는 경우 CLI를 통해 발신자를 승인합니다.
Nostr 구성 예시
{
"channels": {
"nostr": {
"privateKey": "${NOSTR_PRIVATE_KEY}",
"relays": [
"wss://relay.damus.io",
"wss://nos.lol"
],
"dmPolicy": "pairing"
}
}
}Nostr 상세 문서
아키텍처 개요
플러그인 설치
키 생성 및 관리
{
"channels": {
"nostr": {
"privateKey": "${NOSTR_PRIVATE_KEY}"
}
}
}Relay 설정
{
"channels": {
"nostr": {
"relays": [
"wss://relay.damus.io",
"wss://nos.lol",
"wss://relay.nostr.band"
]
}
}
}DM 정책
{
"channels": {
"nostr": {
"dmPolicy": "allowlist",
"allowFrom": [
"npub1abc...xyz",
"npub1def...uvw"
]
}
}
}프로필 메타데이터 (NIP-01)
{
"channels": {
"nostr": {
"profile": {
"name": "openclaw-bot",
"display_name": "OpenClaw AI Assistant",
"about": "AI-powered assistant on Nostr. DM me!",
"picture": "https://example.com/bot-avatar.png",
"nip05": "bot@yourdomain.com"
}
}
}
}암호화 및 프로토콜 지원
로컬 Relay를 사용한 테스트
{
"channels": {
"nostr": {
"relays": ["ws://localhost:7777"],
"dmPolicy": "open",
"allowFrom": ["*"]
}
}
}Nostr 구성 참조
| Key | Type | Default | Description |
|---|---|---|---|
| privateKey | string | (required) | nsec(Bech32) 또는 64자 hex 형식의 Nostr 개인 키입니다. 환경 변수 참조를 사용합니다. |
| relays | string[] | ["wss://relay.damus.io", "wss://nos.lol"] | 연결할 Nostr relay WebSocket URL 목록입니다 |
| dmPolicy | string | "pairing" | DM 접근 제어 정책: 'pairing', 'allowlist', 'open' 또는 'disabled' |
| allowFrom | string[] | [] | 봇에 메시지를 보낼 수 있는 공개 키(npub 또는 hex) 목록입니다 (dmPolicy가 'allowlist'인 경우) |
| enabled | boolean | true | Nostr 채널을 활성화 또는 비활성화합니다 |
| name | string | "" | 이 채널 인스턴스의 표시 이름입니다 |
| profile.name | string | "" | NIP-01 메타데이터로 게시되는 봇 사용자명입니다 |
| profile.display_name | string | "" | NIP-01 메타데이터로 게시되는 전체 표시 이름입니다 |
| profile.about | string | "" | NIP-01 메타데이터로 게시되는 봇 소개/설명입니다 |
| profile.picture | string | "" | NIP-01 메타데이터로 게시되는 아바타 이미지 URL입니다 (HTTPS 필수) |
| profile.banner | string | "" | NIP-01 메타데이터로 게시되는 배너 이미지 URL입니다 (HTTPS 필수) |
| profile.website | string | "" | NIP-01 메타데이터로 게시되는 웹사이트 URL입니다 |
| profile.nip05 | string | "" | NIP-05 인증 식별자입니다 (예: 'bot@yourdomain.com') |
| profile.lud16 | string | "" | zap 수신용 Lightning 주소입니다 |
nsec(Bech32) 또는 64자 hex 형식의 Nostr 개인 키입니다. 환경 변수 참조를 사용합니다.
연결할 Nostr relay WebSocket URL 목록입니다
DM 접근 제어 정책: 'pairing', 'allowlist', 'open' 또는 'disabled'
봇에 메시지를 보낼 수 있는 공개 키(npub 또는 hex) 목록입니다 (dmPolicy가 'allowlist'인 경우)
Nostr 채널을 활성화 또는 비활성화합니다
이 채널 인스턴스의 표시 이름입니다
NIP-01 메타데이터로 게시되는 봇 사용자명입니다
NIP-01 메타데이터로 게시되는 전체 표시 이름입니다
NIP-01 메타데이터로 게시되는 봇 소개/설명입니다
NIP-01 메타데이터로 게시되는 아바타 이미지 URL입니다 (HTTPS 필수)
NIP-01 메타데이터로 게시되는 배너 이미지 URL입니다 (HTTPS 필수)
NIP-01 메타데이터로 게시되는 웹사이트 URL입니다
NIP-05 인증 식별자입니다 (예: 'bot@yourdomain.com')
zap 수신용 Lightning 주소입니다
Nostr 자주 묻는 질문
Nostr 문제 해결
Relay 연결이 실패했거나, 발신자가 봇이 구독하는 relay와 다른 relay에 게시하고 있을 수 있습니다.
개인 키가 유효한 nsec(Bech32) 또는 64자 hex 형식이 아니거나, 환경 변수가 설정되지 않았습니다.
봇에 설정된 relay와 수신자의 클라이언트 relay가 겹치지 않아 이벤트가 전파되지 않습니다.
플러그인 설치 후 Gateway가 재시작되지 않았거나, 설치가 자동으로 실패했습니다.