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:
chym1217
2026-07-28 12:40:19 +09:00
parent 4b5ec6ebd6
commit a706422401
7 changed files with 92 additions and 66 deletions
@@ -12,3 +12,4 @@
- 환경설정·알림톡 템플릿 관리·발송 이력 등 관리자 화면 텍스트와 발송 결과 코드 안내의 일본어 번역 추가 — 관련 화면이 일본어 로케일에서 자연스럽게 표시됩니다.
- 후불 한도 초과(9071) 결과 코드 사유의 일본어 번역 추가.
- 잔액부족 알림의 채널군 라벨(문자/알림톡) 일본어 번역 추가.
- 발송 결과 코드 사유를 최신 공식 명세에 맞춰 정합화(추가·정정)한 내용을 일본어 번역에 반영.
@@ -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 /
@@ -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}");
}
}