使用GAS发布的Web应用程序作为Drive推送通知的处理程序

时间:2015-07-06 19:01:14

标签: javascript google-apps-script google-api webhooks

如何将Drive's Push Notifications API与GAS已发布的应用结合使用?

我已经设置了以下下面的应用程序,将通过GET / POST接收的任何内容附加到this sheet进行测试,并且尝试将WATCH添加到已发布的U​​RL中失败,我收到错误&# 34;许可不足"。

即使我无法使用the documentation中的授权选项,我也可以使用该应用程序吗?

Link to the script file below

var sslog = SpreadsheetApp.openById('1RIxhdCQlZ52-GJG43m4fdMiCLSCtXjK62YxY4M2aXkc').getSheets()[0];

function doPost(e) {
 sslog.appendRow([e]);
  return 200;
}

function doGet(e) {
 sslog.appendRow([e]);
  return 200;
}

function addWatch(){
  var PayLoad = {
    "id": "4baa4sd80-6ass-1asd4e2-bs5fd-0asd848c9a77", // Your channel ID.
    "type": "web_hook",
    "address": "https://script.google.com/macros/s/AKfycbwBoiIBIJaAJVWJb5Tboc_Wz0RNDxaD_8raKnnLWO_WllO3Lnfe/exec", // Your receiving URL.
    "expiration": ((new Date()).getTime() + 1000*60*5)// (Optional) Your requested channel expiration time.
  }
  var headers = { 'Authorization': 'Bearer ' + ScriptApp.getOAuthToken(), 'Content-Type': 'application/json' };
  var url = 'https://www.googleapis.com/drive/v2/files/15flCrMJ4ItmPZzVzdfmOFuz44iG7xSIqSV066BW7G-Q/watch';

  var mod = UrlFetchApp.fetch(url, { headers:headers, payload:JSON.stringify(PayLoad), method:'POST' });
}

我已尝试使用Drive.Changes.watch(resource, optionalArgs) from here,但不知道如何使用资源/参数。

1 个答案:

答案 0 :(得分:2)

警告:我自己无法完成这项工作,直到我最终找到报告的问题才真正令人沮丧。果然,这不受支持,并被视为功能请求。 (“哦,你想要一个工作的API !这在规范中并不明确,所以现在它是一个功能请求。我们将很快实现它。”)

Issue 4254中列出了Drive.changes.watch()的无用:允许Apps脚本网络应用程序接收并响应(云端硬盘)推送通知。在该问题的评论中,提到此功能差距在YouTube上分享的演示文稿中进行了描述,并在Use Google Script's Web App as Webhook to receive Push Notification directly中的StackOverflow上进行了“讨论”。 (在Q& A中没有太多实际信息,因为事实证明,回答者从未真正尝试过Drive通知webhook。)问题报告中的关键评论是#6,其中Googler“ryanr ...”声明不支持Google Apps脚本作为(直接)通知接收方。

...然而

如果您有自己控制的外部服务器,则可以使用它来接收通知,并从Google Apps脚本中进行设置。首先,使用脚本中的Developer's Console启用Drive API并为推送通知设置项目。这还将指导您完成确认目标域控制的步骤。

dev console

v