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

메시지 발송 예제

작성일 2026.02.23 | 수정일 2026.02.26

  • 해당 예제는 PHP 7 버전 이상에서만 구동 가능합니다.

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

  • 해당 예제의 모든 코드는 namespace, use(import) 키워드가 제외되어 있습니다!

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

  • PHP 5 버전을 사용하시는 분들께서는 아래의 PHP 5 버전 예제 링크를 참고해주세요!

warning

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

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

// 예시, 다른 파라미터 생략, json 형식
{
  "from": "15771603",
  "to": "15771603"
}

SDK 샘플 코드 페이지
SOLAPI PHP SDK 예제 목록. Contribute to solapi/solapi-php-examples development by creating an account on GitHub.
PHP 5 버전 예제
Contribute to solapi/solapi-php-l5 development by creating an account on GitHub.

환경설정

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

composer require solapi/sdk

문자 발송

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

SMS(단문 문자) 발송

try {
    $messageService = new SolapiMessageService("API 키 입력", "API 시크릿 키 입력");

    $message = new Message();
    $message->setTo("수신번호")
        ->setFrom("계정에서 등록한 발신번호 입력")
        ->setText("한글 45자, 영자 90자 이하 입력되면 자동으로 SMS타입의 메시지가 발송됩니다.");

    $messageService->send($message);
} catch (MessageNotReceivedException $exception) {
    // 접수에 실패한 메시지 목록 조회
    print_r($exception->getFailedMessageList());
} catch (Exception $exception) {
    print_r($exception->getMessage());
}

장문 문자(LMS) 발송

try {
    $messageService = new SolapiMessageService("API 키 입력", "API 시크릿 키 입력");

    $message = new Message();
    $message->setTo("수신번호")
        ->setFrom("계정에서 등록한 발신번호 입력")
        ->setText("한글 45자, 영자 90자 이상 입력되면 자동으로 LMS타입의 문자메시지가 발송됩니다. 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ");

    // LMS는 문자에 제목을 지정할 수 있습니다! 필요 시 해당 주석을 해제하여 사용해보세요!
    // $message->setSubject("문자 제목 입력");

    $messageService->send($message);
} catch (MessageNotReceivedException $exception) {
    // 접수에 실패한 메시지 목록 조회
    print_r($exception->getFailedMessageList());
} catch (Exception $exception) {
    print_r($exception->getMessage());
}

사진 문자(MMS) 발송

try {
    $messageService = new SolapiMessageService("API 키 입력", "API 시크릿 키 입력");

    $imageId = $messageService->uploadFile("이미지 파일 경로");

    $message = new Message();
    $message->setTo("수신번호")
        ->setFrom("계정에서 등록한 발신번호 입력")
        ->setText("한글 45자, 영자 90자 이상 입력되면 자동으로 LMS타입의 문자메시지가 발송됩니다. 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ")
        ->setImageId($imageId);

    // MMS는 문자에 제목을 지정할 수 있습니다, 필요 시 해당 주석을 해제하여 사용해보세요!
    // $message->setSubject("문자 제목 입력");

    $messageService->send($message);
} catch (MessageNotReceivedException $exception) {
    // 접수에 실패한 메시지 목록 조회
    print_r($exception->getFailedMessageList());
} catch (Exception $exception) {
    print_r($exception->getMessage());
}

해외 문자(SMS 전용) 발송

try {
    $messageService = new SolapiMessageService("API 키 입력", "API 시크릿 키 입력");

    $message = new Message();
    $message->setTo("국제번호를 제외한 수신번호")
        ->setFrom("계정에서 등록한 발신번호 입력")
        ->setText("한글 45자, 영자 90자 이하 입력되면 자동으로 SMS 타입의 메시지가 발송됩니다.");

    // 미국 국가번호, 국가번호 뒤에 추가로 번호가 붙는 국가들은 붙여서 기입해야 합니다. 예) 1 441 -> "1441"
    $message->setCountry("1");

    $messageService->send($message);
} catch (MessageNotReceivedException $exception) {
    // 접수에 실패한 메시지 목록 조회
    print_r($exception->getFailedMessageList());
} catch (Exception $exception) {
    print_r($exception->getMessage());
}

