HightouchでSlackをDestinationとして設定し、レコードの追加・変更・削除に対して動的にSlackへメッセージを送信してみた
さがらです。
HightouchのDestinationとしてSlackを設定し、Syncを行ってみたので本記事でその内容をまとめてみます。
HightouchでのSlack連携について
HightouchでのSlack連携ですが、4パターンの連携が可能です。
- Message
- Modelとして設定したクエリ・テーブルに対し、前回のSync以降に追加、変更、削除されたレコードごとに個別のメッセージを送信する。初回実行時にはメッセージは送信されない。
- Batch Message
- Modelとして設定したクエリ・テーブルが返す結果をすべてメッセージに含めて送信する
- Table
- Modelとして設定したクエリ・テーブルが返す結果をすべて表形式に変換して送信する
- CSV
- Modelとして設定したクエリ・テーブルが返す結果をすべてCSVに変換して添付し、送信する
より詳しくは下記の公式ドキュメントをご覧ください。
検証すること
上述の「Message」を試してみます。
前準備として、SourceはSnowflakeを設定し、Snowflake上で事前に1つ簡単なテーブルを作成しておき、それをModelとして使用します。(使用するテーブルは、dbtのチュートリアルで使うjaffle_shopのordersテーブルです。)
本記事では以下の3項目について確認します。
- DestinationとしてSlackを設定
- Syncの設定
- レコードの追加・削除でどのような挙動をするか
DestinationにSlackを追加する
Destinationの設定
まず、DestinationとしてSlackを追加していこうと思います。
Hightouchの左メニューのDestinations
を押し、Add destination
を押します。
Slack
を選択し、Continue
を押します。
すると、OAuthによる認証でHightouchとSlackを設定しますよ、という画面が出てきます。Log in to Slack
を押します。
下図のような画面に移動しますので、問題なければ許可する
を押します。
すると、Hightouchの画面に戻りますので、右下のContinue
を押します。
※注意点:私はこの画面ではなくDestinationの一覧画面に戻ってしまうことがありました。Hightouch社のサポートに問い合わせたところ、Hightouchと対象のSlackワークスペースどちらも一度ログアウト&再ログインをすることで解決しました。
最後にDestination name
に任意の名前を入力し、右下のFinish
を押します。
Slack上での通知先のチャンネルへのHightouchアプリの追加
上述のOAuth認証が無事に成功すると、Hightouchのアプリが対象のSlack Workspaceにインストールされます。
この状態で、Hightouch経由でSlackの宛先としたいチャンネルにHightouchアプリを追加する必要があります。
対象のSlackチャンネル上で右クリックし、チャンネル詳細を表示する
をクリックします。
インテグレーション
タブから、アプリを追加する
を押します。
アプリを選択して追加する画面が表示されますので、Hightouchの行で追加
を押します。
これで準備はOKです!
Syncの設定
続けて、Syncの設定をしていきます。
Hightouchの左メニューのSyncs
を押し、Add sync
を押します。
使用するModelを選択します。
先程作成したSlackのDestinationを選択します。
詳細な設定に移ります。
How do you want to update the records in Slack?
では、今回Messageを試すためMeassage
を選択します。
Which channel would you like to send updates to?
では、メッセージの送信先となるSlackチャンネルを指定します。これはHightouchのSlackアプリを入れたチャンネルしか選択できないようになっています。
Is the content for the message plaintext or Slack Block Kit?
では、メッセージの記述に普通のテキスト形式を用いるか、SlackのBlock Kit Builderの形式を用いるかを選択できます。
今回はPlaintext
で行います。こちらでもLiquidを用いたレコードの値に応じた動的な制御などは可能です。
What content would you like to send when a record is added/changed/removed?
では、実際にSlackに送信されるメッセージを記入します。
{{
と入れると、Modelに含まれるカラム名をサジェストしてくれる仕様ですので、入力しやすいですね!
今回は、added
とis changed
について、以下のように記入しておきます。
<@name>
とすると、対象のユーザーに対してメンションすることもできます。今回は使っていませんが、<@{{ userId }}>
のように記述すると、メンション先も動的に変更することが可能です。
※2023/12/7追記:Slackのユーザーにメンションさせたい場合は、「Slackのmember ID」が必要となります。より詳しくは本ブログの末尾で追記しておりますのでそちらをご覧ください。
Would you like to customize the sender's Slack profile?
では、送信を行う際の表示名(Display name)などを変更することができます。
今回は以下のように設定しました。:mega:
はメガホンの絵文字が表示されます、Slackのデフォルトの絵文字です。
ここまで設定を行ったら、Continue
を押します。
最後に、Description
やSchedule type
を設定して、右下のFinish
を押します。
これで、Syncの設定は完了です!
Syncしてみる
では、実際にSyncをしてみたいと思います!
初回Sync
HightouchのSlack連携でMessage
を選んだ場合の注意点として、初回のSync時にはメッセージは何も送信されません。
これは、初回のSyncで大量のメッセージが送信されることを防ぐためです。
そのため、Message
のSyncの設定を行ったらまず一度Run sync
を押してSyncしましょう。
2回目のSync
では、続けて2回目のSyncを行います。
2回目のSyncの前に、Snowflake上でレコードの差分を作っておきたいため、対象のテーブルに対して以下のクエリを実行しておきます。2行新しいレコードを追加、2行既存のレコードを変更、しています。
insert into orders values (101, 30, '2018-04-11', 'placed'), (102, 55, '2018-04-12', 'placed'); update orders set status = 'completed' where id in (71, 72);
この状態で、Hightouch上でもう一度Syncをしてみます。
すると、下図のようにSlackチャンネルにメッセージが送信されました!レコード1つにつき、1メッセージが送信されています。
※ただ、メンションが効いていないんですよね…こちらについてはHightouch社に確認中です。
2023/12/7追記:メンションを機能させる方法について
Hightouch社から回答を得られ、Slackのユーザーの「member ID」を記入すれば良いということがわかりました!
Slackのmember IDの取得方法ですが、対象ユーザーの画面でCopy member ID
を押すか、SlackのAPIを叩くことでも取得可能です。
この上で、Hightouchのメッセージの編集で@<取得したmember ID>
のように記入すればOKです!
最後に
HightouchのDestinationとしてSlackを設定し、Syncを行ってみることを試してみました。
今回試したMessage
では、設定したModelでレコードの追加・変更・削除があった場合にそれぞれで条件を分けてメッセージをSlackに送ることができるため、とても汎用性が高い機能だと感じました!
HightouchにおいてSlackはFree Destinationのため、気軽に試しやすいと思います。(Syncの数が増えると課金が発生するため、ご注意ください。)