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