Gmail の受信を Webex Messaging Bot で通知する

#初めに
日々、メールが沢山来て、メールの管理が大変だったり、重要なメールを見落としてしまったり・・・ということはないでしょうか？
そんなメールの課題を解消すべく、今回はGmailに送信されてきたメールのうち、特定の条件を満たすメールを受信したタイミングで Webex Messaging Bot に通知を行う仕組みを作成していこうと思います。

プログラミングは一切行わず、iPaaS（[webMethods.io](https://www.softwareag.cloud/site/product/webmethods-io-integration.html#/)）とコマンドプロンプトを使用して作成します。

#Google APIのアクセストークンを取得する
webMethods.ioのGmailの設定項目を確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/ef62cd12-b351-0b78-6452-a065e62564ef.png)

見てわかる通り、アクセストークン、リフレッシュトークンの設定が必要です。

webMethods.ioでフローを作成する前に、Google APIのアクセストークンを取得する作業を行います。
「[Google Cloud Platform](https://console.cloud.google.com/home/)」から、GmailのAPIを有効にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/50a65a4c-1fbb-eafe-5bd4-77783fca6035.png)
※APIを有効にする手順は「[Webex Messasingのスペース管理をAPIで行う②](https://qiita.com/maohno/items/da5e5d66a95a428e1376)」参照

###認証情報を作成する
GmailのAPIはアクセストークンが必要であるため、引き続き認証情報の作成を行っていきます。
「APIとサービス」→「認証情報」の順に選択して、「認証情報」画面へ移動いします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/2eac67ac-03b3-61c8-5076-17b784b56a38.png)

「認証情報を作成」→「OAuthクライアントID」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/9568dd18-7fae-48c8-c233-7a258bf2e972.png)

必要情報を入力して、「作成」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/dd594c99-9b59-7c68-2f84-2e16499e74a7.png)

画面に表示された「クライアントID」「クライアントシークレット」は後ほど使用するため、控えておきます。
（別画面で「クライアントID」「クライアントシークレット」は再確認可能です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/1b308722-39ad-08e9-31dc-af03df2f8a45.png)

次に、認可を行うプロジェクトを作成します。

「OAuth同意画面」を選択すると、作成済みのプロジェクトが表示されます。
表示がない場合、「プロジェクトを作成」からプロジェクトを作成していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/d29ff143-0235-6fad-5049-4fae5471e7d1.png)

新しいプロジェクトで「プロジェクト名」を入力し、「作成」で進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/a46d21a8-1a37-8edf-0408-729cf3b93fd1.png)

「User Type」を選択して、「作成」で進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/47e64eef-32a9-8f64-6e79-e80bb682b83a.png)

必要項目を入力して「保存して次へ」で進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/a53c054a-fd09-c4a2-ff26-cfcad2b1e6d6.png)

必要項目を入力して「保存して次へ」で進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/5955ed9b-03b6-e3d5-1159-c99c8e5e59df.png)

APIを許可するユーザーを追加しておきます。
追加したら、「保存して次へ」で進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/7a38f11e-1c9e-c1b6-ed42-07ef9e6ddaf8.png)

