문서 · 빠른 시작

5분 만에 첫 알림 보내기

API 키 하나로, 한 명의 사용자에게 직접 닿는 알림을 보냅니다. 브라우저·서비스워커 코드는 EosNoti 리시버가 대신 처리합니다.

AI로 연동

AI에게 맡기고 5분 만에 붙이기

이 통합 가이드를 Claude·Cursor 같은 AI 코딩 어시스턴트에 첨부하면, 회원가입 지점의 EosNoti 연동 코드를 자동으로 만들어 줍니다. 발급받은 API 키만 준비하세요.

/eosnoti-integration.md
1

계정 + Application 만들기

콘솔에서 가입하고 Application을 만들면 API 키를 받습니다. 생성 직후 한 번만 노출되니 안전한 곳에 보관하세요(백엔드 시크릿, 브라우저 노출 금지). 이후 모든 발송·연동 API는 이 키로 인증합니다.

# 회원가입 (쿠키 저장)
curl -i -c cookie.txt -X POST http://localhost:8080/v1/console/signup \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","password":"password123"}'

# Application 생성 → subscribe_code + api_key
curl -s -b cookie.txt -X POST http://localhost:8080/v1/console/applications \
  -H "Content-Type: application/json" -d '{"name":"My App"}'
2

개인화 링크·QR로 연결

external_id(당신 서비스의 사용자 ID, 예: 내부 user PK)를 심은 구독 링크를 백엔드에서 발급하고, 같은 기기는 버튼, 다른 기기는 QR로 제시합니다. 사용자가 열면 EosNoti 리시버가 기기 등록·구독·external_id 바인딩까지 자동으로 끝냅니다(external_bound: true). 한 사람이 여러 기기를 가져도 같은 external_id로 묶입니다.

API_KEY=<발급받은 api_key>

# external_id를 심은 개인화 구독 링크 발급
curl -s -X POST http://localhost:8080/v1/subscribe-links \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"external_id":"user_8821","ttl":86400}'   # ttl 초, 0/생략=24h
# ← {"url":".../s/<code>","code":"<code>","expires_at":"..."}

# 같은 기기: url을 "알림 켜기" 버튼으로
# 다른 기기: url을 QR로 표시 → 폰으로 스캔
# 열면 리시버가 기기 등록·구독·external_id 바인딩까지 자동 처리
3

수동 코드로 연결 (정·역방향)

링크/QR이 어색할 때(별개 화면·앱) 6자리 코드를 손으로 입력해 연결합니다. 정방향: 내 앱이 코드를 보여주고 사용자가 리시버 '코드 추가 → 코드 입력'에 입력 → 백엔드가 상태를 폴링. 역방향: 리시버 '내 코드 보기'가 코드를 보여주고 사용자가 내 앱 입력칸에 넣으면 백엔드가 redeem. 코드는 단발성·10분 만료입니다.

API_KEY=<발급받은 api_key>

# [정방향] 내 앱이 코드 표시 → 사용자가 리시버에 입력
curl -s -X POST http://localhost:8080/v1/pairing-codes \
  -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{"external_id":"user_8821"}'
# ← {"code":"AB7K9P","expires_at":"..."}    # 코드 표시 후 폴링
curl -s http://localhost:8080/v1/pairing-codes/AB7K9P \
  -H "Authorization: Bearer $API_KEY"
# ← {"status":"pending|redeemed|expired","subscription_id":...}

# [역방향] 리시버가 코드 표시 → 사용자가 내 앱에 입력 → redeem
curl -s -X POST http://localhost:8080/v1/pairing-codes/X9Q3MR/redeem \
  -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{"external_id":"user_8821"}'
# ← {"subscription_id":"...","external_id":"user_8821"}
4

알림 보내기

API 키로 특정 사용자(ext:외부ID) 또는 broadcast(앱 전체)에 메시지를 보냅니다. ext: 대상은 그 사람의 모든 기기로 전달됩니다. notify(일반)와 ask(선택지)를 지원합니다. 알림 아이콘이 필요한데 따로 호스팅할 자산이 없다면 icon에 EosNoti 콘솔 호스트의 파비콘 URL(예: https://your-eosnoti-host/icon.png, 512px 정사각 PNG)을 넣으면 됩니다 — 별도 호스팅 없이 기본 아이콘이 붙습니다.

API_KEY=<발급받은 api_key>

# 한 사람에게 (그 사람의 모든 기기로, notify)
curl -X POST http://localhost:8080/v1/messages \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":"ext:user_8821","kind":"notify",
       "title":"결제 완료","body":"주문 #2043이 접수됐어요","priority":"high",
       "icon":"https://<your-eosnoti-host>/icon.png"}'   # 아이콘=EosNoti 사이트 파비콘

# 앱 전체에게 + 선택지 묻기 (ask)
curl -X POST http://localhost:8080/v1/messages \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":"broadcast","kind":"ask",
       "body":"회의 참석하시겠어요?","choices":["참석","불참"]}'
5

상태·응답 확인

발송 후 전달·읽음 수와 ask 응답을 조회합니다. 발송 응답의 queued_deliveries가 1 이상이면 그 external_id에 바인딩된 구독이 있다는 뜻이라, 백엔드에서 연결 확인용으로 쓰면 됩니다. 구독자 목록 조회는 콘솔 세션(쿠키) 전용이라 백엔드 api_key로는 호출되지 않습니다.

API_KEY=<발급받은 api_key>
MSG=<message_id>

# 전달·읽음 수 + 응답 조회
curl -s http://localhost:8080/v1/messages/$MSG \
  -H "Authorization: Bearer $API_KEY"
# ← {"deliveries":{"queued":0,"sent":1,"failed":0,"read":0},"replies":[...]}

# ask 응답 롱폴링 (최대 30초)
curl -s "http://localhost:8080/v1/messages/$MSG/replies?wait=30" \
  -H "Authorization: Bearer $API_KEY"

# 연결 확인: 발송 응답의 queued_deliveries>0 이면 바인딩된 구독 있음
# (구독자 목록 조회는 콘솔 세션 전용 — 백엔드 api_key로는 401)

준비됐나요?

무료로 시작해서 첫 알림을 보내보세요.

무료로 시작하기