개발자를 위하여 · 활용 예시

메일 말고, 휴대폰으로.
붙이는 자리는 네 곳입니다.

API 키 하나와 HTTP 요청 한 번이면, 한 사람의 휴대폰 잠금화면에 바로 닿습니다. 받는 사람은 EosNoti 앱(iOS·Android)만 있으면 되고, 휴대폰 앱을 따로 만들거나 기기 토큰을 다룰 일이 없습니다.

1개월 무료 체험 · 카드 필요 없음 · 자동 결제 없음
○○몰지금
주문하신 운동화가 출발했습니다
내일 도착 예정입니다.
운영 알림2분 전
[장애] api-02 응답 없음
헬스체크 5초 초과
클립메이커1시간 전
4K 인코딩 완료
2시간 14분 걸렸습니다.
내 알림03:12
백업 완료
nas-01 → s3 · 42.8G
01 · 웹 서비스

회원에게 주문·예약 알림을,
휴대폰 앱을 만들지 않고

이럴 때 — 쇼핑몰·예약·학원 관리 서비스를 운영합니다. 상태가 바뀔 때마다 회원에게 알리고 싶지만 휴대폰 앱을 따로 만들 여력은 없습니다.
흐름
  1. 마이페이지 「알림 받기」서버가 회원 ID로 구독 링크 발급
  2. 회원이 링크·QR을 엶EosNoti 앱 구독 + 회원 ID 묶임
  3. 주문 상태가 바뀔 때to: "ext:회원ID"
준비
  1. 회원이 「휴대폰 알림 받기」를 누르면 서버가 그 회원 ID로 구독 링크를 만듭니다 — POST /v1/subscribe-links
  2. 링크를 버튼이나 QR로 보여 줍니다. 휴대폰에서 누르면 앱이 열리고 구독과 아이디 묶기까지 한 번에 끝납니다.
  3. 주문·예약 상태가 바뀌는 곳에서 그 회원에게 보냅니다. 링크를 함께 넣으면 알림을 눌러 주문 화면으로 갑니다.
  4. 탈퇴·알림 끄기 때는 연결을 해제합니다 — DELETE /v1/subscriptions?external_id=…
붙이기
const H = {
  "Authorization": `Bearer ${process.env.EOSNOTI_API_KEY}`,
  "Content-Type": "application/json",
};

// 1. 회원이 「휴대폰 알림 받기」를 누르면 — 회원 ID를 담은 구독 링크를 발급한다
const r = await fetch("https://api.eosnoti.com/v1/subscribe-links", {
  method: "POST", headers: H,
  body: JSON.stringify({ external_id: String(user.id) }),
});
const { url } = await r.json();   // 버튼 href 또는 QR로 보여 줍니다

// 2. 주문이 출발하면 — 그 회원에게 보낸다
await fetch("https://api.eosnoti.com/v1/messages", {
  method: "POST", headers: H,
  body: JSON.stringify({
    to: `ext:${order.userId}`,
    title: "○○몰",
    body: "주문하신 운동화가 출발했습니다.",
    url: `https://myshop.example/orders/${order.id}`,
  }),
});

1은 회원이 「휴대폰 알림 받기」를 누를 때, 2는 주문 상태가 «배송 중»으로 바뀌는 곳에서 부릅니다. url을 넣으면 알림을 눌러 주문 화면으로 갑니다.

02 · 맥 · 윈도우 앱

내 프로그램의 긴 작업이 끝나면,
자리를 뜬 사용자의 휴대폰으로

이럴 때 — 영상 인코딩·백업·데이터 처리처럼 몇 시간 걸리는 데스크톱 프로그램을 만듭니다. 사용자는 작업을 걸어 두고 자리를 뜹니다.
흐름
  1. 내 앱 (맥·윈도우)«작업 끝남»만 알림
  2. 내 서버API 키는 여기에만
  3. EosNotito: "ext:계정ID"
  4. 사용자 휴대폰잠금화면 알림
API 키를 앱 안에 넣지 마십시오. 배포된 프로그램은 누구나 뜯어 볼 수 있습니다. 앱은 내 서버에 «끝났다»만 알리고, EosNoti에는 서버가 보냅니다. 나 혼자 쓰는 도구라면 04 스크립트 방식이 더 간단합니다.
준비
  1. 앱 설정에 「휴대폰 알림」 칸을 둡니다. 서버가 사용자 계정 ID로 6자리 코드를 발급하고(POST /v1/pairing-codes), 앱은 코드와 QR을 보여 줍니다.
  2. 사용자가 EosNoti 앱으로 QR을 찍거나 코드를 넣으면, 서버가 코드 상태를 확인해 앱에 «연결됨»을 띄웁니다.
  3. 작업이 끝나면 앱 → 내 서버 → to: "ext:계정ID"로 보냅니다.
붙이기
// 1. 앱(윈도우, C#) — 키 없이, 내 서버에만 «끝났다»를 알린다(내 서버 로그인 세션으로 부릅니다)
await http.PostAsJsonAsync("https://api.clipmaker.example/jobs/done",
    new { jobId = job.Id, title = "4K 인코딩 완료", took = "2시간 14분" });

// 2. 내 서버(Node) — 로그인한 사용자 계정 ID로 EosNoti에 보낸다. API 키는 여기에만 있다
app.post("/jobs/done", auth, async (req, res) => {
  await fetch("https://api.eosnoti.com/v1/messages", {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${process.env.EOSNOTI_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      to: `ext:${req.user.id}`,
      title: req.body.title,
      body: `${req.body.took} 걸렸습니다.`,
    }),
  });
  res.sendStatus(204);
});

