fix(message_bizppurio): 발송 결과 코드 사유를 최신 공식 명세로 정합화
발송 결과 코드 사유 문구를 비즈뿌리오 최신 공식 명세 (bizppurio.github.io/response-codes)에 맞춰 정비한다. 인증·계정 계열 코드(3001·3004·3007·3009 등) 설명이 실제 의미와 달라 관리자가 실패 원인을 오해할 수 있던 것을 정정하고, 누락 코드(3003·3010 IP 오류·4431 수신거부· 7103 발신프로필 키 무효)를 추가한다. 재시도 분류에 5002(요청 과다)를 포함한다. ko/en 및 ja 언어팩 사유를 함께 갱신한다.
This commit is contained in:
@@ -12,3 +12,4 @@
|
||||
- 환경설정·알림톡 템플릿 관리·발송 이력 등 관리자 화면 텍스트와 발송 결과 코드 안내의 일본어 번역 추가 — 관련 화면이 일본어 로케일에서 자연스럽게 표시됩니다.
|
||||
- 후불 한도 초과(9071) 결과 코드 사유의 일본어 번역 추가.
|
||||
- 잔액부족 알림의 채널군 라벨(문자/알림톡) 일본어 번역 추가.
|
||||
- 발송 결과 코드 사유를 최신 공식 명세에 맞춰 정합화(추가·정정)한 내용을 일본어 번역에 반영.
|
||||
|
||||
+31
-27
@@ -2,49 +2,53 @@
|
||||
|
||||
return [
|
||||
'1000' => '成功',
|
||||
'2000' => 'リクエストパラメータエラー',
|
||||
'3001' => '必須パラメータが不足しています',
|
||||
'3002' => 'トークン無効(期限切れ·廃止)',
|
||||
'3004' => '許可されていないリクエスト',
|
||||
'3005' => '認証情報が無効です',
|
||||
'3006' => 'アカウント情報エラー',
|
||||
'3007' => '発信番号が未登録です',
|
||||
'3009' => 'メッセージタイプエラー',
|
||||
'3011' => '一時的な処理遅延',
|
||||
'3013' => '一時的なシステムエラー',
|
||||
'2000' => 'メッセージが無効です',
|
||||
'3001' => '認証情報が無効です(Basic)',
|
||||
'3002' => 'トークンが無効です(期限切れ·廃止)',
|
||||
'3003' => 'IPが無効です',
|
||||
'3004' => 'アカウントが無効です',
|
||||
'3005' => '認証情報が無効です(Bearer)',
|
||||
'3006' => 'アカウントが存在しません',
|
||||
'3007' => 'アカウントパスワードが無効です',
|
||||
'3009' => 'アカウントが停止状態です',
|
||||
'3010' => 'アクセス許可IPが一致しません',
|
||||
'3011' => '不明なエラー(bizppurio)',
|
||||
'3013' => '完了処理されていないメッセージ',
|
||||
'4100' => '成功',
|
||||
'4400' => '電波の弱い地域',
|
||||
'4401' => '電源がオフです',
|
||||
'4402' => 'ストレージ容量超過',
|
||||
'4410' => '無効な番号',
|
||||
'4414' => '欠番·停止',
|
||||
'4420' => 'その他の端末エラー',
|
||||
'4430' => 'スパム受信拒否',
|
||||
'4443' => 'その他のエラー',
|
||||
'4401' => '電源オフ',
|
||||
'4402' => 'ストレージ超過',
|
||||
'4410' => '不正な番号',
|
||||
'4414' => '結番·停止',
|
||||
'4420' => 'その他端末エラー',
|
||||
'4430' => 'スパム',
|
||||
'4431' => '送信制限受信拒否(スパム)',
|
||||
'4443' => 'スパムブロック',
|
||||
'5003' => '一時的な送信エラー',
|
||||
'5004' => '一時的な送信エラー',
|
||||
'5005' => '一時的な送信エラー',
|
||||
'6600' => '成功',
|
||||
'6603' => '電波の弱い地域',
|
||||
'6604' => '電源がオフです',
|
||||
'6606' => '無効な番号',
|
||||
'6621' => 'メッセージ長が超過しています',
|
||||
'6604' => '電源オフ',
|
||||
'6606' => '不正な番号',
|
||||
'6621' => 'メッセージ長超過',
|
||||
'6641' => 'スパムブロック',
|
||||
'7000' => '成功',
|
||||
'7103' => '発信プロフィールキーが無効です',
|
||||
'7106' => '削除された発信キー',
|
||||
'7107' => 'ブロックされた発信キー',
|
||||
'7204' => 'テンプレート不一致',
|
||||
'7206' => '審査されていないテンプレート',
|
||||
'7204' => 'メッセージ内容がテンプレートと不一致です',
|
||||
'7206' => 'シリアルナンバー形式が不一致です',
|
||||
'7306' => 'カカオシステムエラー',
|
||||
'7307' => '処理遅延',
|
||||
'7308' => '電話番号エラー',
|
||||
'7320' => '受信ブロック',
|
||||
'7325' => '変数長が超過しています',
|
||||
'7325' => '変数長超過',
|
||||
'7421' => 'タイムアウト',
|
||||
'7436' => 'ウォレット残高不足(アラームトーク)',
|
||||
'7437' => 'メッセージ要求失敗',
|
||||
'7523' => 'その他のエラー',
|
||||
'7436' => 'ウォレット残高不足(アラートトーク)',
|
||||
'7437' => 'メッセージリクエスト失敗',
|
||||
'7523' => '080受信拒否(スパム)',
|
||||
'9000' => '一時的なシステムエラー',
|
||||
'9070' => '残高不足(メール)',
|
||||
'9070' => '残高不足(SMS)',
|
||||
'9071' => '後払い限度額超過',
|
||||
];
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
- 알림톡 템플릿이 연결되지 않았거나 문자 템플릿이 없는 등 발송 자체를 시도하지 못한 경우, 관리자 알림 발송 이력 화면에 "성공"이 아닌 "실패"로 정확히 표시됩니다.
|
||||
- 플러그인을 삭제하면 이 플러그인이 알림 설정에 추가했던 문자·알림톡 채널이 함께 정리됩니다. 메일·사이트 내 알림 등 다른 채널과 알림 자체는 그대로 유지되며, 플러그인을 다시 설치하면 문자·알림톡 채널이 자동으로 복원됩니다.
|
||||
- 잔액 부족으로 발송이 실패해 관리자에게 보내는 알림에서, 실패한 채널(문자/알림톡)과 결과 코드가 안내 문구에 실제 값으로 표시됩니다. 후불 결제 한도를 초과한 경우도 잔액 부족과 동일하게 관리자에게 알립니다.
|
||||
- 발송 결과 코드의 사유 안내를 비즈뿌리오 최신 공식 명세에 맞춰 정비했습니다. 일부 코드의 설명을 정정하고 누락된 코드(접속 IP 오류, 수신거부, 발신 프로필 키 오류 등)를 추가해, 발송 이력에서 실패 사유가 더 정확히 표시됩니다.
|
||||
|
||||
### Changed
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ declare(strict_types=1);
|
||||
| Bizppurio result code → reason (English)
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Source: Bizppurio API manual "9. Status_Code" table
|
||||
| As of: 2026-07-13 (plan appendix C-3, phase 1 scope)
|
||||
| Source: Bizppurio official response-code docs (https://bizppurio.github.io/response-codes/)
|
||||
| As of: 2026-07-27 (aligned to the latest official docs; legacy manual wording corrected)
|
||||
| Scope: common(2000~9071) + SMS(4100~4443) + LMS(6600~6641) + Alimtalk(7000~7523).
|
||||
| RCS(8000s)/NaverTalkTalk(part of 5000s) are out of scope (follow-up D15).
|
||||
|
|
||||
@@ -17,16 +17,18 @@ declare(strict_types=1);
|
||||
return [
|
||||
// ── Common / send response ───────────────────────────
|
||||
'1000' => 'Success',
|
||||
'2000' => 'Invalid request parameter',
|
||||
'3001' => 'Missing required parameter',
|
||||
'2000' => 'Message is invalid',
|
||||
'3001' => 'Invalid authentication (Basic)',
|
||||
'3002' => 'Invalid token (expired/revoked)',
|
||||
'3004' => 'Request not allowed',
|
||||
'3005' => 'Invalid authentication',
|
||||
'3006' => 'Account information error',
|
||||
'3007' => 'Sender number not registered',
|
||||
'3009' => 'Message type error',
|
||||
'3011' => 'Temporary processing delay',
|
||||
'3013' => 'Temporary system error',
|
||||
'3003' => 'Invalid IP',
|
||||
'3004' => 'Account is invalid',
|
||||
'3005' => 'Invalid authentication (Bearer)',
|
||||
'3006' => 'Account does not exist',
|
||||
'3007' => 'Invalid account password',
|
||||
'3009' => 'Account suspended',
|
||||
'3010' => 'IP not in allowlist',
|
||||
'3011' => 'Unknown error (Bizppurio)',
|
||||
'3013' => 'Message not completed',
|
||||
'5003' => 'Temporary delivery error',
|
||||
'5004' => 'Temporary delivery error',
|
||||
'5005' => 'Temporary delivery error',
|
||||
@@ -42,8 +44,9 @@ return [
|
||||
'4410' => 'Invalid number',
|
||||
'4414' => 'Disconnected/suspended number',
|
||||
'4420' => 'Other device error',
|
||||
'4430' => 'Spam rejection',
|
||||
'4443' => 'Other error',
|
||||
'4430' => 'Spam',
|
||||
'4431' => 'Delivery-restricted opt-out (spam)',
|
||||
'4443' => 'Spam blocked',
|
||||
|
||||
// ── LMS report ───────────────────────────────────────
|
||||
'6600' => 'Success',
|
||||
@@ -55,10 +58,11 @@ return [
|
||||
|
||||
// ── Alimtalk report ──────────────────────────────────
|
||||
'7000' => 'Success',
|
||||
'7103' => 'Invalid sender profile key',
|
||||
'7106' => 'Deleted sender key',
|
||||
'7107' => 'Blocked sender key',
|
||||
'7204' => 'Template mismatch',
|
||||
'7206' => 'Unapproved template',
|
||||
'7204' => 'Message content does not match template',
|
||||
'7206' => 'Serial number format mismatch',
|
||||
'7306' => 'Kakao system error',
|
||||
'7307' => 'Processing delayed',
|
||||
'7308' => 'Phone number error',
|
||||
@@ -67,5 +71,5 @@ return [
|
||||
'7421' => 'Timeout',
|
||||
'7436' => 'Insufficient wallet balance (Alimtalk)',
|
||||
'7437' => 'Message request failed',
|
||||
'7523' => 'Other error',
|
||||
'7523' => '080 opt-out (spam)',
|
||||
];
|
||||
|
||||
@@ -7,8 +7,8 @@ declare(strict_types=1);
|
||||
| 비즈뿌리오 결과 코드 → 사유 (한국어)
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| 출처: 비즈뿌리오 API 매뉴얼 "9. Status_Code" 표
|
||||
| 기준일: 2026-07-13 (계획서 부록 C-3 1차 범위)
|
||||
| 출처: 비즈뿌리오 공식 응답 코드 문서 (https://bizppurio.github.io/response-codes/)
|
||||
| 기준일: 2026-07-27 (최신 공식 문서 기준으로 정합화 — 구 매뉴얼 표기 정정)
|
||||
| 범위: 공통(2000~9071) + SMS(4100~4443) + LMS(6600~6641) + 알림톡(7000~7523)
|
||||
| RCS(8000대)·네이버톡톡(5000대 일부)은 범위 밖(후속 D15).
|
||||
|
|
||||
@@ -20,16 +20,18 @@ declare(strict_types=1);
|
||||
return [
|
||||
// ── 공통 / 발송 응답 ──────────────────────────────────
|
||||
'1000' => '성공',
|
||||
'2000' => '요청 파라미터 오류',
|
||||
'3001' => '필수 파라미터 누락',
|
||||
'2000' => '메시지가 유효하지 않음',
|
||||
'3001' => '인증 정보 무효(Basic)',
|
||||
'3002' => '토큰 무효(만료·폐기)',
|
||||
'3004' => '허용되지 않은 요청',
|
||||
'3005' => '인증 정보 무효',
|
||||
'3006' => '계정 정보 오류',
|
||||
'3007' => '발신번호 미등록',
|
||||
'3009' => '메시지 타입 오류',
|
||||
'3011' => '일시적 처리 지연',
|
||||
'3013' => '일시적 시스템 오류',
|
||||
'3003' => 'IP 무효',
|
||||
'3004' => '계정이 유효하지 않음',
|
||||
'3005' => '인증 정보 무효(Bearer)',
|
||||
'3006' => '계정이 존재하지 않음',
|
||||
'3007' => '계정 암호 무효',
|
||||
'3009' => '계정 중지 상태',
|
||||
'3010' => '접속 허용 IP 불일치',
|
||||
'3011' => '알 수 없는 오류(비즈뿌리오)',
|
||||
'3013' => '완료 처리되지 않은 메시지',
|
||||
'5003' => '일시적 전송 오류',
|
||||
'5004' => '일시적 전송 오류',
|
||||
'5005' => '일시적 전송 오류',
|
||||
@@ -45,8 +47,9 @@ return [
|
||||
'4410' => '잘못된 번호',
|
||||
'4414' => '결번·정지',
|
||||
'4420' => '기타 단말 오류',
|
||||
'4430' => '스팸 수신 거부',
|
||||
'4443' => '기타 오류',
|
||||
'4430' => '스팸',
|
||||
'4431' => '발송 제한 수신거부(스팸)',
|
||||
'4443' => '스팸 차단',
|
||||
|
||||
// ── LMS 리포트 ────────────────────────────────────────
|
||||
'6600' => '성공',
|
||||
@@ -58,10 +61,11 @@ return [
|
||||
|
||||
// ── 알림톡 리포트 ─────────────────────────────────────
|
||||
'7000' => '성공',
|
||||
'7103' => '발신 프로필 키 무효',
|
||||
'7106' => '삭제된 발신 키',
|
||||
'7107' => '차단된 발신 키',
|
||||
'7204' => '템플릿 불일치',
|
||||
'7206' => '검수되지 않은 템플릿',
|
||||
'7204' => '메시지 내용이 템플릿과 불일치',
|
||||
'7206' => '시리얼넘버 형식 불일치',
|
||||
'7306' => '카카오 시스템 오류',
|
||||
'7307' => '처리 지연',
|
||||
'7308' => '전화번호 오류',
|
||||
@@ -70,5 +74,5 @@ return [
|
||||
'7421' => '타임아웃',
|
||||
'7436' => '지갑 잔액 부족(알림톡)',
|
||||
'7437' => '메시지 요청 실패',
|
||||
'7523' => '기타 오류',
|
||||
'7523' => '080 수신거부(스팸)',
|
||||
];
|
||||
|
||||
@@ -26,12 +26,13 @@ class ResultCodeResolver
|
||||
/**
|
||||
* 재시도(일시 오류) 코드 — 큐가 재시도해야 하는 코드.
|
||||
*
|
||||
* 공통 일시오류(5003/5004/5005/9000/3011/3013)에 더해, 알림톡 일시오류
|
||||
* (7306 카카오 시스템오류·7307 처리지연·7421 타임아웃·7437 메시지 요청실패)도 포함한다.
|
||||
* 공통 일시오류(5002 요청 과다·5003/5004/5005 게이트웨이 오류·9000 알 수 없는 오류·
|
||||
* 3011 비즈뿌리오 내부 오류·3013 미완료 메시지)에 더해, 알림톡 일시오류(7306 카카오
|
||||
* 시스템오류·7307 처리지연·7421 타임아웃·7437 메시지 요청실패)도 포함한다.
|
||||
* 7305(성공 불확실)는 이미 발송됐을 수 있어 중복발송 위험이 있으므로 제외한다.
|
||||
* 출처: 비즈뿌리오 공식 응답코드(bizppurio.github.io/response-codes).
|
||||
*/
|
||||
private const RETRYABLE_CODES = ['5003', '5004', '5005', '9000', '3011', '3013', '7306', '7307', '7421', '7437'];
|
||||
private const RETRYABLE_CODES = ['5002', '5003', '5004', '5005', '9000', '3011', '3013', '7306', '7307', '7421', '7437'];
|
||||
|
||||
/**
|
||||
* 잔액 부족 코드 — 선불 잔액부족 9070 / 알림톡 지갑 잔액부족 7436 /
|
||||
|
||||
+15
-4
@@ -53,16 +53,27 @@ class ResultCodeResolverTest extends PluginTestCase
|
||||
$this->assertStringContainsString('9071', $this->resolver->label('9071'));
|
||||
}
|
||||
|
||||
/**
|
||||
* 최신 명세 정합화로 추가된 코드(IP 오류·수신거부·발신프로필 키 무효)에 사유가 정의돼
|
||||
* 코드만 노출되지 않는다.
|
||||
*/
|
||||
public function test_newly_added_codes_have_reason(): void
|
||||
{
|
||||
foreach (['3003', '3010', '4431', '7103'] as $code) {
|
||||
$this->assertNotNull($this->resolver->reason($code), "코드 {$code} 사유 누락");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 일시오류 코드는 Retry.
|
||||
*
|
||||
* 공통(5003/5004/5005/9000/3011/3013)에 더해, 알림톡 일시오류(7306 카카오 시스템오류·
|
||||
* 7307 처리지연·7421 타임아웃·7437 메시지 요청실패)도 재시도 대상이다. 7305(성공 불확실)는
|
||||
* 이미 발송됐을 수 있어 중복발송 위험이 있으므로 재시도 대상에서 제외한다.
|
||||
* 공통(5002 요청 과다·5003/5004/5005/9000/3011/3013)에 더해, 알림톡 일시오류(7306 카카오
|
||||
* 시스템오류·7307 처리지연·7421 타임아웃·7437 메시지 요청실패)도 재시도 대상이다.
|
||||
* 7305(성공 불확실)는 이미 발송됐을 수 있어 중복발송 위험이 있으므로 재시도 대상에서 제외한다.
|
||||
*/
|
||||
public function test_retryable_codes_categorized_as_retry(): void
|
||||
{
|
||||
foreach (['5003', '5004', '5005', '9000', '3011', '3013', '7306', '7307', '7421', '7437'] as $code) {
|
||||
foreach (['5002', '5003', '5004', '5005', '9000', '3011', '3013', '7306', '7307', '7421', '7437'] as $code) {
|
||||
$this->assertSame(ResultCategory::Retry, $this->resolver->categorize($code), "코드 {$code}");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user