การแก้ปัญหา

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

ข้อความแสดงข้อผิดพลาด

เมื่อสคริปต์พบข้อผิดพลาด ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้น ข้อความจะแสดงพร้อมกับหมายเลขบรรทัดที่ใช้สำหรับการแก้ปัญหา ข้อผิดพลาดพื้นฐาน 2 ประเภทที่แสดงในลักษณะนี้คือข้อผิดพลาดด้านไวยากรณ์และข้อผิดพลาดเกี่ยวกับรันไทม์

ข้อผิดพลาดด้านไวยากรณ์

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

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ";
  MailApp.sendEmail('john@example.com',
                    'Data in row ' + rowNumber,
                    rowData);
}

ปัญหาไวยากรณ์ตรงนี้คืออักขระ ) ที่ขาดหายไปในตอนท้ายของบรรทัดที่ 4 เมื่อพยายามบันทึกสคริปต์ คุณจะได้รับข้อผิดพลาดต่อไปนี้

ไม่มี ) หลังจากรายการอาร์กิวเมนต์ (บรรทัดที่ 4)

ข้อผิดพลาดประเภทนี้มักจะแก้ไขได้ง่าย เพราะพบได้ทันทีและมักมีสาเหตุง่ายๆ คุณไม่สามารถบันทึกไฟล์ที่มีข้อผิดพลาดทางไวยากรณ์ หมายความว่าระบบจะบันทึกเฉพาะโค้ดที่ถูกต้องลงในโปรเจ็กต์

ข้อผิดพลาดเกี่ยวกับรันไทม์

ข้อผิดพลาดเหล่านี้เกิดจากการใช้ฟังก์ชันหรือคลาสอย่างไม่ถูกต้อง และจะตรวจพบได้เมื่อเรียกใช้สคริปต์แล้วเท่านั้น ตัวอย่างเช่น โค้ดต่อไปนี้ทำให้เกิดข้อผิดพลาดรันไทม์

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ");
  MailApp.sendEmail('john',
                    'Data in row ' + rowNumber,
                    rowData);
}

โค้ดมีรูปแบบที่ถูกต้อง แต่เราจะส่งค่า "john" สำหรับอีเมลเมื่อเรียกใช้ MailApp.sendEmail เนื่องจากที่อยู่อีเมลไม่ถูกต้อง จึงมีข้อผิดพลาดต่อไปนี้เมื่อเรียกใช้สคริปต์

อีเมลไม่ถูกต้อง: john (บรรทัดที่ 5)

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

ข้อผิดพลาดที่พบบ่อย

ด้านล่างนี้คือรายการข้อผิดพลาดที่พบบ่อยและสาเหตุ

มีการเรียกบริการหลายครั้งเกินไป: <action name>

ข้อผิดพลาดนี้บ่งบอกว่าคุณได้ใช้การดำเนินการหนึ่งๆ เกินโควต้าต่อวันแล้ว เช่น คุณอาจพบข้อผิดพลาดนี้หากส่งอีเมลมากเกินไปใน 1 วัน โควต้าจะตั้งไว้ที่ระดับต่างๆ กันสำหรับบัญชีผู้ใช้ทั่วไป โดเมน และบัญชีพรีเมียม และอาจเปลี่ยนแปลงได้ตลอดเวลาโดยไม่ต้องประกาศจาก Google ล่วงหน้า คุณดูขีดจำกัดโควต้าสำหรับการดำเนินการต่างๆ ได้ในเอกสารประกอบเกี่ยวกับโควต้าของ Apps Script

เซิร์ฟเวอร์ไม่พร้อมใช้งานหรือเกิดข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์ โปรดลองอีกครั้ง