음성 메시지 발송

try {
    $messageService = new SolapiMessageService("API 키 입력", "API 시크릿 키 입력");

    $voiceOption = new VoiceOption();
    // voiceType은 FEMALE이 기본값이며, MALE 값을 사용하실 수 있습니다.
    $voiceOption->setVoiceType("FEMALE")
        // headerMessage는 통화 시작 시, tailMessage는 통화 종료 시 안내되는 메시지입니다. (각 최대 135자)
        ->setHeaderMessage("안녕하세요. 솔라피 쇼핑몰입니다.")
        ->setTailMessage("감사합니다. 좋은 하루 되세요.")
        // replyRange는 수신자가 누를 수 있는 버튼 범위(1~9)입니다. 예: 3 -> 1~3번까지 입력 가능
        ->setReplyRange(3);
        // 상담원 연결 번호, replyRange와 병행 불가
        // $voiceOption->setCounselorNumber("01000000000");

    $message = new Message();
    $message->setTo("수신번호")
        ->setFrom("계정에서 등록한 발신번호 입력")
        ->setText("음성 메시지 본문 내용 입력")
        ->setVoiceOptions($voiceOption);

    $messageService->send($message);
} catch (MessageNotReceivedException $exception) {
    // 접수에 실패한 메시지 목록 조회
    print_r($exception->getFailedMessageList());
} catch (Exception $exception) {
    print_r($exception->getMessage());
}

카카오 알림톡/친구톡 발송

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

lightbulb

알림톡 템플릿 내 치환문구(변수)가 없을 경우 pfId, templateId만 넣어주세요!
text 파라미터를 넣어 발송 요청하실 경우 발송에 실패합니다.

알림톡 발송

try {
    $messageService = new SolapiMessageService("API 키 입력", "API 시크릿 키 입력");

    $kakaoOption = new KakaoOption();
    $kakaoOption->setPfId("연동한 비즈니스 채널의 pfId")
        ->setTemplateId("등록한 알림톡 템플릿의 ID");

    // 치환문구가 있는 경우에만 추가해주세요, 반드시 키 값은 등록하신 치환문구와 동일하게 모두 입력하셔야 합니다!
    // 또한 치환문구 상 키, 값은 모두 string 타입만 허용됩니다.
    /*$variables = [
        "#{변수명}" => "임의의 값"
    ];
    $kakaoOption->setVariables($variables);*/

    $message = new Message();
    $message->setTo("수신번호")
        ->setKakaoOptions($kakaoOption);

    // 문자 대체 발송을 희망하실 경우 계정 내에 등록하신 발신번호를 추가해주세요!
    // $message->setFrom("계정에서 등록한 발신번호 입력");

    $messageService->send($message);
} catch (MessageNotReceivedException $exception) {
    // 접수에 실패한 메시지 목록 조회
    print_r($exception->getFailedMessageList());
} catch (Exception $exception) {
    print_r($exception->getMessage());
}
try {
    $messageService = new SolapiMessageService("API 키 입력", "API 시크릿 키 입력");

    $kakaoOption = new KakaoOption();
    $kakaoOption->setPfId("연동한 비즈니스 채널의 pfId")
        ->setTemplateId("등록한 알림톡 템플릿의 ID");

    // 치환문구가 있는 경우에만 추가해주세요, 반드시 키 값은 등록하신 치환문구와 동일하게 모두 입력하셔야 합니다!
    // 또한 치환문구 상 키, 값은 모두 string 타입만 허용됩니다.
    /*$variables = [
        "#{변수명}" => "임의의 값"
    ];
    $kakaoOption->setVariables($variables);*/

    $message = new Message();
    $message->setTo("수신번호")
        ->setKakaoOptions($kakaoOption);

    // 미국 국가번호, 국가번호 뒤에 추가로 번호가 붙는 국가들은 붙여서 기입해야 합니다. 예) 1 441 -> "1441"
    $message->setCountry("1");

    // 문자 대체 발송을 희망하실 경우 계정 내에 등록하신 발신번호를 추가해주세요!
    // $message->setFrom("계정에서 등록한 발신번호 입력");

    $messageService->send($message);
} catch (MessageNotReceivedException $exception) {
    // 접수에 실패한 메시지 목록 조회
    print_r($exception->getFailedMessageList());
} catch (Exception $exception) {
    print_r($exception->getMessage());
}

