기업회원 신청 서류 안내
신청자 구분에 따라 재직증명서 또는 위임장을 함께 제출해 주세요.
신청자 구분에 따라 재직증명서 또는 위임장을 함께 제출해 주세요.
A PRACTICAL GUIDE
Send Kakao Alimtalk with an approved template code. Runnable code for Laravel, Node.js, Python, PHP, Java, Go, Ruby and .NET, plus every required field and why sends fail.
POST /api/v2/notices/send이 가이드는 아직 번역되지 않아 English 문서를 표시합니다.
Alimtalk works by filling in an approved template. You do not compose the body at send time; you fill the blanks in wording that already passed review.
[#{var2}] Your order is confirmed.
Order number: #{var1}
Total: #{var3}
If that is approved as ORDER_CONFIRM_001, your code only supplies var1, var2 and var3.
kakaoSenderKey)POST /api/v2/notices/send
| Field | Required | Notes |
|---|---|---|
templateCode |
✅ | Approved template code |
contacts |
✅ | Recipient array. Empty gives EMPTY_CONTACTS |
contacts[].contact |
✅ | Phone number, digits only (01012345678) |
contacts[].name |
Recipient name | |
contacts[].var1–var8 |
Template variables | |
kakaoSenderKey |
✅ | Sender profile key (can live on the client instead) |
senderKey |
SMS sending number, needed for SMS fallback | |
scheduleType |
DIRECTLY (default) or SCHEDULED |
|
at |
Y-m-d H:i:s, KST, when scheduleType is SCHEDULED |
|
replaceSms |
Y to fall back to SMS |
|
smsSubject / smsContent |
Fallback body. Required when replaceSms is Y |
import Sendgo from '@sendgo/node';
const sendgo = new Sendgo({
accessKey: process.env.SENDGO_ACCESS_KEY!,
secretKey: process.env.SENDGO_SECRET_KEY!,
kakaoSenderKey: process.env.SENDGO_KAKAO_SENDER_KEY,
smsSenderKey: process.env.SENDGO_SMS_SENDER_KEY,
apiVersion: 'v2',
});
await sendgo.alimtalk.send({
templateCode: 'ORDER_CONFIRM_001',
contacts: [{
contact: '01012345678',
name: 'Hong Gildong',
var1: 'ORD-001',
var2: 'MacBook Pro',
var3: '3,490,000원',
}],
});
client.alimtalk.send(
template_code="ORDER_CONFIRM_001",
contacts=[
{"contact": "01012345678", "name": "Hong Gildong", "var1": "ORD-001", "var2": "MacBook Pro"}
],
)
Django users want sendgo-django; FastAPI users want sendgo-fastapi.
<?php
$sendgo->alimtalk->send([
'templateCode' => 'ORDER_CONFIRM_001',
'contacts' => [
['contact' => '01012345678', 'name' => 'Hong Gildong', 'var1' => 'ORD-001'],
],
]);
<?php
namespace App\Services;
use Sendgo\Php\Sendgo;
use Sendgo\Php\Exception\SendgoException;
use Illuminate\Support\Facades\Log;
class OrderNotifier
{
public function __construct(private Sendgo $sendgo) {}
public function confirmed(Order $order): void
{
try {
$this->sendgo->alimtalk->send([
'templateCode' => 'ORDER_CONFIRM_001',
'contacts' => [[
'contact' => $order->user->phone,
'var1' => $order->number,
'var3' => number_format($order->total).'원',
]],
]);
} catch (SendgoException $e) {
// A failed notification must not roll back the order.
Log::error('Alimtalk send failed', ['order' => $order->id, 'message' => $e->getMessage()]);
}
}
}
Queue this. An external call inside the request cycle ties your latency to Kakao's.
sendgo.alimtalk().send(AlimtalkRequest.builder()
.templateCode("ORDER_CONFIRM_001")
.contacts(List.of(
Contact.builder().contact("01012345678").name("Hong Gildong").var1("ORD-001").build()
))
.build());
result, err := client.Alimtalk.Send(sendgo.AlimtalkRequest{
TemplateCode: "ORDER_CONFIRM_001",
Contacts: []sendgo.Contact{
{Contact: "01012345678", Name: "Hong Gildong", Var1: "ORD-001"},
},
})
if err != nil {
log.Printf("alimtalk send failed: %v", err)
}
client.alimtalk.send(
template_code: 'ORDER_CONFIRM_001',
contacts: [{ contact: '01012345678', name: 'Hong Gildong', var1: 'ORD-001' }]
)
await client.SendAlimtalkAsync(new AlimtalkRequest
{
TemplateCode = "ORDER_CONFIRM_001",
Contacts = [new Contact { PhoneNumber = "01012345678", Name = "Hong Gildong", Var1 = "ORD-001" }],
});
curl -X POST https://sendgo.io/api/v2/notices/send \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"templateCode": "ORDER_CONFIRM_001",
"scheduleType": "DIRECTLY",
"replaceSms": "N",
"kakaoSenderKey": "your_kakao_sender_key",
"senderKey": "your_sms_sender_key",
"contacts": [{ "contact": "01012345678", "var1": "ORD-001" }]
}'
| Code | Cause | Retry helps |
|---|---|---|
INVALID_TEMPLATE_CODE |
Unknown or unapproved template | ❌ |
INVALID_KAKAO_SENDER_KEY |
Wrong sender profile key | ❌ |
EMPTY_CONTACTS |
Empty recipient array | ❌ |
PAYMENT_REQUIRED |
Out of credit | ❌ (top up) |
ACCESS_KEY_NOT_APPROVED |
App not approved | ❌ |
IP_NOT_ALLOWED |
Outside the IP allowlist | ❌ |
| Network timeout | Transient | ✅ |
Almost every failure fails identically on retry. Log it and move on rather than looping. See Error codes and retry strategy.
01012345678, not 010-1234-5678.#{var4} and you omit var4, the recipient sees that text.일반 발송 승인이 완료된 이메일 서비스입니다. 발신 인증과 앱의 발송 가능 상태를 확인하고 SMTP, HTTP API와 자동화 수신함을 연동하세요.
Send Korean SMS (90 bytes), LMS (long text) and MMS (with images) through Sendgo. Type selection, byte counting, verification-code patterns and advertising rules.
Send Brand Messages to channel friends, non-friends, or every consenting friend at once. How targeting splits the request path, and when to keep using the Friendtalk endpoint.
Use replaceSms so a text message goes out when the Alimtalk cannot be delivered. Required fields, cost implications, and the mistake that silently sends nothing.
Send one template to many recipients with different values each, in batches. Batch sizing, partial failures, queue patterns and the data hygiene that prevents most incidents.
Send at a specific time with scheduleType SCHEDULED. Timestamp format, the KST timezone trap, and how scheduling interacts with the advertising night ban.