เลือกหมายเลขและราคาควบคู่กัน
ซื้อหมายเลขเฉพาะหนึ่งหมายเลขที่เลือกจากผลการค้นหาหมายเลขที่พร้อมให้บริการครั้งใหม่ ใช้ค่า info.uuid ของรายการที่เลือกเป็นรหัสหมายเลข และใช้ค่าหนึ่งจาก price[].uuid ของรายการเดียวกันนั้นเป็นรหัสราคา เส้นทางนี้ยังรับหมายเลขเต็มตามที่จัดเก็บไว้ด้วย แต่ไม่สามารถใช้รหัสประเทศ รหัสพื้นที่ หรือรหัสคำนำหน้าหมายเลขแทนการเลือกหมายเลขได้
การค้นหาหรืออ่านราคาที่บันทึกไว้ไม่ได้จองหมายเลขหรือตรึงราคา โปรดยืนยันค่าติดตั้ง ค่าบริการรายเดือน อัตราค่าโทรเข้าต่อนาที จำนวนนาทีและช่องสัญญาณที่รวมอยู่ของตัวเลือกที่เลือก รวมถึงสิทธิ์ในการซื้อของบัญชีและข้อกำหนดการลงทะเบียน ยอดพื้นฐานเริ่มต้นในฟังก์ชันช่วยที่ตรวจสอบแล้วคือค่าติดตั้งบวกค่าบริการรายเดือน โดยต้องยืนยันค่าบริการและเงื่อนไขเฉพาะของผู้ให้บริการทั้งหมดสำหรับแพ็กเกจที่เลือก
ส่งคำขอซื้อพร้อมเงื่อนไขป้องกันด้วย POST
ใช้บัญชี API ที่เปิดใช้งานแล้วผ่าน HTTPS จากที่อยู่ IP ต้นทางที่ได้รับอนุญาต คำสั่งต่อไปนี้เป็นการซื้อจริง ไม่ใช่การขอใบเสนอราคาหรือการทดลองโดยไม่ดำเนินการจริง กำหนดตัวแปรทุกตัวจากการเลือกหมายเลขและราคาครั้งใหม่รายการเดียวกัน ฟิลด์เพดานค่ายังคงใช้คำนำหน้าเดิมคือ 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 | ต้องตรงกับรหัสราคาที่ระบบระบุได้ การระบุฟิลด์นี้จะเปิดใช้การตรวจสอบใบเสนอราคา ฟิลด์นี้ไม่ใช่คีย์สำหรับป้องกันการดำเนินการซ้ำ |
| restore_quote_setup | ค่าติดตั้งสูงสุดที่ยอมรับ โดยเป็นค่าตัวเลขที่มีค่าจำกัดและไม่ติดลบ |
| restore_quote_monthly | ค่าบริการรายเดือนสูงสุดที่ยอมรับ โดยเป็นค่าตัวเลขที่มีค่าจำกัดและไม่ติดลบ |
| restore_quote_per_minute | อัตราค่าโทรเข้าต่อนาทีสูงสุดที่ยอมรับ โดยเป็นค่าตัวเลขที่มีค่าจำกัดและไม่ติดลบ |
| restore_quote_channels | จำนวนช่องสัญญาณที่เป็นจำนวนเต็มและตรงตามตัวเลือกราคาที่เลือก ไม่ใช่คำขอเปลี่ยนเป็นแพ็กเกจที่มีจำนวนช่องสัญญาณต่างออกไป |
ระบุฟิลด์ใบเสนอราคาที่เป็นตัวเลขทั้งหมดทุกครั้งที่ระบุรหัสราคาของใบเสนอราคา หากรหัสเปลี่ยนไป ราคาเกินเพดาน ไม่ได้ระบุเพดานหรือเพดานไม่ถูกต้อง จำนวนช่องสัญญาณเปลี่ยนไป หรือล็อกใบเสนอราคากำลังถูกใช้งาน ระบบจะส่งรหัส API 409 กลับมาก่อนส่งคำสั่งไปยังผู้ให้บริการเช่าที่เลือก การเปรียบเทียบยอมให้มีความคลาดเคลื่อนเล็กน้อยของเลขทศนิยมแบบลอยตัวได้ โปรดใช้ค่าของแพ็กเกจตามที่แสดงจริง แทนราคาที่ปัดเศษเอง
เงื่อนไขป้องกันเหล่านี้ไม่ได้ทำให้กระบวนการทั้งหมดเป็นการทดลองโดยไม่ดำเนินการจริงหรือเป็นธุรกรรมเดียว การค้นหาโปรไฟล์ลงทะเบียน การจัดเตรียมข้อมูลตัวตน หรืองานอื่นของฟังก์ชันช่วยอาจเกิดขึ้นก่อนการตรวจสอบเหล่านี้ และเงื่อนไขเหล่านี้ไม่ได้ตรึงรายการหมายเลขของผู้ให้บริการภายนอกหรือใช้แทนข้อจำกัดการซื้อระดับบัญชี
การลงทะเบียนและการเปิดใช้งาน
เมื่อจำเป็น ให้เพิ่มฟิลด์แบบฟอร์ม RegistrationID ที่มี UUID ของโปรไฟล์ลงทะเบียนที่ลูกค้าเป็นเจ้าของ ค่านี้ไม่ใช่รหัสหลักฐานที่อัปโหลด ที่อยู่ของผู้ให้บริการ หรือเอนทิตีข้อมูลตัวตนแยกต่างหาก ฟังก์ชันช่วยจะค้นหาโปรไฟล์โดยอ้างอิงบัญชีที่ผ่านการยืนยันตัวตน และปฏิเสธกรณีที่ไม่มีโปรไฟล์หรือโปรไฟล์ไม่พร้อมใช้งาน
หมายเลขที่รองรับบางกลุ่มอนุญาตให้ซื้อได้ก่อนลงทะเบียนเสร็จสมบูรณ์ ส่วนกลุ่มอื่นต้องมีโปรไฟล์ก่อนซื้อ ทั้งนี้อาจยังต้องผ่านการตรวจสอบหรือการจัดเตรียมบริการเฉพาะของผู้ให้บริการเครือข่าย อย่าตีความว่าการซื้อสำเร็จหรือการไม่มีการตรวจสอบล่วงหน้าหมายถึงได้รับการยกเว้นการลงทะเบียนหรือเปิดใช้งานได้ทันที
หากมีฟิลด์นี้ในผลตอบกลับ ค่า registration_requirements จะระบุข้อมูลสำหรับค้นหาข้อกำหนดแบบมีโครงสร้างตามประเทศและประเภทหมายเลข ใช้แค็ตตาล็อกการลงทะเบียนและกระบวนการส่งหลักฐานเพื่อดำเนินการตามข้อกำหนดที่เกี่ยวข้องให้ครบถ้วน ข้อความและข้อมูลเมตาที่ส่งกลับมาไม่ได้ถือเป็นการอนุมัติโปรไฟล์ด้วยตัวเอง
หลีกเลี่ยงการเปลี่ยนแพ็กเกจแทนโดยไม่แจ้งให้ทราบ
ส่วนประสานงานรุ่นเก่าสามารถอนุมานราคาที่ไม่ได้ระบุจากข้อมูลหมายเลขในแคชได้ และเมื่อรหัสราคาที่ระบุอย่างชัดเจนไม่มีอยู่อีกต่อไป ระบบยังอาจใช้ราคาล่าสุดของบัญชีสำหรับคำนำหน้าหมายเลขที่อยู่ในแคชแทน พร้อมอัปเดตการเลือกราคาที่อนุญาตในแคช อย่าพึ่งพาวิธีใช้ค่าแทนเหล่านี้เพื่อเลือกแพ็กเกจที่ลูกค้าอนุมัติ
ระบุราคาที่เลือกอย่างชัดเจนพร้อมฟิลด์เงื่อนไขตรวจสอบใบเสนอราคาที่ตรงกัน เงื่อนไขตรวจสอบรหัสใบเสนอราคาจะปฏิเสธการใช้รหัสอื่นแทนก่อนส่งคำสั่งเช่า เมื่อเกิดข้อขัดแย้งจากราคาที่ล้าสมัย ให้ค้นหาใหม่และขออนุมัติตัวเลือกใหม่ แทนการนำเงื่อนไขป้องกันออกเพื่อบังคับให้ซื้อ
ไม่มีการรับประกันระยะเวลาจองหรืออายุแคชที่บังคับใช้เป็นมาตรฐานเดียวกันในทุกเส้นทาง กระบวนการจะตรวจสอบความพร้อมของหมายเลข ขีดจำกัดราคาของบัญชี และนโยบายการซื้ออีกครั้ง แต่พฤติกรรมเฉพาะของผู้ให้บริการทั้งหมดนั้นยังอยู่ระหว่างการตรวจสอบ
ขั้นสูง: ค่าเริ่มต้นการกำหนดเส้นทางของบัญชี
การซื้ออาจสืบทอดปลายทางสายโทรศัพท์ ปลายทางสำรองเมื่อเกิดความขัดข้อง ปลายทาง SMS และค่าทรังก์ต้นทางที่ต้องการซึ่งมีอยู่ในบัญชี ตรวจสอบค่าเริ่มต้นเหล่านี้ก่อนสั่งซื้อ การไม่ระบุตัวเลือกการกำหนดเส้นทางไม่ได้รับประกันว่าจะได้หมายเลขที่ยังไม่มีการกำหนดค่า ฟังก์ชันช่วยที่ตรวจสอบแล้วเปิดใช้การต่ออายุอัตโนมัติเป็นค่าเริ่มต้น
| ตัวเลือก | พฤติกรรมในการกำหนดค่าที่ใช้ |
|---|---|
| uri, uri2, uri3 | ค่าที่ไม่ได้ระบุจะสืบทอดค่าเริ่มต้นของบัญชีที่ตรงกัน การระบุค่าว่างอย่างชัดเจนจะล้างค่าในฟังก์ชันช่วยแทนการสืบทอดค่า ใช้ปลายทางที่ถูกต้องและเหมาะสมกับโหมดการกำหนดเส้นทางที่เลือก |
| smsuri | หากไม่ได้ระบุค่า จะสืบทอดปลายทาง SMS ของบัญชี การระบุค่าว่างอย่างชัดเจนจะล้างค่านั้นในฟังก์ชันช่วย |
| origintrunk | รหัสทรังก์ที่ระบุอย่างชัดเจนและระบบรู้จักจะมีลำดับความสำคัญสูงกว่า หากไม่สามารถระบุทรังก์จากค่าได้ ระบบอาจใช้ค่าที่บัญชีกำหนดไว้หรือค่าเริ่มต้นรุ่นเก่าแทน โดยไม่ส่งข้อผิดพลาด |
| 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 และรหัสอื่นของผู้ให้บริการหรือบัญชี | ความล้มเหลวจากผู้ให้บริการ การประมวลผลภายในระบบ หรือนโยบาย รหัสเหล่านี้ไม่ใช่หลักฐานที่ยืนยันได้ในทุกกรณีว่าไม่มีการซื้อหรือการเรียกเก็บเงินเกิดขึ้น |
อ่านเนื้อหาผลตอบกลับ API ที่ได้รับจริงควบคู่กับสถานะ HTTP ผู้ให้บริการภายนอกอาจยอมรับการเช่าแล้วก่อนที่การแจ้งเตือน การลงทะเบียน หรือการประมวลผลอื่นภายในระบบจะล้มเหลว การจัดสรรหมายเลขจากรายการภายในระบบบางกรณีใช้ธุรกรรมฐานข้อมูล แต่ไม่มีการย้อนกลับคำสั่งซื้อของผู้ให้บริการภายนอกที่ใช้ได้กับทุกกรณี ส่วนประสานงานนี้ไม่มีคีย์ฝั่งไคลเอนต์สำหรับป้องกันการดำเนินการซ้ำ
ตรวจสอบข้อมูลให้ตรงกันก่อนลองอีกครั้ง
- บันทึกหมายเลข ราคา และเพดานค่าของใบเสนอราคาที่ได้รับอนุมัติไว้ในบันทึกคำสั่งซื้อของแอปพลิเคชันก่อนส่งคำขอเพียงครั้งเดียว
- หลังส่งคำขอ ให้อ่านรายการหมายเลขที่ซื้อและรายละเอียดหมายเลขของบัญชีเดียวกัน รวมถึงกรณีที่หมดเวลารอหรือเกิดข้อผิดพลาด
- หากพบหมายเลขนั้น ให้ตรวจสอบราคา การต่ออายุ การกำหนดเส้นทาง และสถานะการลงทะเบียน แทนการส่งคำขอซื้ออีกครั้ง
- หากผลลัพธ์ยังไม่แน่นอน ให้ฝ่ายสนับสนุนตรวจสอบคำสั่งซื้อกับผู้ให้บริการและการเรียกเก็บเงินของบัญชีให้ตรงกันก่อนลองอีกครั้ง ข้อความแสดงข้อผิดพลาดหรือแฟล็กความสำเร็จในบันทึกระบบรุ่นเก่าเพียงอย่างเดียวไม่ใช่หลักฐานที่เพียงพอ
- หลังยืนยันความเป็นเจ้าของและการเปิดใช้งานแล้ว ให้ดำเนินการตรวจสอบการกำหนดเส้นทางและทดสอบบริการตามปกติของบัญชีให้ครบถ้วน