BroadNet
저널엔지니어링
엔지니어링

코드로 문자 발송하는 방법: 단 한 번의 REST 호출로 Python, PHP, Node.js, Java, Go 및 C# 구현하기

코드로 문자를 발송하는 것은 인증된 단 한 번의 HTTPS POST 요청으로 이루어집니다. 즉, Bearer 토큰, 발신자 ID, 수신 번호, 메시지 및 메시지 유형이 포함된 JSON 본문, 그리고 응답으로 받는 메시지 ID가 필요합니다. 다음은 Python, PHP, Node.js, Java, Go 및 C#에서의 동일한 요청 예시와 에러 처리 및 운영 가이드입니다.

9 분 소요
엔지니어링 · 발행호 28
9 분 소요

드로 문자를 발송하려면 Authorization: Bearer 헤더와 senderId, destinationNumber, 메시지 및 messageType이 포함된 JSON 본문을 사용하여 https://api.broadnet.me/sms/sendSms로 HTTPS POST 요청을 보냅니다. 호출에 성공하면 응답 본문에 메시지 ID와 함께 HTTP 200이 반환됩니다. 전송 결과 보고(DLR)는 이후 웹훅(webhook)을 통해 전달됩니다. 아래의 모든 언어는 표준 HTTP 라이브러리만을 사용하며, 공식 SDK는 TypeScript 및 Node.js를 위한 것입니다.

핵심 요약

  • 엔드포인트: JSON 본문 및 Bearer 토큰을 포함한 POST https://api.broadnet.me/sms/sendSms,.
  • 필수 필드: senderId, destinationNumber (플러스 기호가 없는 국제 형식), 메시지, messageType (TEXT).
  • 응답: 메시지 ID와 함께 200 반환; 전송 결과 보고와 매칭하기 위해 메시지 ID를 보관하세요.
  • 에러: 토큰이 누락되었거나 유효하지 않으면 게이트웨이에서 401을 반환합니다. API 에러는 status, error, message, errorCode 및 requestUri를 반환합니다.
  • 단일 공식 SDK: TypeScript/Node.js를 위한 @broadnet/cpaas-sdk; OpenAPI 명세서를 기반으로 다른 언어용 클라이언트를 생성합니다.

발송 전 준비 사항은 무엇인가요?

  • BroadNet 계정의 액세스 토큰이 필요하며, 이는 환경 변수(아래 BROADNET_TOKEN)에 저장해야 합니다. 소스 코드나 모바일 앱에 직접 포함해서는 안 됩니다.
  • 도착 국가에서 허용되는 발신자 ID가 필요합니다. 일부 국가는 사전 등록이 필요할 수 있습니다.
  • 국제 형식의 수신 번호가 필요합니다. 예: 447700900123 (가상의 영국 번호).

테스트 계정은 당사 엔지니어를 통해 제공됩니다. 테스트 계정을 신청하면 영업일 기준 1일 이내에 테스트 인증 정보를 받게 되며, 첫 테스트 메시지는 보통 그로부터 약 5분 후에 발송됩니다. 빠른 시작 가이드에서 자세한 절차를 확인할 수 있습니다.

요청(Request) 형식은 어떻게 되나요?

다음은 cURL를 포함한 요청 예시입니다. 아래의 모든 예시는 동일한 JSON 본문을 전송합니다.

snippet
curl -X POST https://api.broadnet.me/sms/sendSms \
-H "Authorization: Bearer $BROADNET_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"senderId": "BroadNet",
"destinationNumber": "447700900123",
"message": "Your verification code is 482913",
"messageType": "TEXT"
}'
# 200 OK → response body is the message ID, e.g. 2603121407537573731

Python을 사용하여 문자를 발송하는 방법은 무엇인가요?

requests 라이브러리를 사용하면 json= 인수가 Content-Type 헤더를 자동으로 설정합니다.

snippet
import os, requests
r = requests.post(
"https://api.broadnet.me/sms/sendSms",
headers={"Authorization": f"Bearer {os.environ['BROADNET_TOKEN']}"},
json={
"senderId": "BroadNet",
"destinationNumber": "447700900123",
"message": "Your verification code is 482913",
"messageType": "TEXT",
},
)
print(r.status_code, r.text) # message ID

