Khắc phục sự cố

Ngay cả nhà phát triển giàu kinh nghiệm nhất cũng hiếm khi viết mã chính xác ngay từ lần đầu tiên, khiến việc khắc phục sự cố trở thành một phần quan trọng trong quá trình phát triển. Trong phần này, chúng ta sẽ đề cập đến một số kỹ thuật có thể giúp bạn tìm, hiểu và gỡ lỗi trong tập lệnh.

Thông báo lỗi

Khi tập lệnh gặp lỗi, một thông báo lỗi sẽ xuất hiện. Thông báo này đi kèm với số dòng dùng để khắc phục sự cố. Có hai loại lỗi cơ bản được hiển thị theo cách này: lỗi cú pháplỗi thời gian chạy.

Lỗi cú pháp

Lỗi cú pháp là do việc viết mã không tuân theo ngữ pháp JavaScript và lỗi được phát hiện ngay khi bạn cố gắng lưu tập lệnh. Ví dụ: đoạn mã sau đây chứa lỗi cú pháp:

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);
}

Vấn đề về cú pháp ở đây là thiếu ký tự ) ở cuối dòng thứ bốn. Khi cố gắng lưu tập lệnh, bạn sẽ gặp lỗi sau:

Thiếu dấu ) sau danh sách đối số. (dòng 4)

Những loại lỗi này thường dễ khắc phục vì bạn có thể phát hiện ngay và thường có nguyên nhân đơn giản. Bạn không thể lưu tệp chứa lỗi cú pháp, nghĩa là chỉ có mã hợp lệ mới được lưu vào dự án.

Lỗi thời gian chạy

Những lỗi này là do sử dụng hàm hoặc lớp không đúng cách và chỉ có thể được phát hiện sau khi tập lệnh chạy. Ví dụ: mã sau đây gây ra lỗi thời gian chạy:

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);
}

Mã được định dạng chính xác, nhưng chúng ta đang truyền giá trị "john" cho địa chỉ email khi gọi MailApp.sendEmail. Vì đây không phải là địa chỉ email hợp lệ, nên sẽ xảy ra lỗi khi chạy tập lệnh:

Email không hợp lệ: john (dòng 5)

Điều khiến những lỗi này khó khắc phục hơn là thường thì dữ liệu bạn đang truyền vào một hàm không được viết trong mã, mà được lấy từ bảng tính, biểu mẫu hoặc nguồn dữ liệu bên ngoài khác. Việc sử dụng các kỹ thuật gỡ lỗi dưới đây có thể giúp bạn xác định nguyên nhân gây ra các lỗi này.

Lỗi phổ biến

Dưới đây là danh sách các lỗi thường gặp và nguyên nhân gây ra lỗi.

Dịch vụ đã gọi quá nhiều lần: <action name>

Lỗi này cho biết rằng bạn đã vượt quá hạn mức hằng ngày cho một hành động nhất định. Ví dụ: bạn có thể gặp lỗi này nếu gửi quá nhiều email trong một ngày. Các hạn mức này được đặt ở nhiều cấp cho tài khoản người tiêu dùng, tài khoản miền và tài khoản cao cấp, đồng thời có thể thay đổi bất cứ lúc nào mà không cần thông báo trước của Google. Bạn có thể xem các hạn mức hạn mức cho nhiều hành động trong tài liệu về hạn mức của Apps Script.

Máy chủ không hoạt động. hoặc Đã xảy ra lỗi máy chủ, vui lòng thử lại.

Dưới đây là một vài nguyên nhân có thể dẫn đến những lỗi này:

  • Một máy chủ hoặc hệ thống của Google tạm thời không hoạt động. Hãy đợi trong giây lát và thử chạy lại tập lệnh.
  • Tập lệnh của bạn có lỗi nhưng không có thông báo lỗi tương ứng. Hãy thử gỡ lỗi tập lệnh của bạn và xem liệu bạn có thể tách biệt vấn đề hay không.
  • Có một lỗi trong Google Apps Script đang gây ra lỗi này. Để biết hướng dẫn về cách tìm và gửi báo cáo lỗi, hãy xem phần Lỗi. Trước khi báo cáo lỗi mới, hãy tìm kiếm để xem liệu người khác đã báo cáo lỗi đó hay chưa.