앱 코드에는 키도 EosNoti 주소도 없습니다. 아래 서버 코드만 키를 읽습니다.

03 · 모니터링 · 운영

장애는 메일 말고,
운영자 전원의 잠금화면으로

이럴 때 — 서버 여러 대를 맡고 있는데 장애 메일이 다른 메일에 묻혀 30분 뒤에야 봅니다. 감시 도구는 이미 있습니다. 알림 보낼 곳만 바꾸면 됩니다.
흐름
  1. 감시 도구Uptime Kuma · Prometheus · 헬스체크 cron
  2. EosNoti APIpriority: "high"
  3. «운영 알림» 구독자 전원to: "broadcast"
준비
  1. 채널 «운영 알림»을 만들고, 나와 팀원이 휴대폰으로 구독합니다(코드 6자리 또는 QR). 키는 감시 서버의 환경변수 EOSNOTI_API_KEY에 둡니다.
  2. 모두에게는 to: "broadcast"로 보냅니다. 당번 한 명에게만 보내려면 POST /v1/pairing-codes에 external_id를 넣어 코드를 만들고, 그 사람이 그 코드로 구독합니다. 그러면 to: "ext:ops-kim"으로 보낼 수 있습니다.
  3. 감시 도구의 알림 대상을 EosNoti로 바꿉니다. 장애는 priority: "high"로 잠금화면에 바로 띄웁니다.
붙이기
# /etc/cron.d/check-api — 1분마다:  * * * * * root /opt/check-api.sh
. /etc/eosnoti.env   # export EOSNOTI_API_KEY=…  (cron은 환경변수를 물려받지 않으므로 root만 읽는 파일에서, chmod 600)
URL=https://api.myshop.example/health
FLAG=/tmp/api-down

send() {
  curl -s https://api.eosnoti.com/v1/messages \
    -H "Authorization: Bearer $EOSNOTI_API_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"to\":\"broadcast\",\"priority\":\"$1\",\"title\":\"$2\",\"body\":\"$3\"}"
}

if ! curl -fsS --max-time 5 "$URL" >/dev/null; then
  # 같은 장애를 1분마다 보내지 않도록 처음 한 번만
  [ -f $FLAG ] || { send high "[장애] api-02 응답 없음" "헬스체크 5초 초과 · $(date +%H:%M)"; touch $FLAG; }
elif [ -f $FLAG ]; then
  send normal "[복구] api-02 정상" "$(date +%H:%M) 응답 확인"; rm $FLAG
fi

cron이 1분마다 부르고, 같은 장애는 처음 한 번만 알립니다. 장애는 높은 우선순위로, 복구는 보통으로 보냅니다.

물어보고, 답으로 조치하기 — kind: "ask"와 선택지(["실행","나중에"])로 보내면 운영자가 알림에서 바로 고릅니다. 스크립트는 GET /v1/messages/{id}/replies?wait=30으로 누가 무엇을 골랐는지 기다려 받고 다음 조치를 합니다.
04 · 스크립트 · 자동화

백업·배치·CI가 끝나면,
curl 한 줄로 내 폰에

이럴 때 — 밤새 돌린 백업이 성공했는지 아침마다 로그를 뒤집니다. 혼자 쓰는 스크립트라 받는 사람은 나 한 명입니다.
흐름
  1. 내 스크립트백업 · 학습 · 배포 · 크롤링
  2. EosNoti APIto: "broadcast"
  3. 내 휴대폰나 한 명
준비
  1. 채널 «내 알림»을 만들고 내 휴대폰으로 구독합니다(코드 6자리·QR) — 나 혼자 구독한 채널이라 broadcast가 곧 나입니다.
  2. 키를 셸 환경변수 EOSNOTI_API_KEY에 둡니다(CI라면 저장소 비밀값).
  3. 아래 함수를 한 번 넣어 두고, 끝을 알고 싶은 명령 뒤에 붙입니다.
붙이기
# ~/.zshrc — 어디서든 notify "제목" "내용" [high]
notify() {
  curl -s https://api.eosnoti.com/v1/messages \
    -H "Authorization: Bearer $EOSNOTI_API_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"to\":\"broadcast\",\"title\":\"$1\",\"body\":\"$2\",\"priority\":\"${3:-normal}\"}" >/dev/null
}

# 쓰는 법 — 오래 걸리는 명령 뒤에 붙인다(실패만 잠금화면에 바로)
#   ./backup.sh && notify "백업 완료" "nas-01 → s3 · $(du -sh /backup | cut -f1)" \
#               || notify "백업 실패" "로그: /var/log/backup.log" high
#
#   python train.py; notify "학습 끝" "종료 코드 $?"

끝을 알고 싶은 명령 뒤에 붙입니다. 세 번째 인자를 high로 주면 잠금화면에 바로 뜹니다.

맥·윈도우 앱에서는 한 걸음 더 빠릅니다EosNoti 데스크톱 앱의 「개발자를 위하여」에서 로그인하면 내 API 키를 바로 꺼내 복사하고, 언어별 연동 코드를 보고, AI 연동 가이드를 내려받을 수 있습니다.

첫 알림까지 5분입니다

가입하고 채널을 만들면 API 키가 나옵니다. 위 네 자리 중 하나를 골라 붙여 보십시오.

무료로 시작하기1개월 무료 체험 · 카드 필요 없음 · 자동 결제 없음
개발자를 위한 활용 예시 — 웹·데스크톱 앱·모니터링·스크립트 — EosNoti