🐶

GASからSlackIDではなくメールアドレスを使ってメンションを送る方法

2021/07/14に公開

GASからSlackでメンションつきメッセージを送りたい場合にSlackのユーザーIDIncoming Webhooksを使って送るやり方をよくみかけますが、筆者はこのやり方を使うことは最近はほとんどないです。

じゃあどうやるのかというかいうとSlackのワークフロービルダー(Webhook)を使います。

「メールアドレスを収集してGoogleフォームの回答者にSlackでメッセージを送りたい!」なんてのがよくあるケースなのでこれを実装していきます。

アーキテクチャ

アーキテクチャはこんな感じです。

ワークフロービルダーでWebhookを作成

Webhookを選択

変数を追加

ここでは回答日時のtimestampと質問内容のqueryをそれぞれテキストで追加します。

そして一番重要なのがemailでデータタイプをSlackユーザーのメールアドレスにすることです。

メッセージ送信用のステップを追加

メッセージを送信を選択

メッセージを作成

メッセージの送信先とメッセージのテキストを変数を使って作成します。

最終的なワークフローはこんな感じです。

ワークフローを公開

このときWebhookのURLができるのでメモしておきます。

GASを書く

urlを先程作ったWebhookのURLにします。
※ WebhookのURLそのまま書いてますが、再生成済みなのでご安心を

function onFormSubmit(e) {
  const params = {
    timestamp: e.namedValues['タイムスタンプ'][0],
    email: e.namedValues['メールアドレス'][0],
    query: e.namedValues['質問内容'][0],
  };

  emitSlackWorkflow(params);
}

function emitSlackWorkflow(params) {
  const url = 'https://hooks.slack.com/workflows/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';
  const options = {
    method: 'POST',
    headers: { 'Content-type': 'application/json' },
    payload: JSON.stringify(params),
  };
  UrlFetchApp.fetch(url, options);
}

スプレッドシートのフォーム送信時をトリガーに設定します。

実行!

では実行してみましょう。

フォームを入力して…送信!
※ Google Workspaceのフォームならメールアドレスの入力は省略できます(@gmail.comを使っているので手動で入力している)

どん!

Slackbot からメッセージが届きました!

もちろんSlackbotからではなく特定のチャンネルへの投稿などもSlack Workflowのメッセージの送信先を変えるだけでOKです。

この方式の最大のメリットはメッセージのフォーマットをコードから切り離しているところです。あくまで受け取るのはデータだけです。
そのためコードを直さずともメッセージの通知先や内容はワークフロービルダーに寄せているので変更が容易になります。

デメリットはフォームの内容が増えた場合になおす箇所が増えるというところでしょうか。

SlackIDつかってごにょごにょしていた人はぜひ試してみてください。

Discussion