Bạn cần được uỷ quyền để thực hiện thao tác đó.

Lỗi này cho biết tập lệnh đang thiếu quyền cần thiết để chạy. Khi một tập lệnh được chạy trong Trình chỉnh sửa tập lệnh hoặc từ một mục trình đơn tuỳ chỉnh, một hộp thoại uỷ quyền sẽ hiển thị cho người dùng. Tuy nhiên, khi một tập lệnh chạy qua một điều kiện kích hoạt, được nhúng bằng trang Google Sites hoặc chạy như một dịch vụ, thì hộp thoại sẽ không thể hiện và lỗi này sẽ xuất hiện.

Để cho phép tập lệnh, hãy mở Trình chỉnh sửa tập lệnh rồi chạy bất kỳ hàm nào. Lời nhắc uỷ quyền sẽ xuất hiện để bạn có thể uỷ quyền cho dự án tập lệnh. Nếu tập lệnh chứa các dịch vụ mới chưa được uỷ quyền, bạn phải uỷ quyền lại tập lệnh.

Lỗi này thường do điều kiện kích hoạt được kích hoạt trước khi người dùng uỷ quyền. Nếu không có quyền truy cập vào dự án tập lệnh (ví dụ: lỗi xảy ra với một tiện ích bổ sung mà bạn sử dụng), thì thông thường, bạn có thể uỷ quyền cho tập lệnh bằng cách sử dụng lại tiện ích bổ sung đó. Nếu một điều kiện kích hoạt tiếp tục kích hoạt và gây ra lỗi này, bạn có thể xoá điều kiện kích hoạt bằng cách làm như sau:

  1. Ở bên trái dự án Apps Script, hãy nhấp vào biểu tượng Trình kích hoạt .
  2. Ở bên phải điều kiện kích hoạt mà bạn muốn xoá, hãy nhấp vào biểu tượng Tuỳ chọn khác > Xoá điều kiện kích hoạt.

Bạn cũng có thể xoá các trình kích hoạt tiện ích bổ sung có vấn đề bằng cách gỡ cài đặt tiện ích bổ sung.

Quyền truy cập bị từ chối: DriveApp hoặc Chính sách miền đã vô hiệu hoá các ứng dụng Drive của bên thứ ba

Quản trị viên của các miền Google Workspace có thể tắt API Drive cho miền của họ. API này ngăn người dùng cài đặt và dùng các ứng dụng Google Drive. Chế độ cài đặt này cũng ngăn người dùng sử dụng các tiện ích bổ sung Apps Script dùng dịch vụ Drive hoặc Dịch vụ Drive nâng cao (ngay cả khi tập lệnh đã được uỷ quyền trước khi quản trị viên tắt API Drive).

Tuy nhiên, nếu một tiện ích bổ sung hoặc ứng dụng web sử dụng dịch vụ Drive được phát hành để cài đặt trên toàn miền và được quản trị viên cài đặt cho một số hoặc tất cả người dùng trong miền, thì tập lệnh sẽ hoạt động đối với những người dùng đó ngay cả khi API Drive bị tắt trong miền.

Tập lệnh không có quyền lấy danh tính của người dùng đang hoạt động.

Cho biết rằng tập lệnh không có danh tính và email của người dùng đang hoạt động. Cảnh báo này là do lệnh gọi đến Session.getActiveUser(). Lỗi này cũng có thể xảy ra do lệnh gọi đến Session.getEffectiveUser() nếu tập lệnh đang chạy ở chế độ uỷ quyền khác với AuthMode.FULL. Nếu cảnh báo này được báo hiệu, các lệnh gọi tiếp theo đến User.getEmail() sẽ chỉ trả về "".