ข้อผิดพลาดเหล่านี้เกิดจากสาเหตุที่เป็นไปได้บางประการดังนี้

  • เซิร์ฟเวอร์หรือระบบของ Google ไม่พร้อมทำงานชั่วคราว โปรดรอสักครู่ แล้วลองเรียกใช้สคริปต์อีกครั้ง
  • มีข้อผิดพลาดในสคริปต์ของคุณซึ่งไม่มีข้อความแสดงข้อผิดพลาดที่เกี่ยวข้อง ลองแก้ไขข้อบกพร่องของสคริปต์และดูว่าคุณสามารถแยกปัญหาได้หรือไม่
  • มีข้อบกพร่องใน Google Apps Script ที่ทําให้เกิดข้อผิดพลาดนี้ ดูคำแนะนำในการค้นหาและส่งรายงานข้อบกพร่องได้ที่ข้อบกพร่อง ก่อนจะรายงานข้อบกพร่องใหม่ ให้ค้นหาว่ามีผู้อื่นรายงานข้อบกพร่องนั้นแล้วหรือไม่

คุณต้องได้รับสิทธิ์ในการดำเนินการดังกล่าว

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

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

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

  1. คลิกทริกเกอร์ ทางด้านซ้ายของโครงการ Apps Script
  2. ที่ด้านขวาของทริกเกอร์ที่ต้องการนำออก ให้คลิกเพิ่มเติม > ลบทริกเกอร์

นอกจากนี้ คุณยังนำทริกเกอร์ส่วนเสริมที่เป็นปัญหาออกได้โดยถอนการติดตั้งส่วนเสริม

การเข้าถึงถูกปฏิเสธ: DriveApp หรือ นโยบายโดเมนได้ปิดใช้แอปไดรฟ์ของบุคคลที่สาม

ผู้ดูแลระบบของ Google Workspace โดเมนสามารถปิดใช้ Drive API สำหรับโดเมน ซึ่งจะป้องกันไม่ให้ผู้ใช้ติดตั้งและใช้แอป Google ไดรฟ์ การตั้งค่านี้ยังป้องกันไม่ให้ผู้ใช้ใช้ส่วนเสริม Apps Script ที่ใช้บริการไดรฟ์หรือบริการไดรฟ์ขั้นสูง (แม้ว่าสคริปต์จะได้รับอนุญาตก่อนที่ผู้ดูแลระบบจะปิดใช้ Drive API ก็ตาม)

อย่างไรก็ตาม หากมีการเผยแพร่ส่วนเสริมหรือเว็บแอปที่ใช้บริการไดรฟ์สำหรับการติดตั้งทั่วทั้งโดเมน และผู้ดูแลระบบติดตั้งโดยผู้ดูแลระบบสำหรับผู้ใช้บางรายหรือทั้งหมดในโดเมน สคริปต์จะทำงานสำหรับผู้ใช้เหล่านั้นแม้ว่าจะปิดใช้ Drive API ในโดเมนก็ตาม

สคริปต์ไม่ได้รับอนุญาตให้รับข้อมูลประจำตัวของผู้ใช้ที่ใช้งานอยู่

บ่งบอกว่าข้อมูลระบุตัวตนและอีเมลของผู้ใช้ที่ใช้งานอยู่ใช้ไม่ได้กับสคริปต์ คำเตือนนี้มาจากการโทรหา Session.getActiveUser() นอกจากนี้ยังอาจเกิดจากการเรียกใช้ Session.getEffectiveUser() หากสคริปต์ทํางานในโหมดการให้สิทธิ์อื่นที่ไม่ใช่ AuthMode.FULL หากมีการส่งสัญญาณคำเตือนนี้ การเรียกครั้งต่อๆ มาที่ User.getEmail() จะแสดงผลเฉพาะ ""

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

  • ใน AuthMode.FULL ให้พิจารณาใช้ Session.getEffectiveUser() แทน
  • ใน AuthMode.LIMITED ให้ตรวจสอบว่าเจ้าของได้ให้สิทธิ์สคริปต์แล้ว
  • ในโหมดการให้สิทธิ์อื่นๆ ให้หลีกเลี่ยงการเรียกใช้ทั้งสองวิธี
  • หากคุณเป็น Google Workspace ลูกค้าที่เพิ่งเห็นคำเตือนนี้จากทริกเกอร์ที่ติดตั้งได้ ให้ตรวจสอบว่าทริกเกอร์นั้นทำงานอยู่ในฐานะผู้ใช้ภายในองค์กรของคุณ

