Khắc phục sự cố

Ngay cả nhà phát triển có kinh nghiệm nhất cũng hiếm khi viết mã chính xác trong lần thử đầ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 tôi 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 của mình.

Thông báo lỗi

Khi tập lệnh của bạn gặp lỗi, thông báo lỗi sẽ xuất hiện. Thông báo đi kèm với một số dòng dùng để khắc phục sự cố. Có hai loại lỗi cơ bản hiển thị theo cách sau: 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 đề cú pháp ở đây là thiếu ký tự ) ở cuối dòng thứ tư. Khi cố gắng lưu tập lệnh, bạn sẽ gặp lỗi sau:

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

Những loại lỗi này thường rất dễ khắc phục vì chúng được phát hiện ngay lập tức 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ỉ phát hiện được 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 chuyể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 các lỗi này khó khắc phục hơn là dữ liệu bạn đang truyền vào một hàm không được viết bằng mã mà thay vào đó được lấy từ mộ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 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 những lỗi này.

Các 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 các 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 phải 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 hạn mức cho nhiều thao tác 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áy chủ hoặc hệ thống của Google tạm thời không khả dụng. Hãy đợi trong giây lát và thử chạy lại tập lệnh.
  • Đã xảy ra lỗi trong tập lệnh 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ó lỗi trong Google Apps Script 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 lỗi mới, hãy tìm kiếm xem 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 thiếu sự cho phép cần thiết để chạy. Khi tập lệnh chạy trong Trình chỉnh sửa tập lệnh hoặc từ một mục trong trình đơn tuỳ chỉnh, 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 dự án tập lệnh. Nếu tập lệnh chứa các dịch vụ mới trái phép, bạn phải uỷ quyền lại cho tập lệnh đó.

Lỗi này thường do các đ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 (chẳng hạn như vì 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, thì 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 của 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 Thêm > Xoá điều kiện kích hoạt.

Bạn cũng có thể xoá các điều kiện 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 vô hiệu hoá 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 danh tính và email của người dùng đang hoạt động không có sẵn cho tập lệnh. Cảnh báo này xuất phát từ lệnh gọi đến Session.getActiveUser(). Điều này cũng có thể là kết quả của lệnh gọi đến Session.getEffectiveUser() nếu tập lệnh đang chạy ở chế độ uỷ quyền không phải AuthMode.FULL. Nếu cảnh báo này được báo hiệu, thì các lệnh gọi tiếp theo tới User.getEmail() chỉ trả về "".

Có một số cách để khắc phục sự cố cho 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 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 đã uỷ quyền 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 này bị thiếu, mặc dù thư viện này được liệt kê là phần phụ thuộc cho tập lệnh của bạn. Nguyên nhân có thể là do có quá nhiều người đang truy cập vào thư viện cùng 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 đồng thời xoá phần phụ thuộc của 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 từ 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 gốc lên 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:

  • Đã xoá phiên bản triển khai của tập lệnh. Để cập nhật phiên bản đã triển khai của tập lệnh, hãy xem phần Chỉnh sửa phiên bản triển khai được lập phiên bản.
  • Phiên bản thư viện mà tập lệnh sử dụng đã bị xoá. Để kiểm tra xem 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 một thông báo lỗi. Sau khi tìm thấy thư viện mà bạn cần cập nhật, hãy thực hiện một trong các thao tác sau:
    • 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 đã xoá khỏi dự án tập lệnh và mã của bạn. Hãy xem phần Xoá thư viện.
  • Tập lệnh của 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ã của bạn. Hãy xem phần Xoá thư viện.

Error 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 trường hợp, Apps Script sẽ tự động xác định phạm vi mà một tập lệnh cần. Tuy nhiên, khi sử dụng dịch vụ Chat nâng cao, bạn phải tự thêm phạm vi uỷ quyền mà tập lệnh của bạn dùng vào tệp kê khai của dự án Apps Script. Xem phần Đặt phạm vi rõ ràng.

Để khắc phục lỗi này, hãy thêm 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 đoạn mã sau:

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

Gỡ lỗi

Không phải lỗi nào cũng khiến thông báo lỗi hiển thị. Có thể sẽ xảy ra lỗi nhỏ hơn khi mã là mã chính xác về mặt kỹ thuật và có thể thực thi, nhưng kết quả lại không như bạn mong đợi. Dưới đâ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 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 các thông báo ngoại lệ mà dự án tập lệnh của bạn tạo ra.

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

Thực thi

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

Để 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 sự cố tạm thời có thể dẫn đến tình trạng ngừng 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 dịch vụ 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 dịch vụ, bạn có thể chờ chúng tôi giải quyết hoặc tìm thêm sự trợ giúp trong Trung tâm trợ giúp của Google Workspace hoặc tài liệu về Các vấn đề đã biết của Google Workspace.

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

Để xác định sự cố trong tập lệnh của mình, bạn có thể chạy tập lệnh đó ở chế độ gỡ lỗi. Khi chạy ở chế độ gỡ lỗi, một tập lệnh sẽ tạm dừng khi gặp điểm ngắt, đây là dòng bạn đã đánh dấu trong tập lệnh mà bạn cho rằng có thể có 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 phải 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 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 dưới đây 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 chạy dòng có điểm ngắt, tập lệnh sẽ tạm dừng và hiển thị một 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 tham 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, bạn có thể gặp sự cố khi truy cập vào các tiện ích bổ sung và ứng dụng web của mình. 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 trong khi đã đăng nhập vào nhiều tài khoản, thì 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 sự cố đă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 và chỉ đăng nhập vào tài khoản có ứng dụng web hoặc tiện ích bổ sung 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 gặp phải những vấn đề cần thêm sự trợ giúp để 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.