Events within email to update calendar - google-schemas

I am new to this and I am trying to provide a service to my tennis players where they can go on website, fill up a form for reserving the court. The form will send an email with time and place when they want to play. Upon confirmation, that should update the calendar. I tried various scenarios provided, but it did not work. I am not sure what am I missing. I just send en email to myself as follows:
<html>
<body>
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "IO12345",
"underName": {
"#type": "Person",
"name": "John Smith"
},
"reservationFor": {
"#type": "Event",
"name": "Google I/O 2013",
"startDate": "2017-08-30T08:30:00-08:00",
"location": {
"#type": "Place",
"name": "Moscone Center",
"address": {
"#type": "PostalAddress",
"streetAddress": "800 Howard St.",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94103",
"addressCountry": "US"
}
}
}
}
</script>
<p>
Dear John, thanks for booking your Google I/O ticket with us.
</p>
<p>
BOOKING DETAILS<br/>
Reservation number: IO12345<br/>
Order for: John Smith<br/>
Event: Google I/O 2013<br/>
Start time: May 15th 2013 8:00am PST<br/>
Venue: Moscone Center, 800 Howard St., San Francisco, CA 94103<br/>
</p>
</body>
</html>
but I see it just a text as above.
thanks in advance,
Hagop

You are missing a property : reservationStatus that is required. I've used the Basic event reminder without a ticket JSON-LD:
<html>
<head>
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "E123456789",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "John Smith"
},
"reservationFor": {
"#type": "Event",
"name": "Foo Fighters Concert",
"startDate": "2017-09-06T11:30:00-12:30",
"location": {
"#type": "Place",
"name": "AT&T Park",
"address": {
"#type": "PostalAddress",
"streetAddress": "24 Willie Mays Plaza",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94107",
"addressCountry": "US"
}
}
}
}
</script>
</head>
<body>
<p>
An event was reserved.
</p>
</body>
</html>
Here is the result:
I've tried your code and added the reservationStatus and it worked. You can test your schemas using Email Markup Tester.
Hope this helps.

Related

Missing highlight in Google Email Markup

I've been working on google email markup for few weeks now. I've submitted it for review. The google review team replied that the mark up is missing highlight in it. About the markup, the email is about Schedule confirmation which gets sent to the patient from hospital. The email contains schedule date, time, doctor name and hospital name. I've used Event Reservation JSON/LD. The markup testing tool shows everything is correct. There is no mention of highlight on the following link
Event Reservation Reference
Here is the JSON/LD for reference
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "12345",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "John Doe"
},
"reservationFor": {
"#type": "Event",
"name": "Schedule Appointment",
"performer": {
"#type": "Person",
"name": "Jane Doe",
"image": "www.mysite.com"
},
"startDate": "2020-08-21T10:00+05:30",
"location": {
"#type": "Place",
"name": "Viman Nagar",
"address": {
"#type": "PostalAddress",
"streetAddress": "Viman Nagar",
"addressLocality": "Viman Nagar",
"addressRegion": "Viman Nagar",
"postalCode": "Viman Nagar",
"addressCountry": "Viman Nagar"
}
}
},
"modifiedTime":"2020-08-21T10:00:00+05:30",
"modifyReservationUrl":"www.mysite.com"
}
The above JSON/LD does not show any error on mark up test tool. I've entered every mandatory and suggested data in the JSON. How to specify highlight in it? I could not find any reference to highlight in the above mentioned link.
I'm also attaching the screenshot of the email I received during testing on Google App Script.
You have invalid Date format in the your startDate property. Please find the corrected JSON below:
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "12345",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "John Doe"
},
"reservationFor": {
"#type": "Event",
"name": "Schedule Appointment",
"performer": {
"#type": "Person",
"name": "Jane Doe",
"image": "www.mysite.com"
},
"startDate": "2020-08-21T10:00:00+05:30",
"location": {
"#type": "Place",
"name": "Viman Nagar",
"address": {
"#type": "PostalAddress",
"streetAddress": "Viman Nagar",
"addressLocality": "Viman Nagar",
"addressRegion": "Viman Nagar",
"postalCode": "Viman Nagar",
"addressCountry": "Viman Nagar"
}
}
},
"modifiedTime":"2020-08-21T10:00:00+05:30",
"modifyReservationUrl":"www.mysite.com"
}