คลังหายไป

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

  • คัดลอกและวางโค้ดของไลบรารีลงในสคริปต์ของคุณ และนำทรัพยากร Dependency ของไลบรารีออก
  • คัดลอกสคริปต์ไลบรารีและใช้เป็นไลบรารีจากบัญชีของคุณ อย่าลืมอัปเดตการอ้างอิงในสคริปต์ต้นฉบับเป็นไลบรารีใหม่แทนไลบรารีสาธารณะ

เกิดข้อผิดพลาดเนื่องจากไม่มีเวอร์ชันไลบรารีหรือเวอร์ชันการทำให้ใช้งานได้ รหัสข้อผิดพลาด Not_Found

ข้อความแสดงข้อผิดพลาดนี้แสดงข้อใดข้อหนึ่งต่อไปนี้

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

Error 400: invalid_scope เมื่อเรียกใช้ Google Chat API ด้วยบริการขั้นสูง

หากคุณเห็น Error 400: invalid_scope พร้อมข้อความแสดงข้อผิดพลาด Some requested scopes cannot be shown หมายความว่าคุณไม่ได้ระบุขอบเขตการให้สิทธิ์ใดๆ ในไฟล์ appsscript.json ของโปรเจ็กต์ Apps Script ในกรณีส่วนใหญ่ Apps Script จะกำหนดขอบเขตที่สคริปต์จำเป็นต้องใช้โดยอัตโนมัติ แต่เมื่อคุณใช้บริการขั้นสูงของ Chat คุณต้องเพิ่มขอบเขตการให้สิทธิ์ที่สคริปต์ใช้ลงในไฟล์ Manifest ของโปรเจ็กต์ Apps Script ด้วยตนเอง ดูการตั้งค่าขอบเขตที่ชัดเจน

หากต้องการแก้ไขข้อผิดพลาด ให้เพิ่มขอบเขตการให้สิทธิ์ที่เหมาะสมลงในไฟล์ appsscript.json ของโปรเจ็กต์ Apps Script โดยเป็นส่วนหนึ่งของอาร์เรย์ oauthScopes เช่น หากต้องการเรียกใช้เมธอด spaces.messages.create ให้เพิ่มคำสั่งต่อไปนี้

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

การแก้ไขข้อบกพร่อง

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

Logging

ขณะแก้ไขข้อบกพร่อง คุณควรบันทึกข้อมูลขณะดำเนินโปรเจ็กต์สคริปต์ Google Apps Script มีวิธีบันทึกข้อมูล 2 วิธี ได้แก่ บริการบันทึกระบบคลาวด์ และบริการบันทึกและคอนโซลขั้นพื้นฐานเพิ่มเติมที่มีอยู่ในเครื่องมือแก้ไข Apps Script

ดูรายละเอียดเพิ่มเติมในคู่มือการบันทึก

Error Reporting

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

หากต้องการเข้าถึง Error Reporting โปรดดูหัวข้อดูบันทึก Cloud และรายงานข้อผิดพลาดในคอนโซล Google Cloud Platform

การดำเนินการ

ทุกครั้งที่คุณเรียกใช้สคริปต์ Apps Script จะสร้างบันทึกการดำเนินการ ซึ่งรวมถึงบันทึกของ Cloud ด้วย ระเบียนเหล่านี้จะช่วยให้คุณทราบว่าสคริปต์ได้ดำเนินการใดบ้าง

หากต้องการดูการดำเนินการของสคริปต์ในโปรเจ็กต์ Apps Script ให้คลิกการดำเนินการ ทางด้านซ้าย

กำลังตรวจสอบสถานะบริการ Apps Script

