ทำความเข้าใจข้อผิดพลาดของ API

คู่มือนี้อธิบายวิธีที่ Google Ads API จัดการและสื่อสารข้อผิดพลาด การทำความเข้าใจโครงสร้างและความหมายของข้อผิดพลาด API เป็นสิ่งสำคัญสำหรับการสร้างแอปพลิเคชันที่มีประสิทธิภาพซึ่งสามารถจัดการปัญหาได้อย่างราบรื่น ตั้งแต่ข้อมูลป้อนเข้าที่ไม่ถูกต้องไปจนถึงบริการไม่พร้อมใช้งานชั่วคราว

Google Ads API เป็นไปตามรูปแบบข้อผิดพลาดมาตรฐานของ Google API ซึ่งอิงตาม รหัสสถานะ gRPC การตอบกลับ API แต่ละรายการที่ทำให้เกิดข้อผิดพลาดจะมีออบเจ็กต์ Status ที่ประกอบด้วยข้อมูลต่อไปนี้

  • รหัสข้อผิดพลาดที่เป็นตัวเลข
  • ข้อความแสดงข้อผิดพลาด
  • รายละเอียดข้อผิดพลาดเพิ่มเติม (ไม่บังคับ)

รหัสข้อผิดพลาด Canonical

Google Ads API ใช้ชุดรหัสข้อผิดพลาด Canonical ที่กำหนดโดย gRPC และ HTTP รหัสเหล่านี้จะระบุประเภทข้อผิดพลาดในระดับสูง คุณควรตรวจสอบรหัสตัวเลขนี้ก่อนเสมอเพื่อทำความเข้าใจลักษณะพื้นฐานของปัญหา

ตารางต่อไปนี้สรุปรหัสที่พบบ่อยที่สุดที่คุณอาจพบเมื่อใช้ Google Ads API

