메시지 발송 예제
해당 페이지에서는 SOLAPI Rust SDK를 이용하여 메시지를 발송하는 방법에 대해 가이드하고 있습니다.
Rust SDK를 통해 빠르고 쉽게 메시지를 발송해보세요!
- 각 발송 예시에 대한 결과 값 표시 기능은 현재 준비중에 있습니다.
- 해당 예제는 Rust SDK 0.1.0 버전을 기준으로 작성되었습니다.
- 여러 건 발송이나 더 다양한 예제를 확인해보고 싶으신 경우 SDK 샘플 코드 페이지를 확인해보세요!
- 발송 요청을 하실 때 반드시 발신번호와 수신번호는 01012345678 형식으로 요청하셔야 합니다!
- +, -, * 특수문자 등 삽입 불가
// 예시, 다른 파라미터 생략, json 형식
{
"from": "029302266",
"to": "029302266"
}
🔗 SDK 샘플 코드 페이지
환경설정
프로젝트의 Cargo.toml
파일에 다음을 추가하거나 아래 명령어를 입력하여 SDK를 설치해보세요!
Cargo.toml
[dependencies]
solapi = "0.1.0"
또는 cargo
명령어를 사용하여 설치할 수 있습니다!
cargo add solapi
문자 발송
Rust로 문자를 발송하는 방법에 대해 안내합니다.
연동하실 코드로 이동하신 다음, 아래의 각 유형별 문자 발송예시를 참고하셔서 원하시는 유형의 문자를 발송해보세요!
SMS(단문 문자) 발송
단문 문자(SMS) 발송
use solapi::SolapiClient;
fn main() {
// API 키와 API Secret을 설정합니다
let api_key = "YOUR_API_KEY";
let api_secret = "YOUR_API_SECRET";
// 발신번호 및 수신번호 입력 형식은 01000000000 형식으로 입력하세요.
let from_phone = "발신번호"; // 발신번호 (등록된 발신번호만 사용 가능, 01000000000 형식으로 입력해주셔야 합니다! (-)제외)
let to_phone = "수신번호"; // 수신번호(01000000000 형식으로 입력해주셔야 합니다! (-)제외)
// SOLAPI 클라이언트 생성
let client = SolapiClient::new(api_key, api_secret);
let message_service = client.message_service();
// SMS 전송 요청 생성 (빌더 패턴 사용)
let message = solapi::message::Message::new(to_phone)
.from(from_phone)
.text("안녕하세요! SOLAPI Rust SDK를 사용한 SMS 발송 예제입니다.")
.message_type(solapi::message::MessageType::SMS);
let request = solapi::message::SendRequest {
messages: vec![message],
allow_duplicates: None,
scheduled_date: None,
show_message_list: None,
};
// 메시지를 발송합니다
match message_service.send_blocking(request) {
Ok(response) => {
println!("메시지 발송 성공!");
println!("Group ID: {}", response.group_info.group_id);
println!("요청한 메시지 개수: {}", response.group_info.count.total);
println!("성공한 메시지 개수: {}", response.group_info.count.registered_success);
println!("실패한 메시지 개수: {}", response.group_info.count.registered_failed);
}
Err(e) => {
eprintln!("메시지 발송 실패: {:?}", e);
}
}
}
장문 문자(LMS) 발송
장문 문자(LMS) 발송
use solapi::SolapiClient;
fn main() {
// API 키와 API Secret을 설정합니다
let api_key = "YOUR_API_KEY";
let api_secret = "YOUR_API_SECRET";
// 발신번호 및 수신번호 입력 형식은 01000000000 형식으로 입력하세요.
let from_phone = "발신번호"; // 발신번호 (등록된 발신번호만 사용 가능, 01000000000 형식으로 입력해주셔야 합니다! (-)제외)
let to_phone = "수신번호"; // 수신번호(01000000000 형식으로 입력해주셔야 합니다! (-)제외)
// SOLAPI 클라이언트 생성
let client = SolapiClient::new(api_key, api_secret);
let message_service = client.message_service();
// LMS 전송 요청 생성 (빌더 패턴 사용)
let message = solapi::message::Message::new(to_phone)
.from(from_phone)
.text("한글 45자, 영자 90자 이상 입력되면 자동으로 LMS타입의 문자메시지가 발송됩니다. 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ")
.message_type(solapi::message::MessageType::LMS)
.subject("LMS 제목"); // LMS 제목, 제목을 지정하지 않는다면 필요하지 않습니다.
let request = solapi::message::SendRequest {
messages: vec![message],
allow_duplicates: None,
scheduled_date: None,
show_message_list: None,
};
// 메시지를 발송합니다
match message_service.send_blocking(request) {
Ok(response) => {
println!("메시지 발송 성공!");
println!("Group ID: {}", response.group_info.group_id);
println!("요청한 메시지 개수: {}", response.group_info.count.total);
println!("성공한 메시지 개수: {}", response.group_info.count.registered_success);
println!("실패한 메시지 개수: {}", response.group_info.count.registered_failed);
}
Err(e) => {
eprintln!("메시지 발송 실패: {:?}", e);
}
}
}
사진 문자(MMS) 발송
사진 문자(MMS) 발송
use base64::{engine::general_purpose, Engine as _};
use solapi::message::{Message, MessageType, SendRequest};
use solapi::storage::{FileType, UploadFileRequest};
use solapi::SolapiClient;
use std::fs;
/// 파일을 base64로 인코딩하는 헬퍼 함수
fn read_file_as_base64(file_path: &str) -> Result<String, Box<dyn std::error::Error>> {
let file_content = fs::read(file_path)?;
Ok(general_purpose::STANDARD.encode(&file_content))
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// API 키와 API Secret을 설정합니다
let api_key = "YOUR_API_KEY";
let api_secret = "YOUR_API_SECRET";
let from_phone = "발신번호"; // 발신번호 (등록된 발신번호만 사용 가능)
let to_phone = "수신번호"; // 수신번호
// SOLAPI 클라이언트 생성
let client = SolapiClient::new(api_key, api_secret);
// 1단계: 이미지 파일 업로드
let file_path = "images/example.jpg"; // 실제 이미지 파일 경로로 변경해주세요
println!("파일 읽기: {}", file_path);
// 파일을 base64로 인코딩
let base64_content = read_file_as_base64(file_path)?;
// 스토리지 서비스로 파일 업로드
let storage = client.storage_service();
let upload_request = UploadFileRequest {
file: base64_content,
name: Some(file_path.to_string()),
file_type: Some(FileType::Mms),
link: None,
};
println!("파일 업로드 중...");
let upload_response = storage.upload(upload_request).await?;
println!("파일 업로드 성공!");
println!("File ID: {}", upload_response.file_id);
// 2단계: MMS 메시지 전송
let message_service = client.message_service();
// MMS 메시지 생성 (업로드된 image_id 사용)
let message = Message::new(to_phone)
.from(from_phone)
.text("MMS 메시지 내용입니다.")
.message_type(MessageType::MMS)
.subject("MMS 제목"); // MMS 제목, 제목을 지정하지 않는다면 필요하지 않습니다.
// image_id 설정
let mut message = message;
message.image_id = Some(upload_response.file_id);
let request = SendRequest {
messages: vec![message],
allow_duplicates: None,
scheduled_date: None,
show_message_list: None,
};
println!("MMS 메시지 전송 중...");
// 메시지 전송 (비동기)
match message_service.send(request).await {
Ok(response) => {
println!("\nMMS 발송 성공!");
println!("Group ID: {}", response.group_info.group_id);
println!("요청한 메시지 개수: {}", response.group_info.count.total);
println!("성공한 메시지 개수: {}", response.group_info.count.registered_success);
}
Err(e) => {
eprintln!("\nMMS 발송 실패!");
eprintln!("오류: {:?}", e);
return Err(e.into());
}
}
Ok(())
}
해외 문자(SMS 전용) 발송
해외 문자(SMS 전용) 발송
use solapi::SolapiClient;
fn main() {
// API 키와 API Secret을 설정합니다
let api_key = "YOUR_API_KEY";
let api_secret = "YOUR_API_SECRET";
// 발신번호 및 수신번호 입력 형식은 01000000000 형식으로 입력하세요.
let from_phone = "발신번호"; // 발신번호 (등록된 발신번호만 사용 가능, 01000000000 형식으로 입력해주셔야 합니다! (-)제외)
let to_phone = "수신번호"; // 수신번호(01000000000 형식으로 입력해주셔야 합니다! (-)제외)
// SOLAPI 클라이언트 생성
let client = SolapiClient::new(api_key, api_secret);
let message_service = client.message_service();
// 해외 문자 메시지 생성
let message = solapi::message::Message::new(to_phone)
.from(from_phone)
.text("안녕하세요! SOLAPI Rust SDK를 사용한 SMS 발송 예제입니다.")
.message_type(solapi::message::MessageType::SMS)
.country("1"); // 실제 국가번호 입력, 현재 입력된 값은 미국, 한국은 82 입니다.
let request = solapi::message::SendRequest {
messages: vec![message],
allow_duplicates: None,
scheduled_date: None,
show_message_list: None,
};
// 메시지를 발송합니다
match message_service.send_blocking(request) {
Ok(response) => {
println!("메시지 발송 성공!");
println!("Group ID: {}", response.group_info.group_id);
println!("요청한 메시지 개수: {}", response.group_info.count.total);
println!("성공한 메시지 개수: {}", response.group_info.count.registered_success);
println!("실패한 메시지 개수: {}", response.group_info.count.registered_failed);
}
Err(e) => {
eprintln!("메시지 발송 실패: {:?}", e);
}
}
}
음성 메시지 발송
- ReplyRange와 CounselorNumber는 동시에 사용할 수 없습니다.
음성 메시지 발송
use solapi::SolapiClient;
fn main() {
// API 키와 API Secret을 설정합니다
let api_key = "YOUR_API_KEY";
let api_secret = "YOUR_API_SECRET";
let from_phone = "발신번호"; // 발신번호 (등록된 발신번호만 사용 가능)
let to_phone = "수신번호"; // 수신번호
// SOLAPI 클라이언트 생성
let client = SolapiClient::new(api_key, api_secret);
let message_service = client.message_service();
// 음성 메시지 생성
let message = solapi::message::Message::new(to_phone)
.from(from_phone)
.text("안녕하세요! SOLAPI Rust SDK를 사용한 음성 메시지 발송 예제입니다.")
.message_type(solapi::message::MessageType::Voice)
.voice_options(
solapi::message::VoiceOption::new()
// VoiceType은 FEMALE이 기본값이며, MALE 값을 사용하실 수 있습니다.
.voice_type(solapi::message::VoiceType::Female)
// HeaderMessage는 통화 시작 시, TailMessage는 통화 종료 시 안내되는 메시지입니다. (각 최대 135자)
.header_message("안녕하세요!")
.tail_message("감사합니다!")
// ReplyRange는 수신자가 누를 수 있는 버튼 범위(1~9)입니다. 예: 1 -> 1번까지 입력 가능
.reply_range(1),
// 상담원 연결 번호, ReplyRange와 병행 불가
// .counselor_number("01000000000") // ReplyRange와 병행 불가
);
let request = solapi::message::SendRequest {
messages: vec![message],
allow_duplicates: None,
scheduled_date: None,
show_message_list: None,
};
// 메시지를 발송합니다
match message_service.send_blocking(request) {
Ok(response) => {
println!("메시지 발송 성공!");
println!("Group ID: {}", response.group_info.group_id);
println!("요청한 메시지 개수: {}", response.group_info.count.total);
println!("성공한 메시지 개수: {}", response.group_info.count.registered_success);
println!("실패한 메시지 개수: {}", response.group_info.count.registered_failed);
}
Err(e) => {
eprintln!("메시지 발송 실패: {:?}", e);
}
}
}
참고: 음성 메시지 레퍼런스
카카오 알림톡/브랜드 메시지 발송
Rust로 알림톡/브랜드 메시지를 발송하는 방법에 대해 안내합니다.
연동하실 코드로 이동하신 다음, 아래의 각 유형별 문자 발송예시를 참고하셔서 원하시는 유형의 알림톡/브랜드 메시지를 발송해보세요!
알림톡 발송은 Text 파라미터를 기입하면 발송에 실패합니다!
알림톡 발송
알림톡 발송
use solapi::{message::KakaoOption, SolapiClient};
fn main() {
// API 키와 API Secret을 설정합니다
let api_key = "YOUR_API_KEY";
let api_secret = "YOUR_API_SECRET";
let from_phone = "발신번호"; // 발신번호 (등록된 발신번호만 사용 가능)
let to_phone = "수신번호"; // 수신번호
// SOLAPI 클라이언트 생성
let client = SolapiClient::new(api_key, api_secret);
let message_service = client.message_service();
// 카카오 알림톡 메시지를 생성합니다
let message = solapi::message::Message::new(to_phone)
.from(from_phone)
.message_type(solapi::message::MessageType::ATA)
.kakao_options(
KakaoOption::new()
.pf_id("계정에 등록된 카카오 비즈니스 채널ID")
.template_id("계정에 등록된 카카오 알림톡 템플릿 ID"),
// 만약에 템플릿에 변수가 있다면 아래와 같이 설정합니다.
// 값은 반드시 문자열로 넣어주셔야 합니다!
// .add_variable("#{name}", "홍길동")
// .add_variable("#{age}", "30")
);
let request = solapi::message::SendRequest {
messages: vec![message],
allow_duplicates: None,
scheduled_date: None,
show_message_list: None,
};
// 메시지를 발송합니다
match message_service.send_blocking(request) {
Ok(response) => {
println!("메시지 발송 성공!");
println!("Group ID: {}", response.group_info.group_id);
println!("요청한 메시지 개수: {}", response.group_info.count.total);
println!("성공한 메시지 개수: {}", response.group_info.count.registered_success);
}
Err(e) => {
eprintln!("메시지 발송 실패: {:?}", e);
}
}
}
카카오톡 해외 번호 가입자에 대한 알림톡 발송방법
use solapi::{message::KakaoOption, SolapiClient};
fn main() {
// API 키와 API Secret을 설정합니다
let api_key = "YOUR_API_KEY";
let api_secret = "YOUR_API_SECRET";
let from_phone = "발신번호"; // 발신번호 (등록된 발신번호만 사용 가능)
let to_phone = "수신번호"; // 수신번호
// SOLAPI 클라이언트 생성
let client = SolapiClient::new(api_key, api_secret);
let message_service = client.message_service();
// 카카오 알림톡 메시지를 생성합니다
let message = solapi::message::Message::new(to_phone)
.from(from_phone)
.message_type(solapi::message::MessageType::ATA)
.kakao_options(
KakaoOption::new()
.pf_id("계정에 등록된 카카오 비즈니스 채널ID")
.template_id("계정에 등록된 카카오 알림톡 템플릿 ID"),
// 만약에 템플릿에 변수가 있다면 아래와 같이 설정합니다.
// 값은 반드시 문자열로 넣어주셔야 합니다!
// .add_variable("#{name}", "홍길동")
// .add_variable("#{age}", "30")
)
.country("1"); // 실제 수신자의 국가번호를 입력해주세요! 미국은 1, 대한민국은 82입니다.
let request = solapi::message::SendRequest {
messages: vec![message],
allow_duplicates: None,
scheduled_date: None,
show_message_list: None,
};
// 메시지를 발송합니다
match message_service.send_blocking(request) {
Ok(response) => {
println!("메시지 발송 성공!");
println!("Group ID: {}", response.group_info.group_id);
println!("요청한 메시지 개수: {}", response.group_info.count.total);
println!("성공한 메시지 개수: {}", response.group_info.count.registered_success);
}
Err(e) => {
eprintln!("메시지 발송 실패: {:?}", e);
}
}
}
브랜드 메시지 발송
- 브랜드 메시지는 대체 발송을 지원하지 않습니다.
- 수신번호는 반드시 01012345678 형식으로 입력해주세요.
- N, M 값은 카카오 측에 비즈니스 채널이 인허가 된 경우에만 사용할 수 있습니다!
- 관련 인허가 문의는 채팅상담을 통해 진행 해 주세요!
브랜드 메시지 발송
use solapi::{message::{BmsOptions, KakaoOption}, SolapiClient};
fn main() {
// API 키와 API Secret을 설정합니다
let api_key = "YOUR_API_KEY";
let api_secret = "YOUR_API_SECRET";
let to_phone = "수신번호"; // 수신번호
// SOLAPI 클라이언트 생성
let client = SolapiClient::new(api_key, api_secret);
let message_service = client.message_service();
// 카카오 브랜드 메시지를 생성합니다
let message = solapi::message::Message::new(to_phone)
.message_type(solapi::message::MessageType::BMS)
.kakao_options(
KakaoOption::new()
.pf_id("계정에 등록된 카카오 비즈니스 채널ID")
.template_id("계정에 등록된 브랜드 메시지 템플릿 ID")
// 템플릿에 변수가 있다면 아래와 같이 설정합니다. (키/값 모두 문자열만 허용)
// .add_variable("#{name}", "홍길동")
// .add_variable("#{age}", "30")
// 발송 범위 설정: I(채널 친구), N(채널 친구 제외 마케팅 수신 동의 유저), M(마케팅 수신 동의 유저 + 채널 친구)
// N, M 값은 카카오 측에서 비즈니스 채널이 인허가 된 경우에만 사용할 수 있습니다!
// 관련 인허가 문의는 채팅상담(https://solapi.channel.io)을 통해 진행 해 주세요!
.bms_options(BmsOptions::new().targeting("I"))
);
let request = solapi::message::SendRequest {
messages: vec![message],
allow_duplicates: None,
scheduled_date: None,
show_message_list: None,
};
// 메시지를 발송합니다
match message_service.send_blocking(request) {
Ok(response) => {
println!("메시지 발송 성공!");
println!("Group ID: {}", response.group_info.group_id);
println!("요청한 메시지 개수: {}", response.group_info.count.total);
println!("성공한 메시지 개수: {}", response.group_info.count.registered_success);
}
Err(e) => {
eprintln!("메시지 발송 실패: {:?}", e);
}
}
}
예약 발송
예약 발송은 모든 발송 수단(문자, 알림톡 등)에서 사용할 수 있는 기능입니다.
예약 발송은 SendRequest의 scheduled_date에 ISO 8601 형식의 시간을 넣으면 예약발송이 진행됩니다!
발송 예시
발송 예시는 SMS(단문 문자)만 제공되지만, 모든 발송 수단에서 사용할 수 있습니다!
예약 날짜가 현재 시각보다 더 과거의 시간일 경우 즉시 발송 접수가 진행됩니다.
use chrono::{Duration, Utc};
use solapi::SolapiClient;
fn main() {
// API 키와 API Secret을 설정합니다
let api_key = "YOUR_API_KEY";
let api_secret = "YOUR_API_SECRET";
let from_phone = "발신번호"; // 발신번호 (등록된 발신번호만 사용 가능)
let to_phone = "수신번호"; // 수신번호
// SOLAPI 클라이언트 생성
let client = SolapiClient::new(api_key, api_secret);
let message_service = client.message_service();
// 10분 후 발송 예약
let scheduled_time = Utc::now() + Duration::minutes(10);
let scheduled_date = scheduled_time.format("%Y-%m-%dT%H:%M:%S%.3fZ").to_string();
// 예약 발송 요청 생성
let message = solapi::message::Message::new(to_phone)
.from(from_phone)
.text("안녕하세요! SOLAPI Rust SDK를 사용한 SMS 발송 예제입니다.")
.message_type(solapi::message::MessageType::SMS);
let request = solapi::message::SendRequest {
messages: vec![message],
allow_duplicates: None,
scheduled_date: Some(scheduled_date.clone()),
show_message_list: None,
};
// 메시지를 예약합니다
println!("메시지를 예약합니다...");
println!("예약 시간: {}", scheduled_date);
println!("(약 10분 후에 발송됩니다)");
match message_service.send_blocking(request) {
Ok(response) => {
println!("\n메시지 예약 성공!");
println!("Group ID: {}", response.group_info.group_id);
println!("상태: {}", response.group_info.status);
println!("요청한 메시지 개수: {}", response.group_info.count.total);
println!("성공한 메시지 개수: {}", response.group_info.count.registered_success);
println!("실패한 메시지 개수: {}", response.group_info.count.registered_failed);
}
Err(e) => {
eprintln!("\n메시지 예약 실패!");
eprintln!("오류: {:?}", e);
}
}
}