Number Verifier
1. Загальна інформація
Сервіс Number Verifier призначений для перевірки мобільних номерів: він визначає їхній поточний статус у мережі, чинного оператора, країну та ознаку перенесення номера.
Інтеграція доступна двома способами: через HTTP API та ENUM API.
Сервіс підтримує автентифікацію за IP-адресою та портом і надає тестові ендпоінти для перевірки коректності інтеграції.
2. HTTP API
2.1. Автентифікація
Запити до HTTP API потребують автентифікації, щоб ідентифікувати клієнта, повертати коректні результати та гарантувати безпеку.
Автентифікація виконується за IP-адресою клієнта, зазначеною в його профілі, та портом, використаним під час запиту.
Перед використанням HTTP API для запитів Number Verifier (як у тестовому, так і в робочому середовищі) клієнт має передати список своїх IP-адрес акаунт-менеджеру для автентифікації.
2.2. Формат запиту
| Метод: | GET / POST |
Робоче середовище:
| Домен: | hlr.bsg.world |
| Порт: | 5011 |
| Синтаксис URL: | https://hlr.bsg.world:5011/msisdn/{NUMBER} |
| Синтаксис URL (необовʼязково)*: | https://hlr.bsg.world:5011/msisdn/{NUMBER}/tariff/{TARIFF_ID} |
*HTTP API також дозволяє обрати тариф, передавши його код у запиті (необовʼязково, лише для клієнтів із кількома тарифами).
Тестове середовище:
| Домен: | hlr-test.bsg.world |
| Порт: | 5013 |
| Синтаксис URL: | https://hlr-test.bsg.world:5013/msisdn/{NUMBER} |
{NUMBER} — це MSISDN (телефонний номер у міжнародному форматі) без знака «+».
{TARIFF_ID} — це код тарифу в системі BSG.
2.3. Отримання результату Number Verifier для номера
Опис:Повертає інформацію про мобільний номер: країну, MCC/MNC, чинного оператора, ознаку перенесення номера, поточний статус у мережі та додаткові атрибути (докладніше — у розділі 5).
2.3.1. Приклад запиту (робоче середовище):
Стандартний запит:
https://hlr.bsg.world:5011/msisdn/380123456789
Необовʼязковий запит (із кодом тарифу):
https://hlr.bsg.world:5011/msisdn/380123456789/tariff/22
2.3.2. Приклад запиту (тестове середовище):
https://hlr-test.bsg.world:5013/msisdn/380123456789
2.3.3. Приклад відповіді
Успіх:
{
"tn": "380123456789"
"cc": "UA"
"cn": "lifecell"
"mcc": "255"
"mnc": "06"
"sii": 1
"npi": false
"nt": "mobile"
"ls": "000"
"rc": "000"
}
Помилка (лише для діапазону Reason Code 100 - 199):
{
"tn": "380123456789"
"cc": "UA"
"cn": "lifecell"
"mcc": "255"
"mnc": "06"
"sii": 1
"npi": false
"nt": "mobile"
"ls": "201"
"rc": "120"
}
Помилка (лише для діапазону Reason Code 010 - 070):
{
"rc": "010"
}
Примітка: опис полів відповіді наведено в розділах 5–7.
3. ENUM API
3.1. Автентифікація
Запити до ENUM API потребують автентифікації, щоб ідентифікувати клієнта, повертати коректні результати та гарантувати безпеку.
Автентифікація виконується за IP-адресою клієнта, зазначеною в його профілі, та портом, використаним під час запиту.
Перед використанням ENUM API для запитів Number Verifier (як у тестовому, так і в робочому середовищі) клієнт має передати список своїх IP-адрес акаунт-менеджеру для автентифікації.
3.2. Формат запиту
Робоче середовище:
| IP-адреса сервера: | 141.95.255.235 |
| Порт: | 5001 |
| Синтаксис запиту: | dig @141.95.255.235 -p 5001 -t naptr {NUMBER}.enum |
Тестове середовище:
| IP-адреса сервера: | 141.95.255.235 |
| Порт: | 5003 |
| Синтаксис запиту: | dig @141.95.255.235 -p 5003 -t naptr {NUMBER}.enum |
{NUMBER} — це MSISDN (телефонний номер у міжнародному форматі) без знака «+».
Примітка: MSISDN у запиті вказується у зворотному порядку з крапками між цифрами (наприклад, 380123456789 → 9.8.7.6.5.4.3.2.1.0.8.3).
3.3. Отримання результату Number Verifier для номера
Опис: Повертає інформацію про мобільний номер: країну, MCC/MNC, чинного оператора, ознаку перенесення номера, поточний статус у мережі та додаткові атрибути (докладніше — у розділі 5).
3.3.1. Приклад запиту (робоче середовище):
dig @141.95.255.235 -p 5001 -t naptr 9.8.7.6.5.4.3.2.1.0.8.3.enum
3.3.2. Приклад запиту (тестове середовище):
dig @141.95.255.235 -p 5003 -t naptr 9.8.7.6.5.4.3.2.1.0.8.3.enum
3.3.3. Приклад відповіді:
Успіх:
; <<>> DiG 9.20.4-3ubuntu1.2-Ubuntu <<>> @141.95.255.235 -p 5001 -t naptr 9.8.7.6.5.4.3.2.1.0.8.3.enum
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38477
;; flags: qr; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;9.8.7.6.5.4.3.2.1.0.8.3.enum. IN NAPTR
;; ANSWER SECTION:
9.8.7.6.5.4.3.2.1.0.8.3.enum. 300 IN NAPTR 100 10 "U" "E2U+pstn:tel" "!^.*$!tn:380123456789;cc:UA;cn:lifecell;mcc:255;mnc:06;sii:1;npi:false;nt:mobile;ls:000;rc:000!" .
;; Query time: 32 msec
;; SERVER: 141.95.255.235#5001(141.95.255.235) (UDP)
;; WHEN: Tue Aug 11 11:11:11 EEST 2025
;; MSG SIZE rcvd: 174
Помилка (лише для діапазону Reason Code 100 - 199):
; <<>> DiG 9.20.4-3ubuntu1.2-Ubuntu <<>> @141.95.255.235 -p 5001 -t naptr 9.8.7.6.5.4.3.2.1.0.8.3.enum
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44972
;; flags: qr; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;9.8.7.6.5.4.3.2.1.0.8.3.enum. IN NAPTR
;; ANSWER SECTION:
9.8.7.6.5.4.3.2.1.0.8.3.enum. 300 IN NAPTR 100 10 "U" "E2U+pstn:tel" "!^.*$!tn:380123456789;cc:UA;cn:lifecell;mcc:255;mnc:06;sii:1;npi:false;nt:mobile;ls:201;rc:120!" .
;; Query time: 38 msec
;; SERVER: 141.95.255.235#5001(141.95.255.235) (UDP)
;; WHEN: Tue Aug 11 11:11:11 EEST 2025
;; MSG SIZE rcvd: 174
Помилка (лише для діапазону Reason Code 010 - 070):
; <<>> DiG 9.20.4-3ubuntu1.2-Ubuntu <<>> @141.95.255.235 -p 5001 -t naptr 9.8.7.6.5.4.3.2.1.0.8.3.enum
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 80127
;; flags: qr; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;9.8.7.6.5.4.3.2.1.0.8.3.enum. IN NAPTR
;; ANSWER SECTION:
9.8.7.6.5.4.3.2.1.0.8.3.enum. 300 IN NAPTR 100 10 "U" "E2U+pstn:tel" "!^.*$!rc:013!" .
;; Query time: 51 msec
;; SERVER: 141.95.255.235#5001(141.95.255.235) (UDP)
;; WHEN: Tue Aug 11 11:11:11 EEST 2025
;; MSG SIZE rcvd: 78
Примітка: опис полів відповіді наведено в розділах 5–7.
4. Тестування налаштування інтеграції
Тестові ендпоінти доступні для перевірки вашої інтеграції з HTTP та ENUM API. Вони дають змогу перевірити авторизацію, зʼєднання та коректність формату запитів і відповідей.
Як і в робочому середовищі, доступ до тестового середовища мають лише заздалегідь подані IP-адреси клієнта.
Примітка: подробиці про тестові ендпоінти наведено в розділах 2.2. і 3.2.
Примітка: тестові відповіді не містять реальних даних абонентів і включають таку інформацію:
-
cc — реальне значення, визначається за префіксом запитаного номера;
-
решта параметрів (cn, mcc, mnc, sii, npi, nt, ls, rc тощо) — нереальні, тестові значення.
5. Поля відповіді Number Verifier
| Поле | Тип | Опис |
|---|---|---|
| tn | string | Телефонний номер, для якого виконано запит |
| cc | string | Країна оператора (код країни) у форматі ISO 3166-1 alpha-2 (наприклад, UA) |
| cn | string | Назва оператора (Carrier Name) |
| mcc | string | Мобільний код країни (Mobile Country Code) |
| mnc | string | Код мобільної мережі (Mobile Network Code) |
| sii | integer |
Індикатор джерела інформації (Source Information Indicator)1 — tn перевірено через HLR-запит; доступні як поточний статус у мережі, так і актуальна маршрутна інформація2 — tn перевірено через MNP-запит; доступна лише актуальна маршрутна інформація3 — tn перевірено за даними маршрутизації BSG; доступна лише маршрутна інформація з глобальної бази нумерації
|
| npi | boolean |
Індикатор перенесення номера (Number Portability Indicator)true — номер було перенесеноfalse — номер не переносився
|
| nt | string |
Тип номера (Number Type) • mobile• landline
|
| ls | string | Поточний статус у мережі (Live Status) — докладніше в розділі 6 |
| rc | string | Код причини (Reason Code) — докладніше в розділі 7 |
6. Статус активності (Live Status)
Поле Статус активності (ls) показує, чи активний мобільний номер у мережі на цей момент. Сервіс динамічно опитує HLR (Home Location Register) цільового оператора через мережу SS7, щоб перевірити статус мобільного номера й отримати інформацію про відповідного абонента.
У таблиці нижче наведено поточні значення поля; перелік може розширюватися з появою нових статусів або сервісів.
| Код | Опис | Коментар |
|---|---|---|
| 000 | STATUS: ACTIVE | Запитаний номер — активний мобільний абонент, що підтверджено HLR його обслуговувального оператора. |
| 201 | STATUS: ABSENT | Запитаний номер наразі недоступний через технічні проблеми в мобільній мережі, тривалу відсутність у зоні радіопокриття або вимкнений пристрій. Це тимчасовий статус, який може змінитися. |
| 202 | STATUS: BARRED | Запитаний номер має обмеження сервісів через білінгові чи технічні проблеми в мережі або наразі не може приймати SMS. Це тимчасовий статус, який може змінитися. |
| 203 | STATUS: INVALID | Запитаний номер не є активним мобільним абонентом, що підтверджено HLR його обслуговувального оператора. |
| 204 | STATUS: ERROR | Запит не отримав відповіді від оператора, що обслуговує абонента, або вичерпано час очікування відповіді. Залежно від випадку статус може бути як постійним, так і тимчасовим. |
| 205 | STATUS: UNKNOWN | Запит отримав неочікувану помилку від HLR оператора, що обслуговує абонента, або конкретний статус абонента наразі неможливо однозначно визначити. Залежно від випадку статус може бути як постійним, так і тимчасовим. |
7. Код причини (Reason Code)
Поле Код причини (rc) надає додаткову інформацію про те, як запит було оброблено в системі BSG. Ці коди можуть вказувати на причини помилок (наприклад, некоректну довжину номера) або містити іншу корисну інформацію.
У таблиці нижче наведено поточні значення поля; перелік може розширюватися з появою нових кодів причин або сервісів.
| Код | Опис | Коментар |
|---|---|---|
| 000 | ACTIVE | Успішний запит |
| 010 | ERROR_AUTH | Помилка авторизації, перевірте параметри |
| 011 | ERROR_SYSTEM | Внутрішня помилка системи BSG. Зазвичай це тимчасове явище |
| 012 | ERROR_INVALID_ MSISDN | Некоректна послідовність цифр номера; невідомі країна та оператор |
| 013 | ERROR_INVALID_ MSISDN_LENGTH | Довжина номера не відповідає стандартній довжині для вказаної країни |
| 014 | ERROR_INVALID_ MSISDN_MCC | Перевірка номера повернула результат із неочікуваним MCC для вказаної країни |
| 015 | ERROR_INVALID_ BY_WRONG_PREFIX | Номер належить до недійсного або нерозподіленого діапазону нумерації |
| 016 | ERROR_INVALID_ USER_TARIFF | У запиті вказано код тарифу, який не призначено клієнтові, або для сервісу не призначено жодного тарифу |
| 110 | BARRED | Запит повернув статус «BARRED» для абонента; цей статус означає, що абоненту заблоковано доступ до сервісів мережі, наприклад через несплату чи шахрайство. |
| 111 | BARRED_NO_SMS_ SERVICE | Запит повернув статус «BARRED»: SMS-сервіс абонента наразі заблоковано |
| 112 | BARRED_NO_SMS_ SERVICE_SUBSCRIBER_ BLOCKED | Запит повернув статус «BARRED»: наразі заблоковано SMS-сервіс абонента або самого абонента |
| 113 | BARRED_SUBSCRIBER_ BLOCKED_OR_UNAVAILABLE_ ROAMING | Запит повернув статус «BARRED»: абонента заблоковано або він перебуває в роумінгу без активного сервісу |
| 120 | ABSENT | Запит повернув статус «ABSENT»: пристрій абонента наразі не зареєстрований у мережі (наприклад, вимкнений або поза зоною покриття) |
| 121 | ABSENT_SUBSCRIBER_ UNAVAILABLE_OR_DEVICE_ SWITCHED_OFF | Запит повернув статус «ABSENT»: пристрій абонента недоступний, найімовірніше через вимкнений телефон |
| 122 | ABSENT_BAD_CONNECTION_ OR_CURRENTLY_UNAVAILABLE | Запит повернув статус «ABSENT»: пристрій абонента недоступний, найімовірніше через поганий радіодоступ |
| 123 | ABSENT_SUBSCRIBER_IS_ IN_BAD_CONNECTION_OR_ CURRENTLY_UNAVAILABLE | Запит повернув статус «ABSENT»: пристрій абонента недоступний, найімовірніше через проблеми в мережі |
| 124 | ABSENT_DEVICE_CANNOT_ RECEIVE_SMS_FAILURE_OR_ NETWORK_IS_BUSY | Запит повернув статус «ABSENT»: пристрій абонента не зміг прийняти повідомлення, найімовірніше через проблеми в мережі |
| 125 | ABSENT_DEVICE_CANNOT_ RECEIVE_SMS_FAILURE_OR_ NO_SPACE_FOR_SMS | Запит повернув статус «ABSENT»: пристрій абонента не зміг прийняти повідомлення, найімовірніше через проблему з пристроєм (наприклад, брак місця для SMS) |
| 126 | ABSENT_DEVICE_CANNOT_ RECEIVE_SMS_DEVICE_FAILURE | Запит повернув статус «ABSENT»: пристрій абонента не зміг прийняти повідомлення, найімовірніше через несправність мобільного пристрою |
| 127 | ABSENT_MAP_UNEXPECTED_ DATA_VALUE | Запит повернув статус «ABSENT»: помилка протоколу MAP, спричинена проблемою в мережі |
| 128 | ABSENT_INVALID_MSC | Запит повернув статус «ABSENT»: тимчасова помилка реєстрації абонента |
| 129 | ABSENT_SUBSCRIBER_IN_ POOR_COMMUNICATION_CONDITIONS_ OR_CURRENTLY_UNAVAILABLE | Запит повернув статус «ABSENT»: пристрій абонента недоступний, найімовірніше через проблеми в мережі або погані радіоумови |
| 130 | ABSENT_GSM_MAPERR_ ABSENT_SUBSC_SM_V2P | Запит повернув статус «ABSENT»: помилка протоколу MAP, спричинена проблемою в мережі |
| 150 | ERROR | Запит повернув статус «ERROR»: проблема на боці абонента; надано маршрутну інформацію BSG |
| 151 | ERROR_TIMEOUT_NO_ RESPONSE_FROM_HLR | Запит повернув статус «ERROR»: проблема на боці HLR; надано маршрутну інформацію BSG |
| 152 | ERROR_TIMEOUT_NO_ RESPONSE_FROM_MSC | Запит повернув статус «ERROR»: проблема на боці MSC; надано маршрутну інформацію BSG |
| 170 | UNKNOWN | Запит повернув статус «UNKNOWN» через тимчасову проблему в мережі SS7, що завадила визначити статус абонента; BSG присвоює «UNKNOWN» щоразу, коли не може визначити статус абонента як «ACTIVE», «BARRED», «ABSENT» або «INVALID» |
| 171 | UNKNOWN_NO_RESOURCES_ ON_SMSC | Запит повернув статус «UNKNOWN» через тимчасову проблему SMSC, що завадила визначити статус абонента |
| 172 | UNKNOWN_RECEIVED_ SCCP_TCAP_ABORT | Запит повернув статус «UNKNOWN» через тимчасову проблему протоколу SS7, що завадила визначити статус абонента |
| 173 | UNKNOWN_DELIVERY_ ERROR_OF_SMS_EQUIPMENT_ NOT_SM_EQUIPPED | Запит повернув статус «UNKNOWN» через проблему з мобільним обладнанням (зазвичай неможливість приймати SMS), що завадила визначити статус абонента |
| 174 | UNKNOWN_ERROR_OF_ SMS_DELIVERY_UNKNOWN_ SERVICE_CENTRE | Запит повернув статус «UNKNOWN» через проблему файрвола мобільної мережі, що завадила визначити статус абонента |
| 175 | UNKNOWN_SMS_DELIVERY_ ERROR_SC_CONGESTION | Запит повернув статус «UNKNOWN» через тимчасове перевантаження SMSC, що завадило визначити статус абонента |
| 176 | UNKNOWN_SMS_DELIVERY_ ERROR_INVALID_SME_ADDRESS | Запит повернув статус «UNKNOWN» через тимчасову проблему файрвола SMSC, що завадила визначити статус абонента |
| 177 | UNKNOWN_SMS_DELIVERY_ ERROR_SUBSCRIBER_NOT_ SC_SUBSCRIBER | Запит повернув статус «UNKNOWN» через проблему з мобільним обладнанням (зазвичай неможливість приймати SMS), що завадила визначити статус абонента |
| 179 | UNKNOWN_SYSTEM_ FAILURE_HLR | Запит повернув статус «UNKNOWN» через проблему HLR у мобільній мережі, що завадила визначити статус абонента |
| 180 | UNKNOWN_SYSTEM_ FAILURE_MSC | Запит повернув статус «UNKNOWN» через проблему MSC у мобільній мережі, що завадила визначити статус абонента |
| 190 | INVALID | Запит повернув статус «INVALID» для абонента; цей статус означає, що запитаний номер не повʼязаний із жодним абонентом або відсутній у базі HLR мережі |
| 191 | INVALID_UNKNOWN_ SUBSCRIBER | Запит повернув статус «INVALID» для абонента; цей статус означає, що запитаний номер не повʼязаний із жодним абонентом або відсутній у базі HLR мережі |