node-red-web-nodes
node-red-web-nodes copied to clipboard
Google Calendar Node
Input Nodes
- New events added to a calendar
Query Nodes
- Get next event
- node options
calendar- calendar to lookup events in
- msg.options
calendar- calendar to lookup events inpayload- text search used to select relevant events (optional)
- output msg properties
title- the summary string from the calendar entrydescription- the description from the calendar entrylocation.description- the location string from the calendar entrydata- the raw event from the google calendar querypayloadobject containing:title- the summary string from the calendar entrydescription- the description from the calendar entrylocation.description- the location string from the calendar entrystart- Javascript Date of start time - midnight for all day eventend- Javascript Date of end time - midnight for all day eventallDayEvent- true if event is an all day eventcreator- object containingnameandemailpropertiesattendees- list of objects containingnameandemailproperties
- node options
Output Nodes
- Add event to a calendar
- node options
calendar- calender to add events to
- msg.options
calendar- calendar to add events topayload- string describing the event in quick add format
- node options
Calendars
The calendar option should be able to specified as the id string of the calendar, name of the calendar, or the string primary to use the users primary calendar. The default will be primary.
@hindessm In the output node, will there also be an option to specify time of event etc? And am I right in assuming the initial pass would add an event to my calendar but not handle invitations to others? Just trying to understand initial scope
The syntax of the quick add text field supports "what", "when", "where" and "who". So you could set msg.payload = "coffee at 8am in hursley with [email protected]" and it should work as you'd expect. It doesn't send invitations by default but the api does support this.
In general, with the first pass at a node, we've tended to limit the scope to a minimum useful behaviour while, at the same time, giving some thought to extending functionality in future. In this case, my intention is to add a msg.sendNotifications option to match the sendNotications query parameter on the api and if the msg.payload is an object use that to populate the body of an insert request.
I'm happy with the initial implementation in #18. Items that I still intend to work on are:
- [x] Support rich insert requests
- [x] Support sendNotification - via. msg and node properties
- [ ] Provide UI feature to re-authenticate if crediential refreshing fails
I'm still not sure how to handle the issue of extending the scope when other nodes - such as tasks, drive, etc. - are added using the same credentials but I'll worry about that when I/we come to write another Google node.
It turns out the quick add syntax doesn't support "with" so inviting other people will require the full insert functionality.
@knolleary, @hbeeken I've updated the description of the query node. I'm struggling to decide what should be in the payload. I'm also not sure what to do with the string location (but I wrote an intial guess.)
Comments/thoughts welcome.
Would it be possible to modify the node so that we also get the current event ? The way I would see it, it could have 2 outputs. The first output would send the current event and the second one the next event. Seems like it would be quite useful...
@natcl it is worth pointing out, all of these web nodes are minimal implementations to get some basic functionality in place. There are lots of different queries that could be included - the challenge is working out how best to expose them to the user. Having multiple outputs for different events doesn't scale well... what if you want the next 5 events.. is that 5 outputs? It would be better offered as an option to emit the next n events from the single output, where n starts either with the current or next event.
I agree. I just updated to the latest version and noticed there is now an input node for Google calendar, that's actually exactly what I was looking for. I wasn't able to make it work yet though, is it working or still a work in progress ?
All of the nodes in this repo should be working - any questions on this node, @hindessm may be able to help.
@knolleary Hi Nick, any update on multiple event queries? We use a Google Calendar-based scheduler and I'd like to be able to get everything for the upcoming day for a display in our office... And/or the current event as it's happening, so I can show that with extra emphasis too - so both features would be fantastic if possible Thanks!
Hi @hindessm ! Any news on credentials re-authentication? Also wanted to mention that on every NR restart the Google calendar nodes complain that the google credentials are missing, even if the nodes are connecting fine... Thanks!
@knolleary Can we hope for a google-cal credentials re-auth fix in the near future?
We would be very happy if anyone volunteered to help look after this/these nodes. PR would be kindly looked upon.
Can someone please provide an example flow that i can use to enter some strings in to google calendar?
The following is the payload that enters the Google Calendar Out Node
msg.payload = { description: "Great picnic with friends", location: "hyde Park, London",
start: {
dateTime: startDateTime
},
end: {
dateTime: endDateTime
},
attendees: [{email: "[email protected]", displayName: "Jane Doe"},{email: "[email protected]", displayName: "John Smith"}],
summary: "Welcome 2018 Picninc"
};
startDateTime and endDateTime are in ISO Format (you can set a Date object and then use the "toISOString" method)
I hope this helps
Hey
Basically I'm creating events on a calendar using the Google Calendar Out node. The payload that goes on to that node is something like this:
msg.payload = { description: "Great picnic with friends", location: "hyde Park, London", start: { dateTime: startDateTime }, end: { dateTime: endDateTime }, attendees: [{email: "[email protected]", displayName: "Jane Doe"},{email: "[email protected]", displayName: "John Smith"}], summary: "Welcome 2018 Picninc" };
startDateTime and endDateTime are in ISO Format.
Now, I want the attendees to be notified, and therefore along with this msg.payload I make msg.sendNotifications = true; but it has no effect. I tried with false as well as and it is pretty much the same.
I tried this out here: https://developers.google.com/google-apps/calendar/v3/reference/events/insert with the sendNotifications sent to true and it worked.
Everything else works well. Am I doing something wrong? Is is a known bug? Is there a workaround?
Cheers
Hello
Can you guys check the post just before this one? It's mine and about the msg.sendNotifications flag to the Google Calendar Out. I just updated the node-red-node-google package and still can't send notifications for the attendees.
Cheers
you may want to ask on the mailing list or slack channel as there are more users out there who may be able to help.
Ok. I'll give it a try.
Thanks!
Is there any way to retrieve more than one event with Calendar Query? For instance if I would like to display my complete schedule for a full day or a week?
The redirect uri in the Google credentials node is documented as "http://node-red.example.com:1880/google-credentials/auth/callback". Does this need to be changed to https? I got an email from Google saying that the project will be removed if the uri is not compliant.
I changed the uri on my Google developer site to https://. However, the authentication fails with "Error 400: redirect_uri_mismatch - The redirect URI in the request, http://node-red.example.com:1880/google-credentials/auth/callback, does not match the ones authorized for the OAuth client. ". Any chance that will be fixed or is there a workaround?