친구톡 발송

친구톡에서는 버튼과 이미지를 모두 포함하여 발송하실 수 있습니다.
자세한 사항은 각각의 예제를 참고하여 연동해주세요.

error

친구톡 버튼은 최대 5개 까지만 삽입하실 수 있습니다.

try {
    $messageService = new SolapiMessageService("API 키 입력", "API 시크릿 키 입력");

    $kakaoOption = new KakaoOption();
    $kakaoOption->setPfId("연동한 비즈니스 채널의 pfId")
        ->setVariables(null);

    $message = new Message();
    $message->setTo("수신번호")
        ->setText("2,000 byte 이내의 메시지 입력")
        ->setKakaoOptions($kakaoOption);

    // 문자 대체 발송을 희망하실 경우 계정 내에 등록하신 발신번호를 추가해주세요!
    // $message->setFrom("계정에서 등록한 발신번호 입력");

    $messageService->send($message);
} catch (MessageNotReceivedException $exception) {
    // 접수에 실패한 메시지 목록 조회
    print_r($exception->getFailedMessageList());
} catch (Exception $exception) {
    print_r($exception->getMessage());
}
try {
    $messageService = new SolapiMessageService("API 키 입력", "API 시크릿 키 입력");

    // 모든 버튼의 이름은 변경할 수 있습니다!
    $kakaoOption = new KakaoOption();
    $kakaoOption->setPfId("연동한 비즈니스 채널의 pfId")
        ->setVariables(null)
        ->setButtons([
            [
                "buttonType" => "WL", // 웹링크 유형
                "buttonName" => "버튼 이름",
                "linkMo" => "https://m.example.com", // 모바일 링크
                "linkPc" => "https://example.com" // PC 링크, 생략 가능
            ],
            [
                "buttonType" => "AL", // 앱링크 유형
                "buttonName" => "버튼 이름",
                "linkAnd" => "examplescheme://", // 안드로이드 앱 링크,
                "linkIos" => "examplescheme://" // iOS 앱 링크
            ],
            [
                "buttonType" =>  "BK", // 봇키워드 유형
                "buttonName" => "봇키워드"
            ],
            [
                "buttonType" => "MD", // 상담요청하기 유형 (상담요청하기 버튼을 누르면 메시지 내용이 상담원에게 그대로 전달됩니다.)
                "buttonName" => "상담요청하기"
            ],
            [
                "buttonType" => "BT", // 챗봇 문의 유형 (채널이 챗봇을 운영할 때 챗봇 문의로 전환할 수 있습니다)
                "buttonName" => "챗봇 문의"
            ],
            /*[
                "buttonType" => "BC", // 상담톡전환 유형 (상담톡 서비스 사용 시 가능)
                "buttonName" => "상담톡 전환"
            ],*/
        ]);

    $message = new Message();
    $message->setTo("수신번호")
        ->setText("2,000 byte 이내의 메시지 입력")
        ->setKakaoOptions($kakaoOption);

    // 문자 대체 발송을 희망하실 경우 계정 내에 등록하신 발신번호를 추가해주세요!
    // $message->setFrom("계정에서 등록한 발신번호 입력");

    $messageService->send($message);
} catch (MessageNotReceivedException $exception) {
    // 접수에 실패한 메시지 목록 조회
    print_r($exception->getFailedMessageList());
} catch (Exception $exception) {
    print_r($exception->getMessage());
}
try {
    $messageService = new SolapiMessageService("API 키 입력", "API 시크릿 키 입력");

    $imageId = $messageService->uploadFile("이미지 경로", "KAKAO", "파일명", "https://example.com");

    $kakaoOption = new KakaoOption();
    $kakaoOption->setPfId("연동한 비즈니스 채널의 pfId")
        ->setVariables(null)
        ->setImageId($imageId);

    $message = new Message();
    $message->setTo("수신번호")
        ->setText("2,000 byte 이내의 메시지 입력")
        ->setKakaoOptions($kakaoOption);

    // 문자 대체 발송을 희망하실 경우 계정 내에 등록하신 발신번호를 추가해주세요!
    // $message->setFrom("계정에서 등록한 발신번호 입력");

    $messageService->send($message);
} catch (MessageNotReceivedException $exception) {
    // 접수에 실패한 메시지 목록 조회
    print_r($exception->getFailedMessageList());
} catch (Exception $exception) {
    print_r($exception->getMessage());
}

