์ด ํด๋์๋ SOLAPI SDK์ ๋ค์ํ ์ฌ์ฉ ์์ ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
| ํ์ผ | ์ค๋ช | ๋์ด๋ |
|---|---|---|
send_sms.exs |
SMS (๋จ๋ฌธ) ๋ฐ์ก | ๊ธฐ๋ณธ |
send_lms.exs |
LMS (์ฅ๋ฌธ) ๋ฐ์ก | ๊ธฐ๋ณธ |
send_mms.exs |
MMS (์ด๋ฏธ์ง ์ฒจ๋ถ) ๋ฐ์ก | ์ค๊ธ |
send_kakao_alimtalk.exs |
์นด์นด์ค ์๋ฆผํก (ํ ํ๋ฆฟ ๊ธฐ๋ฐ) | ์ค๊ธ |
send_kakao_friendtalk.exs |
์นด์นด์ค ์น๊ตฌํก (๋ฒํผ ํฌํจ) | ์ค๊ธ |
send_multiple.exs |
์ฌ๋ฌ ์์ ์์๊ฒ ๋๋ ๋ฐ์ก | ๊ธฐ๋ณธ |
error_handling.exs |
์๋ฌ ์ ํ๋ณ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ | ๊ณ ๊ธ |
-
Elixir 1.14 ์ด์ ์ค์น
elixir --version
-
SOLAPI API ํค ๋ฐ๊ธ
- SOLAPI ์ฝ์์์ API ํค ๋ฐ๊ธ
-
๋ฐ์ ๋ฒํธ ๋ฑ๋ก (ํ์)
- SOLAPI ์ฝ์์์ ๋ฐ์ ๋ฒํธ ์ฌ์ ๋ฑ๋ก
- ํ๊ตญ ํต์ ๋ฒ๊ท์ ๋ฏธ๋ฑ๋ก ๋ฒํธ๋ ๋ฐ์ก ๋ถ๊ฐ
| ๋ฉ์์ง ํ์ | ์ถ๊ฐ ์ค๋น์ฌํญ |
|---|---|
| MMS | ์ด๋ฏธ์ง ์
๋ก๋ ํ image_id ๋ฐ๊ธ |
| ์นด์นด์ค ์๋ฆผํก | ์นด์นด์ค ์ฑ๋ ์ฐ๋, ํ ํ๋ฆฟ ์น์ธ |
| ์นด์นด์ค ์น๊ตฌํก | ์นด์นด์ค ์ฑ๋ ์ฐ๋, ์น๊ตฌ ์ถ๊ฐ๋ ์ฌ์ฉ์๋ง ๋ฐ์ก ๊ฐ๋ฅ |
export SOLAPI_API_KEY="your_api_key"
export SOLAPI_API_SECRET="your_api_secret"-
.env.example์.env๋ก ๋ณต์ฌ:cp .env.example .env
-
.envํ์ผ ํธ์ง:SOLAPI_API_KEY=your_api_key SOLAPI_API_SECRET=your_api_secret -
ํ๊ฒฝ ๋ณ์ ๋ก๋:
source .env
๊ฐ ์์ ๋ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ ์คํฌ๋ฆฝํธ์ ๋๋ค:
# SMS ๋ฐ์ก
elixir examples/send_sms.exs
# LMS (์ฅ๋ฌธ) ๋ฐ์ก
elixir examples/send_lms.exs
# MMS (์ด๋ฏธ์ง) ๋ฐ์ก
elixir examples/send_mms.exs
# ์นด์นด์ค ์๋ฆผํก
elixir examples/send_kakao_alimtalk.exs
# ์นด์นด์ค ์น๊ตฌํก
elixir examples/send_kakao_friendtalk.exs
# ๋๋ ๋ฐ์ก
elixir examples/send_multiple.exs
# ์๋ฌ ์ฒ๋ฆฌ ์์
elixir examples/error_handling.exs๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋จ๋ฌธ ๋ฉ์์ง ๋ฐ์ก ์์ ์ ๋๋ค.
์ฉ๋: 90๋ฐ์ดํธ ์ดํ์ ์งง์ ๋ฉ์์ง ๋ฐ์ก
์ฃผ์ ์ฝ๋:
Solapi.send(client, %{
to: "01012345678",
from: "0212345678",
text: "์๋
ํ์ธ์!"
})์คํ:
elixir examples/send_sms.exs์ฅ๋ฌธ ๋ฉ์์ง ๋ฐ์ก ์์ ์ ๋๋ค. ์ ๋ชฉ์ ํฌํจํ ์ ์์ต๋๋ค.
์ฉ๋: 90๋ฐ์ดํธ ์ด๊ณผ ~ 2,000๋ฐ์ดํธ ์ดํ ๋ฉ์์ง
SMS vs LMS ์ฐจ์ด์ :
- SMS: 90๋ฐ์ดํธ ์ดํ, ์ ๋ชฉ ์์
- LMS: 2,000๋ฐ์ดํธ ์ดํ, ์ ๋ชฉ ํฌํจ ๊ฐ๋ฅ
์ฃผ์ ์ฝ๋:
Solapi.send(client, %{
to: "01012345678",
from: "0212345678",
type: "LMS",
subject: "๊ณต์ง์ฌํญ",
text: "์ฅ๋ฌธ ๋ฉ์์ง ๋ด์ฉ..."
})์ฐธ๊ณ : type: "LMS"๋ฅผ ์๋ตํด๋ 90๋ฐ์ดํธ ์ด๊ณผ ์ ์๋ LMS ์ ํ
์ด๋ฏธ์ง๊ฐ ์ฒจ๋ถ๋ ๋ฉํฐ๋ฏธ๋์ด ๋ฉ์์ง ๋ฐ์ก ์์ ์ ๋๋ค.
์ฉ๋: ์ด๋ฏธ์ง์ ํจ๊ป ๋ฉ์์ง ๋ฐ์ก
์ฌ์ ์ค๋น:
- SOLAPI ์ฝ์์์ ์ด๋ฏธ์ง ์ ๋ก๋
- ๋ฐ๊ธ๋ฐ์
image_id์ฌ์ฉ
์ฃผ์ ์ฝ๋:
Solapi.send(client, %{
to: "01012345678",
from: "0212345678",
type: "MMS",
subject: "์ด๋ฒคํธ ์๋ด",
text: "๋ณธ๋ฌธ ๋ด์ฉ",
image_id: "IMG_XXXXXXXXXX"
})ํ ํ๋ฆฟ ๊ธฐ๋ฐ ์นด์นด์ค ์๋ฆผ ๋ฉ์์ง ๋ฐ์ก ์์ ์ ๋๋ค.
์ฉ๋: ์ฃผ๋ฌธ ํ์ธ, ๋ฐฐ์ก ์๋ฆผ, ์์ฝ ํ์ธ ๋ฑ ์ ๋ณด์ฑ ๋ฉ์์ง
์ฌ์ ์ค๋น:
- ์นด์นด์ค ๋น์ฆ๋์ค ์ฑ๋ ์์ฑ ๋ฐ SOLAPI ์ฐ๋
- ์๋ฆผํก ํ ํ๋ฆฟ ๋ฑ๋ก ๋ฐ ์น์ธ
pfId(์ฑ๋ ID)์templateIdํ์ธ
์ฃผ์ ์ฝ๋:
Solapi.send(client, %{
to: "01012345678",
from: "0212345678",
kakao_options: %{
"pfId" => "KA01PF...",
"templateId" => "KA01TP...",
"variables" => %{
"#{๊ณ ๊ฐ๋ช
}" => "ํ๊ธธ๋",
"#{์ฃผ๋ฌธ๋ฒํธ}" => "ORD-001"
}
}
})ํ
ํ๋ฆฟ ๋ณ์: #{๋ณ์๋ช
} ํ์์ผ๋ก ํ
ํ๋ฆฟ์ ์ ์๋ ๋ณ์์ ์ผ์นํด์ผ ํจ
์ฑ๋ ์น๊ตฌ์๊ฒ ์์ ํ์ ๋ฉ์์ง๋ฅผ ๋ฐ์กํ๋ ์์ ์ ๋๋ค.
์ฉ๋: ๋ง์ผํ ๋ฉ์์ง, ํ๋ก๋ชจ์ , ์ฟ ํฐ ๋ฐ์ก
์๋ฆผํก vs ์น๊ตฌํก ์ฐจ์ด์ :
| ๊ตฌ๋ถ | ์๋ฆผํก | ์น๊ตฌํก |
|---|---|---|
| ํ ํ๋ฆฟ | ํ์ (์ฌ์ ์น์ธ) | ๋ถํ์ |
| ์์ ์ | ๋ชจ๋ ์ฌ์ฉ์ | ์ฑ๋ ์น๊ตฌ๋ง |
| ์ฉ๋ | ์ ๋ณด์ฑ ๋ฉ์์ง | ๊ด๊ณ /๋ง์ผํ |
| ๋ฒํผ | ํ ํ๋ฆฟ์ ์ ์ | ์์ ๋กญ๊ฒ ์ถ๊ฐ |
์ฃผ์ ์ฝ๋:
Solapi.send(client, %{
to: "01012345678",
from: "0212345678",
text: "์น๊ตฌํก ๋ฉ์์ง ๋ด์ฉ",
kakao_options: %{
"pfId" => "KA01PF...",
"imageId" => "KAKAO_IMG_ID", # ์ ํ
"buttons" => [
%{
"buttonType" => "WL",
"buttonName" => "์์ธํ ๋ณด๊ธฐ",
"linkMo" => "https://example.com"
}
]
}
})๋ฒํผ ํ์ :
WL: ์น ๋งํฌAL: ์ฑ ๋งํฌBK: ๋ด ํค์๋MD: ๋ฉ์์ง ์ ๋ฌ
์ฌ๋ฌ ์์ ์์๊ฒ ํ ๋ฒ์ ๋ฉ์์ง๋ฅผ ๋ฐ์กํ๋ ์์ ์ ๋๋ค.
์ฉ๋: ๊ณต์ง์ฌํญ, ์ด๋ฒคํธ ์๋ด ๋ฑ ๋ค์ ์์ ์ ๋์ ๋ฐ์ก
์ฅ์ :
- 1ํ API ํธ์ถ๋ก ๋ค์ค ๋ฐ์ก (ํจ์จ์ )
- Rate Limit ์ ์ฝ
- ๋คํธ์ํฌ ์ค๋ฒํค๋ ๊ฐ์
์ฃผ์ ์ฝ๋:
messages = [
%{to: "01012345678", from: "0212345678", text: "๋ฉ์์ง 1"},
%{to: "01087654321", from: "0212345678", text: "๋ฉ์์ง 2"},
%{to: "01011112222", from: "0212345678", text: "๋ฉ์์ง 3"}
]
Solapi.send(client, messages)๋์ ๋ฉ์์ง ์์ฑ:
recipients = [
%{phone: "01012345678", name: "ํ๊ธธ๋"},
%{phone: "01087654321", name: "๊น์ฒ ์"}
]
messages = Enum.map(recipients, fn r ->
%{to: r.phone, from: "0212345678", text: "#{r.name}๋, ์๋
ํ์ธ์!"}
end)
Solapi.send(client, messages)๋ค์ํ ์๋ฌ ์ํฉ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ์์ ์ ๋๋ค.
ํ์ต ๋ด์ฉ:
ValidationError: ์ ๋ ฅ๊ฐ ๊ฒ์ฆ ์คํจApiError: API ์๋ต ์๋ฌ (์ธ์ฆ ์คํจ, ๊ถํ ๋ถ์กฑ ๋ฑ)NetworkError: ๋คํธ์ํฌ ์ค๋ฅ (ํ์์์, ์ฐ๊ฒฐ ์คํจ ๋ฑ)
์๋ฌ ํ์ ๋ณ ์ฒ๋ฆฌ:
case Solapi.send(client, message) do
{:ok, response} ->
IO.puts("์ฑ๊ณต!")
{:error, %Solapi.Error.ValidationError{field: field, message: msg}} ->
IO.puts("๊ฒ์ฆ ์คํจ [#{field}]: #{msg}")
{:error, %Solapi.Error.ApiError{status: 401}} ->
IO.puts("์ธ์ฆ ์คํจ - API ํค ํ์ธ")
{:error, %Solapi.Error.ApiError{status: 429}} ->
IO.puts("์์ฒญ ํ๋ ์ด๊ณผ - ์ ์ ํ ์ฌ์๋")
{:error, %Solapi.Error.NetworkError{retries_exhausted: true}} ->
IO.puts("๋คํธ์ํฌ ์ค๋ฅ - ์ฌ์๋ ์์ง")
end$ elixir examples/send_sms.exs
SMS ๋ฐ์ก ์ค...
๋ฐ์ก ์ฑ๊ณต!
์๋ต: %{
"groupId" => "G4V20241225123456ABCDEF",
"messageId" => "M4V20241225123456ABCDEF",
"to" => "01012345678",
"from" => "0212345678",
"type" => "SMS",
"statusCode" => "2000",
"statusMessage" => "์ ์ ์ ์"
}
$ elixir examples/error_handling.exs
=== ํ
์คํธ 1: ์์ ๋ฒํธ ๋๋ฝ ===
์ ํจ์ฑ ๊ฒ์ฌ ์คํจ!
๋ฉ์์ง: to is required
ํ๋: to
$ elixir examples/send_sms.exs
SMS ๋ฐ์ก ์ค...
๋ฐ์ก ์คํจ!
์๋ฌ: %Solapi.Error.ApiError{
status: 401,
code: "Unauthorized",
message: "์ธ์ฆ์ ์คํจํ์ต๋๋ค."
}
์์ธ: ์์ ๋ฒํธ(to)๊ฐ ๋๋ฝ๋จ
ํด๊ฒฐ: ๋ฉ์์ง ๋งต์ to ํ๋ ์ถ๊ฐ
%{to: "01012345678", from: "0212345678", text: "๋ฉ์์ง"}์์ธ: from ๋ฒํธ๊ฐ SOLAPI์ ๋ฑ๋ก๋์ง ์์
ํด๊ฒฐ:
- SOLAPI ์ฝ์ ์ ์
- ๋ฐ์ ๋ฒํธ ๊ด๋ฆฌ์์ ๋ฒํธ ๋ฑ๋ก
- ๋ณธ์ธ ์ธ์ฆ ์๋ฃ
์์ธ: API ํค ๋๋ ์ํฌ๋ฆฟ์ด ์๋ชป๋จ
ํด๊ฒฐ:
# ํ๊ฒฝ ๋ณ์ ํ์ธ
echo $SOLAPI_API_KEY
echo $SOLAPI_API_SECRET
# ํค์ ๊ณต๋ฐฑ์ด๋ ์ค๋ฐ๊ฟ์ด ์๋์ง ํ์ธ์์ธ: templateId๊ฐ ์๋ชป๋์๊ฑฐ๋ ๋ฏธ์น์ธ ์ํ
ํด๊ฒฐ:
- SOLAPI ์ฝ์์์ ํ ํ๋ฆฟ ID ํ์ธ
- ํ ํ๋ฆฟ ์น์ธ ์ํ ํ์ธ (๊ฒ์์ค/์น์ธ/๋ฐ๋ ค)
variablesํค๊ฐ ํ ํ๋ฆฟ๊ณผ ์ผ์นํ๋์ง ํ์ธ
์์ธ: ์์ ์๊ฐ ์ฑ๋ ์น๊ตฌ๊ฐ ์๋
ํด๊ฒฐ: ์น๊ตฌํก์ ์นด์นด์ค ์ฑ๋์ ์น๊ตฌ ์ถ๊ฐํ ์ฌ์ฉ์์๊ฒ๋ง ๋ฐ์ก ๊ฐ๋ฅ
์์ธ: image_id๊ฐ ์๋ชป๋จ
ํด๊ฒฐ:
- SOLAPI ์ฝ์์์ ์ด๋ฏธ์ง ์ ๋ก๋
- ๋ฐ๊ธ๋ฐ์
image_id์ฌ์ฉ - ์ด๋ฏธ์ง๊ฐ ๋ง๋ฃ๋์ง ์์๋์ง ํ์ธ
์์ธ: ๋ฉ์์ง๊ฐ 90๋ฐ์ดํธ๋ฅผ ์ด๊ณผ
ํ์ธ ๋ฐฉ๋ฒ:
text = "๋ฉ์์ง ๋ด์ฉ"
IO.puts("๋ฐ์ดํธ ํฌ๊ธฐ: #{byte_size(text)}")์ฐธ๊ณ : ํ๊ธ 1์ = 3๋ฐ์ดํธ (UTF-8)