{"id":43336044,"url":"https://github.com/solapi/solapi-kotlin","last_synced_at":"2026-02-02T00:36:27.236Z","repository":{"id":310760407,"uuid":"1037730747","full_name":"solapi/solapi-kotlin","owner":"solapi","description":"SOLAPI SDK for Kotlin(Includes Java)","archived":false,"fork":false,"pushed_at":"2025-09-11T03:19:32.000Z","size":157,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-11T06:54:35.220Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://solapi.github.io/solapi-kotlin","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/solapi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-14T03:19:09.000Z","updated_at":"2025-09-11T03:19:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"4583d7a5-3e0c-44e0-878b-e8d92dc3bcc6","html_url":"https://github.com/solapi/solapi-kotlin","commit_stats":null,"previous_names":["solapi/solapi-kotlin"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/solapi/solapi-kotlin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solapi%2Fsolapi-kotlin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solapi%2Fsolapi-kotlin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solapi%2Fsolapi-kotlin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solapi%2Fsolapi-kotlin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/solapi","download_url":"https://codeload.github.com/solapi/solapi-kotlin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solapi%2Fsolapi-kotlin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28997081,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T23:10:54.274Z","status":"ssl_error","status_checked_at":"2026-02-01T23:10:47.298Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-02T00:36:26.307Z","updated_at":"2026-02-02T00:36:27.201Z","avatar_url":"https://github.com/solapi.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SOLAPI Kotlin/Java SDK\n\n[![Maven Central](https://img.shields.io/maven-central/v/com.solapi/sdk)](https://central.sonatype.com/artifact/com.solapi/sdk)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nKotlin과 Java에서 SOLAPI 메시지 발송 서비스를 사용할 수 있는 공식 SDK입니다.\n\n## AI와 함께 시작하기\n\n### 사람이 읽을 가이드:\nClaude Code, Cursor, Windsurf 등 AI 코딩 도구에 아래 프롬프트를 붙여넣기하세요:\n\n```text\nImplement messaging feature using SOLAPI SDK.\nGuide: https://raw.githubusercontent.com/solapi/solapi-kotlin/main/LLM_GUIDE.md\n```\n\n### LLM 에이전트를 위한 가이드:\nSDK 가이드를 가져온 후 LLM 가이드를 따르세요.\n\n```bash\ncurl -s https://raw.githubusercontent.com/solapi/solapi-kotlin/main/LLM_GUIDE.md\n```\n\n| 상황 | 프롬프트 |\n|------|----------|\n| SMS/MMS 발송 | \"SOLAPI SDK로 SMS 발송 코드 작성해줘\" |\n| 카카오 알림톡 | \"SOLAPI SDK로 카카오 알림톡 발송 구현해줘\" |\n| 대량 발송 | \"SOLAPI SDK로 대량 문자 발송 기능 추가해줘\" |\n| 예약 발송 | \"SOLAPI SDK로 예약 발송 구현해줘\" |\n| 발송 조회 | \"SOLAPI SDK로 발송 결과 조회 코드 작성해줘\" |\n\n## 설치\n\n### Gradle (Kotlin DSL)\n\n```kotlin\ndependencies {\n    implementation(\"com.solapi:sdk:1.1.0\")\n}\n```\n\n### Gradle (Groovy)\n\n```groovy\ndependencies {\n    implementation 'com.solapi:sdk:1.1.0'\n}\n```\n\n### Maven\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.solapi\u003c/groupId\u003e\n    \u003cartifactId\u003esdk\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## 빠른 시작\n\n### Java\n\n```java\nimport com.solapi.sdk.SolapiClient;\nimport com.solapi.sdk.message.dto.response.MultipleDetailMessageSentResponse;\nimport com.solapi.sdk.message.model.Message;\nimport com.solapi.sdk.message.service.DefaultMessageService;\n\npublic class Main {\n    public static void main(String[] args) {\n        DefaultMessageService messageService = SolapiClient.INSTANCE.createInstance(\"API_KEY\", \"API_SECRET\");\n\n        Message message = new Message();\n        message.setFrom(\"발신번호\");\n        message.setTo(\"수신번호\");\n        message.setText(\"안녕하세요. SOLAPI SDK 테스트입니다.\");\n\n        MultipleDetailMessageSentResponse response = messageService.send(message, null);\n        System.out.println(\"Group ID: \" + response.getGroupInfo().getGroupId());\n    }\n}\n```\n\n### Kotlin\n\n```kotlin\nimport com.solapi.sdk.SolapiClient\nimport com.solapi.sdk.message.model.Message\n\nfun main() {\n    val messageService = SolapiClient.createInstance(\"API_KEY\", \"API_SECRET\")\n\n    val message = Message(\n        from = \"발신번호\",\n        to = \"수신번호\",\n        text = \"안녕하세요. SOLAPI SDK 테스트입니다.\"\n    )\n\n    val response = messageService.send(message)\n    println(\"Group ID: ${response.groupInfo?.groupId}\")\n}\n```\n\n## 예제 실행\n\n### 환경변수 설정\n\n| 환경변수 | 설명 |       필수        |\n|----------|------|:---------------:|\n| `SOLAPI_API_KEY` | SOLAPI API 키 |        O        |\n| `SOLAPI_API_SECRET` | SOLAPI API 시크릿 |        O        |\n| `SOLAPI_SENDER` | 등록된 발신번호 |        O        |\n| `SOLAPI_RECIPIENT` | 수신번호 |        O        |\n| `SOLAPI_KAKAO_PF_ID` | 카카오 비즈니스 채널 ID | 카카오 계열 메시지 발송 시 |\n| `SOLAPI_KAKAO_TEMPLATE_ID` | 카카오 알림톡 템플릿 ID |    알림톡 발송 시     |\n\n### 실행 명령어\n\n```bash\n# Java 예제 실행\n./gradlew :solapi-kotlin-example-java:run -Pexample=SendSms\n\n# Kotlin 예제 실행\n./gradlew :solapi-kotlin-example-kotlin:run -Pexample=SendSms\n```\n\n### JDK 8 사용자 안내\n\n**SDK 사용 시**: 본 SDK는 JDK 8 이상에서 정상 동작합니다. Maven Central에서 의존성을 추가하면 JDK 8 환경에서 바로 사용 가능합니다.\n\n**예제 실행 시**: 이 저장소의 예제를 직접 실행하려면 Gradle 9.x가 필요하며, 이는 **JDK 21 이상**을 요구합니다.\n\nJDK 8만 설치된 환경에서 예제를 실행하려면:\n\n#### 방법 1: 별도의 JDK 21+ 설치 (권장)\n\nGradle Toolchain이 자동으로 JDK 8을 다운로드하여 예제를 컴파일합니다. Gradle 실행용으로만 JDK 21 이상이 필요합니다.\n\n```bash\n# macOS (Homebrew)\nbrew install openjdk@21\n\n# Ubuntu/Debian\nsudo apt install openjdk-21-jdk\n\n# SDKMAN (권장)\nsdk install java 21.0.2-tem\n```\n\n#### 방법 2: 자신의 프로젝트에서 직접 테스트\n\nJDK 8 환경의 자체 프로젝트에서 SDK를 추가하고 테스트할 수 있습니다:\n\n```java\n// build.gradle (Groovy)\nplugins {\n    id 'java'\n}\n\njava {\n    sourceCompatibility = JavaVersion.VERSION_1_8\n    targetCompatibility = JavaVersion.VERSION_1_8\n}\n\ndependencies {\n    implementation 'com.solapi:sdk:1.1.0'\n}\n```\n\n```java\n// src/main/java/MyTest.java\nimport com.solapi.sdk.SolapiClient;\nimport com.solapi.sdk.message.model.Message;\nimport com.solapi.sdk.message.service.DefaultMessageService;\n\npublic class MyTest {\n    public static void main(String[] args) {\n        DefaultMessageService messageService = SolapiClient.INSTANCE.createInstance(\n            \"YOUR_API_KEY\",\n            \"YOUR_API_SECRET\"\n        );\n\n        Message message = new Message();\n        message.setFrom(\"발신번호\");\n        message.setTo(\"수신번호\");\n        message.setText(\"테스트 메시지\");\n\n        messageService.send(message, null);\n    }\n}\n```\n\n\u003e **참고**: Gradle 7.x (JDK 11+) 또는 Gradle 6.x (JDK 8+)를 사용하는 프로젝트에서는 위 설정으로 바로 사용 가능합니다.\n\n### 예제 목록\n\n| 예제 | 설명 |\n|------|------|\n| `SendSms` | SMS 단건 발송 |\n| `SendMms` | MMS 이미지 첨부 발송 |\n| `SendBatch` | 대량 메시지 발송 |\n| `SendScheduled` | 예약 발송 |\n| `SendVoice` | 음성 메시지 발송 |\n| `KakaoAlimtalk` | 카카오 알림톡 발송 |\n| `KakaoBrandMessage` | 카카오 브랜드 메시지 발송 |\n| `GetBalance` | 잔액 조회 |\n| `GetMessageList` | 발송 내역 조회 |\n\n## 지원 메시지 타입\n\n| 타입 | 설명                              |\n|------|---------------------------------|\n| `SMS` | 단문문자 (80 byte 미만)               |\n| `LMS` | 장문문자 (80 byte 이상, 2,000 byte 미만) |\n| `MMS` | 이미지 포함 문자 (200KB 이내 이미지 1장)     |\n| `ATA` | 카카오 알림톡                         |\n| `BMS_*` | 카카오 브랜드 메시지 (템플릿, 자유형)          |\n| `RCS_*` | RCS 문자 (SMS, LMS, MMS, TPL)     |\n| `NSA` | 네이버 스마트 알림                      |\n| `FAX` | 팩스                              |\n| `VOICE` | 음성 메시지                          |\n\n## 주요 기능\n\n### MMS 이미지 첨부 발송\n\n**Java:**\n```java\n// 이미지 업로드\nString imageId = messageService.uploadFile(imageFile, StorageType.MMS, null);\n\n// MMS 메시지 생성 및 발송\nMessage message = new Message();\nmessage.setType(MessageType.MMS);\nmessage.setFrom(\"발신번호\");\nmessage.setTo(\"수신번호\");\nmessage.setText(\"MMS 메시지 내용\");\nmessage.setSubject(\"MMS 제목\");\nmessage.setImageId(imageId);\nmessageService.send(message, null);\n```\n\n**이미지 규격:** JPG/JPEG, 최대 200KB, 권장 해상도 1000x1000 이하\n\n### 대량 메시지 발송\n\n**Java:**\n```java\nList\u003cMessage\u003e messages = new ArrayList\u003c\u003e();\nfor (int i = 1; i \u003c= 100; i++) {\n    Message msg = new Message();\n    msg.setFrom(sender);\n    msg.setTo(\"010XXXX000\" + i);\n    msg.setText(\"메시지 \" + i);\n    messages.add(msg);\n}\n\n// 중복 수신번호 허용 옵션\nSendRequestConfig config = new SendRequestConfig();\nconfig.setAllowDuplicates(true);\nmessageService.send(messages, config);\n```\n\n- 한 번에 최대 **10,000건** 발송 가능\n- `allowDuplicates = true`로 동일 수신번호 중복 발송 허용\n\n### 예약 발송\n\n**Java:**\n```java\nSendRequestConfig config = new SendRequestConfig();\nconfig.setScheduledDateFromLocalDateTime(\n    LocalDateTime.now().plusMinutes(10),\n    ZoneId.of(\"Asia/Seoul\")\n);\nmessageService.send(message, config);\n```\n\n- 최소 **10분 후**부터 최대 **6개월 이내** 예약 가능\n- 과거 시간 지정 시 즉시 발송 처리\n\n### 카카오 알림톡\n\n**Java:**\n```java\nMap\u003cString, String\u003e variables = new HashMap\u003c\u003e();\nvariables.put(\"name\", \"홍길동\");\nvariables.put(\"code\", \"123456\");\n\nKakaoOption kakaoOption = new KakaoOption();\nkakaoOption.setPfId(\"카카오채널ID\");\nkakaoOption.setTemplateId(\"템플릿ID\");\nkakaoOption.setVariables(variables);\n\nMessage message = new Message();\nmessage.setType(MessageType.ATA);\nmessage.setFrom(\"발신번호\");\nmessage.setTo(\"수신번호\");\nmessage.setKakaoOptions(kakaoOption);\nmessageService.send(message, null);\n```\n\n- 검수 승인된 템플릿만 사용 가능\n- 정보성 메시지 전용 (광고 불가)\n\n## API 레퍼런스\n\n### 메시지 발송\n\n| 메서드 | 설명 |\n|--------|------|\n| `send(message)` | 단건 메시지 발송 |\n| `send(messages)` | 다건 메시지 발송 (최대 10,000건) |\n| `send(message, config)` | 설정과 함께 발송 (예약, 중복 허용 등) |\n| `uploadFile(file, type)` | 파일 업로드 (MMS, FAX 등) |\n\n### 조회\n\n| 메서드 | 설명 |\n|--------|------|\n| `getBalance()` | 잔액 조회 |\n| `getQuota()` | 일일 발송량 한도 조회 |\n| `getMessageList(request)` | 메시지 발송 내역 조회 |\n\n### 카카오 템플릿 관리\n\n| 메서드 | 설명 |\n|--------|------|\n| `getKakaoAlimtalkTemplates()` | 알림톡 템플릿 목록 조회 |\n| `getKakaoAlimtalkTemplate(id)` | 알림톡 템플릿 상세 조회 |\n| `createKakaoAlimtalkTemplate(request)` | 알림톡 템플릿 생성 |\n| `getSendableKakaoAlimtalkTemplates()` | 발송 가능한 템플릿 조회 |\n| `getKakaoBrandMessageTemplates()` | 브랜드 메시지 템플릿 조회 |\n\n## 에러 처리\n\n```java\ntry {\n    messageService.send(message, null);\n} catch (SolapiBadRequestException e) {\n    System.out.println(\"잘못된 요청: \" + e.getMessage());\n} catch (SolapiInvalidApiKeyException e) {\n    System.out.println(\"잘못된 API 키: \" + e.getMessage());\n} catch (SolapiMessageNotReceivedException e) {\n    System.out.println(\"발송 실패: \" + e.getMessage());\n} catch (SolapiException e) {\n    System.out.println(\"기타 오류: \" + e.getMessage());\n}\n```\n\n| 예외 클래스 | 설명 |\n|-------------|------|\n| `SolapiBadRequestException` | 잘못된 요청 파라미터 |\n| `SolapiInvalidApiKeyException` | 유효하지 않은 API 키 |\n| `SolapiApiKeyException` | API 키 관련 오류 |\n| `SolapiFileUploadException` | 파일 업로드 실패 |\n| `SolapiMessageNotReceivedException` | 메시지 수신 실패 |\n| `SolapiEmptyResponseException` | 빈 응답 수신 |\n| `SolapiUnknownException` | 알 수 없는 오류 |\n\n## 요구 사항\n\n- **Java 8** 이상\n- **Kotlin 2.2.0** 이상 (Kotlin 사용 시)\n\n## 관련 링크\n\n- [SOLAPI 개발연동 문서](https://developers.solapi.com)\n- [API 키 발급](https://console.solapi.com/credentials)\n- [발신번호 등록](https://console.solapi.com/senderids)\n- [API Reference (Dokka)](https://solapi.github.io/solapi-kotlin/)\n\n## 라이선스\n\nMIT License - 자세한 내용은 [LICENSE](LICENSE) 파일을 참조하세요.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolapi%2Fsolapi-kotlin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolapi%2Fsolapi-kotlin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolapi%2Fsolapi-kotlin/lists"}