Có một số cách để khắc phục cảnh báo này, tuỳ thuộc vào chế độ uỷ quyền mà tập lệnh đang chạy. Chế độ uỷ quyền được hiển thị trong các hàm được kích hoạt dưới dạng thuộc tính authMode của tham số sự kiện e.

  • Trong AuthMode.FULL, hãy cân nhắc sử dụng Session.getEffectiveUser().
  • Trong AuthMode.LIMITED, hãy đảm bảo rằng chủ sở hữu đã cho phép tập lệnh.
  • Trong các chế độ uỷ quyền khác, hãy tránh gọi một trong hai phương thức.
  • Nếu bạn là Google Workspace khách hàng mới gặp phải cảnh báo này qua điều kiện kích hoạt có thể cài đặt, hãy đảm bảo rằng điều kiện kích hoạt này đang chạy với tư cách là người dùng trong tổ chức của bạn.

Thiếu thư viện

Nếu thêm một thư viện phổ biến vào tập lệnh, bạn có thể nhận được thông báo lỗi cho biết thư viện đó bị thiếu, mặc dù thư viện được liệt kê là phần phụ thuộc cho tập lệnh. Lý do có thể là có quá nhiều người đang truy cập vào thư viện cùng một lúc. Để tránh lỗi này, hãy thử một trong các giải pháp sau:

  • Sao chép và dán mã của thư viện vào tập lệnh rồi xoá phần phụ thuộc thư viện.
  • Sao chép tập lệnh thư viện và triển khai tập lệnh đó dưới dạng thư viện trong tài khoản của bạn. Hãy nhớ cập nhật phần phụ thuộc trong tập lệnh ban đầu của bạn thành thư viện mới thay vì thư viện công khai.

Đã xảy ra lỗi do thiếu một phiên bản thư viện hoặc phiên bản triển khai. Mã lỗi Not_Found

Thông báo lỗi này cho biết một trong những điều sau:

  • Phiên bản đã triển khai của tập lệnh đã bị xoá. Để cập nhật phiên bản tập lệnh đã triển khai, hãy xem phần Chỉnh sửa một bản triển khai có phiên bản.
  • Phiên bản thư viện mà tập lệnh sử dụng đã bị xoá. Để kiểm tra thư viện nào bị thiếu, bên cạnh tên thư viện, hãy nhấp vào biểu tượng Tuỳ chọn khác > Mở trong thẻ mới. Thư viện bị thiếu sẽ đưa ra thông báo lỗi. Sau khi tìm thấy thư viện cần cập nhật, hãy thực hiện một trong những thao tác sau:
    • Cập nhật thư viện để sử dụng một phiên bản khác. Xem phần Cập nhật thư viện.
    • Xoá thư viện đã xoá khỏi dự án tập lệnh và mã. Xem bài viết Xoá thư viện.
  • Tập lệnh của một thư viện mà tập lệnh của bạn sử dụng bao gồm một thư viện khác sử dụng phiên bản đã bị xoá. Thực hiện một trong các thao tác sau:
    • Nếu bạn có quyền chỉnh sửa thư viện mà tập lệnh của bạn sử dụng, hãy cập nhật thư viện phụ trong tập lệnh đó lên phiên bản hiện có.
    • Hãy cập nhật thư viện để sử dụng một phiên bản khác. Xem phần Cập nhật thư viện.
    • Xoá thư viện khỏi dự án tập lệnh và mã. Xem bài viết Xoá thư viện.

Lỗi 400: invalid_scope khi gọi API Google Chat bằng dịch vụ nâng cao

