Khắc phục sự cố

Ngay cả những nhà phát triển giàu kinh nghiệm nhất cũng hiếm khi viết đúng mã trong lần thử đầu tiên, điều này 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ẽ giới thiệu 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 của bạn gặp lỗi, thông báo lỗi sẽ hiển thị. Thông báo này đi kèm với một số dòng dùng để khắc phục sự cố. Có 2 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 mã viết không tuân theo ngữ pháp JavaScript và lỗi sẽ đượ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à một ký tự ) bị thiếu ở cuối dòng thứ tư. Khi bạn 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 dễ khắc phục sự 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ỉ mã hợp lệ mới được lưu vào dự án của bạn.

Lỗi thời gian chạy

Các lỗi này là do sử dụng hàm hoặc lớp không chính xác 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ệ, hệ thống sẽ gửi ra lỗi sau đây 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 trở nên khó khắc phục hơn là do dữ liệu mà bạn truyền vào một hàm thường không được viết bằng 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 của 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 chúng.

Dịch vụ đã gọi quá nhiều lần: <tên hành động>

Lỗi này cho biết rằng bạn đã vượt quá hạn mức hằng ngày đối với một hành động cụ thể. 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. Hạn mức này được đặt ra ở các cấp khác nhau cho tài khoản người dùng tiêu dùng, tài khoản miền và tài khoản chính, đồng thời có thể thay đổi bất cứ lúc nào mà không có thông báo trước của Google. Bạn có thể xem giới hạn hạn mức cho nhiều hành động trong tài liệu về hạn mức 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.

Có một vài nguyên nhân có thể gây ra những lỗi này:

  • Máy chủ hoặc hệ thống của Google tạm thời không hoạt động. Vui lòng đợ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 của bạn 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ể xác định được 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 kiế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 hành động đó.

Lỗi này cho biết rằng 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ị với người dùng. Tuy nhiên, khi một tập lệnh chạy từ một điều kiện kích hoạt, được nhúng vào một trang Google Sites hoặc chạy dưới dạng một dịch vụ, hộp thoại sẽ không xuất hiện và lỗi này sẽ xuất hiện.

Để ủy quyền tập lệnh, hãy mở Trình chỉnh sửa tập lệnh và chạy hàm bất kỳ. 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ụ trái phép mới, bạn phải uỷ quyền lại tập lệnh.

Lỗi này thường xảy ra do điều kiện kích hoạt 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ụ: xảy ra lỗi với một tiện ích bổ sung mà bạn sử dụng), thường thì 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 Điều kiện kích hoạt .
  2. Ở bên phải của điều kiện kích hoạt mà bạn muốn xoá, hãy nhấp vào biểu tượng Xem 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 đã tắt các ứng dụng Drive của bên thứ ba

Quản trị viên của miền Google Workspace có thể tắt API Drive cho miền của họ. Điều này sẽ 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 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 cho 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 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ừ một lệnh gọi đến Session.getActiveUser(). Hoạt động này cũng có thể xuất phát từ 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, 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 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 thông 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, 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 từ một điều kiện kích hoạt có thể cài đặt, hãy đảm bảo rằng trình kích hoạt đang chạy với tư cách là một 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 của bạn. Lý do có thể là có quá nhiều người 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, đồ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 này 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 vào 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 tập lệnh được triển khai đã bị xoá. Để cập nhật phiên bản đã triển khai của tập lệnh, hãy xem nội dung 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 Thêm > 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 những 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.
    • Loại bỏ thư viện đã xóa 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 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 đã 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 các trường hợp, Apps Script sẽ tự động xác định những phạm vi mà 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 các 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. Xem phần Đặt phạm vi tường minh.

Để 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 trong 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 tất cả các lỗi đều khiến thông báo lỗi hiển thị. Có thể có một lỗi nhỏ hơn, đó là mã đã đúng về mặt kỹ thuật 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ý những tình huống như vậy và tìm hiểu thêm về một tập lệnh không chạy theo cách bạn mong đợi.

Ghi nhật ký

Mặc dù việc gỡ lỗi, nhưng thường thì bạn nên ghi lại thông tin khi thực thi dự án tập lệnh. 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âyCác dị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 sẵn 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ý trên đám mây 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ẽ tạo một bản ghi về lệnh thực thi đó, bao gồm cả nhật ký Cloud. Những bản ghi này có thể giúp bạn biết được tập lệnh của mình đã thực hiện những hành động nào.

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

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 các dịch vụ cụ thể của Google Workspace (chẳng hạn như Gmail hoặc Drive) gặp phải sự cố tạm thời và có thể khiến dịch vụ ngừng hoạt động. 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 ngừng hoạt động hay không bằng cách xem Trang tổng quan về trạng thái Google Workspace. Nếu đang gặp phải sự cố ngừng dịch vụ, hãy đợi giải quyết vấn đề đó hoặc tìm thêm 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 với Google Workspace.

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

Để xác định vấn đề 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, tập lệnh sẽ tạm dừng khi gặp điểm ngắt, đó là một dòng mà bạn đã đánh dấu trong tập lệnh mà bạn cho rằng 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 một tập lệnh mà không 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 của số dòng, 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 đã thêm vào một 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, hãy nhấp vào Gỡ lỗi ở đầu trình chỉnh sửa.

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ị 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 Debugger (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". Với các công cụ này, bạn có thể 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 đề với nhiều Tài khoản Google

Nếu đã đăng nhập vào nhiều Tài khoản Google cùng một 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. Tính năng đăng nhập nhiều tài khoản hoặc đăng nhập vào nhiều Tài khoản Google cùng lúc, không được hỗ trợ cho 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, 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 vấn đề khi đăng nhập nhiều lầ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ó tiện ích bổ sung hoặc ứng dụng web mà bạn muốn truy cập.
    • Mở một cửa sổ ẩn danh trong Google Chrome hoặc 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 sự cố 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 đề khác nhau, nhưng có thể có những vấn đề bạn gặp phải cần thêm 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 bạn có thể đặt câu hỏi và báo cáo lỗi.