รหัส gRPC รหัส HTTP ชื่อ Enum คำอธิบาย คำแนะนำ
0 200 OK ไม่มีข้อผิดพลาด แสดงว่าสำเร็จ ไม่มี
1 499 CANCELLED การดำเนินการถูกยกเลิก โดยปกติแล้วจะเป็นไคลเอ็นต์ โดยปกติหมายความว่าไคลเอ็นต์หยุดรอ ตรวจสอบการหมดเวลาฝั่งไคลเอ็นต์
2 500 UNKNOWN เกิดข้อผิดพลาดที่ไม่รู้จัก รายละเอียดเพิ่มเติมอาจอยู่ในข้อความหรือรายละเอียดข้อผิดพลาด ถือว่าเป็นข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์ มักจะลองอีกครั้งได้โดยใช้ Backoff
3 400 INVALID_ARGUMENT ไคลเอ็นต์ระบุอาร์กิวเมนต์ไม่ถูกต้อง ซึ่งบ่งบอกถึงปัญหาที่ทำให้ API ประมวลผลคำขอไม่ได้ เช่น ชื่อทรัพยากรมีรูปแบบไม่ถูกต้องหรือค่าไม่ถูกต้อง ข้อผิดพลาดของไคลเอ็นต์: ตรวจสอบพารามิเตอร์คำขอและตรวจสอบว่าพารามิเตอร์เป็นไปตามข้อกำหนดของ API รายละเอียดข้อผิดพลาดมักจะให้ข้อมูลเกี่ยวกับอาร์กิวเมนต์ที่ไม่ถูกต้องและวิธีแก้ไข ให้ใช้รายละเอียดเหล่านี้เพื่อแก้ไขคำขอ อย่าลองอีกครั้งโดยไม่แก้ไขคำขอ
4 504 DEADLINE_EXCEEDED หมดเวลาแล้วก่อนที่การดำเนินการจะเสร็จสมบูรณ์ ข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์: มักเกิดขึ้นชั่วคราว ลองอีกครั้งโดยใช้ Exponential Backoff
5 404 NOT_FOUND ไม่พบเอนทิตีที่ขอ เช่น แคมเปญหรือกลุ่มโฆษณา ข้อผิดพลาดของไคลเอ็นต์: ตรวจสอบการมีอยู่และรหัสของทรัพยากรที่คุณพยายามเข้าถึง อย่าลองอีกครั้งโดยไม่แก้ไข
6 409 ALREADY_EXISTS เอนทิตีที่ไคลเอ็นต์พยายามสร้างมีอยู่แล้ว ข้อผิดพลาดของไคลเอ็นต์: หลีกเลี่ยงการสร้างทรัพยากรที่ซ้ำกัน ตรวจสอบว่ามีทรัพยากรอยู่หรือไม่ก่อนที่จะพยายามสร้าง
7 403 PERMISSION_DENIED ผู้โทรไม่มีสิทธิ์ดำเนินการที่ระบุ ข้อผิดพลาดของไคลเอ็นต์: ตรวจสอบการตรวจสอบสิทธิ์ การให้สิทธิ์ และบทบาทของผู้ใช้สำหรับบัญชี Google Ads อย่าลองอีกครั้งโดยไม่แก้ไขสิทธิ์
8 429 RESOURCE_EXHAUSTED ทรัพยากรหมดแล้ว (เช่น คุณใช้โควต้าเกิน) หรือระบบทำงานหนักเกินไป ข้อผิดพลาดของไคลเอ็นต์/เซิร์ฟเวอร์: โดยปกติจะต้องรอ ใช้ Exponential Backoff และอาจลดอัตราการส่งคำขอ ดูขีดจำกัดและโควต้าของ API
9 400 FAILED_PRECONDITION ระบบปฏิเสธการดำเนินการเนื่องจากระบบไม่ได้อยู่ในสถานะที่จำเป็นสำหรับการดำเนินการ เช่น ไม่มีข้อมูลในช่องที่ต้องกรอก ข้อผิดพลาดของไคลเอ็นต์: คำขอถูกต้อง แต่ สถานะ ไม่ถูกต้อง ตรวจสอบรายละเอียดข้อผิดพลาดเพื่อทำความเข้าใจสาเหตุที่เกิดข้อผิดพลาดเกี่ยวกับเงื่อนไขเบื้องต้น อย่าลองอีกครั้งโดยไม่แก้ไขสถานะ
10 409 ABORTED การดำเนินการถูกยกเลิก โดยปกติแล้วเกิดจากปัญหาการทำงานพร้อมกัน เช่น ความขัดแย้งของธุรกรรม ข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์: มักจะลองอีกครั้งได้อย่างปลอดภัยโดยใช้ Backoff สั้นๆ
11 400 OUT_OF_RANGE มีการพยายามดำเนินการนอกช่วงที่ถูกต้อง ข้อผิดพลาดของไคลเอ็นต์: แก้ไขช่วงหรือดัชนี
12 501 UNIMPLEMENTED API ไม่ได้ใช้หรือรองรับการดำเนินการ ข้อผิดพลาดของไคลเอ็นต์: ตรวจสอบเวอร์ชัน API และฟีเจอร์ที่พร้อมใช้งาน ไม่ต้องลองอีกครั้ง
13 500 INTERNAL เกิดข้อผิดพลาดภายใน นี่เป็นข้อผิดพลาดทั่วไปสำหรับปัญหาฝั่งเซิร์ฟเวอร์ ข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์: โดยทั่วไปจะลองอีกครั้งได้โดยใช้ Exponential Backoff หากยังพบปัญหาอยู่ ให้ รายงานปัญหา
14 503 UNAVAILABLE ไม่พร้อมให้บริการนี้ในขณะนี้ ซึ่งมักจะเป็นสถานการณ์ชั่วคราว ข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์: ขอแนะนำให้ลองอีกครั้งโดยใช้ Exponential Backoff
15 500 DATA_LOSS ข้อมูลสูญหายหรือเสียหายโดยกู้คืนไม่ได้ ข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์: พบได้ยาก บ่งบอกถึงปัญหาร้ายแรง ไม่ต้องลองอีกครั้ง หากยังพบปัญหาอยู่ ให้ รายงานปัญหา
16 401 UNAUTHENTICATED คำขอไม่มีข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์ที่ถูกต้อง ข้อผิดพลาดของไคลเอ็นต์: ตรวจสอบโทเค็นการตรวจสอบสิทธิ์และข้อมูลเข้าสู่ระบบ อย่าลองอีกครั้งโดยไม่แก้ไขการตรวจสอบสิทธิ์