PHP를 사용하여 문자를 발송하는 방법은 무엇인가요?

PHP의 curl 확장이면 충분하며, 별도의 패키지는 필요하지 않습니다.

snippet
<?php
$ch = curl_init("https://api.broadnet.me/sms/sendSms");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("BROADNET_TOKEN"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"senderId" => "BroadNet",
"destinationNumber" => "447700900123",
"message" => "Your verification code is 482913",
"messageType" => "TEXT",
]),
]);
$messageId = curl_exec($ch);
echo $messageId;

Node.js를 사용하여 문자를 발송하는 방법은 무엇인가요?

Node.js 18 버전 이후부터는 fetch가 내장되어 있습니다:

snippet
// Node.js 18+ (fetch)
const res = await fetch("https://api.broadnet.me/sms/sendSms", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BROADNET_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
senderId: "BroadNet",
destinationNumber: "447700900123",
message: "Your verification code is 482913",
messageType: "TEXT",
}),
});
console.log(await res.text()); // message ID

또는 공식 TypeScript/Node.js SDK, @broadnet/cpaas-sdk를 사용하세요:

snippet
// npm install @broadnet/cpaas-sdk axios
import { Configuration, SMSSMSApi } from "@broadnet/cpaas-sdk";
const sms = new SMSSMSApi(
new Configuration({
basePath: "https://api.broadnet.me",
accessToken: process.env.BROADNET_TOKEN!,
}),
);
const res = await sms.smsSendsmsPost({
sMSSmsRequest: {
senderId: "BroadNet",
destinationNumber: "447700900123",
message: "Your verification code is 482913",
messageType: "TEXT",
},
});
console.log(res.data); // message ID

Java를 사용하여 문자를 발송하는 방법은 무엇인가요?

Java 11 이상 버전에는 java.net.http.HttpClient이(가) 포함되어 있습니다:

snippet
// Java 11+ — java.net.http is built in, nothing to install
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SendSms {
public static void main(String[] args) throws Exception {
String json = "{"
+ "\"senderId\": \"BroadNet\", "
+ "\"destinationNumber\": \"447700900123\", "
+ "\"message\": \"Your verification code is 482913\", "
+ "\"messageType\": \"TEXT\""
+ "}";
HttpRequest req = HttpRequest.newBuilder(URI.create("https://api.broadnet.me/sms/sendSms"))
.header("Authorization", "Bearer " + System.getenv("BROADNET_TOKEN"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.statusCode() + " " + res.body()); // 200 + message ID
}
}

Go로 문자를 발송하는 방법은 무엇인가요?

snippet
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
body := []byte(`{
"senderId": "BroadNet",
"destinationNumber": "447700900123",
"message": "Your verification code is 482913",
"messageType": "TEXT"
}`)
req, err := http.NewRequest(http.MethodPost, "https://api.broadnet.me/sms/sendSms", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("BROADNET_TOKEN"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
id, _ := io.ReadAll(res.Body)
fmt.Println(res.StatusCode, string(id)) // 200 + message ID
}

C# 및 .NET를 사용하여 문자를 발송하는 방법은 무엇인가요?

.NET 6 이상 버전은 NuGet 패키지가 필요하지 않습니다: HttpClient 및 System.Net.Http.Json가 내장되어 있습니다.

snippet
// .NET 6+ console app (Program.cs) — HttpClient is built in, no NuGet package
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Json;
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
"Bearer", Environment.GetEnvironmentVariable("BROADNET_TOKEN"));
// PostAsJsonAsync sends Content-Type: application/json
var res = await http.PostAsJsonAsync("https://api.broadnet.me/sms/sendSms", new
{
senderId = "BroadNet",
destinationNumber = "447700900123",
message = "Your verification code is 482913",
messageType = "TEXT",
});
var id = await res.Content.ReadAsStringAsync();
Console.WriteLine($"{(int)res.StatusCode} {id}"); // 200 + message ID

응답 결과는 무엇이며, 오류는 어떻게 처리하나요?

응답의미조치 사항
200 + 메시지 ID전송 접수됨ID를 자체 기록과 함께 저장하십시오. DLR을 기다리십시오.
400유효성 검사 오류 또는 누락된 필드요청을 수정하십시오. 수정 없이 재시도하지 마십시오.
401Bearer 토큰이 누락되었거나 유효하지 않음토큰 및 Authorization 헤더를 확인하세요
500예기치 않은 서버 오류지수 백오프(backoff)를 적용하여 재시도하세요. 재전송 전 메시지 상태를 확인해야 합니다.

200 응답은 플랫폼이 메시지를 수락했음을 의미하며, 단말기가 메시지를 수신했음을 의미하지는 않습니다. 전송 여부는 전송 결과 보고를 통해 확인하십시오. DLR은 무엇인가요? 및 SMS 전송 결과 보고 및 오류 코드를 참조하십시오. API에는 멱등성(idempotency) 헤더가 없으므로, 중복 발송을 방지하려면 반환된 메시지 ID를 보관하고 재전송 전에 해당 ID의 상태를 확인하십시오. 나머지 내용은 오류 코드 페이지에 나열되어 있습니다.

어떻게 하면 운영 환경에 적합하게 준비할 수 있나요?

  • 토큰을 서버 측에 보관하십시오. 토큰이 추출될 수 있는 브라우저나 모바일 앱에서 SMS API를 호출하지 마십시오. 대신 자체 백엔드를 호출해야 합니다.
  • 장문 메시지 발송 시 유의사항: GSM-7은 SMS당 160자, Unicode(UCS-2)는 70자까지 지원하며, 이보다 긴 텍스트는 과금되는 세그먼트로 분할됩니다. SMS 글자 수 제한을 확인하십시오.
  • 대량 문자 발송을 대기열에 추가하고 계정의 처리량을 준수하세요. 요금 제한을 확인하시기 바랍니다.
  • 웹훅을 통해 전송 결과 보고를 받고 최종 상태를 저장하세요.
  • 먼저 번호를 국제 형식으로 검증하세요. E.164 전화번호 검증을 참조하세요.

매우 높은 처리량이 필요하거나 기존 통신 스택을 보유한 경우, REST보다 SMPP가 더 적합할 수 있습니다. SMPP vs REST를 참조하세요. BroadNet 플랫폼은 노드당 초당 30,000건의 SMS를 처리합니다.

자주 묻는 질문

코드에서 문자를 발송하는 가장 간단한 방법은 무엇인가요?

액세스 토큰과 JSON 본문을 사용하여 문자 API로 HTTPS POST 요청을 한 번 보내는 것입니다. BroadNet의 경우, senderId, destinationNumber, message 및 messageType을 포함하여 https://api.broadnet.me/sms/sendSms로 POST 요청을 보냅니다.

Python, PHP 또는 Java를 위한 BroadNet SDK가 있나요?

아니요. TypeScript 및 Node.js를 위한 공식 SDK인 @broadnet/cpaas-sdk가 하나 있습니다. 다른 언어에서는 여기에서 보는 것처럼 REST API를 직접 호출하거나, OpenAPI 명세서를 통해 클라이언트를 생성합니다.

전화번호는 어떤 형식이어야 하나요?

국가 코드를 포함하되 플러스(+) 기호나 공백이 없는 국제 형식이어야 합니다. 예: 447700900123.

200 응답이 문자가 성공적으로 착신되었음을 의미하나요?

아니요. 메시지가 접수되었다는 의미입니다. 전송 결과 보고(DLR)를 통해 메시지가 단말기에 도달했는지 확인할 수 있습니다.

Android 또는 iOS 앱에서 직접 SMS를 보낼 수 있나요?

보안상 권장하지 않습니다. 액세스 토큰이 앱 내부로 유출되지 않도록 서버에서 API 호출을 처리하도록 구성하고, 앱이 서버를 호출하는 방식을 사용하세요.

전체 API 레퍼런스는 어디에서 확인할 수 있나요?

API 레퍼런스 및 OpenAPI 스펙에 명시되어 있습니다.

코드 샘플은 당사 개발자 페이지에 게시된 것이며, 공개된 OpenAPI 스펙을 기준으로 검토되었습니다. 2026년 9월 28일 검토됨. 당사의 편집 기준을 참조하세요.

도움이 되었나요?

콘텐츠 작성 및 검토 방식

작성자

BroadNet 편집팀

편집팀은 BroadNet 블로그를 발행합니다. 모든 기사는 BroadNet의 규제 업무, 제품, 엔지니어링, 산업 리서치 및 통신사 솔루션 팀과 협력하여 작성되며, 당사의 편집 기준에 따라 검토됩니다.

계속 읽기

저널의 다른 글 3개 더 보기

모든 에세이 보기
E
엔지니어링

Email to SMS: 이메일-to-SMS 게이트웨이 작동 원리, 활용 사례 및 보안 방법

이메일-to-SMS 게이트웨이는 전화번호로 발송된 이메일을 문자 메시지로 변환합니다. 이를 통해 이메일만 발송할 수 있는 모니터링 도구, 헬프데스크 및 레거시 시스템이 SMS로 사용자에게 연락할 수 있습니다. 이 글에서는 게이트웨이의 작동 방식, API보다 유리한 경우, 그리고 스푸핑 메일에 대비해 보안을 강화하는 방법을 알아봅니다.

BroadNet 편집팀
7m
메
엔지니어링

메시징을 위한 MCP: AI 에이전트가 SMS와 WhatsApp을 안전하게 발송하는 방법

MCP 서버는 메시징 API를 AI 에이전트가 호출할 수 있는 도구로 변환합니다. 이는 강력하면서도 위험합니다. 발송 도구를 가진 에이전트는 실제 고객에게 메시지를 보낼 수 있기 때문입니다. 본 가이드에서는 SMS와 WhatsApp에 대한 MCP의 작동 방식, BroadNet 서버에 연결하는 방법, 그리고 우선적으로 구축해야 할 가드레일에 대해 설명합니다.

BroadNet 엔지니어링
11m
M
제품

MobileValidate 소개: BroadNet이 제공하는 발송 전 전화번호 및 이메일 확인 서비스

MobileValidate는 BroadNet의 새로운 브랜드로, 메시지를 발송하기 전에 전화번호의 통신사 및 회선 유형, 메시징 앱 등록 여부, 이메일 편지함 존재 여부를 확인하는 API입니다. 현재 프라이빗 프리뷰 단계에 있습니다. 본 글에서는 확인 항목, 과금 방식, 개인정보 처리 방식 및 BroadNet 메시징과의 연동성에 대해 설명합니다.

BroadNet 편집팀
7m
이메일로 받아보는 저널

한 달에 한 편의 에세이. 그 외에는 없습니다.

구독하시면 엔지니어링, 규제 또는 산업 관련 최신 소식이 발행되는 당일에 바로 보내드립니다. 드립 캠페인이나 제품 홍보, 제3자 정보 공유는 일절 없습니다. 클릭 한 번으로 언제든 수신 거부할 수 있습니다.

매월 한 통의 이메일을 보내드립니다. 언제든지 수신 거부할 수 있습니다. 자세한 내용은 개인정보 처리방침.

제공되는 콘텐츠
  • 낚시성 링크가 아닌 심도 있는 글
    단일 주제에 대해 6분에서 11분 동안 집중할 수 있는 깊이 있는 글을 제공합니다.
  • 현장 운영 전문가가 작성
    엔지니어, 규제 담당 책임자 및 내부 제품 전문가가 직접 작성합니다.
  • 지역별 특성 반영
    규제 기관, 통신사 및 채널 믹스에 대한 중동·북아프리카 기반의 관점.
  • 월 1회
    드립 캠페인은 진행하지 않습니다. 공유할 내용이 있을 때 에세이 한 편을 발행합니다.
읽는 것을 멈추고, 실행하세요.

우리가 작성하는 대부분의 내용은 실제 운영 과정에서 얻은 경험입니다.

이 글에 공감하셨다면, 저희와 이야기를 나누어 보시기 바랍니다. 활용 사례, 물량, 시장 정보를 알려주세요. 최적의 경로, 요금, 그리고 연락 가능한 레퍼런스 고객 사례를 준비하여 답변해 드리겠습니다.

$ curl -X POST https://api.broadnet.me/sms/sendSms