###認可コードを取得する
アクセストークン、リフレッシュトークンを作成するために、認可コードを取得する必要があります。
※OAuth2の認可フローについては「[Google Identity Platform
Google > OAuth2.0を使用してGoogleAPIにアクセスする](https://developers.google.com/identity/protocols/oauth2)」を参照

認可コードの取得については、「[WebサーバーアプリケーションにOAuth2.0を使用する](https://developers.google.com/identity/protocols/oauth2/web-server)」に従って進めていきます。

認可コード取得のために設定する項目は以下の通りです。

<table>
<tr><th>パラメータ</th><th>設定値</th></tr>
<tr><td>client_id</td><td>作成したOAuthクライアントの「クライアントID」</td></tr>
<tr><td>redirect_uri</td><td>作成したOAuthクライアントに設定した「承認済みのリダイレクトURI」</td></tr>
<tr><td>scope</td><td>https://www.googleapis.com/auth/gmail.readonly(
※1)
</td></tr>
<tr><td>response_type</td><td>code</td></tr>
<tr><td>access_type</td><td>offline(
※2)</td></tr>
</table>

> ※1 scope
> スコープには、許可する権限範囲を設定します。
> 今回はメールのタイトルで判定する予定なので読み取りのみ可能なスコープ「`https://www.googleapis.com/auth/gmail.readonly`」を設定します。
> スコープの一覧は「[Choose Auth Scopes](https://developers.google.com/gmail/api/auth/scopes?hl=ja)」参照。

> ※2 access_type
> 「offline」を設定しない場合、次工程で「リフレッシュトークン」が取得できなかったため設定

認可サーバーへリクエスト「`https://accounts.google.com/o/oauth2/v2/auth`」を送信します。
作成したURIをブラウザに入力すると、認可コードが取得できます。

```
https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&response_type=code&client_id=【クライアント ID】&redirect_uri=【リダイレクトURL】&scope=https://www.googleapis.com/auth/gmail.readonly
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/3d46426f-fd1a-4c67-3d21-0fac5234d316.png)

許可するアカウントを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/3f92c37c-8094-0a7c-8ed3-acad7ea68979.png)

「Continue」で進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/070b1660-78f1-e588-df4a-2cbaf1837d89.png)

返ってきたURIの「code」に格納されている情報が「認可コード」になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/96d4e2d6-d39c-5392-073e-ef49bc562ea7.png)

###アクセストークン、リフレッシュトークンを取得する
アクセストークン、リフレッシュトークンの取得については、「[WebサーバーアプリケーションにOAuth2.0を使用する](https://developers.google.com/identity/protocols/oauth2/web-server)」に従って進めていきます。

アクセストークン、リフレッシュトークン取得のために設定する項目は以下の通りです。

<table>
<tr><th>パラメータ</th><th>設定値</th></tr>
<tr><td>client_id</td><td>作成したOAuthクライアントの「クライアントID」</td></tr>
<tr><td>client_secret</td><td>作成したOAuthクライアントの「クライアントシークレット」</td></tr>
<tr><td>redirect_uri</td><td>作成したOAuthクライアントに設定した「承認済みのリダイレクトURI」</td></tr>
<tr><td>code</td><td>取得した「認可コード」（※3）</td></tr>
<tr><td>grant_type</td><td>authorization_code</td></tr>
</table>
> ※3 code
> 認可コードの「/」はASCIIコード「%2F」で応答される場合があるので、変換して「/」で設定してください。

認可サーバーへリクエスト「`https://accounts.google.com/o/oauth2/token`」を送信します。
コマンドラインに入力して、トークンを取得します。

```
curl --data-urlencode "code=【認可コード】" --data-urlencode "client_id=2【クライアントID】" --data-urlencode "client_secret=【クライアントシークレット】" --data-urlencode "redirect_uri=https://127.0.0.1" --data "grant_type=authorization_code" https://accounts.google.com/o/oauth2/token
```

アクセストークンとリフレッシュトークンが取得できたことが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/d8680a0c-d02e-6654-e891-83076fd87884.png)

#メールの通知をWebex Messaging Botに通知させる
ここから、実際にフローを作成して、条件を満たすメールを受信したらWebex Messaging Botが通知するようにしていきます。
[webMethods.io](https://www.softwareag.cloud/site/product/webmethods-io-integration.html#/)へ移動して認可情報を設定していきます。

フローはかなり単純な構成になっています。
トリガーにGmailを取得して、該当するメールであった場合はメッセージを通知して終了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/831160b0-a26b-f265-7c76-0f502776f8ef.png)

それでは、トリガーで「Gmail」を選択し、認可情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/62797331-2271-8820-bb6b-8b7cb92684ca.png)

<table>
<tr><th>パラメータ</th><th>設定値</th></tr>
<tr><td>Client ID</td><td>作成したOAuthクライアントの「クライアントID」</td></tr>
<tr><td>Client Secret</td><td>作成したOAuthクライアントの「クライアントシークレット」</td></tr>
<tr><td>Access Token</td><td>取得したアクセストークン</td></tr>
<tr><td>Access Token</td><td>取得したリフレッシュトークン</td></tr>
<tr><td>Refresh Url</td><td>https://oauth2.googleapis.com/token</td></tr>
<tr><td>Grant Type</td><td>refresh_token</td></tr>
</table>

トリガーの設定内容は次の通りです。
新しいメール受信時に、件名に「【重要】」と含まれるメールであった場合、通知対象としています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/6771701e-a3bf-70e9-e37c-e266d7344f62.png)

続いてBotの設定を行います。
Botは通知内容にGmailの「件名」を通知するように設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/dd7d3f68-031b-d0e3-eff1-6c7e1dcacc54.png)

それでは、実際にBotを動かくして確認してみましょう。

2件のメールを受信しました。
片方は件名に「【重要】」が含まれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/ebdb2ca6-e7e5-3f24-3879-0103ce5ac8cf.png)

Botの通知を確認してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299182/3188ca8f-6833-b94b-39d7-6f0c8b7717e2.png)

件名に「【重要】」が含まれたメールの受信のみ通知している事が確認できました。

#最後に
GoogleのAPIを活用した事で、Webex MessasingのBotをGamilを連携して活用することができました。
このようにWebex Messasing BotはWebex製品内だけなく他アプリケーションと連携した活用方法もできるので、通知、リマインダー、備忘録の作成など便利ツールとして使用する事ができます！