与简单触发器一样,可安装触发器 在发生特定事件、 例如打开文档不过,可安装的触发器可提供更多 比单纯的触发器更加灵活:他们可以 服务 需要 授权, 它们还提供几种其他类型的事件,包括时间驱动(时钟) 触发器,并且可通过编程方式进行控制无论是简单的 可安装的触发器,Apps 脚本会将触发的函数 一 事件对象 有关事件发生时的背景的信息。
限制
尽管可安装的触发器比简单的触发器更加灵活, 它们仍受到一些限制:
- 如果文件在只读(查看或评论)模式下打开,则脚本不会运行。对于 独立的脚本,用户至少需要 确保触发器正常运行
脚本执行和 API 请求不会导致触发器运行。例如: 呼叫
FormResponse.submit()
提交新表单回复不会导致表单的提交触发器运行。可安装的触发器始终以创建者的账号运行 。例如,如果您创建一个可安装的开放式触发器,该触发器会运行 当您的同事打开文档时(如果您的同事拥有编辑权限), 但它是以您的账号身份运行的也就是说,如果您创建一个 打开文档时发送电子邮件,则电子邮件始终是从 您的账号,而不一定是打开该文档的账号。不过, 则可以为每个账号创建一个可安装的触发器,然后 。
即使某个账号无法查看通过第二个账号安装的触发器, 但第一个账号仍可以启用这些触发器。
可安装的触发器受 Apps 脚本触发器的约束 配额限制。
时间驱动的触发器
时间驱动的触发器(也称为时钟触发器)类似于 cron job。时间驱动型触发器 脚本在特定时间或按周期性间隔执行, 频率为每分钟一次,频率为每月一次。(请注意, 插件 可以使用时间驱动型触发器 最多每小时一次。)时间可能稍长一些 随机分配的值,例如,如果您创建一个周期性触发规则的触发器,且该触发器会在上午 9 点, Apps 脚本会选择上午 9 点到 10 点之间的时间,然后保留 每天都保持一致的时间 触发器再次触发。
以下是一个 Google Chat 应用 每分钟向应用所在的每个空间发布一条消息:
// Example app for Google Chat that demonstrates app-initiated messages
// by spamming the user every minute.
//
// This app makes use of the Apps Script OAuth2 library at:
// https://github.com/googlesamples/apps-script-oauth2
//
// Follow the instructions there to add the library to your script.
// When added to a space, we store the space's ID in ScriptProperties.
function onAddToSpace(e) {
PropertiesService.getScriptProperties()
.setProperty(e.space.name, '');
return {
'text': 'Hi! I\'ll post a message here every minute. ' +
'Please remove me after testing or I\'ll keep spamming you!'
};
}
// When removed from a space, we remove the space's ID from ScriptProperties.
function onRemoveFromSpace(e) {
PropertiesService.getScriptProperties()
.deleteProperty(e.space.name);
}
// Add a trigger that invokes this function every minute in the
// "Edit > Current Project's Triggers" menu. When it runs, it
// posts in each space the app was added to.
function onTrigger() {
var spaceIds = PropertiesService.getScriptProperties()
.getKeys();
var message = { 'text': 'Hi! It\'s now ' + (new Date()) };
for (var i = 0; i < spaceIds.length; ++i) {
postMessage(spaceIds[i], message);
}
}
var SCOPE = 'https://www.googleapis.com/auth/chat.bot';
// The values below are copied from the JSON file downloaded upon
// service account creation.
// For SERVICE_ACCOUNT_PRIVATE_KEY, remember to include the BEGIN and END lines
// of the private key
var SERVICE_ACCOUNT_PRIVATE_KEY = '...';
var SERVICE_ACCOUNT_EMAIL = 'service-account@project-id.iam.gserviceaccount.com';
// Posts a message into the given space ID via the API, using
// service account authentication.
function postMessage(spaceId, message) {
var service = OAuth2.createService('chat')
.setTokenUrl('https://accounts.google.com/o/oauth2/token')
.setPrivateKey(SERVICE_ACCOUNT_PRIVATE_KEY)
.setClientId(SERVICE_ACCOUNT_EMAIL)
.setPropertyStore(PropertiesService.getUserProperties())
.setScope(SCOPE);
if (!service.hasAccess()) {
Logger.log('Authentication error: %s', service.getLastError());
return;
}
var url = 'https://chat.googleapis.com/v1/' + spaceId + '/messages';
UrlFetchApp.fetch(url, {
method: 'post',
headers: { 'Authorization': 'Bearer ' + service.getAccessToken() },
contentType: 'application/json',
payload: JSON.stringify(message),
});
}
事件驱动型触发器
从概念上来讲,可安装的事件驱动型触发器与
简单触发器
与 onOpen()
类似,但它们可以响应其他事件,并且其行为方式
。
例如,适用于 Google 表格的可安装的打开触发器
只要拥有编辑权限的任何用户打开电子表格,系统就会激活
就像简单的 onOpen()
触发器一样。不过,安装版
调用需要调用的服务
授权。可安装
版本在创建触发器的用户授权的情况下运行,即使
如果另一位具有编辑权限的用户打开了该电子表格,则会发生该错误。
有几个可安装的触发器 Google Workspace 个应用:
- 当用户打开电子表格时,系统会运行可安装的开放式触发器。 文档或表单。
- 当用户修改 电子表格。
- 当用户修改 例如,添加新工作表或移除 列。
- 当用户响应表单时,系统会运行可安装的表单提交触发器。 表单提交触发器有两个版本, 一个针对 Google 表单本身 如果表单提交到电子表格,则会为 Google 表格创建一次。
- 当用户的日历活动时,系统会运行可安装的日历活动触发器 更新 - 创建、修改或删除。
您可以在独立脚本和绑定脚本中使用可安装的触发器。例如:
独立脚本能够以程序化方式为
调用任意 Google 表格文件
TriggerBuilder.forSpreadsheet(key)
并传入电子表格的 ID
手动管理触发器
如需在脚本编辑器中手动创建可安装的触发器,请执行以下操作: 请按以下步骤操作:
- 打开您的 Apps 脚本项目。
- 点击左侧的触发器 。
- 点击右下角的添加触发器。
- 选择并配置您要创建的触发器类型。
- 点击保存。
以编程方式管理触发器
您还可以使用
脚本服务。通过调用
ScriptApp.newTrigger(functionName)
、
该函数会返回
TriggerBuilder
。
以下示例展示了如何创建两个时间驱动型触发器,一个用于 每 6 小时触发一次,以及一个在每周一上午 9 点(以时区为准)触发 )。
接下来这个示例展示了如何为
电子表格。请注意,与简单的 onOpen()
触发器不同,
可安装的触发器无需绑定到电子表格。要创建
从独立脚本中删除此触发器,只需将
SpreadsheetApp.getActive()
,正在呼叫以下人员:
SpreadsheetApp.openById(id)
。
如需以编程方式修改现有的可安装触发器,您必须将其删除 然后创建一个新凭据如果您之前已经存储了触发器的 ID,则可以 通过将 ID 作为参数传递给下面的函数来将其删除。
触发器中的错误
当可安装的触发器触发,但函数抛出异常或 否则将无法成功运行,您的 屏幕。毕竟,当运行时间驱动的触发器或其他用户激活时 表单提交触发器,您可能甚至不在计算机旁。
Apps 脚本会向您发送如下电子邮件:
From: noreply-apps-scripts-notifications@google.com Subject: Summary of failures for Google Apps Script Your script has recently failed to finish successfully. A summary of the failure(s) is shown below.
电子邮件中包含用于停用或重新配置触发器的链接。如果 脚本是 绑定 至 Google 表格、文档或表单 文件,那么电子邮件还会包含一个指向该文件的链接。通过这些链接 请停用触发器或修改脚本以修复 bug。
要查看与您的 Google 账号关联的所有触发器,并 如需停用您不再需要的触发器,请按以下步骤操作:
- 前往
script.google.com
。 - 点击左侧的我的触发器。
要删除触发器,请点击触发器右侧的“更多”图标
删除触发器。
插件中的触发器
除了可安装的触发器之外,您还可以在 插件。如需更多信息 请参阅 适用于 Google Workspace 插件的触发器。