Google Schema Markup - Event Reservation - View Action CTA

I have an event reservation markup that works. I'm now trying to add a ViewAction but I'm getting a Modify Reservations CTA instead of View Tickets as shown on this page:
https://developers.google.com/gmail/markup/highlights#ticketed_event_reservation
The Modify Reservations CTA appears to be associated with Hotel Reservations, so I'm not sure why this is showing up for my event reservation type. I know the action.name doesn't change the CTA text but it's there to follow the code.
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "123456",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "FIRSTNAME LASTNAME"
},
"reservationFor": {
"#type": "Event",
"name": "Michelle Branch",
"startDate": "2017-07-30 19:00:00.000",
"location": {
"#type": "Place",
"name": "Emos",
"address": {
"#type": "PostalAddress",
"streetAddress": "Emos",
"addressLocality": "Austin",
"addressRegion": "Texas",
"postalCode": "-----",
"addressCountry": "United States"
}
}
},
"ticketNumber": "123456",
"numSeats": "1",
"url": "URLHERE",
"action": {
"#type": "ViewAction",
"target": "URLHERE",
"url": "URLHERE",
"name": "View Order"
},
"description": "View Order"
}
</script>

Multiple email markups for Gmail and Inbox

Does Google support adding multiple markups in one email? For e.g i want to add an action button markup for Gmail and a Highlight markup for Inbox. Can this be done? I did not find any documentation for it.
Yes, having multiple markups is supported. For example, for a flight reservation.
All the code until "arrivalTime" is standard for a basic flight confirmation, but with the addition of "checkinUrl" you add a Go-To action to create a [Check In] button in Gmail.
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "FlightReservation",
"reservationNumber": "RXJ34P",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "Eva Green"
},
"reservationFor": {
"#type": "Flight",
"flightNumber": "110",
"airline": {
"#type": "Airline",
"name": "United",
"iataCode": "UA"
},
"departureAirport": {
"#type": "Airport",
"name": "San Francisco Airport",
"iataCode": "SFO"
},
"departureTime": "2017-03-04T20:15:00-08:00",
"arrivalAirport": {
"#type": "Airport",
"name": "John F. Kennedy International Airport",
"iataCode": "JFK"
},
"arrivalTime": "2017-03-05T06:30:00-05:00"
},
"checkinUrl": "http://united.com/onlinecheckin.html",
"potentialAction": {
"#type": "CheckInAction",
"target": "http://united.com/onlinecheckin.html"
}
}
</script>

Multiple tickets without seating not working

