未対応の最新メールを通知

1648 views

この記事では、未対応のメールがあった際に、Slack通知する方法について紹介します。

【できるようになること】

  • 条件に該当するGmailを取得
  • 該当メールがあることをSlackに通知する
  • 2回目以降は前回実施以降のメールのみ対象
※記事としてはGmail、Slackを扱いますが、Outlook、Chatworkも流れとしては同じ内容で実施可能です。

 ワークフローの設定例

今回は以下のケースを想定したワークフロー例を作成します。

件名に「AUTOROについて」が含まれている直近1週間以内に受信したメールのうち、未対応のものがあればSlackに通知する

カスタムアクション「指定のIDより前にあるデータを取得」と最新のメールID保存を組み合わせることで、前回対応後に受信した新しいメールだけを通知対象とすることが可能です。

※変数名は任意の名称でも設定可能です
※このワークフローは、メールの受信をトリガーにした自動実行は想定していません。定期的(例:10分毎)にスケジュール実行してください。

※コネクション登録済みの方はスキップしてください

ワークフロー設定の前に、利用するコネクションを登録する必要があります。
詳細な方法は以下をご参照ください。

今回は、パッケージストアにある「便利アクション」を利用して、「前回対応済み以降のメールの取得」を実行します。
※パッケージは初回利用時弊社側で設定が必要となりますので、左下のチャットより利用を希望する旨ご連絡いただけますと幸いです

まずは、ワークフローを格納するプロジェクトでパッケージを開き、「便利アクション」をクリックします。

その後インストールボタンを押すと格納されているカスタムアクションが利用可能になります。

今回はインストールしたカスタムアクションの中から「指定のIDより前にあるデータを取得」を利用します。

カスタムアクションの利用方法は、CallCustomActionアクション(カスタムアクションを実行)をドラッグアンドドロップし、「指定のIDより前にあるデータを取得」を選択します。

直近1週間以内のメールを取得するには、StoreValueアクション(変数に保存)で1週間前の日時を取得し、GetGmailアクション(Gmailを取得)に設定します

1週間前の日時を取得する際はGetTimeアクション(日時を取得)などで日付を指定することも可能ですが、ワークフロー実行時点から厳密な1週間前の日時を指定する場合は、Unix時間という形式を使用します。

※本記事では、1週間前の指定を subtract(1,”weeks”) にて実施しています。1時間前、1日前などに変更したい場合は、こちらを参考にしてください。

Gmail検索の絞り込み方法は下記をご参照ください。
https://support.google.com/mail/answer/7190?hl=ja

Outlook検索の絞り込み方法はこちらをご参照ください。

データストアのページを開き、「+追加」をクリックし、変数名と値(初期値:1)を設定します。
今後はこの変数に、対応した最新のメールIDを保管していきます。

DataStoreGetアクション(データを取得する)にて登録した変数を設定し、「前回対応した最新のメールID」を取得します。

また、その変数の内容を、「今回対応した最新のメールID」を一時保管するための変数に設定します。
この一時保管のIDは、最終的にデータストアの変数に上書きします。

カスタムアクション「指定のIDより前にあるデータを取得」に、GetGmailアクションとDataStoreGetアクションのアウトプットを紐付けます。

このカスタムアクションのアウトプットが、「前回以降の未対応のメールリスト」になります。

カスタムアクション設定後、ForEachアクション(各要素について繰り返す)を追加します。
繰り返すリストにカスタムアクションのアウトプットを紐づけし、要素を格納する変数名を設定します。

ForEachアクションの中にSendSlackMessageアクション(Slackでメッセージを送信)を追加し、チャンネル名の指定やメッセージを設定します。

さらに、今回対応したメールIDが一時保管のメールIDよりも新しい(大きい)かを比較し、新しいほうを一時保管のメールIDとして残します。

比較による分岐については以下をご参照ください
条件分岐(IF)
比較演算子/論理演算子

すべてのメールに対して繰り返し処理が完了したら最後に、今回対応した最新メール情報として、一時保管のメールのIDをデータストアに上書き保存します。

# 変数に保存_7日前の日時取得
+store_value_1:
  action>: StoreValue
  key: search_date
  value: ${moment().subtract(1, 'weeks').unix()}
  setIfNotDefined: false
  private: false

# Gmailを取得_直近一週間、指定の件名のメールを取得
+gmail_get_1:
  action>: GmailGet
  query: 'after:${search_date} subject:指定の件名'
  provider: 
  limit: 100
  private: false

# データを取得する
+data_store_get_1:
  action>: DataStoreGet
  key: last_mail
  private: false

# 変数に保存
+store_value_3:
  action>: StoreValue
  key: newest_mail
  value: +data_store_get_1
  setIfNotDefined: false
  private: false

# 指定のIDより前にあるデータを取得
+call_custom_action_1:
  action>: CallCustomAction
  id: ca_37191e4a9dc28b59b752
  params:
    jsonArray: +gmail_get_1
    lastId: +data_store_get_1
  meta:
    version: '2021-08-04T03:12:19.000Z'
    interface:
      params:
        jsonArray: Text
        lastId: Text
      output: Anything
      pickers:
    action:
      disabled: false
    display:
      id:
        type: chip
        label: '指定のIDより前にあるデータを取得'
        icon: build
        imageUrl: ''
        color: '#AD1457'

# 各要素について繰り返す
+for_each_1:
  for_each>:
    mail_data: +call_custom_action_1
    private: false
  _do:
 
    # Slackでメッセージを送信
    +send_slack_message_1:
      action>: SendSlackMessage
      provider: 
      channel: 
      text: 'ここにメッセージ'
      send_select: false
      response_message: false
      private: false

    # 真のとき
    +if_1:
      if>:
        condition: ${"0x" + newest_mail < "0x" + mail_data.id}
        private: false
      _do:

        # 変数に保存
        +store_value_4:
          action>: StoreValue
          key: newest_mail
          value: ${mail_data.id}
          setIfNotDefined: false
          private: false

# データを保存する
+data_store_save_1:
  action>: DataStoreSave
  key: last_mail
  value: ${newest_mail}
  private: false
<Googleworkspace>GoogleWorkspace/グーグルワークスペース <ChatWork>チャットワーク <Slack>スラック Outlook アウトルック      

このページは役に立ちましたか?

Share this Doc

未対応の最新メールを通知

Or copy link

CONTENTS