แม้ว่าบริการ Google Workspace บางรายการ (เช่น Gmail หรือไดรฟ์) จะมีปัญหาชั่วคราวซึ่งอาจนำไปสู่การหยุดทำงานของบริการได้ในบางครั้ง ในกรณีนี้ โปรเจ็กต์ Apps Script ที่โต้ตอบกับบริการเหล่านี้อาจไม่ทำงานตามที่คาดไว้

คุณสามารถตรวจสอบว่าบริการ Google Workspace หยุดทำงานหรือไม่โดยดูที่แดชบอร์ดสถานะของ Google Workspace หากพบปัญหาการหยุดทำงานในขณะนี้ คุณสามารถรอให้ปัญหาได้รับการแก้ไขหรือขอความช่วยเหลือเพิ่มเติมได้ในศูนย์ช่วยเหลือของ Google Workspace หรือเอกสารปัญหาที่ทราบเกี่ยวกับ Google Workspace

ใช้โปรแกรมแก้ไขข้อบกพร่องและเบรกพอยท์

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

เพิ่มเบรกพอยท์

หากต้องการเพิ่มเบรกพอยท์ ให้วางเมาส์เหนือหมายเลขบรรทัดของบรรทัดที่คุณต้องการเพิ่มเบรกพอยท์ คลิกวงกลมที่ด้านซ้ายของหมายเลขบรรทัด รูปภาพด้านล่างแสดงตัวอย่างเบรกพอยท์ที่เพิ่มลงในสคริปต์

เพิ่มเบรกพอยท์

เรียกใช้สคริปต์ในโหมดแก้ไขข้อบกพร่อง

หากต้องการเรียกใช้สคริปต์ในโหมดแก้ไขข้อบกพร่อง ให้คลิกแก้ไขข้อบกพร่องที่ด้านบนของเครื่องมือแก้ไข

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

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

ปัญหาเกี่ยวกับบัญชี Google หลายบัญชี

หากลงชื่อเข้าใช้บัญชี Google หลายบัญชีพร้อมกัน คุณอาจมีปัญหาในการเข้าถึงส่วนเสริมและเว็บแอป ระบบไม่รองรับการเข้าสู่ระบบหลายบัญชีหรือการเข้าสู่ระบบบัญชี Google หลายบัญชีพร้อมกัน Apps Script, ส่วนเสริม หรือเว็บแอป

  • หากคุณเปิดเครื่องมือแก้ไข Apps Script ขณะลงชื่อเข้าสู่ระบบมากกว่า 1 บัญชี Google จะแจ้งเตือนให้คุณเลือกบัญชีที่ต้องการดำเนินการต่อ

  • หากคุณเปิดเว็บแอปหรือส่วนเสริมและพบปัญหาเกี่ยวกับการเข้าสู่ระบบหลายบัญชี ให้ลองใช้วิธีแก้ปัญหาวิธีใดวิธีหนึ่งต่อไปนี้

    • ออกจากระบบบัญชี Google ทั้งหมด แล้วเข้าสู่ระบบเฉพาะบัญชีที่มีส่วนเสริมหรือเว็บแอปที่คุณต้องการเข้าถึงเท่านั้น
    • เปิดหน้าต่างที่ไม่ระบุตัวตนใน Google Chrome หรือหน้าต่างการเรียกดูแบบส่วนตัวที่เทียบเท่า และเข้าสู่ระบบบัญชี Google ที่มีส่วนเสริมหรือเว็บแอปที่คุณต้องการเข้าถึง

การขอความช่วยเหลือ

การแก้ไขข้อบกพร่องโดยใช้เครื่องมือและเทคนิคที่แสดงอยู่ด้านบนจะช่วยแก้ปัญหาต่างๆ ได้ แต่อาจมีปัญหาที่คุณต้องทำให้ได้รับความช่วยเหลือเพิ่มเติม ดูข้อมูลเกี่ยวกับตำแหน่งสำหรับถามคำถามและรายงานข้อบกพร่องได้ที่หน้าการสนับสนุน