sendgo-rails 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +314 -0
- data/lib/generators/sendgo/install_generator.rb +19 -0
- data/lib/generators/sendgo/templates/sendgo.rb.tt +28 -0
- data/lib/sendgo/rails/railtie.rb +22 -0
- data/lib/sendgo/rails/version.rb +6 -0
- data/lib/sendgo/rails.rb +64 -0
- data/lib/sendgo-rails.rb +2 -0
- metadata +82 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: e73a3c170a66bdaca233e405ceef78237fe56357c8a415b8cdc49b0506ffd2f1
|
|
4
|
+
data.tar.gz: bfe33dd39c516c9fbcf2e26e8d922b859b58e0140d841ab0acec31fe3062fde1
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: bd42ac8a99571798fc3c693d749c15a7a1e3d46e19a809abb983a93d5f62907b321168f833c3b0bd242ab06f93e04f1671171c7132f3110b62ff4e1b1f0c57db
|
|
7
|
+
data.tar.gz: 4f1503f7bc241dffa113c19cdfc87990e67ed868521547568f457a43e681111920238254a65fd6e65a049a5202ac2ad04f7c8ef5bd45e6d1bd38d122dd67ce76
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Sendgo <dev@sendgo.io>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
# sendgo-rails
|
|
2
|
+
|
|
3
|
+
> **Rails에서 카카오 알림톡, 친구톡, SMS를 가장 쉽게 발송하는 공식 Rails 확장 젬**
|
|
4
|
+
|
|
5
|
+
[](https://rubygems.org/gems/sendgo-rails)
|
|
6
|
+
[](https://rubyonrails.org)
|
|
7
|
+
[](https://ruby-lang.org)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
|
|
10
|
+
`sendgo-rails`는 [`sendgo`](https://github.com/send-go/ruby) 코어 젬을 확장한 **Rails 전용 확장 젬**입니다.
|
|
11
|
+
Railtie 자동 등록, `config.sendgo` 설정 바인딩, 초기화 파일 제너레이터, 메모이즈된 클라이언트를 제공합니다.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 목차
|
|
16
|
+
|
|
17
|
+
- [설치](#설치)
|
|
18
|
+
- [빠른 시작](#빠른-시작)
|
|
19
|
+
- [상세 사용법](#상세-사용법)
|
|
20
|
+
- [알림톡](#알림톡)
|
|
21
|
+
- [친구톡](#친구톡)
|
|
22
|
+
- [SMS / LMS / MMS](#sms--lms--mms)
|
|
23
|
+
- [Active Job 비동기 발송](#active-job-비동기-발송)
|
|
24
|
+
- [예외 처리](#예외-처리)
|
|
25
|
+
- [설정 옵션](#설정-옵션)
|
|
26
|
+
- [자주 묻는 질문 (FAQ)](#자주-묻는-질문-faq)
|
|
27
|
+
- [관련 패키지](#관련-패키지)
|
|
28
|
+
- [라이선스](#라이선스)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 설치
|
|
33
|
+
|
|
34
|
+
Gemfile에 추가합니다.
|
|
35
|
+
|
|
36
|
+
```ruby
|
|
37
|
+
gem "sendgo-rails", "~> 1.0"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
그리고 설치합니다.
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
bundle install
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 빠른 시작
|
|
49
|
+
|
|
50
|
+
### 1단계 — 초기화 파일 생성
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
bin/rails g sendgo:install
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`config/initializers/sendgo.rb` 파일이 생성됩니다.
|
|
57
|
+
|
|
58
|
+
### 2단계 — 환경변수 설정 (`.env` 또는 배포 환경)
|
|
59
|
+
|
|
60
|
+
```env
|
|
61
|
+
SENDGO_ACCESS_KEY=your_access_key
|
|
62
|
+
SENDGO_SECRET_KEY=your_secret_key
|
|
63
|
+
SENDGO_KAKAO_SENDER_KEY=your_kakao_key
|
|
64
|
+
SENDGO_SMS_SENDER_KEY=your_sms_key
|
|
65
|
+
SENDGO_API_VERSION=v2
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 3단계 — 초기화 파일 확인 (`config/initializers/sendgo.rb`)
|
|
69
|
+
|
|
70
|
+
```ruby
|
|
71
|
+
Rails.application.config.sendgo.tap do |config|
|
|
72
|
+
config.access_key = ENV["SENDGO_ACCESS_KEY"]
|
|
73
|
+
config.secret_key = ENV["SENDGO_SECRET_KEY"]
|
|
74
|
+
config.kakao_sender_key = ENV["SENDGO_KAKAO_SENDER_KEY"]
|
|
75
|
+
config.sms_sender_key = ENV["SENDGO_SMS_SENDER_KEY"]
|
|
76
|
+
config.api_version = ENV.fetch("SENDGO_API_VERSION", "v2")
|
|
77
|
+
config.url = ENV.fetch("SENDGO_URL", "https://sendgo.io")
|
|
78
|
+
end
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
> 설정값을 지정하지 않으면 동일한 이름의 ENV 환경변수로 자동 폴백합니다.
|
|
82
|
+
> 즉, 초기화 파일 없이 환경변수만으로도 동작합니다.
|
|
83
|
+
|
|
84
|
+
### 4단계 — 컨트롤러에서 알림톡 발송
|
|
85
|
+
|
|
86
|
+
```ruby
|
|
87
|
+
class OrdersController < ApplicationController
|
|
88
|
+
def confirm
|
|
89
|
+
order = Order.find(params[:id])
|
|
90
|
+
|
|
91
|
+
Sendgo::Rails.client.alimtalk.send(
|
|
92
|
+
template_code: "ORDER_CONFIRM_001",
|
|
93
|
+
contacts: [
|
|
94
|
+
{ contact: order.user.phone, name: order.user.name,
|
|
95
|
+
var1: order.number, var2: "#{order.total}원" }
|
|
96
|
+
]
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
render json: { success: true }
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 상세 사용법
|
|
107
|
+
|
|
108
|
+
`Sendgo::Rails.client`는 코어 `Sendgo::Client` 인스턴스를 메모이즈하여 반환합니다.
|
|
109
|
+
`.alimtalk`, `.friendtalk`, `.sms` 서비스를 그대로 사용할 수 있습니다.
|
|
110
|
+
|
|
111
|
+
### 알림톡
|
|
112
|
+
|
|
113
|
+
```ruby
|
|
114
|
+
# 다건 발송
|
|
115
|
+
Sendgo::Rails.client.alimtalk.send(
|
|
116
|
+
template_code: "ORDER_CONFIRM_001",
|
|
117
|
+
contacts: [
|
|
118
|
+
{ contact: "01011111111", name: "홍길동", var1: "ORD-001", var2: "29,000원" },
|
|
119
|
+
{ contact: "01022222222", name: "김철수", var1: "ORD-002", var2: "15,000원" },
|
|
120
|
+
{ contact: "01033333333", name: "이영희", var1: "ORD-003", var2: "52,000원" }
|
|
121
|
+
]
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
# 예약 발송
|
|
125
|
+
Sendgo::Rails.client.alimtalk.send(
|
|
126
|
+
template_code: "PROMO_SUMMER_2026",
|
|
127
|
+
schedule_type: "SCHEDULED",
|
|
128
|
+
at: "2026-07-28 09:00:00",
|
|
129
|
+
contacts: [{ contact: "01012345678", var1: "여름 한정 50% 할인" }]
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
# SMS 자동 대체 발송
|
|
133
|
+
Sendgo::Rails.client.alimtalk.send(
|
|
134
|
+
template_code: "DELIVERY_START_001",
|
|
135
|
+
replace_sms: "Y",
|
|
136
|
+
sms_subject: "[배송 시작 안내]",
|
|
137
|
+
sms_content: "주문하신 상품이 출고되었습니다.",
|
|
138
|
+
contacts: [{ contact: "01012345678", var1: "ORD-001", var2: "1234567890" }]
|
|
139
|
+
)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 친구톡
|
|
143
|
+
|
|
144
|
+
```ruby
|
|
145
|
+
# 텍스트형
|
|
146
|
+
Sendgo::Rails.client.friendtalk.send(
|
|
147
|
+
content: "안녕하세요! 7월 한정 특가 이벤트를 확인해보세요.",
|
|
148
|
+
contacts: [{ contact: "01012345678" }]
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
# 이미지형
|
|
152
|
+
Sendgo::Rails.client.friendtalk.send(
|
|
153
|
+
message_type: "FI",
|
|
154
|
+
content: "이번 주 특가 상품을 확인하세요!",
|
|
155
|
+
image_url: "https://cdn.example.com/banner.jpg",
|
|
156
|
+
image_link: "https://example.com/event",
|
|
157
|
+
contacts: [{ contact: "01012345678" }]
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
# 버튼 포함
|
|
161
|
+
Sendgo::Rails.client.friendtalk.send(
|
|
162
|
+
content: "7월 쿠폰이 도착했습니다! 지금 바로 사용하세요.",
|
|
163
|
+
buttons: [{ name: "쿠폰 받기", type: "WL", link_mo: "https://example.com/coupon" }],
|
|
164
|
+
contacts: [{ contact: "01012345678" }]
|
|
165
|
+
)
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### SMS / LMS / MMS
|
|
169
|
+
|
|
170
|
+
```ruby
|
|
171
|
+
# SMS (90자 이하)
|
|
172
|
+
Sendgo::Rails.client.sms.send_sms(
|
|
173
|
+
content: "[Sendgo] 인증번호: 123456 (5분 이내 입력)",
|
|
174
|
+
contacts: [{ contact: "01012345678" }]
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
# LMS (장문, 2,000자 이하)
|
|
178
|
+
Sendgo::Rails.client.sms.send_lms(
|
|
179
|
+
subject: "[중요] 서비스 점검 안내",
|
|
180
|
+
content: "안녕하세요. 서비스 점검이 예정되어 있습니다.\n■ 일시: 2026-07-25 02:00 ~ 06:00",
|
|
181
|
+
contacts: [{ contact: "01012345678" }]
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
# MMS (이미지 포함)
|
|
185
|
+
Sendgo::Rails.client.sms.send_mms(
|
|
186
|
+
subject: "[이벤트] 7월 특가",
|
|
187
|
+
content: "이번 달 특가 상품을 확인하세요!",
|
|
188
|
+
contacts: [{ contact: "01011111111" }, { contact: "01022222222" }]
|
|
189
|
+
)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Active Job 비동기 발송
|
|
195
|
+
|
|
196
|
+
발송은 외부 API 호출이므로 백그라운드 잡으로 처리하는 것을 권장합니다.
|
|
197
|
+
|
|
198
|
+
```ruby
|
|
199
|
+
# app/jobs/send_alimtalk_job.rb
|
|
200
|
+
class SendAlimtalkJob < ApplicationJob
|
|
201
|
+
queue_as :notifications
|
|
202
|
+
retry_on Sendgo::Error, wait: 10.seconds, attempts: 3
|
|
203
|
+
|
|
204
|
+
def perform(template_code, contacts)
|
|
205
|
+
Sendgo::Rails.client.alimtalk.send(
|
|
206
|
+
template_code: template_code,
|
|
207
|
+
contacts: contacts
|
|
208
|
+
)
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# 디스패치 예시
|
|
213
|
+
SendAlimtalkJob.perform_later("ORDER_CONFIRM_001", [
|
|
214
|
+
{ contact: "01012345678", var1: "ORD-001" }
|
|
215
|
+
])
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
서비스 클래스 패턴도 자연스럽게 사용할 수 있습니다.
|
|
219
|
+
|
|
220
|
+
```ruby
|
|
221
|
+
# app/services/notification_service.rb
|
|
222
|
+
class NotificationService
|
|
223
|
+
def initialize(client = Sendgo::Rails.client)
|
|
224
|
+
@client = client
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def send_order_confirm(phone:, order_no:, amount:)
|
|
228
|
+
@client.alimtalk.send(
|
|
229
|
+
template_code: "ORDER_CONFIRM_001",
|
|
230
|
+
contacts: [{ contact: phone, var1: order_no, var2: amount }]
|
|
231
|
+
)
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## 예외 처리
|
|
239
|
+
|
|
240
|
+
```ruby
|
|
241
|
+
begin
|
|
242
|
+
Sendgo::Rails.client.alimtalk.send(template_code: "ORDER_CONFIRM_001", contacts: [...])
|
|
243
|
+
rescue Sendgo::Error => e
|
|
244
|
+
Rails.logger.error "Sendgo 발송 실패: HTTP #{e.status_code} [#{e.error_code}]"
|
|
245
|
+
|
|
246
|
+
case e.error_code
|
|
247
|
+
when "INVALID_ACCESS_KEY", "INVALID_SECRET_KEY"
|
|
248
|
+
alert_ops("Sendgo 인증키를 확인하세요.")
|
|
249
|
+
when "INVALID_TEMPLATE_CODE"
|
|
250
|
+
Rails.logger.warn("존재하지 않는 템플릿: #{e.message}")
|
|
251
|
+
when "PAYMENT_REQUIRED"
|
|
252
|
+
alert_ops("Sendgo 크레딧이 부족합니다.")
|
|
253
|
+
when "IP_NOT_ALLOWED"
|
|
254
|
+
alert_ops("허용되지 않은 IP")
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## 설정 옵션
|
|
262
|
+
|
|
263
|
+
`config/initializers/sendgo.rb`에서 `Rails.application.config.sendgo`로 설정합니다.
|
|
264
|
+
각 값이 비어 있으면 동일 이름의 환경변수로 폴백합니다.
|
|
265
|
+
|
|
266
|
+
| 키 | 환경변수 | 기본값 | 설명 |
|
|
267
|
+
|----|---------|--------|------|
|
|
268
|
+
| `access_key` | `SENDGO_ACCESS_KEY` | — | Sendgo 액세스 키 |
|
|
269
|
+
| `secret_key` | `SENDGO_SECRET_KEY` | — | Sendgo 시크릿 키 |
|
|
270
|
+
| `kakao_sender_key` | `SENDGO_KAKAO_SENDER_KEY` | `nil` | 카카오 발신프로필 키 |
|
|
271
|
+
| `sms_sender_key` | `SENDGO_SMS_SENDER_KEY` | `nil` | SMS 발신자 키 |
|
|
272
|
+
| `api_version` | `SENDGO_API_VERSION` | `"v2"` | API 버전 |
|
|
273
|
+
| `url` | `SENDGO_URL` | `"https://sendgo.io"` | API 기본 URL |
|
|
274
|
+
|
|
275
|
+
> 테스트에서 설정을 바꾼 뒤에는 `Sendgo::Rails.reset!`을 호출해 메모이즈된 클라이언트를 초기화하세요.
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 자주 묻는 질문 (FAQ)
|
|
280
|
+
|
|
281
|
+
**Q. `sendgo`(코어 젬)와의 차이는 무엇인가요?**
|
|
282
|
+
A. `sendgo`는 프레임워크 독립적인 순수 Ruby 코어 젬입니다. `sendgo-rails`는 이를 확장해 Railtie 자동 등록, `config.sendgo` 설정 바인딩, 초기화 제너레이터, 메모이즈된 `Sendgo::Rails.client`를 추가합니다.
|
|
283
|
+
|
|
284
|
+
**Q. 어떤 Rails 버전을 지원하나요?**
|
|
285
|
+
A. `railties >= 6.1`을 지원합니다. (Rails 6.1, 7.x 이상)
|
|
286
|
+
|
|
287
|
+
**Q. 초기화 파일 없이 환경변수만으로 쓸 수 있나요?**
|
|
288
|
+
A. 네. 설정값이 없으면 `SENDGO_*` 환경변수로 자동 폴백하므로 `bin/rails g sendgo:install` 없이도 동작합니다.
|
|
289
|
+
|
|
290
|
+
**Q. 테스트 시 클라이언트를 초기화하려면?**
|
|
291
|
+
A. `Sendgo::Rails.reset!`을 호출하면 메모이즈된 클라이언트가 초기화되어 다음 호출 시 다시 생성됩니다.
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## 관련 패키지
|
|
296
|
+
|
|
297
|
+
| 언어/프레임워크 | 패키지 | GitHub |
|
|
298
|
+
|----------------|--------|--------|
|
|
299
|
+
| Ruby (코어) | `sendgo` | [ruby](https://github.com/send-go/ruby) |
|
|
300
|
+
| PHP (Laravel) | `sendgo/laravel` | [laravel](https://github.com/send-go/laravel) |
|
|
301
|
+
| Spring Boot | `io.sendgo:sendgo-spring` | [spring](https://github.com/send-go/spring) |
|
|
302
|
+
| Node.js | `@sendgo/node` | [node](https://github.com/send-go/node) |
|
|
303
|
+
| Python | `sendgo-python` | [python](https://github.com/send-go/python) |
|
|
304
|
+
| 전체 목록 | — | [send-go GitHub 조직](https://github.com/send-go) |
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## 라이선스
|
|
309
|
+
|
|
310
|
+
MIT License © 2026 [Sendgo](https://sendgo.io)
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
*키워드: 카카오 알림톡 Rails, 카카오 친구톡 Rails, SMS 발송 Rails, 알림톡 Rails gem, Rails 카카오 API 연동, Rails Railtie, Sendgo Rails SDK*
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require "rails/generators/base"
|
|
2
|
+
|
|
3
|
+
module Sendgo
|
|
4
|
+
module Generators
|
|
5
|
+
# `bin/rails g sendgo:install` 제너레이터.
|
|
6
|
+
#
|
|
7
|
+
# config/initializers/sendgo.rb 초기화 파일을 생성한다.
|
|
8
|
+
class InstallGenerator < ::Rails::Generators::Base
|
|
9
|
+
source_root File.expand_path("templates", __dir__)
|
|
10
|
+
|
|
11
|
+
desc "Sendgo 초기화 파일(config/initializers/sendgo.rb)을 생성합니다."
|
|
12
|
+
|
|
13
|
+
# 초기화 파일 템플릿을 복사한다.
|
|
14
|
+
def copy_initializer
|
|
15
|
+
template "sendgo.rb.tt", "config/initializers/sendgo.rb"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Sendgo Rails 설정
|
|
4
|
+
#
|
|
5
|
+
# 아래 값들은 Rails.application.config.sendgo(ActiveSupport::OrderedOptions)에 저장되며
|
|
6
|
+
# Sendgo::Rails.client 가 최초 호출될 때 Sendgo::Client 생성에 사용됩니다.
|
|
7
|
+
#
|
|
8
|
+
# 값을 비워두면 동일한 이름의 ENV 환경변수로 자동 폴백합니다.
|
|
9
|
+
# 시크릿 키는 코드에 하드코딩하지 말고 환경변수 또는 Rails credentials로 관리하세요.
|
|
10
|
+
Rails.application.config.sendgo.tap do |config|
|
|
11
|
+
# Sendgo 액세스 키 (필수)
|
|
12
|
+
config.access_key = ENV["SENDGO_ACCESS_KEY"]
|
|
13
|
+
|
|
14
|
+
# Sendgo 시크릿 키 (필수)
|
|
15
|
+
config.secret_key = ENV["SENDGO_SECRET_KEY"]
|
|
16
|
+
|
|
17
|
+
# 카카오 발신프로필 키 (알림톡/친구톡 사용 시)
|
|
18
|
+
config.kakao_sender_key = ENV["SENDGO_KAKAO_SENDER_KEY"]
|
|
19
|
+
|
|
20
|
+
# SMS 발신자 키 (SMS/LMS/MMS 사용 시)
|
|
21
|
+
config.sms_sender_key = ENV["SENDGO_SMS_SENDER_KEY"]
|
|
22
|
+
|
|
23
|
+
# API 버전 (기본값: v2)
|
|
24
|
+
config.api_version = ENV.fetch("SENDGO_API_VERSION", "v2")
|
|
25
|
+
|
|
26
|
+
# API 기본 URL (기본값: https://sendgo.io)
|
|
27
|
+
config.url = ENV.fetch("SENDGO_URL", "https://sendgo.io")
|
|
28
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Rails가 존재할 때만 Railtie를 정의한다.
|
|
2
|
+
# (순수 Ruby 환경에서 이 파일이 require되어도 안전하게 no-op)
|
|
3
|
+
if defined?(::Rails::Railtie)
|
|
4
|
+
module Sendgo
|
|
5
|
+
module Rails
|
|
6
|
+
# Sendgo Rails 통합 Railtie.
|
|
7
|
+
#
|
|
8
|
+
# `config.sendgo`(ActiveSupport::OrderedOptions)를 기본 등록하여
|
|
9
|
+
# `config/initializers/sendgo.rb`에서 설정값을 지정할 수 있게 한다.
|
|
10
|
+
class Railtie < ::Rails::Railtie
|
|
11
|
+
# config.sendgo 네임스페이스 초기화
|
|
12
|
+
config.sendgo = ActiveSupport::OrderedOptions.new
|
|
13
|
+
|
|
14
|
+
# 애플리케이션 부팅 시점에 추가 초기화가 필요하면 여기서 처리한다.
|
|
15
|
+
initializer "sendgo.rails.setup" do
|
|
16
|
+
# 현재는 config.sendgo 등록만으로 충분하므로 별도 동작 없음.
|
|
17
|
+
# (지연 초기화: 클라이언트는 Sendgo::Rails.client 최초 호출 시 생성)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/lib/sendgo/rails.rb
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require "sendgo"
|
|
2
|
+
require "sendgo/rails/version"
|
|
3
|
+
|
|
4
|
+
# Rails가 로드된 환경에서만 Railtie를 등록한다.
|
|
5
|
+
# (순수 Ruby 환경에서 `require "sendgo/rails"`가 동작하도록 가드)
|
|
6
|
+
require "sendgo/rails/railtie" if defined?(::Rails::Railtie)
|
|
7
|
+
|
|
8
|
+
module Sendgo
|
|
9
|
+
# Rails 통합 모듈.
|
|
10
|
+
#
|
|
11
|
+
# `Rails.application.config.sendgo`(ActiveSupport::OrderedOptions) 설정을
|
|
12
|
+
# 우선 사용하고, 값이 없으면 ENV 환경변수로 폴백하여 `Sendgo::Client`를 생성한다.
|
|
13
|
+
#
|
|
14
|
+
# @example 컨트롤러에서 사용
|
|
15
|
+
# Sendgo::Rails.client.alimtalk.send(
|
|
16
|
+
# template_code: "ORDER_CONFIRM_001",
|
|
17
|
+
# contacts: [{ contact: "01012345678", var1: "ORD-001" }]
|
|
18
|
+
# )
|
|
19
|
+
module Rails
|
|
20
|
+
class << self
|
|
21
|
+
# 메모이즈된 Sendgo::Client 인스턴스를 반환한다.
|
|
22
|
+
#
|
|
23
|
+
# @return [Sendgo::Client]
|
|
24
|
+
def client
|
|
25
|
+
@client ||= build_client
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# 메모이즈된 클라이언트를 초기화한다. (주로 테스트에서 사용)
|
|
29
|
+
#
|
|
30
|
+
# @return [void]
|
|
31
|
+
def reset!
|
|
32
|
+
@client = nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
# 설정(config.sendgo) + ENV 폴백으로 Sendgo::Client를 생성한다.
|
|
38
|
+
def build_client
|
|
39
|
+
Sendgo::Client.new(
|
|
40
|
+
access_key: config_value(:access_key, "SENDGO_ACCESS_KEY"),
|
|
41
|
+
secret_key: config_value(:secret_key, "SENDGO_SECRET_KEY"),
|
|
42
|
+
kakao_sender_key: config_value(:kakao_sender_key, "SENDGO_KAKAO_SENDER_KEY"),
|
|
43
|
+
sms_sender_key: config_value(:sms_sender_key, "SENDGO_SMS_SENDER_KEY"),
|
|
44
|
+
api_version: config_value(:api_version, "SENDGO_API_VERSION") || "v2",
|
|
45
|
+
base_url: config_value(:url, "SENDGO_URL") || "https://sendgo.io"
|
|
46
|
+
)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# config.sendgo 값 → ENV 값 순으로 설정을 조회한다.
|
|
50
|
+
def config_value(key, env_key)
|
|
51
|
+
value = sendgo_config&.public_send(key)
|
|
52
|
+
value.nil? ? ENV[env_key] : value
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Rails 애플리케이션의 config.sendgo(OrderedOptions)를 반환한다.
|
|
56
|
+
# Rails가 없으면 nil을 반환하여 ENV 폴백만 사용한다.
|
|
57
|
+
def sendgo_config
|
|
58
|
+
return nil unless defined?(::Rails) && ::Rails.respond_to?(:application) && ::Rails.application
|
|
59
|
+
|
|
60
|
+
::Rails.application.config.sendgo
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
data/lib/sendgo-rails.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: sendgo-rails
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Sendgo
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-08-09 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: sendgo
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '1.0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '1.0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: railties
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '6.1'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '6.1'
|
|
41
|
+
description: Sendgo Ruby SDK를 Rails에 통합하는 공식 확장 젬입니다. Railtie 자동 등록, 설정 초기화 제너레이터,
|
|
42
|
+
ENV 폴백 클라이언트를 제공합니다.
|
|
43
|
+
email:
|
|
44
|
+
- dev@sendgo.io
|
|
45
|
+
executables: []
|
|
46
|
+
extensions: []
|
|
47
|
+
extra_rdoc_files: []
|
|
48
|
+
files:
|
|
49
|
+
- LICENSE
|
|
50
|
+
- README.md
|
|
51
|
+
- lib/generators/sendgo/install_generator.rb
|
|
52
|
+
- lib/generators/sendgo/templates/sendgo.rb.tt
|
|
53
|
+
- lib/sendgo-rails.rb
|
|
54
|
+
- lib/sendgo/rails.rb
|
|
55
|
+
- lib/sendgo/rails/railtie.rb
|
|
56
|
+
- lib/sendgo/rails/version.rb
|
|
57
|
+
homepage: https://sendgo.io
|
|
58
|
+
licenses:
|
|
59
|
+
- MIT
|
|
60
|
+
metadata:
|
|
61
|
+
source_code_uri: https://github.com/send-go/rails
|
|
62
|
+
homepage_uri: https://sendgo.io
|
|
63
|
+
post_install_message:
|
|
64
|
+
rdoc_options: []
|
|
65
|
+
require_paths:
|
|
66
|
+
- lib
|
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
68
|
+
requirements:
|
|
69
|
+
- - ">="
|
|
70
|
+
- !ruby/object:Gem::Version
|
|
71
|
+
version: '3.0'
|
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
|
+
requirements:
|
|
74
|
+
- - ">="
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '0'
|
|
77
|
+
requirements: []
|
|
78
|
+
rubygems_version: 3.5.22
|
|
79
|
+
signing_key:
|
|
80
|
+
specification_version: 4
|
|
81
|
+
summary: Sendgo Rails 통합 — 카카오 알림톡/친구톡, SMS/LMS/MMS
|
|
82
|
+
test_files: []
|