솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!
SDK

메시지 발송 예제

작성일 2026.02.26 | 수정일 2026.02.26

각 발송 예시에 대한 결과 값 표시 기능은 현재 준비중에 있습니다.

해당 예제는 Rust SDK 0.1.0 버전을 기준으로 작성되었습니다.

여러 건 발송이나 더 다양한 예제를 확인해보고 싶으신 경우 SDK 샘플 코드 페이지를 확인해보세요!

warning

발송 요청을 하실 때 반드시 발신번호와 수신번호는 01012345678 형식으로 요청하셔야 합니다!

  • +, -, * 특수문자 등 삽입 불가

// 예시, 다른 파라미터 생략, json 형식
{
  "from": "15771603",
  "to": "15771603"
}
Rust SDK 샘플 코드 페이지
SOLAPI SDK for Rust. Contribute to solapi/solapi-rust development by creating an account on GitHub.

환경설정

프로젝트의 Cargo.toml 파일에 다음을 추가하거나 아래 명령어를 입력하여 SDK를 설치해보세요!

[dependencies]
solapi = "0.1.0"

또는 cargo 명령어를 사용하여 설치할 수 있습니다!

cargo add solapi

문자 발송

Rust로 문자를 발송하는 방법에 대해 안내합니다.
연동하실 코드로 이동하신 다음, 아래의 각 유형별 문자 발송예시를 참고하셔서 원하시는 유형의 문자를 발송해보세요!

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) 발송

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) 발송

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 전용) 발송

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);
        }
    }
}

음성 메시지 발송

warning

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로 알림톡/브랜드 메시지를 발송하는 방법에 대해 안내합니다.
연동하실 코드로 이동하신 다음, 아래의 각 유형별 문자 발송예시를 참고하셔서 원하시는 유형의 알림톡/브랜드 메시지를 발송해보세요!

warning

알림톡 발송은 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);
        }
    }
}

브랜드 메시지 발송

warning

브랜드 메시지는 대체 발송을 지원하지 않습니다.

수신번호는 반드시 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);
        }
    }
}