GASからSlackIDではなくメールアドレスを使ってメンションを送る方法
GASからSlackでメンションつきメッセージを送りたい場合にSlackのユーザーID
とIncoming 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