使用Google Script的Web App作为Webhook直接接收推送通知

时间:2014-08-01 15:39:35

标签: google-apps-script push-notification webhooks google-drive-api

我的目标:Google云端硬盘的变化=>推送通知到https://script.google.com/a/macros/my-domain/ ... =>应用程序被推动采取行动。 我不想设置一个中间Webhook代理来接收通知。相反,让Web App(通过Google Script)接收并直接推送。

由于相关功能完全没有记录(只在这里:https://developers.google.com/drive/web/push),下面是我尝试但失败的代码。  1.上述想法是否可行?  2.我的代码doPost(R)似乎无法正确接收通知(R参数)。无论如何,我更改Google云端硬盘后没有回复。任何问题? (我试图记录输入参数R,以便查看其真实结构,并确定OAuth的参数Obj是否与普通的Drive App相同,但在日志之前发生错误)

function SetWatchByOnce(){
  var Channel = {
    'address': 'https://script.google.com/a/macros/my-domain/.../exec',
    'type': 'web_hook',
    'id': 'my-UUID'
  };

  var Result = Drive.Changes.watch(Channel); 
  ...
}    

function doPost(R) {
  var SysEmail = "My Email";
  MailApp.sendEmail(SysEmail, 'Testing ', 'Successfully to received Push Notification');

  var Response = JSON.parse(R.parameters);
  if (Response.kind == "drive#add") {
    var FileId = Response.fileId;
    MyFile = DriveApp.getFolderById(FileId);
    ...
  }
}


function doGet(e) {
  var HTMLToOutput;  
  var SysEmail = "My Email";

  if (e.parameters.kind) { 
      //I think this part is not needed, since Push Notification by Drive is via Post, not Get. I should use onPost() to receive it. Right?

    } else if (e.parameters.code) { 
      getAndStoreAccessToken(e.parameters.code);
      HTMLToOutput = '<html><h1>App is successfully installed.</h1></html>';

    } else { //we are starting from scratch or resetting
      HTMLToOutput = "<html><h1>Install this App now...!</h1><a href='" + getURLForAuthorization() + "'>click here to start</a></html>";
    }  

    return HtmlService.createHtmlOutput(HTMLToOutput);  
  }


....

2 个答案:

答案 0 :(得分:1)

蝉,

我们已经完成了类似的功能,可以多次接收webhooks / API调用。注意:

  1. 要获得R,您需要:var Response = R.parameters,然后您可以执行Response.kindResponse.id等。

  2. 记录器不适用于doGet()和doPost()。我设置了一个写入电子表格 - 在任何严肃的代码之前。那样我知道它是否被触发了。

答案 1 :(得分:0)

Cloud Functions HTTP trigger也可能是一个选项...

(此问题时尚不存在)。这只需要在Google云端硬盘设置中将触发器URL设置为通知URL,并为触发器添加一些NodeJS代码;不管它会做什么。一个可以例如像这样发送电子邮件和/或FCM推送通知。该触发器也可以使用UrlFetchApp从App Script中触发,并且有App Script API。一个可以有多个触发器,它们执行不同的任务(App Script仅是一种可能性)。