번호와 요금을 함께 선택하세요
사용 가능한 번호를 새로 검색한 결과에서 특정 번호 하나를 선택하여 구매하세요. 선택한 항목의 info.uuid를 번호 ID로 사용하고, 같은 항목의 price[].uuid 값 중 하나를 요금 ID로 사용하세요. 이 경로에는 저장된 전체 번호를 전달할 수도 있지만, 국가, 지역 또는 접두 번호의 ID로 번호 선택을 대신할 수는 없습니다.
번호를 검색하거나 저장된 요금을 조회해도 번호가 예약되거나 요금이 고정되지는 않습니다. 선택한 개통비, 월 요금, 수신 통화 분당 요금, 포함된 통화 시간과 채널 수뿐 아니라 계정의 구매 권한과 등록 요건도 확인하세요. 검토한 헬퍼의 초기 기본 금액은 개통비와 월 요금의 합계입니다. 선택한 요금제에 적용되는 공급업체별 전체 비용과 약관은 반드시 확인해야 합니다.
보호 조건을 적용한 구매 요청을 POST로 전송하세요
허용된 발신 IP 주소에서 활성화된 API 계정을 사용하여 HTTPS로 접속하세요. 다음 명령은 견적 조회나 모의 실행이 아니라 실제 구매를 수행합니다. 모든 변수는 새로 선택한 동일한 번호와 요금에서 설정하세요. 상한 필드에는 기존의 restore_quote_ 접두사가 유지됩니다. 현재 포털에서도 특정 번호 구매에 보호 조건을 적용할 때 이 필드를 사용합니다.
curl --silent --show-error --user "$API_USER:$API_PASSWORD" \
--data-urlencode "restore_quote_price_id=$PRICE_ID" \
--data-urlencode "restore_quote_setup=$SETUP_PRICE" \
--data-urlencode "restore_quote_monthly=$MONTHLY_PRICE" \
--data-urlencode "restore_quote_per_minute=$PER_MINUTE_PRICE" \
--data-urlencode "restore_quote_channels=$CHANNELS" \
"https://api.multitel.net/v3/rentnumber/$NUMBER_ID/$PRICE_ID"예시처럼 폼 POST를 사용하세요. 헬퍼에는 JSON 및 옵션 래퍼를 파싱하는 기능도 있지만, 이번 검토에서는 모든 견적 및 공급업체 처리 경로에서 동작이 완전히 동일한지 확인하지 못했습니다. 이 기존 코디네이터에 요청 메서드를 명시적으로 제한하는 보호 장치가 없더라도 구매에 GET을 사용하지 마세요.
| 필드 | 의미 |
|---|---|
| NUMBER_ID | 검색 결과에서 선택한 번호의 UUID 또는 저장된 전체 번호입니다. 요청 하나당 번호 하나만 지정합니다. |
| PRICE_ID | 선택한 번호 및 해당 계정과 연결된 요금 UUID입니다. 항상 명시적으로 전달하세요. |
| restore_quote_price_id | 실제 적용 대상으로 결정된 요금 ID와 일치해야 합니다. 이 필드를 전달하면 견적 검사가 활성화됩니다. 멱등성 키는 아닙니다. |
| restore_quote_setup | 허용할 개통비의 최댓값으로, 음수가 아닌 유한한 숫자 값이어야 합니다. |
| restore_quote_monthly | 허용할 월 요금의 최댓값으로, 음수가 아닌 유한한 숫자 값이어야 합니다. |
| restore_quote_per_minute | 허용할 수신 통화 분당 요금의 최댓값으로, 음수가 아닌 유한한 숫자 값이어야 합니다. |
| restore_quote_channels | 선택한 요금 옵션의 정확한 정수 채널 수입니다. 다른 채널 요금제를 요청하는 필드가 아닙니다. |
견적 요금 ID를 전달할 때는 숫자형 견적 필드를 모두 전달하세요. ID 변경, 상한을 초과한 요금, 상한 누락 또는 유효하지 않은 상한, 채널 수 변경, 견적 잠금 사용 중 상태가 있으면 선택한 번호 임대 공급업체에 요청을 보내기 전에 API 코드 409를 반환합니다. 비교 시에는 작은 부동소수점 오차가 허용됩니다. 임의로 반올림한 요금 대신 실제로 표시된 요금제 값을 사용하세요.
이러한 보호 조건을 적용해도 전체 작업 흐름이 모의 실행이나 트랜잭션이 되는 것은 아닙니다. 검사 전에 등록 정보 조회, 신원 정보 프로비저닝 또는 기타 헬퍼 작업이 수행될 수 있습니다. 또한 외부 재고를 고정하거나 계정 수준의 구매 제한을 대체하지도 않습니다.
등록과 활성화
필요한 경우 RegistrationID 폼 필드를 추가하고 고객 소유 등록 프로필의 UUID를 입력하세요. 이는 업로드한 증빙, 공급업체 주소 또는 별도 신원 엔터티의 ID가 아닙니다. 헬퍼는 인증된 계정을 기준으로 프로필을 조회하며, 프로필이 누락되었거나 사용할 수 없으면 거부합니다.
지원되는 번호 재고 중 일부는 등록 완료 전에 구매할 수 있지만, 다른 재고는 구매 전에 프로필이 필요합니다. 통신사별 검증이나 프로비저닝이 여전히 필요할 수 있습니다. 구매에 성공했거나 사전 검사가 생략되었다는 이유로 등록이 면제되거나 즉시 활성화된다고 해석하지 마세요.
응답에 포함된 경우 registration_requirements는 국가와 번호 유형을 포함하는 구조화된 요건 조회 정보를 나타냅니다. 등록 카탈로그와 증빙 절차를 사용하여 해당 요건을 충족하세요. 반환된 텍스트와 메타데이터 자체가 프로필을 승인하는 것은 아닙니다.
알림 없이 요금제가 대체되는 것을 방지하세요
기존 코디네이터는 캐시된 번호 데이터에서 생략된 요금을 추론할 수 있습니다. 또한 명시적으로 전달한 요금 ID가 더 이상 존재하지 않으면 캐시된 접두 번호에 대한 계정의 최신 요금으로 대체하고, 캐시된 허용 요금 선택값을 업데이트할 수 있습니다. 고객이 승인한 요금제를 선택할 때 이러한 대체 동작에 의존하지 마세요.
선택한 요금을 명시적으로 전달하고 그에 맞는 견적 보호 필드를 함께 전달하세요. 견적 ID 보호 조건은 임대 요청을 보내기 전에 다른 ID로의 대체를 거부합니다. 오래된 요금으로 인한 충돌이 발생하면 보호 조건을 제거하여 구매를 강행하지 말고, 다시 검색한 뒤 새 선택에 대한 승인을 받으세요.
모든 처리 경로에 대해 보장되는 예약 기간이나 일률적으로 적용되는 캐시 유효 기간은 없습니다. 작업 흐름에서 번호 가용성, 계정 요금 한도 및 구매 정책을 다시 검사하지만, 공급업체별 전체 동작은 아직 검토 중입니다.
고급: 계정 라우팅 기본값
구매 시 계정에 설정된 기존 음성 수신 대상, 장애 전환 대상, SMS 수신 대상 및 오리기네이션 트렁크 기본 설정을 상속할 수 있습니다. 주문 전에 이러한 기본값을 확인하세요. 라우팅 옵션을 생략한다고 해서 설정되지 않은 번호가 제공된다는 보장은 없습니다. 검토한 헬퍼는 기본적으로 자동 갱신을 활성화합니다.
| 옵션 | 값 결정 방식 |
|---|---|
| uri, uri2, uri3 | 값을 생략하면 해당 계정 기본값을 상속합니다. 빈 값을 명시적으로 전달하면 상속하는 대신 헬퍼의 해당 값을 비웁니다. 선택한 라우팅 모드에 맞는 유효한 대상을 사용하세요. |
| smsuri | 값을 생략하면 계정의 SMS 수신 대상을 상속합니다. 빈 값을 명시적으로 전달하면 헬퍼에서 해당 값을 비웁니다. |
| origintrunk | 명시적으로 전달한 트렁크 ID가 인식되면 우선 적용됩니다. 값을 확인할 수 없으면 오류를 내는 대신 계정 기본 설정이나 기존 기본값으로 대체할 수 있습니다. |
| forward_destination, forwarding_destination, type | 값이 비어 있지 않은 라우팅 모드 별칭이며, 나열된 순서대로 우선 적용됩니다. 추측한 숫자 모드 대신 계정의 라우팅 설정에서 지원하는 값을 사용하세요. |
| RegistrationID | 고객 범위 내에서 등록 프로필을 조회합니다. 라우팅 대상과는 별개입니다. |
| autorenew | 기본값은 1입니다. 헬퍼는 값이 비어 있지 않은지 검사하므로, 이 구매 필드에 0을 전달해도 갱신이 확실히 비활성화되지는 않습니다. 지원되는 계정 갱신 관리 기능을 사용하고 저장된 설정을 확인하세요. |
이는 공통 헬퍼의 동작 의미를 설명하며, 모든 공급업체가 모든 선택적 설정을 동일하게 저장한다는 보장은 아닙니다. 다른 기존 음성, 음성 사서함, 팩스 및 SMS 필드도 있지만, 공급업체별 전체 검토가 여전히 필요합니다. 통화나 메시지 기능을 사용하기 전에 계정의 절차를 통해 구매한 번호에 저장된 설정을 확인하세요.
응답
특별한 문제가 없는 구매 상황을 가정한 예시입니다. 값과 기능은 선택한 요금제에 따라 달라집니다.
{
"status": {
"code": 200,
"msg": ""
},
"response": {
"number": "12025550123",
"price": {
"per_minute": "0.0100",
"free_minutes": "100",
"setup_price": "2.00",
"monthly_price": "4.00",
"channels": "2",
"overflow": "0"
},
"features": [
"voice"
],
"needs_registration": 0,
"registration_requirements": null
}
}코디네이터는 자체적인 status.code/status.msg 및 response 응답 구조를 사용하며, status.results 필드가 반드시 포함된다는 보장은 없습니다. 오류가 발생하면 일반적으로 응답 목록이 비어 있습니다. 성공 시 반환된 번호와 요금을 확인한 다음 계정의 번호 재고 및 등록 상태를 대조하여 확인하세요. 공급업체가 요청을 수락했다는 사실은 실제 음성, SMS 또는 팩스 테스트를 의미하지 않습니다.
오류와 불확실한 결과
| API 코드 | 의미 |
|---|---|
| 403 | 계정의 요금 또는 구매 제한, 사용할 수 없는 요금 선택, 접근할 수 없는 등록 프로필로 인해 처리가 차단될 수 있습니다. |
| 404 | 번호, 요금 또는 접두 번호 선택이 누락되었거나 사용할 수 없습니다. |
| 409 | 번호가 이미 활성 상태이거나, 견적 보호 조건이 더 이상 일치하지 않거나, 보호 조건이 적용된 다른 작업이 잠금을 보유하고 있습니다. |
| 422 | 검토한 등록 처리 경로에서 등록 정보가 필요하거나, 불완전하거나, 프로비저닝할 수 없습니다. |
| 500 및 기타 공급업체/계정 코드 | 공급업체, 로컬 처리 또는 정책 관련 실패입니다. 이 코드들이 구매나 청구가 발생하지 않았다는 증거가 항상 되는 것은 아닙니다. |
HTTP 상태뿐 아니라 실제 API 본문도 확인하세요. 로컬 알림, 등록 또는 기타 처리가 실패하기 전에 외부 공급업체가 임대 요청을 수락했을 수 있습니다. 일부 로컬 번호 재고 할당에서는 데이터베이스 트랜잭션을 사용하지만, 외부 공급업체 주문을 일괄적으로 롤백하는 기능은 없습니다. 이 코디네이터에는 클라이언트 멱등성 키가 없습니다.
재시도 전에 대조하여 확인하세요
- 요청을 한 번 제출하기 전에 승인된 번호, 요금 및 견적 상한을 애플리케이션의 주문 기록에 보관하세요.
- 요청 후에는 동일한 계정의 구매한 번호 목록과 번호 세부 정보를 조회하세요. 시간 초과나 오류가 발생한 후에도 조회해야 합니다.
- 해당 번호가 있으면 구매 요청을 다시 보내는 대신 요금, 갱신, 라우팅 및 등록 상태를 확인하세요.
- 결과가 여전히 불확실하면 재시도 전에 지원팀을 통해 공급업체 주문과 계정 청구 내역을 대조하여 확인하세요. 오류 메시지나 기존 로그의 성공 플래그만으로는 증거가 충분하지 않습니다.
- 소유권과 활성화가 확인되면 계정의 일반적인 라우팅 점검과 서비스 테스트를 완료하세요.