ดูรายละเอียดเพิ่มเติมเกี่ยวกับรหัสเหล่านี้ได้ที่ คู่มือการออกแบบ API - รหัส ข้อผิดพลาด

ทำความเข้าใจรายละเอียดข้อผิดพลาด

นอกเหนือจากรหัสระดับบนสุดแล้ว Google Ads API ยังให้ข้อมูลข้อผิดพลาดที่เฉพาะเจาะจงมากขึ้นในช่อง details ของออบเจ็กต์ Status ช่องนี้มักจะมี โปรโต GoogleAdsFailure ซึ่งรวมถึงรายการออบเจ็กต์ GoogleAdsError แต่ละรายการ

ออบเจ็กต์ GoogleAdsFailure แต่ละรายการประกอบด้วยข้อมูลต่อไปนี้

  • errors: รายการออบเจ็กต์ GoogleAdsError ซึ่งแต่ละรายการจะให้รายละเอียดข้อผิดพลาดที่เฉพาะเจาะจงที่เกิดขึ้น
  • request_id: รหัสที่ไม่ซ้ำกันสำหรับคำขอ ซึ่งมีประโยชน์สำหรับการแก้ไขข้อบกพร่องและวัตถุประสงค์ในการสนับสนุน

ออบเจ็กต์ GoogleAdsError แต่ละรายการมีข้อมูลต่อไปนี้

  • errorCode: รหัสข้อผิดพลาดที่ละเอียดมากขึ้น และเฉพาะเจาะจงของ Google Ads API เช่น AuthenticationError.NOT_ADS_USER
  • message: คำอธิบายข้อผิดพลาดที่เฉพาะเจาะจงที่อ่านเข้าใจได้
  • trigger: ค่าที่ทำให้เกิดข้อผิดพลาด (หากมี)
  • location: อธิบายตำแหน่งที่เกิดข้อผิดพลาดในคำขอ รวมถึงเส้นทางของฟิลด์
  • details: รายละเอียดข้อผิดพลาดเพิ่มเติม เช่น เหตุผลของข้อผิดพลาดที่ยังไม่ได้เผยแพร่

ตัวอย่างรายละเอียดข้อผิดพลาด

เมื่อได้รับข้อผิดพลาด ไลบรารีของไคลเอ็นต์จะ อนุญาตให้คุณเข้าถึงรายละเอียดเหล่านี้ ตัวอย่างเช่น INVALID_ARGUMENT (รหัส 3) อาจมีรายละเอียด GoogleAdsFailure ดังนี้

{
  "code": 3,
  "message": "The request was invalid.",
  "details": [
    {
      "@type": "type.googleapis.com/google.ads.googleads.v24.errors.GoogleAdsFailure",
      "errors": [
        {
          "errorCode": {
            "fieldError": "REQUIRED"
          },
          "message": "The required field was not present.",
          "location": {
            "fieldPathElements": [
              { "fieldName": "operations" },
              { "fieldName": "create" },
              { "fieldName": "name" }
            ]
          }
        },
        {
          "errorCode": {
            "stringLengthError": "TOO_SHORT"
          },
          "message": "The provided string is too short.",
          "trigger": {
            "stringValue": ""
          },
          "location": {
            "fieldPathElements": [
              { "fieldName": "operations" },
              { "fieldName": "create" },
              { "fieldName": "description" }
            ]
          }
        }
      ]
    }
  ]
}