Nếu bạn gặp Error 400: invalid_scope với thông báo lỗi Some requested scopes cannot be shown, thì tức là bạn chưa chỉ định phạm vi uỷ quyền nào trong tệp appsscript.json của dự án Apps Script. Trong hầu hết các trường hợp, Apps Script sẽ tự động xác định phạm vi mà tập lệnh cần, nhưng khi sử dụng dịch vụ nâng cao Chat, bạn phải thêm phạm vi uỷ quyền mà tập lệnh sử dụng vào tệp kê khai của dự án Apps Script theo cách thủ công. Xem phần Đặt phạm vi rõ ràng.

Để giải quyết lỗi này, hãy thêm các phạm vi uỷ quyền thích hợp vào tệp appsscript.json của dự án Apps Script như một phần của mảng oauthScopes. Ví dụ: để gọi phương thức spaces.messages.create, hãy thêm nội dung sau:

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

Quản trị viên của bạn không cho phép thực hiện các lệnh gọi UrlFetch đến <URL>

Quản trị viên Google Workspace có thể bật danh sách cho phép trong bảng điều khiển dành cho quản trị viên để kiểm soát những miền bên ngoài mà bạn có thể truy cập thông qua Apps Script.

Để khắc phục lỗi này, hãy liên hệ với quản trị viên để yêu cầu họ thêm URL vào danh sách cho phép.

Gỡ lỗi

Không phải lỗi nào cũng khiến thông báo lỗi xuất hiện. Có thể có một lỗi tinh vi hơn trong đó mã về mặt kỹ thuật là chính xác và có thể thực thi, nhưng kết quả không như bạn mong đợi. Sau đây là một số chiến lược để xử lý các tình huống như vậy và điều tra thêm về một tập lệnh không chạy theo cách bạn mong đợi.

Ghi nhật ký

Trong khi gỡ lỗi, thông thường, bạn nên ghi lại thông tin khi dự án tập lệnh thực thi. Google Apps Script có 2 phương thức để ghi nhật ký thông tin: Dịch vụ ghi nhật ký trên đám mâyDịch vụ trình ghi nhật ký và bảng điều khiển cơ bản hơn được tích hợp trong trình chỉnh sửa Apps Script.

Xem Hướng dẫn ghi nhật ký để biết thêm thông tin chi tiết.

Error Reporting

Các trường hợp ngoại lệ xảy ra do lỗi thời gian chạy sẽ tự động được ghi lại bằng dịch vụ Báo cáo lỗi của Google Cloud. Dịch vụ này cho phép bạn tìm kiếm và lọc thông báo ngoại lệ mà dự án tập lệnh tạo ra.

Để truy cập vào tính năng Báo cáo lỗi, hãy xem bài viết Xem nhật ký Cloud và báo cáo lỗi trong bảng điều khiển Google Cloud Platform.

Thực thi

Mỗi khi bạn chạy một tập lệnh, Apps Script sẽ ghi lại quá trình thực thi, bao gồm cả nhật ký trên đám mây. Các bản ghi này có thể giúp bạn hiểu được tập lệnh của mình đã thực hiện những hành động nào.

Để xem các lượt thực thi tập lệnh của bạn trong dự án Apps Script, ở bên trái, hãy nhấp vào Các lượt thực thi .

Kiểm tra trạng thái dịch vụ Apps Script

Mặc dù hiếm khi xảy ra, nhưng đôi khi một số dịch vụ cụ thể của Google Workspace (chẳng hạn như Gmail hoặc Drive) gặp phải các vấn đề tạm thời có thể dẫn đến tình trạng ngừng cung cấp dịch vụ. Khi điều này xảy ra, các dự án Apps Script tương tác với các dịch vụ này có thể không hoạt động như mong đợi.

Bạn có thể kiểm tra xem có dịch vụ Google Workspace nào bị ngừng hoạt động hay không bằng cách xem Trang tổng quan trạng thái Google Workspace. Nếu đang gặp sự cố ngừng hoạt động, bạn có thể chờ sự cố được khắc phục hoặc yêu cầu trợ giúp thêm trong Trung tâm trợ giúp của Google Workspace hoặc tài liệu Các sự cố đã biết của Google Workspace.