I want to send out an email with a schema that defines two tickets.
The documentation states:
If you want to have one ticket (i.e. barcode) per individual and have
names for each individual on the ticket, create multiple
EventReservations (one per individual) with numSeats set to 1. The
example below shows what this looks like.
Sadly this doesn't work like that. If I use this schema (no seating, numSeats set to "1"):
<script type="application/ld+json">
[
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "E123456789",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "John Smith"
},
"reservationFor": {
"#type": "Event",
"name": "Foo Fighters Concert",
"startDate": "2017-03-06T19:30:00-08:00",
"location": {
"#type": "Place",
"name": "AT&T Park",
"address": {
"#type": "PostalAddress",
"streetAddress": "24 Willie Mays Plaza",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94107",
"addressCountry": "US"
}
}
},
"numSeats": "1",
"ticketToken": "qrCode:AB34",
"ticketNumber": "abc123",
"ticketDownloadUrl": "http://..../ticket.pdf",
"ticketPrintUrl": "http://..../ticket.pdf"
},
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "E123456789",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "Eva Green"
},
"reservationFor": {
"#type": "Event",
"name": "Foo Fighters Concert",
"startDate": "2017-03-06T19:30:00-08:00",
"location": {
"#type": "Place",
"name": "AT&T Park",
"address": {
"#type": "PostalAddress",
"streetAddress": "24 Willie Mays Plaza",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94107",
"addressCountry": "US"
}
}
},
"numSeats": "1",
"ticketToken": "qrCode:AB34",
"ticketNumber": "abc456",
"ticketDownloadUrl": "http://..../ticket.pdf",
"ticketPrintUrl": "http://..../ticket.pdf"
}
]
</script>
This will result in a mail in inbox that states that this reservation only contains one Ticket.
The only way to get inbox to state that the reservation contains two tickets is by adding a venueSeat.
E.g.:
<script type="application/ld+json">
[
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "E123456789",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "John Smith"
},
"reservationFor": {
"#type": "Event",
"name": "Foo Fighters Concert",
"startDate": "2017-03-06T19:30:00-08:00",
"location": {
"#type": "Place",
"name": "AT&T Park",
"address": {
"#type": "PostalAddress",
"streetAddress": "24 Willie Mays Plaza",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94107",
"addressCountry": "US"
}
}
},
"numSeats": "1",
"venueSeat": "12",
"ticketToken": "qrCode:AB34",
"ticketNumber": "abc123",
"ticketDownloadUrl": "http://..../ticket.pdf",
"ticketPrintUrl": "http://..../ticket.pdf"
},
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "E123456789",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "Eva Green"
},
"reservationFor": {
"#type": "Event",
"name": "Foo Fighters Concert",
"startDate": "2017-03-06T19:30:00-08:00",
"location": {
"#type": "Place",
"name": "AT&T Park",
"address": {
"#type": "PostalAddress",
"streetAddress": "24 Willie Mays Plaza",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94107",
"addressCountry": "US"
}
}
},
"numSeats": "1",
"venueSeat": "13",
"ticketToken": "qrCode:AB34",
"ticketNumber": "abc456",
"ticketDownloadUrl": "http://..../ticket.pdf",
"ticketPrintUrl": "http://..../ticket.pdf"
}
]
</script>
With this script the mail in inbox will correctly state that the reservation contains two tickets and will additionally print the two seats.
But in my case we do not have reserved seats, so I can't add this parameter.
Any ideas how to solve this or any plans from google to fix this?
Bonus question:
I wasn't able to actually see the ticket. Neither the QR-Code, nor a download link to the PDF. Any ideas why that is?
Based on the documentaiton "There are two options to do multiple tickets":
The first is change numSeats. This means a single reservation will represent tickets for numSeats number of individuals. This will be the option you want since you don't have reserved seating.
I used the following schema:
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "ABCD12345",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "John Smith"
},
"reservationFor": {
"#type": "MusicEvent",
"name": "Foo Fighters Concert",
"url": "http://foofighterstour.com/SFO",
"performer": {
"#type": "Person",
"name": "The Foo Fighters",
"image": "http://www.amprocktv.com/wp-content/uploads/2013/01/foo-fighters-1-680x383.jpg"
},
"startDate": "2015-05-24T12:00:00-08:00",
"endDate": "2015-05-24T16:00:00-08:00",
"doorTime": "2015-05-24T11:00:00-08:00",
"location": {
"#type": "Place",
"name": "AT&T Park",
"address": {
"#type": "PostalAddress",
"streetAddress": "AT&T Park",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94107",
"addressCountry": "US"
}
}
},
"ticketDownloadUrl": "http://www.example.pdf",
"ticketPrintUrl": "http://www.example.pdf",
"modifyreservationurl": "http://www.example.pdf",
"ticketToken": "qrCode:AB34",
"ticketNumber": "abc12345",
"numSeats": "2"
}
</script>
I was able to generate 2 tickets in Inbox, create 2 Google Now cards, generate an action button (modify reservation) in Gmail and Inbox. The modify reservation action button leads to the ticket. Note I tried just using the "URL" property, to generate the "View Ticket" action button, but noticed it disappears. I was also able to generate the QRcode as well, however, the QRcode appeared to be broken on the second Now card.
*Update - the previous card screenshots were from my iphone using Google, the cards appear different on a Android device. One of the ticket properties (ticketdownloadurl / ticketprinturl) appeared when using an Android device:

What exactly is working for the EventReservation type

