개발자를 위하여 · 활용 예시
메일 말고, 휴대폰으로.
붙이는 자리는 네 곳입니다.
API 키 하나와 HTTP 요청 한 번이면, 한 사람의 휴대폰 잠금화면에 바로 닿습니다. 받는 사람은 EosNoti 앱(iOS·Android)만 있으면 되고, 휴대폰 앱을 따로 만들거나 기기 토큰을 다룰 일이 없습니다.
1개월 무료 체험 · 카드 필요 없음 · 자동 결제 없음
○○몰지금
주문하신 운동화가 출발했습니다
내일 도착 예정입니다.
운영 알림2분 전
[장애] api-02 응답 없음
헬스체크 5초 초과
클립메이커1시간 전
4K 인코딩 완료
2시간 14분 걸렸습니다.
내 알림03:12
백업 완료
nas-01 → s3 · 42.8G
01 · 웹 서비스
회원에게 주문·예약 알림을,
휴대폰 앱을 만들지 않고
이럴 때 — 쇼핑몰·예약·학원 관리 서비스를 운영합니다. 상태가 바뀔 때마다 회원에게 알리고 싶지만 휴대폰 앱을 따로 만들 여력은 없습니다.
흐름
- 마이페이지 「알림 받기」서버가 회원 ID로 구독 링크 발급
- 회원이 링크·QR을 엶EosNoti 앱 구독 + 회원 ID 묶임
- 주문 상태가 바뀔 때to: "ext:회원ID"
준비
- 회원이 「휴대폰 알림 받기」를 누르면 서버가 그 회원 ID로 구독 링크를 만듭니다 —
POST /v1/subscribe-links - 링크를 버튼이나 QR로 보여 줍니다. 휴대폰에서 누르면 앱이 열리고 구독과 아이디 묶기까지 한 번에 끝납니다.
- 주문·예약 상태가 바뀌는 곳에서 그 회원에게 보냅니다. 링크를 함께 넣으면 알림을 눌러 주문 화면으로 갑니다.
- 탈퇴·알림 끄기 때는 연결을 해제합니다 —
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 · 맥 · 윈도우 앱
내 프로그램의 긴 작업이 끝나면,
자리를 뜬 사용자의 휴대폰으로
이럴 때 — 영상 인코딩·백업·데이터 처리처럼 몇 시간 걸리는 데스크톱 프로그램을 만듭니다. 사용자는 작업을 걸어 두고 자리를 뜹니다.
흐름
- 내 앱 (맥·윈도우)«작업 끝남»만 알림
- 내 서버API 키는 여기에만
- EosNotito: "ext:계정ID"
- 사용자 휴대폰잠금화면 알림
API 키를 앱 안에 넣지 마십시오. 배포된 프로그램은 누구나 뜯어 볼 수 있습니다. 앱은 내 서버에 «끝났다»만 알리고, EosNoti에는 서버가 보냅니다. 나 혼자 쓰는 도구라면 04 스크립트 방식이 더 간단합니다.
준비
- 앱 설정에 「휴대폰 알림」 칸을 둡니다. 서버가 사용자 계정 ID로 6자리 코드를 발급하고(
POST /v1/pairing-codes), 앱은 코드와 QR을 보여 줍니다. - 사용자가 EosNoti 앱으로 QR을 찍거나 코드를 넣으면, 서버가 코드 상태를 확인해 앱에 «연결됨»을 띄웁니다.
- 작업이 끝나면 앱 → 내 서버 →
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분 뒤에야 봅니다. 감시 도구는 이미 있습니다. 알림 보낼 곳만 바꾸면 됩니다.
흐름
- 감시 도구Uptime Kuma · Prometheus · 헬스체크 cron
- EosNoti APIpriority: "high"
- «운영 알림» 구독자 전원to: "broadcast"
준비
- 채널 «운영 알림»을 만들고, 나와 팀원이 휴대폰으로 구독합니다(코드 6자리 또는 QR). 키는 감시 서버의 환경변수
EOSNOTI_API_KEY에 둡니다. - 모두에게는
to: "broadcast"로 보냅니다. 당번 한 명에게만 보내려면POST /v1/pairing-codes에external_id를 넣어 코드를 만들고, 그 사람이 그 코드로 구독합니다. 그러면to: "ext:ops-kim"으로 보낼 수 있습니다. - 감시 도구의 알림 대상을 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
ficron이 1분마다 부르고, 같은 장애는 처음 한 번만 알립니다. 장애는 높은 우선순위로, 복구는 보통으로 보냅니다.
물어보고, 답으로 조치하기 —
kind: "ask"와 선택지(["실행","나중에"])로 보내면 운영자가 알림에서 바로 고릅니다. 스크립트는 GET /v1/messages/{id}/replies?wait=30으로 누가 무엇을 골랐는지 기다려 받고 다음 조치를 합니다.04 · 스크립트 · 자동화
백업·배치·CI가 끝나면,
curl 한 줄로 내 폰에
이럴 때 — 밤새 돌린 백업이 성공했는지 아침마다 로그를 뒤집니다. 혼자 쓰는 스크립트라 받는 사람은 나 한 명입니다.
흐름
- 내 스크립트백업 · 학습 · 배포 · 크롤링
- EosNoti APIto: "broadcast"
- 내 휴대폰나 한 명
준비
- 채널 «내 알림»을 만들고 내 휴대폰으로 구독합니다(코드 6자리·QR) — 나 혼자 구독한 채널이라
broadcast가 곧 나입니다. - 키를 셸 환경변수
EOSNOTI_API_KEY에 둡니다(CI라면 저장소 비밀값). - 아래 함수를 한 번 넣어 두고, 끝을 알고 싶은 명령 뒤에 붙입니다.
붙이기
# ~/.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로 주면 잠금화면에 바로 뜹니다.
첫 알림까지 5분입니다
가입하고 채널을 만들면 API 키가 나옵니다. 위 네 자리 중 하나를 골라 붙여 보십시오.
무료로 시작하기1개월 무료 체험 · 카드 필요 없음 · 자동 결제 없음