Tools for Building Better Smart Home Actions (Google I/O'19)

[MUSIC PLAYING] E JOHN FEIG: Hi, everyone Welcome to Tools for Building Better Smart Home Actions I’m John, I lead the technical solutions engineering team for smart home GAURAV NOLKHA: I’m Gaurav Nolkha I’m a solutions engineer on Smart Home and a lead on Local Home SDK that was announced yesterday E JOHN FEIG: Great And over the last two years, we’ve worked a lot of developers building Smart Home Actions And based on what we’ve learned from working with you, we’ve put together some new APIs, tools, and processes which we’re going to discuss here today And don’t forget to use the hashtag #AoGDevs to share what you learn about Google Assistant at I/O So just to start off and remind everybody what Smart Home is, there’s this great quote from somebody on the team It’s, “nobody likes the light bulb that asks too many questions.” And what this is about is just that, Smart Home is kind of really focused on providing concise grammar that’s also unified and consistent across different brands so that you get you have one way of interacting with your devices, and one way of talking to your devices And you can actually control many devices at once So when I say, turn on the lights, it turns on the lights in my living room Again, across brands It treats plugs and switches the same as lights, depending on the name that I give it And because HomeGraph understands room context, types, and traits, it knows that my Google Home is in the living room and my lights are in the living room, and just to go ahead and turn on the lights in that room when I say, turn on the lights And you get all that for free with Smart Home when you do a Smart Home integration You also get both a voice UI and a graphical UI that we build And you also have routines that you can set up to do things like, if you say good night, you can have it turn off the lights, lock your doors, arm your security system And that’s all powered by HomeGraph State, which we’ll talk about a little bit later GAURAV NOLKHA: To get started with Actions, go to Actions on Google console and this is your window to configuring your Actions, whether it’s the conversation Actions or Smart Home Actions You’re going to create a new project, and if you’re building for a Smart Home Actions, make sure to select Home Control and Smart Home tile We’ve had some complaints from developers about the discoverability of Smart Home Actions, and since then we’ve improved the experience on the console And you’re going to do two main things, like provide the fulfillment URL– which points to your server where you’re implementing the smart home API And you’re going to configure the account linking section, which is how– because we use OAuth to do the account linking between Google Account and your account E JOHN FEIG: Great And just to give kind of a recap of the architecture of what a Smart Home integration looks like, this is a kind of a helpful little visual here So when you talk to your Google Assistant surface– your phone, or your Google Home, or your Google Nest hub– you’ll say something like, turn on the lights, that device will send a message up to the Assistant servers, which does the natural language understanding and figuring out, like, from Home Graph what devices you’re talking about And then it sends a message to your cloud, which is then responsible for sending that message down to the device to take the action that you want And then your device will respond back up to your cloud, and then your cloud sends the response to Google, and then Google sends that response down to the device to speak out to the user if it was a success or failure– what happened And this is broken into three sets of APIs The first is account linking, which is done with OAuth2– you know, just the standard OAuth2 And the thing to keep in mind here that’s a little bit different, is that you are the OAuth provider and Google is the client The next step is a set of intents that go from Google Assistant to your cloud, which are SYNC, QUERY, and EXECUTE SYNC is basically where you have an opportunity to tell Google about the devices that the user has So what types they are, what traits, which is the functionality that those devices enable QUERY is when Google asks what the state of your device is and you respond with saying, the light’s on, or the temperature is set to 65 degrees And EXECUTE is basically Google asking you to take some action on a device– turn the lights on, set the temperature, turn on the fan, something like that And then the last two APIs that are part of this are APIs that go from your cloud to Google And those are Report State and Request Sync Report State is when you have the opportunity to proactively tell Google what the state of your device is And Request Sync is when you tell Google that the device list needs to be updated for the user And we’ll talk through what all that stuff is in a little bit GAURAV NOLKHA: So in addition to the cloud part between assistant and your server to implement the Smart Home API, yesterday we announced Local Home SDK

This SDK allows you, as developers, to run your JavaScript on Google Home devices And this JavaScript contains the business logic to control your devices and discover your devices in the user’s local network This local part allows us to get faster execution and better reliability for the whole system Because if local part fails for some reason, you do have the cloud as the fallback available E JOHN FEIG: Yeah The Local Home SDK stuff is really exciting So here today, we’re going to talk about kind of three sets of things So there’s APIs, tools, and processes So APIs that we’re going to talk about are really here to help your users have a better experience with the Smart Home interaction The tools that we’re going to talk about are to help you in your development So things that might have been a little difficult before or you didn’t know about, hopefully these things will make it a lot easier as you’re working And then the process that we’re going to talk about is understanding the submission process And so let’s get started with APIs We have a few sets of things– account linking There’s some new stuff with account linking that we’ll talk about, which is really exciting Request Sync, Report State, that we mentioned a little bit ago, and then also some security updates GAURAV NOLKHA: So let’s talk to account linking This is one of the first interactions your users have with Google in terms of your Smart Home Action So a few days ago, I was going through this myself I will talk about that So let’s look at the quick flow I opened the Google Home app, and I selected the partner devices that I was setting up, and I see the web view where I am required to enter the credentials and I accept the permission to allow Google to control these devices After that happened, your server, your app, returns the code to Google And Google servers exchange that with an access and a refresh token That access and refresh token is used when Google’s sends Sync, Query, and Executing intent to your servers later So a few days ago when I was doing this, I downloaded the manufacturer app, I set up these lights After multiple screens, I have this device set up and I’m able to control it using the manufacturer app And 15 seconds later, I’m sweating Why? I wanted to link these devices to my Google Assistant, and I saw this page to enter the username and password, and I had already forgotten Well, some of you will say that, that’s not me But we’ve seen our users actually drop off on the Setup page, and it’s a friction Well the interesting thing is, the other app is already on my phone and I’m logged in So can we leverage that? E JOHN FEIG: Yes we can Introducing App Flip, which is coming soon This is a really interesting way to do account linking And what we do is, instead of launching into a web view to do the authorization for OAuth, we actually use the app that’s already installed on the user’s phone So what happens is, you start the Assistant, you go through that list of actions again and you find the one that you want And when the user clicks on it, we do a couple of things First, we see if you’ve registered your app for App Flip, and then we look to see if that app is installed on the user’s phone And if those things are true, then we can actually just launch straight into your app and allow you to authenticate your user Hopefully the user is already logged into the app on your phone, and you can just use those credentials to go get an authorization code and send it back The other thing that this is really great for is, it helps with the disclosures and things like that in the scope, to let people know like what you’re giving access to Google for And then once you’re ready, you click the button in your app and it goes back to Google And again, this just replaces the authorization leg of the OAuth flow The rest of OAuth stays the same So once you get a token back– so here, once you return the authorization code back to Google, we do the server to server exchange And like I said, so this is exactly the same flow The diagram looks the same The only difference is that, instead of launching out to the web, we’re working within your app And so you have a little bit more control in terms of how you want to do that authentication, as well So how does this work? We use Intents on Android, and on iOS we use Universal Links And this is just the basic way to do interapp communication on these platforms And so let’s look a little bit of code For Android, Google will send an intent into your app, launching the intent with StartActivityForResult, which

means that, basically, once you finish there’s an intent that gets sent back to Google And so the intent that goes to you gets handled in your activity onCreate method And there’s some important intent extras that come in So there’s Client ID and Optionally Scope And you’ll want to pull out at least the Client ID to do a validation And what you can do is, you can validate both the Client ID as well as the package signature from the incoming intent And you’ll want to do this because you want to make sure that it’s actually Google calling you and not some random phishing app that’s installed And so once you’ve done that, you verified that it’s Google, you can call your off OAuth backend And you’ll want to do this, and send the Client ID along, to make sure that there’s a record created in your backend with that authorization code, so that when Google does the token exchange later on there’s a valid code for this user in your database And so once you’ve done that, and you’ve gotten a code back from your server, you can create a new Intent that you’re going to send back to Google You’ll add a couple extras One is Response Type, which you set to Authorization Code And the other is the actual authorization code itself You’ll want to make sure to set the result to OK, and then you’re to launch back in to Google On iOS, its Universal Links, and it is even more straightforward just to look at just a couple of links here So the first one is the link that launches into your app from Google So you own this Universal Link and you’ll register it with Apple just like you do And there will be several query parameters that come in The Client ID– same as on Android– Scopes– which you set in the actions of Google console– the State– which is a string that you just respond back the identical string when you give your response– and then a redirect URI– that’s the universal link for Google that you’re going to use to launch back to Google And here, instead of a package signature, you can actually validate the redirect URI as well as the client ID You know, again, do the same validation on iOS using those couple of things And then once you’ve done that, you can call your OAuth backend again with your user credentials that are already stored in the app, as well as the Client ID Once you get an authorization code back from your servers, then you can respond back to Google using Google’s URI that was provided in the redirect URI And again, the authorization code and the state GAURAV NOLKHA: So now we’re happy with those lights, and we get new lights from the same manufacturer And I go to the same app and I set up these new lights And just like last time, we do the Setup and now I’m able to control the lights from the app But the great thing was, I am immediately also able to control it from Google Assistant How did that happen? That brings us to Request Sync So when your cloud sees– a change in Users Devices List, or if you add really new capabilities to your devices, you let HomeGraph know that, for this particular user, something has changed That’s the requesting API And at that point, HomeGraph calls back the same Sync Intent that happened the first time the user had linked So the good effect is, the user didn’t have to do any account linking again And assistant now knows about the new devices, so the user can go and control And this really provides a very good user experience for your users who actually chose to buy new devices from you So let’s look at the code command equivalent of what happens here It’s very simple You let us know the agent user ID that is affected with the change in the Device’s List, and you specify the API key that you get from Google Cloud console and call the HomeGraph Request Sync API And there E JOHN FEIG: Great And now let’s talk a little bit about Report State Report State, as we mentioned, is when you proactively send the state of your devices to Google So every time a user switches on a light, you send this API to Google letting us know that that light is turned on If the user changes the thermostat, you send that State And the State data in HomeGraph is ephemeral And so why does Google need this? And the answer is Touch Controls So we have smart displays and the Google Home app that have graphical controls for your devices And basically, to be able to draw that control, we need to know what the State is so that we can draw it appropriately And the Report State API gives us the State that we need to be able to draw accurate and responsive controls Let’s look at a couple of examples So here we have the Google Nest hub as well as the Home app, and you can see some controls getting pulled up These are two different surfaces,

they’re convenient in different situations But both are showing the ability to control a group of devices which might be even different brands And so this is a really great way to do interactions for users And what happens, though, is that if you don’t provide the State via Report State, instead of getting the nice graphical control, what the user sees immediately is a spinning dial while we query for the State And it’s really kind of a jarring experience And so implementing this is fairly straightforward There’s just a few steps to get Report State working that you need to do The first– which is just a one time thing– is to go enable the HomeGraph API And then you’ll create a service account key, which is just a one time thing, again And then at runtime in your service, you’ll generate a JSON Web Token, or JWT, which is a verifiable method of representing claims securely between two party servers And then you’ll create a Report State JSON payload and you’ll call the API Now let’s walk through each of these a little bit of detail So to enable the HomeGraph API, you’ll just go to the Google Cloud console, select your project, and then under the APIs and services, you’ll go to Library and search for HomeGraph API and click Enable Pretty straightforward The next– again, this is just a one time thing– is you would generate a service account key And here, again, in the APIs and services section, you’ll dropdown to Credentials from Library, where you were And you’ll click the Create Credentials button and you’ll just go through the steps to create that We recommend JSON type because it’s a little bit easier to work with GAURAV NOLKHA: So now that your server has access to your service account key and we have to call the repository notification API to let HomeGraph know of this change in State We will need two things First is a token to communicate with HomeGraph, and second is the payload So let’s look at the first one So to create the token for Google to verify your service, we need a few things First is iss This is a service account email which you can get from the JSON that you downloaded The scope and audience will remain same, pretty much, because you’re calling the HomeGraph API and you need to get the token Secondly, iat, the current time is what you will specify here And you have to make sure that the expiry is typically an hour from the current time And this is specified in seconds Once you have this information handy, there are libraries available in pretty much all the server site languages that are out there So check out JWT.IO for more information about the libraries for your specific platform and framework And you should be able to take this information and generate the token And finally, you make sure that you sign this token with the private key that’s in the service account JSON So now that we have the token, let’s look at the payload So when the device changes state, and it lets your cloud know of this new state, you’re going to create this JSON payload And you see here, we have the agent user ID for which this device list has changed its state And then we have two devices here The first one is on, and it’s online And the second one– probably a lock or a door– and it’s locked So you specify this JSON And finally, let’s call the Report State in notification API And let’s take a look at this in the form of a curl command, which is very straightforward The token goes into the authorization header as a Bearer token, and the body becomes the Report State JSON payload that we just created And you make a simple post called, to the HomeGraph Report State and Notification API And that’s it At that point, all your smart displays, visual displays, and Google Home app should show you the latest state for your devices E JOHN FEIG: All right So next we’re going to talk about enabling security use cases for Smart Home with Google Assistant How are we going to do that? Well, we’re going to two factor authentication, or 2FA 2FA is basically a second factor validation, something like a pin or an acknowledgment And it’s used to make sure that the person making the request is actually authorized to do so And so why is this important? Well, we heard your feedback and you wanted to be able to enable Smart Home on devices like locks, or security cameras, security systems, or even windows We launched a couple of new traits this week– lock-unlock and arm-disarm– that 2FA is really, really useful for And the neat thing is that all of your devices, any interaction for EXECUTE and QUERY, can use 2FA So if you have something that you want to protect,

your want to make sure that there’s an acknowledgment, you can do that And the other thing to keep in mind here is that, for pin-type protections, you actually own the pin So it’s owned in your service, you can change it as frequently as you want– even on every interaction if you really want to So let’s look at a couple of different examples of how this works So the first is No challenge, which is basically the same is a normal interaction where you say, OK, G, turn on the lights And assistant says, OK, turning on three lights The second is an Ack needed And this is where you might need some sort of acknowledgment You just want to make sure that this is really what the user wants to do And in case, the users ask you to heat up the living room to 100 degrees Which your service might get that request and say, like, that’s pretty warm That’s really outside our range of what we’d recommend a room to be, but we can do that And so you might want an acknowledgment here and just ask the user, are you sure? And the user says, yes, and then you can go ahead and do that And finally, we have Pin needed, which is asking Google to unlock the door And here we want a little bit more than just a confirmation, so we ask for a security code and the user provides that And then once you have a code that’s correct, they can go ahead and unlock the door And you can actually see this in practice in our sandbox with a cookie jar that’s protected by two factor authentication to keep the kids out GAURAV NOLKHA: Yeah, definitely check that out It’s cooler than the code, but the code is very simple as well So let’s take a look So typically, when the user wanted to control a device, we send an EXECUTE Intent to your server, right And without two factor authentication, your server returns a success if it’s able to control the device But for this case, if you wanted to implement the two factor authentication, you would return an error back to Google for that EXECUTE response And this error as the status And the error code will be Challenge needed And one important thing you’re to specify is which type of challenge you need It could be Pin or it could be Ack So at that point assistant will announce it to the user and either ask for an Ack or a Pin And now Google calls another EXECUTE intent to your server And in this case, the pin will be specified in the EXECUTE intent So pretty straightforward Pretty much exactly how you do an EXECUTE and Process and EXECUTE intent But this time it has the pin, your server validates it, and if it is a valid pin, takes the action that user requested E JOHN FEIG: All right Let’s move on to Tools So these Tools are here to help you in your development of Smart Home And we developed a lot of these, really, based on our experience supporting you in your development as well as feedback that we’ve gotten directly And the first thing we’re going to talk about is a brand new tool that is called the Smart Home Test Suite And this is something that we very recently launched, and it addresses this major problem that people have had when wanting to go live with their actions The end of development, you’re done, you want to publish it make it available, which is that previously, we required devices to be shipped for certification And now we realize that this is hard for a lot of people Shipping devices is expensive, it’s easy to miss those emails back-and-forth The process was a bit opaque and there were sometimes multiple rounds of testing And especially if you’re international and had to deal with customs And so what we’re doing here is, we’re actually giving you control over the process You can test from your desk, there’s no need to ship devices And it helps to give you clarity and insight into the certification testing So how does this work? Well, the basic flow is that you will start by developing an action You just kind of need the bare bones to make one thing work, right So you’ll do OAuth, SYNC, EXECUTE, and Report State for at least making sure that one thing end-to-end works And then after that, you’ll account link your developer account and make sure that you can use it So just do a smoke test, make sure that you can turn on your light or something Next, you’ll set up a Google Home right next your computer and crank up your speaker’s volume, or you can put headphones on it And the reason is because the test tool actually generates TTS It generates commands that say, OK, G, turn on the lights And the Google will pick it up and then try to take that action So it’s kind of a cool end-to-end test like that And so then you can load the tool and run it And you can actually run this tool as much as you want while you’re in development And it’s great for test-driven development because we don’t send the results from the tool back to Google until you’re ready And then when you are ready to launch, you can use a form linked in the Tool to submit your results So another thing that’s really cool about this is that it’s only in the browser This is a browser-based tool It doesn’t send results to Google until you submit that form

And so with that, we do need a couple of pieces of information to make this run We’ll request the agent user ID so that we can identify which specific user to pick out and the service account key And these two things are needed for a HomeGraph API that will allow you to pull devices that you own, and you own the service to, out of HomeGraph And we basically use the same mechanism for this test suite as well as the another tool that Gaurav will talk about in a minute And once you’ve provided those couple of things, the project ID should just get filled in automatically if you provide a valid service account key Next we do a HomeGraph Sync, and we ask HomeGraph to get that user’s devices And in this case, we get a light with the traits on, off, and brightness And then once we have the device, we can click Next, and the tool will just automatically generate the test cases based on the device types and traits that you’ve synced Next you can see it start running, and it’ll just speak out the commands, and it’ll go to the Google Home, and then the whole thing will happen And you’ll Report State back, and we can pick up those Reported State events And you can see the progress– where it is in the test– as well as in the log area, you can see if the tests are passing or failing, which is really helpful And then once you’re done– and if you have any failures, you can open up a spreadsheet that gets generated, and look exactly where, OK, these tests were passing and then this one was a failure– and see why it failed And so we tell you, here’s the results that we expected, and here’s what you gave us, and that’s where the discrepancy is, so that you can very easily go and fix that and rerun the test And then once you’re done with that, you can just submit your results in the form that’s linked and you’re good to go GAURAV NOLKHA: So this is great, because integration tests can be hard And especially now this involves voice, your server, your devices So you really want to use that And I use that, personally, for the new traits that I am working with these days It’s amazing Check it out So, OK, moving on to Report State tool Now one of the things that John mentioned about Smart Home Test Suite is that it relies on Report State working so it can check the state properly But what if Report State is not working? So here’s a tool that’ll help you do that So we again need the same two key information– the agent user ID and the service account key Based on this information, we can query HomeGraph, get the state of the devices that HomeGraph sees, and if there is a discrepancy between what HomeGraph sees and what your server is seeing, some debugging may be in order So this is a tool that gives you a view into what HomeGraph is able to see After you fix the issues with Report State, you know, it should all work with the GUI controls E JOHN FEIG: All right Next up is a tool called StackDriver And StackDriver, as some of you might know, is actually just a generally available tool, provided by the Google Cloud Platform, that is for scalable logging But here we’re going to actually talk about how we use it for Smart Home And one of the things that we heard from developers is, there’s this kind of frustration around a lack of logs and a lack of insight into what’s happening on the Google side if there’s a failure And what we’re doing with StackDriver is providing those assistant side logs so that you can see if, you know, you get an error TTS that comes back from Google once you’ve tried to take some action, what actually happened And the other neat thing about this is that StackDriver allows for integrations And so you can actually create a service where you can subscribe to these log events and have them sent straight into your own logging service so that you don’t need to go to multiple places to look at logs You can also parse the logs that are coming in for analytics and write your own metrics based on that So let’s look at how to enable this The first thing you’re going to do is, you’re going to go to the Google Cloud console and you’re going to, again, pick your Action there as your project And then you’re going to open up the menu and go to the logging section, and it’s under Logs Next, there’s this Resource Picker dropdown that you’ll select And when you click that, you’re going to select the Google Assistant Action Once you’ve selected those things, you should see logs coming up And here is actually something that I was working on a couple of weeks ago where I had backend failures And this is the sort of thing that, if you’re using maybe an HDB proxy like Nginx or Apache in front of your service to handle the web requests, and then will forward on the request to your service– if you get a 500, it might actually not be getting forwarded back to your service And so your Services Logs might not have this failure in it

And that’s where StackDriver is like really, really useful, is you can see those failures that maybe your service doesn’t log because it doesn’t get those requests Another example of that might be if you have auth failures, where the credentials are expired or maybe not existent on the Assistant side Those will get logged here too, and it’ll give you an indication that there’s an auth failure And like I said, you can integrate this using Google Cloud Pub/Sub to have those StackDriver events sent straight into your own logging service if you already have one And you can, again, peg metrics based on the various types of failures that you get to understand the areas where you need you might need improvement And we have this great tool, that’s a sample on GitHub, that really just walks you through how to do this It walks you through how to create an integration with StackDriver and then also to parse out those logs for metrics And it’s a Smart Home focused example GAURAV NOLKHA: So John just showed us an error with Sync Response on StackDriver So now how do you debug in case you actually send a 200 back? So you think your Synced response is right, but Assistant did not like it and it showed the user account linking error Sync Validator comes in handy at that point So on our adaptive documentation for Smart Home, we have embedded a validator It’s a simple input box where you paste your Sync Response and let the script tell you if it sees any errors with your Sync Response So like you see here, Fight is not a valid device type It probably needed to be Light And Darkness is not a valid trait, it should be Brightness It also tells you type errors So for example, the name in this case should have been a string And once you fix these Sync errors, your account linking and sync both happen to work And you know, it’s a better user experience and you can fix these things easily We’ve talked about a lot of applets and tools that you can leverage But what if you’re just starting with the Smart Home and API and you want to create your first action? We’re going to check out the Codelab And you can actually do it in the Codelab area right after this talk, or you can go home and check it out on the web So the goal of this Codelab is to create a virtual device and then be able to control this virtual device using Assistant So you’re going to implement the SYNC, EXECUTE, and QUERY endpoint, and also Request, Sync, and Report State So it’s a complete package It’s a gateway to get started with the Smart Home API E JOHN FEIG: All right And now we’re onto the last section, which is understanding the process that we use once you’re ready to submit your Action and publish it So let’s talk about the submission process a little bit and clear up kind of what happens, so that you understand what’s going on when you click that Submit button And we’re also making some improvements to make this easier and smoother for you throughout the process And so here’s how to submit and what happens The first thing you’re going to do is submit passing results in the Smart Home Test Suite using the form that’s linked in the tool So just really simple– make sure you’re passing the Test Suite Second, is that you’re going to go and fill out company and branding information in the Actions on Google console Just make sure that you’ve filled out everything that we asked for, and it will make things go quite a bit faster The next move over to the Google side– and so this might actually be a bit of a back-and-forth We might reach out to you with things that need to be updated and stuff like that And those would come out of two things So there’s a functional certification that happens where we review the results that you submitted for the Smart Home Test Suite as well as a policy review that happens to make sure that you’re in compliance with all of our policies And then once you pass those two things, you’re ready to go live And we have some tips that we’ve kind of collected over the couple of years about how to make this as smooth as possible and to kind of avoid back-and-forth And the first thing that’s really, really important is to use the appropriate types and traits So this is something that we see as kind of a common issue And we see things like using on-off as opposed to start-stop And there are cases where you might have a robot vacuum, and Start Vacuuming is a much more natural grammar to say than Turn On the Vacuum Another one to keep in mind is like temperature control versus temperature setting One of them is for thermostats, and the other one might be for your oven And then finally, also making sure that you’re using a two factor authentication where appropriate So you know, if it’s a lock, security system, you really want to make sure that you’re using 2FA The next thing is again, just making sure you’re passing the Test Suite Not a lot to say there, but definitely run the Test Suite as frequently as you like

The next thing is to make sure that your descriptions match the locales So let’s say that you’re ready to launch your Smart Home Action, and you’re shipping devices in Japan and you want to launch your Action there That’s great Make sure that, instead of submitting a description that’s in English, you submit one that’s also in Japanese if you’re selecting Japan as a locale The next is making sure that you’re just in compliance with all of our policies for AoG And then you’ll want to make sure that you supply a valid privacy policy for each supported language So again, you’ve submitted a Japanese description, you’re going to submit a privacy policy that’s written in Japanese The next thing is to make sure that you’ve implemented all of our APIs including Report State, Request Sync, and Query These are really critical, and in fact the Test Suite won’t work well if you don’t implement these things It won’t work at all if you don’t implement Report State You’ll want to make sure that account linking is working And this might seem obvious, but once you launch, your users are going to try to do account linking and start interacting with you And if account linking doesn’t work, they won’t be able to do that and you’ll have zero users You’ll want to make sure that the cloud to cloud latency is consistently under 900 milliseconds, which is just kind of where we really find it to be very noticeable if there’s cloud latency When you say, Turn on the Lights, and then it takes more than a second for that to happen, it’s pretty noticeable The next is to make sure that the authorization grant in your OAuth flow grants permission to Google and not something else We don’t want to see permissions granted to Google Assistant, or Google Home, or Nest, or anything else– just Google And finally, make sure that the icon that you provide is 144×144 circular with a white background GAURAV NOLKHA: Cool And if you are a maker, or someone who’s just doing this for fun, definitely add the Assistant and the voice control to your devices in your fun project and you don’t have to worry about the approval So use it And then finally, all the things that we’ve talked about today and the documentation for this lives under our docs at developers.googl And it lives inside Actions Google and click under the Smart Home section And this will guide you through the APIs, and the tools, and everything that we just talked about today So finally, thank you very much for coming here Last two years has been a thrilling ride for us on Smart Home, and we’ve worked with many of you in the room and outside this room And we really thank you for all the feedback on the APIs, on the tools, and our processes that you provided that has helped us improve our tools and all the APIs and processes And we can’t wait to see what you guys do with these tools and the actions you build Thank you E JOHN FEIG: Thank you for joining us [MUSIC PLAYING]