Smart Home & Touch Controls: visual cards never update after successful Execute commands - actions-on-google

According to the documentation, visual assistants and the Google Home app display graphical interfaces for certain traits without any development work.
https://developers.google.com/actions/smarthome/create#touch-controls
However, I have implemented a smart home action which uses the brightness trait to dim and brighten a users lights. I am succesfully reporting the states of the users devices to Home Graph after the original sync and every execute request but the visual display never seems to update after a successful Execute command.
Has anyone experienced anything similar?

Updating of touch controls is dependent on a successful implementation of the report state feature. I would recommend using the Report State Dashboard tool to validate that your calls to the HomeGraph API are successfully making it all the way to update the expected device state.
If you are able to validate the HomeGraph updates using this tool but are still not seeing UI updates, please file an issue.

Related

google actions: continuous access like a heart beat

I have built a google actions project and published it. It has a web hook that is linked to a Google Functions with an actions sdk code behind it. Everything works fine.
However, I have noticed that there is a continuous user (with the same userId provided by the intent) that keeps access the function (guessing via the actions project). I am keeping a kind of sessions log and it keeps creating a session almost every 3-4 seconds.
Since the project is just some temporary demo of content and not really shared with the world at large, I am wondering what or who is causing this continuous access. It looks almost like some heart-beat type of check being done. Hence the question: is it something that Google does to know whether the action project is live or not? Thanks
Every 3-4 seconds seems high, but if you have published an Action that has gone through the review process Google does run a health check against it every few minutes.

What are the review requirements regarding QUERY intents?

Due to hardware restrictions, we are unable to retrieve the current status of many of our lights (their color/brightness/etc.).
In the QA test cases spreadsheet found here, at the bottom under Deploying, a number of QUERY intents are listed to be tested. Does this mean our Smart Home application will not be able to pass certification?
Thank you for reading.
There is some expectation from the user to know the status of your their house at any time. If you cannot retrieve the state directly from devices, you should be able to use your cloud provider to store a virtual equivalent of the device. Then instead of querying the device directly you can return the state of the virtual device.
If anything, just try to be honest with the review team and they will keep certain limitations in mind.
When submitting for review make sure you provide them with a perfectly working test environment. So if some of your lights don't function like you want them to and you can't get their info, don't provide them for testing.
I'm not familiar with the review process of Smart Home applications but if you provide the review team with the right information of which hardware is and isn't supported I'm sure they won't straight up reject your application for it.

Create an order using transactions API

I'm trying to create a simple order using transactions API on actions on Google, for this, I'm using this sample app, but when I try to place the order, the device times out, instead of showing the receipt details. The weird thing is that this code gets executed (I added some logs locally to make sure).
Has anyone been able to run this sample app successfully? I already enabled the actions on Google API on my project on Google cloud, so I'm not sure what I'm missing here.
First, you got to make sure you have enabled transaction support for your app.
If you are testing on the simulator, disable Sandbox mode (checkbox on top right).
Sandbox ensures that any transactions or orders made during simulation are fake
I've ran into this issue before.
You have to keep in mind that the Order ID gets tracked so it needs to be different every time you run the app. That is why I decided to use a UUID time stamp function to make sure the Order ID will be different every time.
I'm referring to wherever it mentions 'UNIQUE_ORDER_ID' in the code. Once you take care of this issue, you will see the receipt every time you run the demo.

Creating Actions for Personal use only

My house has an home automation system from the 1960's that I have managed to tap into. I've been able to setup an interface which allows me to write adapters for various technologies such as Node Red, Alexa, and now Google Assistent.
Given that this will only ever work with my house, I see no reason to make public Smart Home Actions. On Alexa's side, I can let these services stay in a Development state indefinitely which has worked great for the last 6 months. On Google's side, however, the FAQ says (https://developers.google.com/actions/smarthome/faq):
Q: How often do I need to run gactions test?
A: gactions test needs be refreshed every 3 days. After 3 days the test agent will disappear from mobile-HomeControl settings. If you run into this, just run gaction test again.
Therefore, I was wondering what they best way is to make a PERSONAL Google Actions service? Of course, the obvious method would be to script and schedule the gactions call to keep testing alive but I would hope there was a better way to support this!
Additional details: I'm using Amazon's OAuth service for sign-in. This way, I can validate the Amazon ClientID, UserID, etc. through the AccesssToken Google passes in for authorization. Therefore, I could theoretically run this publicly without any issues but I would need to figure out how Google could review it for testing purposes! I don't need some Google employee turning on and off my lights while the Google Maps car drive by to verify the change... ;)
I would just use a script to call gaction periodically.
Publishing it would unnecessarily pollute the Actions directory. Also, they'll make you jump through hoops for "brand verification" and other restrictions they have for naming invocation terms.
If you did publish it, you give them a temporary account for verification purposes and disable the account when published. They would be randomly controlling the lights during the verification period though which can be up to a week!

SiriKit queries trigger web search

Any request that I make to send money to a contact through Siri triggers a web search, passing the voice input to Safari (i.e. "Send $100 to Bob").
I have enables Siri in my app capabilities and have added the INSendPaymentIntent to my info.plist files.
This even occurs for UnicornChat (Apple's sample project) where iMessage is prompted when attempting to send a message through UnicornChat. The extension UI for Unicorn Chat appears briefly and is then overridden by iMessage's.
Could this possibly be an issue on Apple's side, or is there a potential fix I can make?
My Sirikit extension was working until yesterday, now I'm having your same behavior. Probably they're preparing for beta4.
We were having this same issue in the app I work on. The way we got it to start working properly is to make sure you always include a valid paymentRecord with all completions that take an INSendPaymentIntentResponse as a parameter. paymentRecord is an optional property, however, the discussion notes in the documentation state this...
Always assign an object to this property that contains as much
information as you have about the transaction. Siri communicates this
information to the user during the confirmation phase and after your
Intents extension handles the payment.
https://developer.apple.com/reference/intents/insendpaymentintentresponse/1638625-paymentrecord