In the receiver developer's guide is the following:
Applications running on the Google Cast receiver device (receiver applications) are always web applications. They are launched on the device after it receives instructions from the sender application to do so.
How exactly is this accomplished from the sender (in Chrome)? The sender guide doesn't seem to include this anywhere and I'm unable to track down it down in the API docs.
There is the class cast.LaunchRequest, but there isn't anything there that would accept a receiver application URL.
It is a little hard to figure out at first. What happens is you have a sender and a receiver. For the sake of simplicity lets say we are making a chrome app. Chrome app is synonymous with a Web Page running on chrome.
So what we would have is two web apps (pages).
Sender (Web Page)
Receiver (Web Page)
You then get your sender whitelisted, by giving them the url to your web app's root. In a day or two they send you an Application ID. That application ID acts as your ActivityID (in the place of say 'Netflix' or 'YouTube').
When you say cast.LaunchRequest("[AppId]", receiver); from you sender. The receiver pulls down the web page that corresponds to that AppId, which uses the Receiver Javascript API to talk to your sender(s).
The sender can also be on android or iOs in those cases you only have to make one Web App.
Related
We have an Openfire XMPP/Jabber server setup (with a NodeJs backend and React frontend).
Chat is a feature embedded in the app (NOT an overlay or window that is always visible). So the user has to navigate to a specific page to access the chat interface.
It is working via websockets and messaging sending is working fine. We have a React frontend.
The challenge is that XEP-0333 Chat Markers is not supported by Openfire (the spec never become production ready).
Therefore we need to know how can we implement this feature so that :
A users knows when they are online that they have an unread message (and later, how many unread message they have). For example, if they are not in the chat window and messages are arriving, we need to indicate that in the header of the app so they see it)
if a user goes offline, and comes back online but NOT into the chat window, how can we know if they have unread messages and notify them of that?
My understanding is that somehow we have to keep track of unread messages (eg perhaps in indexedb or local storage or even in postgres backend) and after the user reads a message, we delete it from storage. If the storage still has records for that user then clearly those are the unread messages.
Obviously we don't know if they actually READ the message, but we can assume that if the chat window is open and visible (ie. active tab in their browser) that any messages delivered have been read.
So if our application tab is active, but user is not in chat, and a message arrives, we store it. When they open chat and click on the sender, we remove it from storage.
Has anyone solved it this way? (looking for links to React or JS/TS code)
Is there a better way? (links to other solutions would be helpful, esp. code)
I created a smart home action using action-on-google and nodeJs, and it works fine. When you say turn on switch off, it sends MQTT request to my server, means that onExecute function works fine but the problem is that google doesn't respond to my command by OK it says "sorry it looks like your device not available right now", I observed also that my device is always offline in Google home app. Is it required to work with firebase and get device state from there?
Firebase is one of web services allowed to store a device's states. You can feel free to use other web services.
If your device is offline, it may be because your Google Home App hasn't received your device's states.
Here are two paths for Google Home App receiving your device's data:
Google Server will send a action.devices.QUERY intent and callback your function (e.g. onQuery) to get the data of your device through your fulfillment, see action.devices.QUERY.
Thus, please print logs in the onQuery function and make sure that your function works fine.
Your smart home action must use the API of reportStateAndNotification to update your device's data in the Home Graph, see Method: devices.reportStateAndNotification.
If Google Assistant gives you "Sorry, device is not available right now", it probably is because the Google server hasn't received correct information from your fulfillment. Please follow the suggestions above and try it again.
If you're still having issues, check your logs to identify the particular issue for that device.
I am planning to create a mobile application for android and ios users, i think i will take a try with xamarin since i will be alone on this project and i don't have a lots of time.
I want that the mobile app for both platform get datas from the api, then if there is new datas available we notify the user by a notification.
How the mobile will work in that kind of project? I mean should i make a background service then check every x seconds/minutes by http request? In that case which time interval? Should i use websockets instead for this case?
The app might be used by many people, so i would to know the scenario in this kind of project: Getting very fast changes, without overload the server due to too many connects or whatever else.
I'm confused about this and i need some lights around, any mobile application/server experiences related would be apprecied!
EDIT:
As suggered by an user, here additional infos:
The api is homemade, restful using JWT made in NodeJS.
Each users on their device should get messages from server asap, even when the app is in background/closed.
Maybe in the future a way to send messages between users themselves.
You have to implement push notification.
It is quite easy to implement this in xamarin. just send the push notification to the device and on the notification received call back send the API request to retrieve the updated data.
Here is the document for sending push notification from custom API.
https://learn.microsoft.com/en-us/appcenter/push/pushapi
I'm not a mobile developer, so take this with a grain of salt.
The answer to this really depends on what you're doing, which informs how often to check the API. If it's a messaging app, for example, you could have it check every couple minutes to see if there are undelivered messages, then check more frequently for the next X minutes (to facilitate a conversation in real time).
If it's a GPS navigation app to be used while driving, you'd need much more frequent requests.
As for the API, that also depends on what type of API and the number of requests you can make to it. Is it a commercial API that you get x number of calls per hour on? Is it an API that you built? Etc.
Basically, you need to give more information in order to get more specific answers.
I have developed a chatbot using Microsoft BotFramework and node.js and deployed it in webchat. As per this documentation, it is written that the bot's secret 's' can be replaced with a temporary token 't' which is valid for one conversation only.
But the problem is the life span of this token is 30 minutes and within this time window, if some intruder accesses the entire URL: "https://webchat.botframework.com/embed/YOUR_BOT_ID?t=YOUR_TOKEN_HERE&userid=some_user_id" then it is just a child’s play for him to get all of the user’s data because it mimics the chat of the actual user in the other machine.
Is there anything in the BotFramework (apart from DirectLine) that can be done that restricts the URL with the same token to be opened in another machine?
There is an issue on GH which is facing the same event with you, and with the comments, we can found that this situation will not be changed currently.
However, we can get some hints from the comment:
Ultimately, you can't hide the secret/token from clients.
If you want to remove it from the URL, you can host the JS control on your own.
If you want to remove it from page source, you can pass the value in a cookie >and read it in JS in your webpage.
However, in all cases, the value will be available in memory.
I think you can build another simple web site yourself as the bridge from the iframe and yout bot application. You can restrict your user whether is unique in this website's session. And also you can verify your user before instantiate the Bot WebChat.
I am developing chatbot for Slack using Microsoft Bot Framework. The Web app is hosted on azure. We have few installations.
Everything worked fine before this morning when I saw that new bot just didn't respond (the old one is still working).
We've been experimenting on permissions and auth keys on slack, so I thought that was the reason. But I tried to reinstall the app, bot user, auth keys etc from scratch and it didn't help. My configured endpoint just don't hit.
I think the issue is in communication between Slack and Microsoft Bot Framework, 'cos when I'm testing from chatbot panel's web client everything is working fine. Also, Slack representatives confirmed that there's no problem from their side.
UPDATE: I re-checked all credentials again and seems like it's working, don't know what was the issue. But two side questions still actual:
1) Can I test this channel of communication somehow? Cos when my endpoint didn't hit I can't get any info on what is happening. I have 0 errors on Microsoft Bot Framework web console.
2) Docs on configuring slack channel have changed recently and now it suggesting to add "Subscribe to Bot Events", while everything worked w\o it. Can you elaborate on that? Also, it's not quite clear what is {YourBotHandle} docs referring to in https://slack.botframework.com/api/Events/{YourBotHandle}
Usually, the Bot Framework Portal is the place to see if any channel is reporting errors with your bot. You can also check https://github.com/Microsoft/BotBuilder/issues just in case there is a general problem with a channel.
Regarding the second question, {YourBotHandle} refers to the handle that you provided at the time of registering your bot, as explained here.
As far as why you need to subscribe to bot events, first I would recommend you to read the documentation about Events on Slack (here), but long story short, this allows the bot to subscribe to events and be notified when those happen instead of having the bot asking Slack if something happened or not.
One way to use the Events API is as an alternative to opening
websocket connections to the real time messaging API. Instead of
maintaining one or more long-lived connections for each team an
application is connected to, you simply set up one or more endpoints
on your own servers to receive events atomically in near real-time.