![見出し画像](https://assets.st-note.com/production/uploads/images/108101361/rectangle_large_type_2_caef74da69218d436501f2791ffe242c.png?width=1200)
【第85回】 Journey Builder で月末の X 日前に送信するスケジュールの設定方法
Journey Builder の定期的なスケジュールは「時・日・平日・週・月・年」の中から選択ができますが、例えば、月末の 5 日前と 3 日前に送信するような設定はできません。その月の月末までに顧客に対応して欲しいことをリマインドする時に、月末の 5 日前と 3 日前のような「定期的なスケジュール」が組めると便利ですよね。
もちろん、SQL を使用して、月末の 5 日前と 3 日前にのみエントリーソースにデータが入るように設定することも可能ですが、今回はスケジュール側で設定してみたいと思います。
以前の記事で「Automation Studio でスケジュールされた時間にオートメーションを一時的に停止する方法」という記事を書きました。今回はそちらを応用します。
上記の記事と同様に、データエクステンションを用意します。
今回も、データエクステンションに「Automation_Control」という名前を付けて「Id」という「テキスト型」の項目を設けました。これらの名前は何でも大丈夫です。
![](https://assets.st-note.com/img/1712034159296-lOUN0u3via.png?width=1200)
データエクステンションが作成できたら、以下の SQL を Automation Studio で構成します。上で作成した「Automation_Control」に「上書き」で値が入るように SQL クエリアクティビティを構成してください。
SELECT
'aaa' as [Id]
FROM
_Journey
WHERE
CONVERT(DATE, DATEADD(hh, 15, GETDATE()), 111) NOT IN
(
DATEADD(d, -5, EOMONTH(DATEADD(hh, 15, GETDATE()))),
DATEADD(d, -3, EOMONTH(DATEADD(hh, 15, GETDATE())))
)
・「FROM 句」はデータビューであれば何でも OK です。
・ Journey データビューであることに意味はありません。
・ レコードが格納されるのに少し時間がかかる傾向があります。
・ Query Studio ではエラーが出ますが、Automation Studio ではエラーは出ません。
これで、月末の 5 日前と 3 日前以外の日に、この SQL が実行された場合に「Automation_Control」というデータエクステンションに 1 レコードが入る仕組みができました。この入る値の「aaa」自体には意味はありません。
なお、ここで出てくる EOMONTH 関数は、End of Month の略で、月末を調べる関数です。
後は、この SQL クエリアクティビティより後ろのステップに、検証アクティビティを設けて、データエクステンション「Automation_Control」にレコードが 1 つ格納されている場合にオートメーションが停止するように設定するだけです。
![](https://assets.st-note.com/img/1686630238097-b1Xdrw9Qsf.png?width=1200)
![](https://assets.st-note.com/img/1712034393881-n2LtwT7klN.png)
これでオートメーションのステップが検証アクティビティの部分で止まりますので、後続のステップが進まなくなる仕組みができましたね。これで、以下の通り、月末の 5 日前と 3 日前のみ、後続ステップに進む仕組みができました。
![](https://assets.st-note.com/img/1692582264648-85itdxOqrI.png?width=1200)
あとは、検証アクティビティの後ろに、フィルターアクティビティなり SQL アクティビティなりで、配信リストを生成し、ジャーニーのスケジュール設定でオートメーショントリガーを選択すれば完了ですね。
![](https://assets.st-note.com/img/1686630357938-cwrnKNNsKv.png?width=1200)
ちなみに、上で説明した SQL は、下記のように WHERE 句を書いてしまうと、構文検証としては成立しますが、実装としては失敗します。
SELECT
'aaa' as [Id]
FROM
_Journey
WHERE
CONVERT(DATE, DATEADD(hh, 15, GETDATE()), 111) != DATEADD(d, -5, EOMONTH(DATEADD(hh, 15, GETDATE())))
OR CONVERT(DATE, DATEADD(hh, 15, GETDATE()), 111) != DATEADD(d, -3, EOMONTH(DATEADD(hh, 15, GETDATE())))
これは、不等価演算子同士の「OR」条件だからですね。必ず「NOT IN」を使用するようにしてください。
<追記>
すでにお察しの人もいるかもしれませんが、この仕組みを使えば、特定のカレンダーの日付に、メール送信することも可能になります。例えば、以下の日付に送信したい場合は、以下のような SQL クエリを作成してください。
■ 送信したい日付
・2023年8月25日
・2023年9月20日
・2023年10月15日
・2023年12月10日
・2024年1月5日
■ SQL クエリサンプル
SELECT
'aaa' as [Id]
FROM
_Journey
WHERE
CONVERT(DATE, DATEADD(hh, 15, GETDATE()), 111) NOT IN
('2023-08-25','2023-09-20','2023-10-15','2023-12-10','2024-01-05')
これで自由なタイミングでジャーニーをコントロールできますね。
今回は以上です。
次の記事はこちら
前回の記事はこちら
私の note のトップページはこちら
この記事が気に入ったらサポートをしてみませんか?