Sử dụng trình gỡ lỗi và điểm ngắt

Để tìm vấn đề trong tập lệnh, bạn có thể chạy tập lệnh đó ở chế độ gỡ lỗi. Khi chạy ở chế độ gỡ lỗi, tập lệnh sẽ tạm dừng khi gặp điểm ngắt, đây là dòng bạn đã làm nổi bật trong tập lệnh mà bạn cho là có thể gặp vấn đề. Khi một tập lệnh tạm dừng, tập lệnh đó sẽ hiển thị giá trị của từng biến tại thời điểm đó, cho phép bạn kiểm tra hoạt động bên trong của tập lệnh mà không cần thêm nhiều câu lệnh ghi nhật ký.

Thêm điểm ngắt

Để thêm điểm ngắt, hãy di chuột qua số dòng của dòng mà bạn muốn thêm điểm ngắt. Ở bên trái số dòng, hãy nhấp vào vòng tròn. Hình ảnh bên dưới cho thấy ví dụ về một điểm ngắt được thêm vào tập lệnh:

Thêm điểm ngắt

Chạy tập lệnh ở chế độ gỡ lỗi

Để chạy tập lệnh ở chế độ gỡ lỗi, ở đầu trình chỉnh sửa, hãy nhấp vào Gỡ lỗi.

Trước khi tập lệnh chạy dòng có điểm ngắt, tập lệnh sẽ tạm dừng và hiển thị bảng thông tin gỡ lỗi. Bạn có thể sử dụng bảng này để kiểm tra dữ liệu như giá trị của các thông số và thông tin được lưu trữ trong các đối tượng.

Để kiểm soát cách chạy tập lệnh, ở đầu bảng điều khiển Trình gỡ lỗi, hãy sử dụng các nút "Bước vào", "Bước qua" và "Rời khỏi". Những cách này cho phép bạn chạy tập lệnh từng dòng một và kiểm tra xem các giá trị thay đổi như thế nào theo thời gian.

Vấn đề khi có nhiều Tài khoản Google

Nếu đăng nhập vào nhiều Tài khoản Google cùng lúc, thì bạn có thể gặp sự cố khi truy cập các tiện ích bổ sung và ứng dụng web. Tính năng đăng nhập nhiều tài khoản, hay đăng nhập vào nhiều Tài khoản Google cùng lúc, không được hỗ trợ đối với Apps Script, tiện ích bổ sung hoặc ứng dụng web.

  • Nếu bạn mở trình chỉnh sửa Apps Script khi đã đăng nhập vào nhiều tài khoản, Google sẽ nhắc bạn chọn tài khoản mà bạn muốn tiếp tục.

  • Nếu bạn mở một ứng dụng web hoặc tiện ích bổ sung và gặp vấn đề khi đăng nhập nhiều tài khoản, hãy thử một trong các giải pháp sau:

    • Đăng xuất khỏi tất cả Tài khoản Google của bạn và chỉ đăng nhập vào tài khoản có tiện ích bổ sung hoặc ứng dụng web mà bạn muốn truy cập.
    • Mở cửa sổ ẩn danh trong Google Chrome hoặc một cửa sổ duyệt web ở chế độ riêng tư tương đương rồi đăng nhập vào Tài khoản Google có tiện ích bổ sung hoặc ứng dụng web mà bạn muốn truy cập.

Nhận trợ giúp

Việc gỡ lỗi một vấn đề bằng các công cụ và kỹ thuật nêu trên có thể giải quyết nhiều vấn đề, nhưng có thể bạn sẽ gặp phải một số vấn đề cần được trợ giúp thêm để giải quyết. Hãy xem Trang hỗ trợ của chúng tôi để biết thông tin về nơi đặt câu hỏi và báo cáo lỗi.