ユーザーのGoogle Calendarへ予定を自動登録

5 min read読了の目安(約4800字

概要

Webサービスで映画や美容室の予約を行うと、たまに自分のGoogle Calendarに自動で予定が追加されていることがあると思います。
それはGoogleが提供しているEmail Markupという機能によるものです。

Email Markupとは

https://developers.google.com/gmail/markup

Email Markupは schema.org を使って新たなにEmailの機能を追加できる仕組みです。
Emailの文面のHTMLに schema.org マークアップというデータを加えることで動作します。
schedma.org マークアップの形式としてJSON-LDMicrodataがあります。

チュートリアル

まず、Google Apps Scriptのプロジェクトを作成します。
その後、下記のファイルを保存し実行することでGoogle Calendarに予定が追加されます。

<!DOCTYPE html>
<html>
  <head>
    <script type="application/ld+json">
    {
      "@context": "http://schema.org",
      "@type": "EventReservation",
      "reservationNumber": 1,
      "reservationStatus": "http://schema.org/Confirmed",
      "underName": {
        "@type": "Person",
        "name": "John Adams"
      },
      "reservationFor": {
        "@type": "Event",
        "name": "魅惑のたこ焼きパーティー",
        "startDate": "2021-04-26T09:30:00+09:00",
        "location": {
          "@type": "Place",
          "name": "東京タワー",
          "address": {
            "@type": "PostalAddress",
            "streetAddress": "芝公園4-2-8",
            "addressLocality": "港区",
            "addressRegion": "東京都",
            "postalCode": "105-0011",
            "addressCountry": "日本"
          }
        }
      }
    }
    </script>
  </head>
  <body>
    <p>
      これはテストの文面です。
    </p>
  </body>
</html>
function myFunction() {
  const htmlBody = HtmlService.createHtmlOutputFromFile('mail_template').getContent();

  MailApp.sendEmail({
    to: Session.getActiveUser().getEmail(),
    subject: 'Test Email markup - ' + new Date(),
    htmlBody: htmlBody,
  });
}

メールの上部が以下のような表示になります。

Google Calendarの予定は以下のような表示です。

Reservations(Google Calendar)

https://developers.google.com/gmail/markup/google-calendar

Schema.org マークアップをメールで使用することで、Googleカレンダーがフライト、コンサート、レストランの予約、またはその他のチケット付きイベントの確認メールからイベントの詳細を自動的に抽出できるようにすることができます。
カレンダーはこれらのイベントをユーザーのカレンダーに自動的に追加できます。
ユーザーのフライトが遅れたり、メールの更新を受信した場合でも、イベントはリアルタイムで更新されます。

種類

  • Bus Reservation
  • Event Reservation
  • Flight Reservation
  • Hotel Reservation
  • Rental Car Reservation
  • Restaurant Reservation
  • Train Reservation

Event Reservation

https://developers.google.com/gmail/markup/reference/event-reservation

チュートリアルでは汎用的なEvent Reservationを使いました。
種類によって入力項目は異なります。
注意として日時を入力する場合はISO 8601の形式になっています。2021-04-26T09:30:00-08:00ではなくJSTである2021-04-26T09:30:00+09:00にしてください。

registering with google

https://developers.google.com/gmail/markup/registering-with-google
Email Markupを使うためにはGoogleの承認が必要です。
例外として送信メールアドレスと受信メールアドレスが同一の場合はテストとして試すことができます。
また、注意としてこのメールアドレスは@gmail.comでなければならず、Gmailの独自ドメインでは試すことができないです。

承認のフロー

  1. ガイドラインの確認します。
    https://developers.google.com/gmail/markup/registering-with-google#email_sender_quality_guidelines
    SPFやDKIMで認証されていることなどです。

  2. schema.whitelisting+sample@gmail.comに本番のサーバーから実際のメールを送信します。
    メールがガイドラインに沿っているかマークアップが正しいかを確認されます。
    なので、送信前にテスターで全ての必須項目にデータが入っているかは確認したほうが良いです。https://www.google.com/webmasters/markup-tester/

  3. 登録フォームに必要事項を記入します。
    https://docs.google.com/forms/d/e/1FAIpQLSfT5F1VJXtBjGw2mLxY2aX557ctPTsCrJpURiKJjYeVrugHBQ/viewform?pli=1

    1. What is your name? *
    2. What email address should we use to contact you? *
    3. Provide a phone number we can use to reach to you if needed.
    4. What is the name of your company? *
    5. What is your company's website address? *
    6. What does your company do? What is its main goal or product? *
    7. How many users does your service/product/company have?
    8. Where is your company located? *
    9. Describe the email to which you plan to add schema. What is its purpose? *
    10. Is your email Promotional or has a Promotional Intent or is a Solicitation? *
    11. Which Structured Data Type do you plan to add to your email? *
    12. Which Action do you plan to add to your email? *
    13. If you plan to use a One-Click or Go-To Action, what text will appear on the button?
    14. From what email address are these emails sent? *
    15. What languages are used in your emails? *
    16. Does your action handler require bearer identity tokens? *
    17. On what day did you send a sample email to
    18. Subject of sample email sent to schema.whitelisting+sample@gmail.com *
  4. メールでフィードバックが来たら直します。
    メールの件名は下記のようになっています。
    「test@example.com - Email Markup - Improvements needed」
    Google Document上で添削されるので返信があればここで行います。
    承認された場合は以下の件名のメールが来ます。
    「test@example.com - Email Markup - Approved」