브랜드 메시지 발송

브랜드 메시지는 대체 발송을 지원하지 않습니다. 수신번호는 반드시 01012345678 형식으로 입력해주세요.

try {
    $messageService = new SolapiMessageService("API 키 입력", "API 시크릿 키 입력");

    $kakaoOption = new KakaoOption();
    $kakaoOption->setPfId("연동한 비즈니스 채널의 pfId")
        ->setTemplateId("등록한 브랜드 메시지 템플릿의 ID");

    // 치환문구가 있는 경우 추가, 반드시 키와 값은 모두 string 타입이어야 합니다.
    /*$variables = [
        "#{변수명}" => "임의의 값"
    ];
    $kakaoOption->setVariables($variables);*/

    // 발송 범위 설정, I: 채널 친구, N: 채널 친구를 제외한 마케팅 수신 동의 유저, M: 마케팅 수신 동의 유저 + 채널 친구
    // 현재 브랜드 메시지는 M, N 값의 경우 카카오 측에 인허가된 비즈니스 채널만 발송하실 수 있습니다.
    // 관련 인허가 문의는 채팅상담(https://solapi.channel.io)을 통해 진행 해 주세요!
    $kakaoBms = new KakaoBms();
    $kakaoBms->setTargeting("I");
    $kakaoOption->setBms($kakaoBms);

    $message = new Message();
    $message->setTo("수신번호")
        ->setKakaoOptions($kakaoOption);

    $messageService->send($message);
} catch (MessageNotReceivedException $exception) {
    // 접수에 실패한 메시지 목록 조회
    print_r($exception->getFailedMessageList());
} catch (Exception $exception) {
    print_r($exception->getMessage());
}

예약 발송

예약 발송은 모든 발송 수단(문자, 알림톡 등)에서 사용할 수 있는 기능입니다.
예약 발송 기능은 앞서 안내된 각 코드의 send 메소드에서 두 번째 파라미터로 날짜(string 타입 혹은 Date 타입)를 입력하면 해당 날짜로 예약 접수가 진행됩니다.

warning

예약 날짜가 현재 시각보다 더 과거의 시간일 경우 즉시 발송 접수가 진행됩니다.

발송 예시

발송 예시는 SMS(단문 문자)만 제공되지만, 모든 발송 수단에서 사용할 수 있습니다!

try {
    $messageService = new SolapiMessageService("API 키 입력", "API 시크릿 키 입력");

    $message = new Message();
    $message->setTo("수신번호")
        ->setFrom("계정에서 등록한 발신번호 입력")
        ->setText("한글 45자, 영자 90자 이하 입력되면 자동으로 SMS타입의 메시지가 발송됩니다.");

    date_default_timezone_set("Asia/Seoul");
    $dateTime = DateTime::createFromFormat("Y-m-d H:i:s", "2022-11-22 00:00:00");
    $result = $messageService->send($message, $dateTime);

    $messageService->send($message);
} catch (MessageNotReceivedException $exception) {
    // 접수에 실패한 메시지 목록 조회
    print_r($exception->getFailedMessageList());
} catch (Exception $exception) {
    print_r($exception->getMessage());
}