빠른 시작으로

푸시 전달·읽음 확인과 응답 수집

보낸 뒤가 진짜 일입니다. 닿았는지, 열렸는지, 무엇이라 답했는지를 확인합니다.

전달·읽음 수 읽기

메시지 아이디로 조회하면 전달 집계와 응답이 함께 옵니다. sent는 애플·구글 푸시 서버까지 갔다는 뜻이고, read는 사용자가 실제로 앱에서 열어 봤다는 뜻입니다. 이 둘을 같은 것으로 보시면 안 됩니다.

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

curl -s https://api.eosnoti.com/v1/messages/$MSG -H "Authorization: Bearer $API_KEY"
# ← { "id":"...", "target":"ext:user_8821", "kind":"notify", "priority":"normal",
#     "deliveries": { "queued":0, "sent":1, "failed":0, "read":0 },
#     "replies": [ ... ], "replies_total": 1 }

# queued 대기 중 · sent 애플/구글 푸시 서버까지 도달 · failed 실패
# read  사용자가 앱에서 실제로 열어 본 수 (sent와 다르다)
# replies는 미리보기 200건까지 — 전체는 아래 /replies를 커서로 훑는다
읽음은 사용자가 앱을 여는 시점에 올라오므로, 알림을 보낸 뒤 몇 시간 뒤일 수도 있습니다. 읽음을 화면에 표시하셔야 한다면 메시지 조회를 주기적으로 부르십시오.

ask 응답 받기 — 롱폴링

응답 경로는 최대 30초까지 기다렸다가 답합니다. 1초마다 두드리는 대신 이걸 쓰시면 응답이 오는 즉시 깨어납니다. 기본 200건, 최대 1000건이고 next_cursor가 오면 뒤가 더 있다는 뜻입니다.

curl -s "https://api.eosnoti.com/v1/messages/$MSG/replies?wait=30&limit=200" \
  -H "Authorization: Bearer $API_KEY"
# ← {"replies":[{"id":"...","external_id":"user_8821","choice":"참석",
#                "body":null,"created_at":"2026-09-22T01:20:00Z"}],
#    "next_cursor":"<있으면 뒤가 더 있다>"}
#
# wait  최대 30초 롱폴링 · limit 기본 200, 최대 1000
# next_cursor를 &cursor= 로 넘겨 이어서 받는다
커서를 주고 부르면 «그 뒤에 새로 온 응답»만 기다립니다. 커서 없이 부르면 이미 쌓인 응답이 있어 즉시 돌아오므로, 실제로 대기하게 하려면 받은 next_cursor를 계속 넘기십시오.

누가 답했는지

응답마다 external_id가 붙습니다. broadcast로 물어도 「몇 명이 참석」이 아니라 「누가 참석」을 알 수 있습니다.

다만 external_id 없이 구독한 사람의 응답은 external_id가 null입니다. 답은 받지만 누구인지 알 수 없습니다. 응답자를 식별하셔야 한다면 연결 단계에서 반드시 external_id를 묶으십시오 — 페어링 코드와 구독 링크는 자동으로 묶어 줍니다. external_id

다른 문서

붙여 보시겠습니까?

가입하면 애플리케이션과 API 키가 바로 발급됩니다. 첫 알림까지 5분이면 됩니다.

무료로 시작하기
푸시 전달·읽음 확인과 응답 수집 — EosNoti