솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!솔라피 개발자 샌드박스 홈페이지입니다. 실사용은 solapi.com 으로 이동해주세요!
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)
}