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