ในตัวอย่างนี้ แม้ว่าจะมี INVALID_ARGUMENT ระดับบนสุด แต่รายละเอียด GoogleAdsFailure จะบอกคุณว่าช่อง name และ description ทำให้เกิดปัญหาและสาเหตุ (REQUIRED และ TOO_SHORT, ตามลำดับ)

ค้นหารายละเอียดข้อผิดพลาด

วิธีเข้าถึงรายละเอียดข้อผิดพลาดจะขึ้นอยู่กับว่าคุณใช้การเรียก API มาตรฐาน การล้มเหลวบางส่วน หรือการสตรีม

การเรียก API มาตรฐานและการสตรีม

เมื่อการเรียก API ล้มเหลวโดยไม่ได้ใช้การล้มเหลวบางส่วน รวมถึงการเรียกสตรีม ออบเจ็กต์ GoogleAdsFailure จะแสดงผลเป็นส่วนหนึ่งของข้อมูลเมตาต่อท้ายในส่วนหัวการตอบกลับ gRPC หากคุณใช้ REST สำหรับการเรียกมาตรฐาน ระบบจะแสดงผล GoogleAdsFailure ในการตอบกลับ HTTP ไลบรารีของไคลเอ็นต์ โดยปกติแล้ว จะแสดงข้อมูลนี้เป็นข้อยกเว้นที่มีแอตทริบิวต์ GoogleAdsFailure

การล้มเหลวบางส่วน

หากคุณใช้ การล้มเหลว บางส่วน ระบบจะแสดงผลข้อผิดพลาดสำหรับการดำเนินการที่ไม่สำเร็จในช่อง partial_failure_error ของการตอบกลับ ไม่ใช่ในส่วนหัวการตอบกลับ ในกรณีนี้ GoogleAdsFailure จะฝังอยู่ในออบเจ็กต์ google.rpc.Status ในการตอบกลับ

งานแบบกลุ่ม

สำหรับการประมวลผลแบบกลุ่ม คุณจะดูข้อผิดพลาดสำหรับการดำเนินการ แต่ละรายการได้โดยดึงข้อมูลผลลัพธ์ของงานแบบกลุ่มหลังจาก ที่งานเสร็จสมบูรณ์ ผลลัพธ์การดำเนินการแต่ละรายการจะมีช่อง status ที่มีรายละเอียดข้อผิดพลาดหากการดำเนินการล้มเหลว

รหัสคำขอ

request-id เป็นสตริงที่ไม่ซ้ำกันซึ่งระบุคำขอ API ของคุณและมีความสำคัญต่อการแก้ปัญหา

คุณสามารถค้นหา request-id ได้ในหลายที่ดังนี้

  • GoogleAdsFailure: หากการเรียก API ล้มเหลวและ GoogleAdsFailure ระบบแสดงผล การตอบกลับจะมี request_id
  • ข้อมูลเมตาต่อท้าย: ทั้งคำขอที่สำเร็จและไม่สำเร็จ request-id จะอยู่ในข้อมูลเมตาต่อท้ายของการตอบกลับ gRPC
  • ส่วนหัวการตอบกลับ: สำหรับคำขอที่สำเร็จและไม่สำเร็จ request-id จะอยู่ในส่วนหัวการตอบกลับ gRPC และการตอบกลับ HTTP ด้วย ยกเว้นคำขอสตรีมที่สำเร็จ
  • SearchGoogleAdsStreamResponse: สำหรับคำขอสตรีม ข้อความ SearchGoogleAdsStreamResponse แต่ละรายการจะมีช่อง request_id

เมื่อบันทึกข้อผิดพลาดหรือติดต่อทีมสนับสนุน โปรดใส่ request-id เพื่อช่วยในการวินิจฉัยปัญหา

แนวทางปฏิบัติแนะนำสำหรับการจัดการข้อผิดพลาด

