SDK

메시지 발송 예제

작성일 2026.02.26 | 수정일 2026.02.26

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

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

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

warning

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

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

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

환경설정

터미널에서 연동할 프로젝트의 폴더로 이동하신 다음 아래와 같은 명령어를 입력하여 SDK를 설치해보세요!

go get github.com/solapi/solapi-go/v2

문자 발송

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

SMS(단문 문자) 발송

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/solapi/solapi-go/v2/client"
	"github.com/solapi/solapi-go/v2/messages"
)

func main() {
	// API 키와 API Secret을 설정합니다
	apiKey := "YOUR_API_KEY"
	apiSecret := "YOUR_API_SECRET"
	
	// 발신번호 및 수신번호 입력 형식은 01000000000 형식으로 입력하세요.
	to := "수신번호"     // 수신번호(01000000000 형식으로 입력해주셔야 합니다! (-)제외)
	from := "발신번호"   // 발신번호 (등록된 발신번호만 사용 가능, 01000000000 형식으로 입력해주셔야 합니다! (-)제외)

	c := client.NewClient(apiKey, apiSecret)

	// 단문 메시지 구조체를 생성합니다
	msg := messages.Message{
		To:   to,
		From: from,
		Text: "안녕하세요! SOLAPI Go SDK를 사용한 SMS 발송 예제입니다.",
	}

	// 메시지를 발송합니다
	res, err := c.Messages.Send(context.Background(), msg)
	if err != nil {
		fmt.Println("메시지 발송 실패:", err)
		os.Exit(1)
	}
	
	fmt.Println("메시지 발송 성공!")
	fmt.Printf("Group ID: %s\n", res.GroupID)
	fmt.Printf("요청한 메시지 개수: %d\n", res.GroupInfo.Count.Total)
	fmt.Printf("성공한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredSuccess)
	fmt.Printf("실패한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredFailed)
}

장문 문자(LMS) 발송

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/solapi/solapi-go/v2/client"
	"github.com/solapi/solapi-go/v2/messages"
)

func main() {
	// API 키와 API Secret을 설정합니다
	apiKey := "YOUR_API_KEY"
	apiSecret := "YOUR_API_SECRET"
	
	// 발신번호 및 수신번호 입력 형식은 01000000000 형식으로 입력하세요.
	to := "수신번호"     // 수신번호(01000000000 형식으로 입력해주셔야 합니다! (-)제외)
	from := "발신번호"   // 발신번호 (등록된 발신번호만 사용 가능, 01000000000 형식으로 입력해주셔야 합니다! (-)제외)

	c := client.NewClient(apiKey, apiSecret)

	// 장문 메시지 구조체를 생성합니다
	msg := messages.Message{
		To:   to,
		From: from,
		Text: "한글 45자, 영자 90자 이상 입력되면 자동으로 LMS타입의 문자메시지가 발송됩니다. 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ",
	}

	// 메시지를 발송합니다
	res, err := c.Messages.Send(context.Background(), msg)
	if err != nil {
		fmt.Println("메시지 발송 실패:", err)
		os.Exit(1)
	}
	
	fmt.Println("메시지 발송 성공!")
	fmt.Printf("Group ID: %s\n", res.GroupID)
	fmt.Printf("요청한 메시지 개수: %d\n", res.GroupInfo.Count.Total)
	fmt.Printf("성공한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredSuccess)
	fmt.Printf("실패한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredFailed)
}

사진 문자(MMS) 발송

package main

import (
	"context"
	"encoding/base64"
	"fmt"
	"os"
	"path/filepath"

	"github.com/solapi/solapi-go/v2/client"
	"github.com/solapi/solapi-go/v2/messages"
	"github.com/solapi/solapi-go/v2/storages"
)

func mustReadAndEncode(path string) string {
	b, err := os.ReadFile(path)
	if err != nil {
		fmt.Println("파일 읽기 실패:", err)
		os.Exit(1)
	}
	return base64.StdEncoding.EncodeToString(b)
}

func main() {
	// API 키와 API Secret을 설정합니다
	apiKey := "YOUR_API_KEY"
	apiSecret := "YOUR_API_SECRET"
	
	to := "수신번호"   // 수신번호
	from := "발신번호" // 발신번호 (등록된 발신번호만 사용 가능)

	c := client.NewClient(apiKey, apiSecret)

	// 이미지 파일 경로를 설정합니다 (실제 이미지 파일 경로로 변경해주세요)
	filePath := "path/to/your/image.jpg"
	
	// 이미지 파일을 Base64로 인코딩합니다
	encoded := mustReadAndEncode(filePath)

	// 스토리지에 파일을 업로드합니다
	upReq := storages.UploadFileRequest{
		File: encoded,
		Name: filepath.Base(filePath),
		Type: "MMS",
	}
	
	upRes, err := c.Storages.Upload(context.Background(), upReq)
	if err != nil {
		fmt.Println("파일 업로드 실패:", err)
		os.Exit(1)
	}

	fmt.Println("파일 업로드 성공!")
	fmt.Printf("File ID: %s\n", upRes.FileID)

	// MMS 메시지를 생성하고 발송합니다
	msg := messages.Message{
		To:      to,
		From:    from,
		Type:    "MMS",
		Subject: "MMS 제목", // MMS 제목, 제목을 지정하지 않는다면 필요하지 않습니다.
		Text:    "MMS 메시지 내용입니다.",
		ImageID: upRes.FileID, // 업로드된 파일의 ID를 지정
	}

	// 메시지를 발송합니다
	res, err := c.Messages.Send(context.Background(), msg)
	if err != nil {
		fmt.Println("MMS 발송 실패:", err)
		os.Exit(1)
	}

	fmt.Println("MMS 발송 성공!")
	fmt.Printf("Group ID: %s\n", res.GroupID)
	fmt.Printf("요청한 메시지 개수: %d\n", res.GroupInfo.Count.Total)
	fmt.Printf("성공한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredSuccess)
}

해외 문자(SMS 전용) 발송

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/solapi/solapi-go/v2/client"
	"github.com/solapi/solapi-go/v2/messages"
)

func main() {
	// API 키와 API Secret을 설정합니다
	apiKey := "YOUR_API_KEY"
	apiSecret := "YOUR_API_SECRET"
	
	// 발신번호 및 수신번호 입력 형식은 01000000000 형식으로 입력하세요.
	to := "수신번호"     // 수신번호(01000000000 형식으로 입력해주셔야 합니다! (-)제외)
	from := "발신번호"   // 발신번호 (등록된 발신번호만 사용 가능, 01000000000 형식으로 입력해주셔야 합니다! (-)제외)

	c := client.NewClient(apiKey, apiSecret)

	// 해외 문자 메시지 구조체를 생성합니다
	msg := messages.Message{
		To:      to,
		From:    from,
		Text:    "안녕하세요! SOLAPI Go SDK를 사용한 SMS 발송 예제입니다.",
		Country: "1", // 실제 국가번호 입력, 현재 입력된 값은 미국, 한국은 82 입니다.
	}

	// 메시지를 발송합니다
	res, err := c.Messages.Send(context.Background(), msg)
	if err != nil {
		fmt.Println("메시지 발송 실패:", err)
		os.Exit(1)
	}
	
	fmt.Println("메시지 발송 성공!")
	fmt.Printf("Group ID: %s\n", res.GroupID)
	fmt.Printf("요청한 메시지 개수: %d\n", res.GroupInfo.Count.Total)
	fmt.Printf("성공한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredSuccess)
	fmt.Printf("실패한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredFailed)
}

음성 메시지 발송

warning

ReplyRange와 CounselorNumber는 동시에 사용할 수 없습니다.

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/solapi/solapi-go/v2/client"
	"github.com/solapi/solapi-go/v2/messages"
)

func main() {
	// API 키와 API Secret을 설정합니다
	apiKey := "YOUR_API_KEY"
	apiSecret := "YOUR_API_SECRET"
	
	to := "수신번호"   // 수신번호
	from := "발신번호" // 발신번호 (등록된 발신번호만 사용 가능)

	c := client.NewClient(apiKey, apiSecret)

	// 음성 메시지 구조체를 생성합니다
	msg := messages.Message{
		To:   to,
		From: from,
		Text: "안녕하세요! SOLAPI Go SDK를 사용한 음성 메시지 발송 예제입니다.",
		Type: "VOICE",
		VoiceOptions: &messages.VoiceOptions{
			// VoiceType은 FEMALE이 기본값이며, MALE 값을 사용하실 수 있습니다.
			VoiceType: "FEMALE",
			// HeaderMessage는 통화 시작 시, TailMessage는 통화 종료 시 안내되는 메시지입니다. (각 최대 135자)
			HeaderMessage: "안녕하세요!",
			TailMessage:   "감사합니다!",
			// ReplyRange는 수신자가 누를 수 있는 버튼 범위(1~9)입니다. 예: 1 -> 1번까지 입력 가능
			ReplyRange: 1,
			// 상담원 연결 번호, ReplyRange와 병행 불가
			// CounselorNumber: "01000000000", // ReplyRange와 병행 불가
		},
	}

	// 메시지를 발송합니다
	res, err := c.Messages.Send(context.Background(), msg)
	if err != nil {
		fmt.Println("메시지 발송 실패:", err)
		os.Exit(1)
	}
	
	fmt.Println("메시지 발송 성공!")
	fmt.Printf("Group ID: %s\n", res.GroupID)
	fmt.Printf("요청한 메시지 개수: %d\n", res.GroupInfo.Count.Total)
	fmt.Printf("성공한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredSuccess)
	fmt.Printf("실패한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredFailed)
}

참고: 음성 메시지 레퍼런스

카카오 알림톡/브랜드 메시지 발송

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

lightbulb

알림톡 발송은 Text 파라미터를 기입하면 발송에 실패합니다!

알림톡 발송

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/solapi/solapi-go/v2/client"
	"github.com/solapi/solapi-go/v2/messages"
)

func main() {
	// API 키와 API Secret을 설정합니다
	apiKey := "YOUR_API_KEY"
	apiSecret := "YOUR_API_SECRET"
	
	// 발신번호 및 수신번호 입력 형식은 01000000000 형식으로 입력하세요.
	to := "수신번호"   // 수신번호
	from := "발신번호" // 발신번호 (등록된 발신번호만 사용 가능)

	c := client.NewClient(apiKey, apiSecret)

	// 카카오 알림톡 메시지를 생성합니다
	msg := messages.Message{
		To:   to,
		From: from,
		KakaoOptions: &messages.KakaoOptions{
			PfID:       "계정에 등록된 카카오 비즈니스 채널ID",
			TemplateID: "계정에 등록된 카카오 알림톡 템플릿 ID",
			// 만약에 템플릿에 변수가 있다면 아래와 같이 설정합니다.
			// 값은 반드시 문자열로 넣어주셔야 합니다!
			Variables: map[string]string{
				// "#{name}": "홍길동",
				// "#{age}":  "30",
			},
		},
	}

	// 메시지를 발송합니다
	res, err := c.Messages.Send(context.Background(), msg)
	if err != nil {
		fmt.Println("메시지 발송 실패:", err)
		os.Exit(1)
	}
	
	fmt.Println("메시지 발송 성공!")
	fmt.Printf("Group ID: %s\n", res.GroupID)
	fmt.Printf("요청한 메시지 개수: %d\n", res.GroupInfo.Count.Total)
	fmt.Printf("성공한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredSuccess)
}
package main

import (
	"context"
	"fmt"
	"os"

	"github.com/solapi/solapi-go/v2/client"
	"github.com/solapi/solapi-go/v2/messages"
)

func main() {
	// API 키와 API Secret을 설정합니다
	apiKey := "YOUR_API_KEY"
	apiSecret := "YOUR_API_SECRET"
	
	// 발신번호 및 수신번호 입력 형식은 01000000000 형식으로 입력하세요.
	to := "수신번호"   // 수신번호
	from := "발신번호" // 발신번호 (등록된 발신번호만 사용 가능)

	c := client.NewClient(apiKey, apiSecret)

	// 카카오 알림톡 메시지를 생성합니다
	msg := messages.Message{
		To:   to,
		From: from,
		KakaoOptions: &messages.KakaoOptions{
			PfID:       "계정에 등록된 카카오 비즈니스 채널ID",
			TemplateID: "계정에 등록된 카카오 알림톡 템플릿 ID",
			// 만약에 템플릿에 변수가 있다면 아래와 같이 설정합니다.
			// 값은 반드시 문자열로 넣어주셔야 합니다!
			Variables: map[string]string{
				// "#{name}": "홍길동",
				// "#{age}":  "30",
			},
		},
		Country: "1", // 실제 수신자의 국가번호를 입력해주세요! 미국은 1, 대한민국은 82입니다.
	}

	// 메시지를 발송합니다
	res, err := c.Messages.Send(context.Background(), msg)
	if err != nil {
		fmt.Println("메시지 발송 실패:", err)
		os.Exit(1)
	}
	
	fmt.Println("메시지 발송 성공!")
	fmt.Printf("Group ID: %s\n", res.GroupID)
	fmt.Printf("요청한 메시지 개수: %d\n", res.GroupInfo.Count.Total)
	fmt.Printf("성공한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredSuccess)
}

브랜드 메시지 발송

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

  • 수신번호는 반드시 01012345678 형식으로 입력해주세요.

  • N, M 값은 카카오 측에 비즈니스 채널이 인허가 된 경우에만 사용할 수 있습니다!

  • 관련 인허가 문의는 채팅상담을 통해 진행 해 주세요!

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/solapi/solapi-go/v2/client"
	"github.com/solapi/solapi-go/v2/messages"
)

func main() {
	// API 키와 API Secret을 설정합니다
	apiKey := "YOUR_API_KEY"
	apiSecret := "YOUR_API_SECRET"
	
	to := "수신번호" // 수신번호

	c := client.NewClient(apiKey, apiSecret)

	// 카카오 브랜드 메시지를 생성합니다
	msg := messages.Message{
		To: to,
		KakaoOptions: &messages.KakaoOptions{
			PfID:       "계정에 등록된 카카오 비즈니스 채널ID",
			TemplateID: "계정에 등록된 브랜드 메시지 템플릿 ID",
			// 템플릿에 변수가 있다면 아래와 같이 설정합니다. (키/값 모두 문자열만 허용)
			Variables: map[string]string{
				// "#{name}": "홍길동",
				// "#{age}":  "30",
			},
			// 발송 범위 설정: I(채널 친구), N(채널 친구 제외 마케팅 수신 동의 유저), M(마케팅 수신 동의 유저 + 채널 친구)
			// N, M 값은 카카오 측에서 비즈니스 채널이 인허가 된 경우에만 사용할 수 있습니다!
			// 관련 인허가 문의는 채팅상담(https://solapi.channel.io)을 통해 진행 해 주세요!
			BmsOptions: &messages.BmsOptions{
				Targeting: "I",
			},
		},
	}

	// 메시지를 발송합니다
	res, err := c.Messages.Send(context.Background(), msg)
	if err != nil {
		fmt.Println("메시지 발송 실패:", err)
		os.Exit(1)
	}
	
	fmt.Println("메시지 발송 성공!")
	fmt.Printf("Group ID: %s\n", res.GroupID)
	fmt.Printf("요청한 메시지 개수: %d\n", res.GroupInfo.Count.Total)
	fmt.Printf("성공한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredSuccess)
}

예약 발송

예약 발송은 모든 발송 수단(문자, 알림톡 등)에서 사용할 수 있는 기능입니다.
예약 발송은 SendOptions의 ScheduledDate에 RFC3339 형식의 시간을 넣으면 예약발송이 진행됩니다!

발송 예시

발송 예시는 SMS(단문 문자)만 제공되지만, 모든 발송 수단에서 사용할 수 있습니다!
예약 날짜가 현재 시각보다 더 과거의 시간일 경우 즉시 발송 접수가 진행됩니다.

package main

import (
	"context"
	"fmt"
	"os"
	"time"

	"github.com/solapi/solapi-go/v2/client"
	"github.com/solapi/solapi-go/v2/messages"
)

func main() {
	// API 키와 API Secret을 설정합니다
	apiKey := "YOUR_API_KEY"
	apiSecret := "YOUR_API_SECRET"
	
	to := "수신번호"   // 수신번호
	from := "발신번호" // 발신번호 (등록된 발신번호만 사용 가능)

	c := client.NewClient(apiKey, apiSecret)

	// 단문 메시지 구조체를 생성합니다
	msg := messages.Message{
		To:   to,
		From: from,
		Text: "안녕하세요! SOLAPI Go SDK를 사용한 SMS 발송 예제입니다.",
	}

	// 예약 발송을 위한 시간을 설정합니다 (10분 후 발송)
	scheduledAt := time.Now().UTC().Add(10 * time.Minute).Format(time.RFC3339)
	
	// 예약 발송 옵션을 설정합니다
	showMessageList := true
	sendOptions := messages.SendOptions{
		ScheduledDate:   scheduledAt,
		ShowMessageList: &showMessageList,
	}

	// 메시지를 예약 발송합니다
	res, err := c.Messages.Send(context.Background(), msg, sendOptions)
	if err != nil {
		fmt.Println("메시지 발송 실패:", err)
		os.Exit(1)
	}
	
	fmt.Println("메시지 발송 성공!")
	fmt.Printf("Group ID: %s\n", res.GroupID)
	fmt.Printf("요청한 메시지 개수: %d\n", res.GroupInfo.Count.Total)
	fmt.Printf("성공한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredSuccess)
	fmt.Printf("실패한 메시지 개수: %d\n", res.GroupInfo.Count.RegisteredFailed)
}