取引先からのメールを Slack で見られるようにしたいものの、全部を流すとチャンネルが埋まってしまう。この記事は、そう悩んでいる業務担当者に向けて、条件に合うメールだけを Slack へ通知する手順を説明します。
結論
Samurai App のワークフローで、Gmail の「New Gmail Message Received Trigger」を起動のきっかけにし、「通知先へ送る」ステップで Slack の Incoming Webhook へ送ります。「通知先へ送る」はモデルを呼びません。
- できること: Gmail の検索条件で絞ったメールの件名、差出人、本文を Slack へ流す
- できないこと: 受信してすぐの通知。Gmail は定期的に見に行く方式で、最大 15 分遅れます
- できないこと: 同じ通知先から複数のチャンネルへの振り分け。チャンネルごとに通知先を分けます
できること・できないこと
絞り込みは query が本命です。 絞り込みの欄には query と labelIds があります。query は Gmail の検索窓と同じ書き方で、from: subject: has:attachment -(除外)OR が使えます。labelIds が受けるのはラベル ID を 1 つだけで、query を入れると query が優先されます。
絞らないと、受信したメールの数だけ費用がかかります。 サービス連携は 1 件受けるごとに約 0.5 円かかり、何も走らなくても同じです。件数の多いメールボックスほど、先に条件を決めてください。
Slack 側のチャンネルは URL で固定です。 Incoming Webhook の投稿先は作るときに選んだチャンネルで、送る側から変えられません。投稿をあとから削除することもできません。
届く項目は決まっていますが、必ず入るとは限りません。 公式の一覧にある項目は subject(件名)、sender(差出人)、message_text(本文)、to(宛先)、attachment_list(添付の一覧)、message_timestamp(日時)、thread_id などで、すべて任意の扱いです。本文に差し込んだ項目が届いた内容に無いと、そのステップは空のまま送らず失敗します。
用意するもの
- Gmail のアカウントと、Samurai App の「コネクタ」での Gmail の接続
- Slack の Incoming Webhook の URL(
https://で始まるもの) - ワークフローにサービス連携を付けられる権限(マネージャー以上)
手順
完成すると、次のようなワークフローになります。

1. Slack で Incoming Webhook の URL を作る
Slack のアプリ設定で「Incoming Webhooks」をオンにし、「Add New Webhook to Workspace」から投稿先のチャンネルを選んで許可します。出てきた URL は秘密の値として扱います。Slack は漏れた URL を探して無効にしています。
2. 通知先に登録する

「設定」→「通知」の「通知先」で、名前と URL を登録します。登録した URL は二度と表示されません。「テスト送信」で 1 通届くことを確認します。
3. Gmail を接続する
「コネクタ」の画面で Gmail を「追加」し、自分のアカウントで連携します。コネクタの追加は管理者とマネージャーの操作です。
4. ワークフローを作る
「ワークフロー」の「新規作成」で下書きを作り、ステップを選んでいない状態の「設定」にある「ワークフローの入力」で、「入力の項目を追加」から名前 event、種類「項目の組」を足します。届いた内容はこの event に入ります。
続けて「つなぐ」の「通知先へ送る」を足し、手順 2 の通知先を選んで「本文」を書きます。
新着メール: {{input.event.subject}}
差出人: {{input.event.sender}}
本文全体を流すなら {{input.event.message_text}} を足せますが、メールの中身がそのチャンネルの全員に見えます。最初は件名と差出人だけにして、必要になってから足すことをおすすめします。
「保存」したあと、「バージョン」タブの「バージョン N を公開」で公開します。自動実行は公開したバージョンで動きます。
5. 起動を付けて絞り込む
「トリガー」タブの「サービス連携を追加」を押します。
- 「どのサービスを監視するか」で手順 3 の Gmail を選ぶ
- 「どうなったら動かすか」で「New Gmail Message Received Trigger」を選ぶ
- 「絞り込み」の
queryに、Gmail の検索窓と同じ条件を入れる
from:billing@example.com OR subject:至急
入れる前に Gmail の検索窓で同じ条件を試し、狙ったメールだけが出ることを確認してください。
6. 試す
条件に合うメールを自分宛てに送り、最大 15 分待ちます。実行の結果は、ワークフローの「実行」タブの「最近の実行」に「出来事で起動」として残ります。
チャットで作る場合は、「Gmail に billing@example.com から届いたメールの件名と差出人を、通知先の営業チャンネルへ送るワークフローを作って」のように頼めます。公開とトリガーの登録は、上の手順 4 と 5 で確認してください。
動かないとき
- 「通知先」の行に「宛先の URL が見つかりません。URL を確かめてください(404)」と出る: Webhook の URL が違うか、Slack 側で無効になっています。Slack で作り直し、通知先の「編集」で新しい URL を入れます
- 実行が失敗し、差し込んだ値が無いと出る: そのメールに無い項目を本文で参照しています。「最近の実行」で入力を開いて届いた項目を確認し、本文の項目名を合わせます
- 何も起きない: ワークフローが公開されていないと、トリガーは実行を始めません。公開してもすぐには動かないので 15 分待ち、それでも動かなければ
queryを Gmail の検索窓で試し直します - Slack が送信を断る: 公式の一覧では、アーカイブしたチャンネルは
channel_is_archived、無効になった Webhook はno_service、管理者の制限はaction_prohibitedです。チャンネルと Slack の管理設定を確認します
よくある質問
複数のチャンネルに分けて流せますか
Webhook の投稿先は 1 つのチャンネルに固定なので、チャンネルごとに Webhook と通知先を作ります。「条件分岐」でステップを分けるか、条件ごとに別のワークフローとトリガーを作ります。
15 分より早くできますか
Gmail の起動は定期的に見に行く方式で、最大 15 分遅れます。急ぎのメールに頼る使い方には向きません。
Slack に出した通知は消せますか
Incoming Webhook には投稿を削除する機能がありません。Slack の画面から削除してください。