หากต้องการสร้างแอปพลิเคชันที่มีประสิทธิภาพ ให้ใช้แนวทางปฏิบัติแนะนำต่อไปนี้

  1. ตรวจสอบรายละเอียดข้อผิดพลาด: แยกวิเคราะห์ช่อง details ของออบเจ็กต์ Status เสมอ โดยเฉพาะอย่างยิ่งให้มองหา GoogleAdsFailure errorCode message และ location แบบละเอียดในGoogleAdsError จะให้ข้อมูลที่นำไปใช้ได้มากที่สุดสำหรับการแก้ไขข้อบกพร่องและความคิดเห็นของผู้ใช้

  2. แยกความแตกต่างระหว่างข้อผิดพลาดของไคลเอ็นต์กับข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์

    • ข้อผิดพลาดของไคลเอ็นต์: รหัสต่างๆ เช่น INVALID_ARGUMENT, NOT_FOUND, PERMISSION_DENIED, FAILED_PRECONDITION, UNAUTHENTICATED ข้อผิดพลาดเหล่านี้ต้องมีการเปลี่ยนแปลงคำขอหรือสถานะ/ข้อมูลเข้าสู่ระบบของแอปพลิเคชัน อย่าลองส่งคำขออีกครั้งโดยไม่แก้ไขปัญหา
    • ข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์: รหัสต่างๆ เช่น UNAVAILABLE, INTERNAL, DEADLINE_EXCEEDED, UNKNOWN ข้อผิดพลาดเหล่านี้บ่งบอกถึงปัญหาชั่วคราวเกี่ยวกับบริการ API
  3. ใช้กลยุทธ์การลองอีกครั้ง

    • เวลาที่ควรลองอีกครั้ง: ลองอีกครั้งสำหรับข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์ชั่วคราวเท่านั้น เช่น UNAVAILABLE, DEADLINE_EXCEEDED, INTERNAL, UNKNOWN, และ ABORTED
    • Exponential Backoff: ใช้อัลกอริทึม Exponential Backoff เพื่อรอระยะเวลาที่เพิ่มขึ้นระหว่างการลองอีกครั้ง ซึ่งจะช่วยหลีกเลี่ยงการทำให้บริการที่ทำงานหนักอยู่แล้วทำงานหนักมากขึ้น เช่น รอ 1 วินาที แล้วรอ 2 วินาที แล้วรอ 4 วินาที และรอต่อไปเรื่อยๆ จนกว่าจะถึงจำนวนการลองอีกครั้งสูงสุดหรือเวลารอทั้งหมด
    • Jitter: เพิ่ม "Jitter" แบบสุ่มเล็กน้อยลงในระยะเวลา Backoff เพื่อป้องกันปัญหา "Thundering Herd" ที่ไคลเอ็นต์จำนวนมากพยายามอีกครั้งพร้อมกัน
  4. บันทึกอย่างละเอียด: บันทึกการตอบกลับข้อผิดพลาดแบบเต็ม รวมถึงรายละเอียดทั้งหมด โดยเฉพาะอย่างยิ่งรหัสคำขอ ข้อมูลนี้มีความสำคัญสำหรับการแก้ไขข้อบกพร่องและสำหรับการรายงานปัญหาไปยังทีมสนับสนุนของ Google หากจำเป็น

  5. ให้ความคิดเห็นของผู้ใช้: ให้ความคิดเห็นที่ชัดเจนและเป็นประโยชน์แก่ผู้ใช้แอปพลิเคชันโดยอิงตามรหัสและข้อความที่เฉพาะเจาะจง GoogleAdsError เช่น แทนที่จะพูดว่า "เกิดข้อผิดพลาด" คุณสามารถพูดว่า "ต้องระบุชื่อแคมเปญ" หรือ "ไม่พบรหัสกลุ่มโฆษณาที่ระบุ"

การทำตามหลักเกณฑ์เหล่านี้จะช่วยให้คุณวินิจฉัยและจัดการข้อผิดพลาดที่ Google Ads API แสดงผลได้อย่างมีประสิทธิภาพ ซึ่งจะทำให้แอปพลิเคชันมีเสถียรภาพมากขึ้นและใช้งานง่ายขึ้น