I created a quite complex schema of the EventRegistration type.
It contained two tickets, had images, contact details, etc.
But all I could get once was a Now card that only contained the title of the event, the date, the location and a action button to open the mail.
I'm wondering, if all the additional data has some error or if this is currently all that is supported. I would have loved to see Logos, contact details, a cancellation link and of course the ticket itself (=QR-Code + download link). This would have been such a nice alternative to Apple's Passbook.
What are the plans for this feature? Is this still going to be developed, is there perhaps already a rough roadmap on when to expect this?
Additionally what I was wondering about is, that the "Email Markup Tester" was complaining that the ticketToken property would be invalid for that type, even though the documentation clearly states that it is part of the EventReservation type.
FYI, here is the anonymized schema I used:
<script type="application/ld+json">
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "TFXLLUS00008",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "Name 1",
"email": "...#gmail.com"
},
"bookingAgent": {
"#type": "Organization",
"name": "My company",
"description": "My company - online ticketing",
"image": "http://www.MyCompany.com/link/to/logo_1500x1500px.jpg",
"url": "http://www.MyCompany.com",
"url/googlePlus": "https://plus.google.com/+MyCompany/",
"ContactPoint": {
"#type": "ContactPoint",
"email": "support#MyCompany.com",
"telephone": "123456789"
}
},
"reservationFor": {
"#type": "Event",
"name": "Test-Event",
"startDate": "2014-04-26T20:00:00+00:00",
"endDate": "2014-04-30T18:00:00+00:00",
"description": "This is a test event for demo purposes.",
"image": "http://www.MyCompany.com/link/to/event/logo.png",
"url": "http://www.MyCompany.com/link/to/event.html",
"location": {
"#type": "Place",
"name": "Congress hall",
"address": {
"#type": "PostalAddress",
"streetAddress": "Street. 1",
"addressLocality": "City",
"addressRegion": "",
"postalCode": "12345",
"addressCountry": "DE"
}
}
},
"ticketToken": "qrCode:4641484423168988",
"ticketNumber": "1690-8587-4723",
"numSeats": "1",
"ticketDownloadUrl": "https://www.MyCompany.com/linkToTicket.pdf",
"ticketPrintUrl": "https://www.MyCompany.com/linkToTicket.pdf",
"price": "100",
"priceCurrency": "EUR",
"bookingTime": "2014-04-26T13:57:50+00:00",
"modifiedTime": "2014-04-26T13:57:50+00:00"
},
{
"#context": "http://schema.org",
"#type": "EventReservation",
"reservationNumber": "TFXLLUS00008",
"reservationStatus": "http://schema.org/Confirmed",
"underName": {
"#type": "Person",
"name": "Name 2",
"email": "...#gmail.com"
},
"bookingAgent": {
"#type": "Organization",
"name": "My company",
"description": "My company - online ticketing",
"image": "http://www.MyCompany.com/link/to/logo_1500x1500px.jpg",
"url": "http://www.MyCompany.com",
"url/googlePlus": "https://plus.google.com/+MyCompany/",
"ContactPoint": {
"#type": "ContactPoint",
"email": "support#MyCompany.com",
"telephone": "123456789"
}
},
"reservationFor": {
"#type": "Event",
"name": "Test-Event",
"startDate": "2014-04-26T20:00:00+00:00",
"endDate": "2014-04-30T18:00:00+00:00",
"description": "This is a test event for demo purposes.",
"image": "http://www.MyCompany.com/link/to/event/logo.png",
"url": "http://www.MyCompany.com/link/to/event.html",
"location": {
"#type": "Place",
"name": "Congress hall",
"address": {
"#type": "PostalAddress",
"streetAddress": "Street. 1",
"addressLocality": "City",
"addressRegion": "",
"postalCode": "12345",
"addressCountry": "DE"
}
}
},
"ticketToken": "qrCode:4020229019819219",
"ticketNumber": "5218-3082-0382",
"numSeats": "1",
"ticketDownloadUrl": "https://www.MyCompany.com/linkToTicket.pdf",
"ticketPrintUrl": "https://www.MyCompany.com/linkToTicket.pdf",
"price": "100",
"priceCurrency": "EUR",
"bookingTime": "2014-04-26T13:57:50+00:00",
"modifiedTime": "2014-04-26T13:57:50+00:00"
}
</script>

Resources