서비스
BulkSMSAPI란 무엇인가요?
개발자를 위한 대량 SMS API: 한 번의 요청으로 하나의 문자 또는 최대 10,000개의 번호를 227개국으로 보내고, 서명된 웹훅으로 모든 메시지를 추적하며, 선불 잔액에서 메시지당 비용을 지불할 수 있어요. 웹 콘솔에서는 코드 없이 붙여넣은 목록이나 CSV 파일로 캠페인을 보낼 수 있어요.
누가 대량 SMS API를 사용하나요?
자체 시스템에서 문자를 보내는 제품 및 엔지니어링 팀: 로그인 및 가입 코드, 주문 및 배송 업데이트, 예약 알림, 결제 알림, 서비스 공지 및 마케팅 캠페인. HTTPS 요청을 할 수 있는 누구나 사용할 수 있어요.
어떤 국가로 전송할 수 있나요?
227개 국가와 지역이 있어요. 가격 페이지와 국가 페이지에서 가격을 확인할 수 있어요. 한 번의 요청으로 여러 국가를 섞어서 보낼 수 있어요. 각 번호는 해당 국가의 가격으로 청구돼요.
월별 요금이나 계약이 있나요?
아니요. 메시지 세그먼트당 요금을 선불 잔액에서 지불하고, 월별 요금이나 설정 비용, 최소 발송량이 없어요. 잔액은 만료 날짜가 없어요.
무료 체험이 있나요?
계정은 잔액이 0으로 시작하고, 첫 충전으로 모든 기능이 열려요. 첫 충전 시 최대 40% 보너스가 추가되기 때문에 처음 보내는 메시지 비용이 더 저렴해요. 가격은 공개되어 있으며, 예측 엔드포인트와 콘솔에서 메시지를 보내기 전에 정확한 비용을 확인할 수 있어요.
계정 및 API 키
계정을 어떻게 생성하나요?
‘API 키 발급’을 열어요. 브라우저에서 acct_로 시작하는 계정 키를 생성해요. 복사하거나 텍스트 파일로 저장하고, 저장했는지 확인하면 계정이 준비돼요. 계정 키가 유일한 로그인이에요. 관리할 이메일이나 비밀번호는 없어요.
계정 키를 분실하면 어떻게 되나요?
저희는 키 해시만 저장하기 때문에, 지원팀을 포함해 누구도 다시 보여줄 수 없어요. 비밀번호 관리자에 보관하세요. 로그인 상태라면 콘솔은 계속 작동하며, 여기서 지원팀에 문의할 수 있어요.
API 키는 어떻게 받나요?
콘솔의 API 키 페이지에서 첫 충전이 완료된 후에요. 키 이름을 지정하고 생성한 후 한 번 복사하세요: bsa_live_로 시작해요. 계정 하나당 10개의 활성 키를 보유할 수 있으며, 각 키는 고유한 이름과 요청 한도 카운터를 가지고 있어요.
프로덕션과 스테이징 환경에 서로 다른 키를 사용할 수 있나요?
네. 앱이나 환경별로 하나의 키를 생성하고 이름을 지정할 수 있어요. 각 키는 마지막으로 사용된 시점을 보여주며, 하나를 취소해도 나머지는 계속 작동해요.
계정을 몇 개까지 만들 수 있나요?
네트워크 주소당 최대 3개 계정이 가능해요. 대부분의 팀은 하나의 계정에 여러 API 키를 사용하면 돼요.
메시지 전송
하나의 요청으로 몇 개의 번호까지 보낼 수 있나요?
POST /v1/batches는 한 번의 요청으로 최대 10,000개의 번호를 처리할 수 있어요. 모두에게 동일한 텍스트를 보내거나, 각 번호마다 개별적인 텍스트를 보낼 수 있어요. 콘솔에서는 한 캠페인에 최대 50,000개의 번호를 처리할 수 있어요. 더 큰 목록은 여러 요청으로 나눠서 처리돼요.
메시지는 얼마나 빨리 전송되나요?
큐는 2초마다 실행되며, 계정당 분당 최대 1,200개의 메시지를 네트워크로 전달해요. 메시지는 받은 순서대로 처리되며, 단일 메시지는 보통 요청 후 몇 초 이내에 전송돼요.
전화번호는 어떤 형식이어야 하나요?
국제 E.164: 플러스 기호, 국가 코드 및 전화번호로 구성되며, 예를 들어 +14155550123과 같아요. 공백, 대시, 괄호 및 00 접두사는 자동으로 제거되고, 중복된 번호와 읽을 수 없는 번호는 제외되며 요금이 청구되지 않아요.
메시지는 얼마나 길 수 있나요?
최대 10개 세그먼트: GSM-7 기준 1,530자, 유니코드 기준 670자까지 가능해요. 한 세그먼트는 GSM-7 기준 160자, 유니코드 기준 70자를 담을 수 있어요. 더 긴 텍스트는 153자 또는 67자 단위로 나뉘었다가 휴대폰에서 다시 합쳐져요.
왜 예상보다 더 많은 세그먼트가 사용되었나요?
GSM-7 알파벳 외의 문자 하나, 예를 들어 곱은 따옴표, 이모지 또는 á, ç 같은 문자가 있으면 전체 텍스트가 유니코드로 전환돼 세그먼트당 70자로 처리돼요. 콘솔 작곡기가 이런 문자를 알려주고, POST /v1/estimates로 보내기 전에 인코딩을 확인할 수 있어요.
메시지를 예약할 수 있나요?
네. API 요청에 send_at을 추가하거나 콘솔에서 2분부터 45일까지의 시간을 선택할 수 있어요. 예약된 배치는 시작 전까지 취소할 수 있으며, 전체 비용이 잔액으로 환불돼요.
수신자마다 다른 메시지를 보낼 수 있나요?
네. API를 통해 메시지가 포함된 배치를 보내면 돼요. 각 수신자마다 {to, text}를 하나씩 지정하면 돼요. 콘솔에서는 목록을 붙여넣거나 업로드하고, 추가 열을 사용해서 텍스트에 병합 필드 {{1}}부터 {{9}}까지 활용할 수 있어요.
메시지에 수신 거부 안내 문구가 추가되나요?
설정에서 수신 거부 안내 문구를 한 번 설정해요. 예를 들어 링크나 이메일 주소를 입력하면, 콘솔에서 캠페인 텍스트에 추가해요. API를 사용하면 전체 텍스트를 직접 제어할 수 있으니, 마케팅 메시지에 수신 거부 문구를 직접 추가해요. 발송 제외 목록에 있는 번호는 콘솔과 API에서 건너뛰고, 요금이 부과되지 않아요.
먼저 테스트 메시지를 보낼 수 있나요?
네. 콘솔에서는 캠페인 전에 하나의 번호로 테스트 전송을 할 수 있으며, API를 통해 POST /v1/messages로 자신의 휴대폰에 단일 메시지를 보낼 수 있어요.
가격 및 결제
SMS 한 건당 비용은 얼마인가요?
번호의 국가에 따라 달라요: 각 국가는 세그먼트당 하나의 가격을 미국 달러로 가지고 있으며, 최저 $0.00247(브라질)부터 시작해요. 가격 페이지와 GET /v1/pricing 엔드포인트에서 모든 국가를 확인할 수 있어요.
배치 비용은 어떻게 계산되나요?
각 수신자별로 해당 국가의 세그먼트당 가격에 텍스트의 세그먼트 수를 곱해요. 요청이 수락되면 잔액에서 합계가 차감되고, 응답에 비용이 표시돼요.
최소 충전 금액은 얼마인가요?
$40. 충전은 $40부터 $5,000까지 원하는 금액으로 할 수 있어요. 첫 충전 시 최대 40%의 보너스가 추가되며, 결제 전 각 금액에 표시돼요.
결제는 어떻게 하나요?
콘솔에서 Billing을 선택하면 페이지 위에 호스팅된 결제 창이 열려요. 금액을 선택하고 암호화폐로 결제하면, 결제 페이지에 정확한 금액과 주소가 표시돼요. 결제 내역 페이지에서는 각 단계를 확인할 수 있어요.
전송 실패한 메시지는 환불되나요?
네. 메시지가 실패하면 그 가격이 자동으로 같은 과정에서 잔액으로 돌아가요, 원장에 환불 항목으로 기록돼요. 예약된 배치가 취소되면 전체 금액이 환불돼요.
잔액을 출금할 수 있나요?
잔액은 메시지 비용을 지불하고 만료일 없이 계정에 유지돼요. 실패하거나 취소된 메시지에 대한 환불도 잔액으로 돌아가요.
가격이 변동되나요?
네트워크 비용이 변동하면 가격도 바뀔 수 있어요. 현재 목록은 날짜가 표시되고, API는 모든 가격과 함께 날짜를 반환해요. 이미 수락된 메시지는 청구된 가격을 유지해요.
전송 및 보고
메시지가 전송되었는지 어떻게 알 수 있나요?
각 메시지는 대기 중에서 전송 중으로, 그리고 전송 완료 또는 실패 상태로 이동해요. 콘솔에서 웹훅 URL을 추가하면 모든 최종 상태에 대해 서명된 이벤트를 받을 수 있고, GET /v1/messages/{id}와 GET /v1/batches/{id}를 통해 확인할 수도 있어요.
웹훅은 어떻게 서명되나요?
Standard Webhooks 형식에서는 webhook-id, webhook-timestamp, webhook-signature 헤더를 사용해요. 여기서 signature는 id, timestamp, raw body를 whsec_ 시크릿으로 HMAC-SHA256을 통해 생성된 값이에요. 문서에서 Node.js, Python, PHP, Go용 검증 코드를 확인할 수 있어요.
웹훅 엔드포인트가 다운되면 어떻게 되나요?
모든 이벤트는 약 24시간 동안 10번 시도되고, 각 시도는 HTTP 상태와 함께 콘솔에 표시돼요. 메시지 엔드포인트를 언제든지 폴링할 수도 있어요.
메시지가 실패하는 이유는 무엇인가요?
휴대폰이 너무 오랫동안 꺼져 있을 수도 있고, 번호가 더 이상 사용되지 않을 수도 있으며, 네트워크가 메시지를 거부할 수도 있어요. 실패 상태에는 오류 코드가 포함되며, 가격은 환불돼요.
메시지 기록은 얼마나 보관되나요?
배치, 메시지, 그리고 잔액 내역은 계정과 API에 남아 있어요. 요청 로그는 최근 500개의 API 호출을, 웹훅 로그는 최근 500개의 전송 결과를 보관해요.
개발자를 위해
SDK가 있나요?
API는 HTTPS를 통해 일반 JSON으로 동작하므로, 어떤 언어의 표준 라이브러리로도 충분해요. 문서에는 curl, Node.js, Python, PHP, Go의 완전한 샘플 코드가 있으며, /openapi.json의 OpenAPI 스펙은 대부분의 언어에서 타입이 지정된 클라이언트를 생성해요.
요청 한도는 어떻게 되나요?
API 키당 분당 600회 요청이 가능해요. 모든 응답에는 X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset 헤더가 포함되어 있고, 429 응답에는 Retry-After 헤더가 포함돼요.
타임아웃 후 안전하게 재시도하려면 어떻게 하나요?
POST 요청을 보낼 때 Idempotency-Key 헤더를 추가하고, 동일한 키로 재시도하세요. 24시간 동안 동일한 키와 본문으로 요청하면 첫 번째 응답을 반환하며 다시 전송하지 않아요.
API 키 없이 가격을 확인할 수 있나요?
네. GET /v1/pricing과 GET /v1/pricing/{country}는 공개되어 있어, 결제 페이지나 대시보드에서 실시간 가격을 표시할 수 있어요.
내 코드가 보낸 내용은 어디서 확인할 수 있나요?
콘솔에는 마지막 500번의 API 호출에 대한 메서드, 경로, 상태 및 시간이 기록된 요청 로그가 있어요. 배치, 메시지, 웹훅 로그와 함께 확인할 수 있어요.
콘솔
코드를 작성하지 않고도 보낼 수 있나요?
네. 콘솔에서 번호를 붙여넣거나 최대 50,000행의 CSV 파일을 업로드하고, 병합 필드를 포함한 텍스트를 작성한 후 각 수신자별 미리보기와 국가별 비용을 확인하고, 지금 보내거나 지정된 시간에 보낼 수 있어요.
콘솔에는 무엇이 표시되나요?
잔액, 실시간 카운트와 함께 최근 배치, 각 배치의 메시지와 상태, 충전 및 내역, API 키, 웹훅 설정과 전송 결과, 요청 로그, 가격표, 지원 티켓과 설정.
지원팀에 어떻게 연락하나요?
콘솔의 지원 페이지에서 확인할 수 있어요. 결제 관련 문의는 첫날부터 가능하며, 다른 주제는 첫 충전이 완료된 후에 열려요.
아직도 궁금한 점이 있나요?
로그인한 계정은 콘솔에서 지원 티켓을 열 수 있어요. 결제 관련 질문은 첫날부터 할 수 있어요.