正在向节点注册玻璃时间轴通知



我正在尝试向"镜像api订阅"事件侦听器注册TAKE_A_NOTE。我运气不好:我可以用"我的应用程序"启动记录,但是,没有控制台日志显示事件已被识别。

我想知道TAKE_A_NOTE函数何时发生或完成,然后处理响应。我不知道订阅是否应该在流上,或者我是否以错误的方式实现了EventListener。非常感谢您的帮助。

我使用的代码是:

//引用//http://www.recursiverobot.com/post/57348836217/getting-started-with-the-mirror-api-using-node-js//https://www.npmjs.org/package/mirror-api-subscriptionvar express=require('express'),http=require('http'),https=require('https'),fs=需要('fs'),googleapis=需要('googleapis'),OAuth2Client=谷歌API。OAuth2Client;var app=express();var oauth2Client=新oauth2Client(process.env.MIROR_DEMO_CLIENT_ID,process.env.MIROR_DEMO_CLIENT_SECRET,process.env.IRROR_DEMO_REDIRECT_URL);//所有环境app.set("端口",8888);app.use(express.logger('dev'));app.use(express.bodyParser());app.use(express.methodOverride());app.use(app.router);var gotToken=函数(){谷歌api.discover('mirror','v1').execute(函数(错误,客户端){if(!!err){失败();回来}insertContact(客户端、失败、成功);insertSubscription(客户端、失败、成功);});};var insertContact=函数(client,errorCallback,successCallback){客户.miror.contacs.insert({"id":"myapp","displayName":"myApp","优先级":100,"acceptCommands":[{"类型":"TAKE_A_NOTE"}],"speakableName":"我的应用程序"}).withAuthClient(oauth2Client).execute(函数(错误,数据){if(!!err)errorCallback(err);其他的successCallback(数据);});};var insertSubscription=函数(客户端,errorCallback,successCallback){client.mirror.subscriptions.insert({"callbackUrl":https://localhost:7777/notification","集合":"时间轴","userToken":"001","verifyToken":"secret","操作":["INSERT"]});}var subscription=require('mirror-api-subscription')(函数(){})subscription.on('locations#UPDATE',功能(通知、用户、有效载荷){console.log("已更新用户%s的位置",user.id)})subscription.on('时间线#INSERT:LAUNCH',功能(通知、用户、有效载荷){console.log('订阅时间线#INSERT:LAUNCH')})subscription.on('时间线#UPDATE:CUSTOM',功能(通知、用户、有效载荷){console.log('订阅时间线#UPDATE:CUSTOM')})app.post('/nootification',subscription.dispatcher())app.get('/',function(req,res){if(!oauth2Client.credentials){//生成允许脱机访问并请求权限的url//用于镜像API范围。var url=oauth2Client.generateAuthUrl({access_type:'offline',作用域:'https://www.googleapis.com/auth/glass.timeline'});res.redirect(url);}其他{gotToken();}res.write("带节点的API玻璃镜");res.end();});app.get('/oauth2callback',function(req,res){//如果我们能够获取令牌,请将用户重定向回主页grabToken(req.query.code,失败,函数(){res.redirect('/');});});app.post('/reply',函数(req,res){console.log('重复',req);res.end();});var选项={key:fs.readFileSync('./ssl/key.pem'),cert:fs.readFileSync('./ssl/cert.pem'),};https.createServer(选项,应用程序).listent(7777,function(){console.log('https listing on 7777]);});http.createServer(app).listent(app.get('port'),function(){console.log('Express server listing on port'+app.get('port'));})

您的代码至少有两个潜在问题:

  1. callbackUrl必须是可通过互联网访问的HTTPS地址。"Localhost"还不够好,因为谷歌的服务器需要能够解决它。如果你有公共IP地址,你可以提供一个IP地址,或者使用隧道。

  2. 您不会对调用client.mirror.subscriptions.insert()的结果执行任何操作。通常,您应该使用与调用client.mirror.contacts.insert()相同的方式来调用它,即将它与withAuthClient()execute()链接。如果希望execute()向镜像服务注册,则需要调用它。看见https://github.com/google/google-api-nodejs-client/有关"googleapi"包和发现服务的文档

  3. 可能与#2有关,但我不熟悉您在require('mirror-api-subscription')中包含的包,它似乎与它提供的"googleapi"包和发现服务不同。然而,从它的参考文档中,还不清楚它是否真的在任何地方设置了回调,只是为了验证回调并将其分派给执行工作的函数。

var insertSubscription = function (client, errorCallback, successCallback) {
client.mirror.subscriptions.insert({
"callbackUrl":"https://mirrornotifications.appspot.com/forward?url=callbackURL",
"collection":"timeline",
"userToken":"001",
"verifyToken":"secret",
"operation":["INSERT"]
}).withAuthClient(oauth2Client).execute(function (err, data) {
if (!!err)
errorCallback(err);
else
successCallback(data);
});
};

最新更新