今までのSendGrid応用編
この回は、2021年のAdventCalendar向けにシリーズとしてお届けしていました。
実に1年経ってしまいましたが、改めて前回までの記事を時系列で紹介します。
【FileMaker】SendGrid経由でメールを送る - 一括送信編
【FileMaker】SendGrid経由でメールを送る - テンプレートを使う
これまでの基本的なSendGridメール送信については、以下の記事もぜひ参考にしてみてください。
【FileMaker】SendGrid経由でメールを送る 下準備編
【FileMaker】SendGrid経由でメールを送る テキストメール編
【FileMaker】SendGrid経由でメールを送る 添付ファイル編
【FileMaker】SendGrid経由でメールを送る - エラーコード10が返ってくる
では、おさらいが済んだところで、今回の記事、進めましょう!
FileMaker バージョン
curlとJSONを使いますので、FileMaker ver.16以上で実装してみてください。
この記事では、FileMaker ver.19.6.1で作成し、実行しました。
気がつきましたが、去年はver.19.4.1で作成していました。
1年で0.2バージョン上がったんですね!
進化の早い FileMaker !
現場の疲弊
さて、営業や現場スタッフの尽力で、おかげさまで購入数やユーザ数も増えてきました。
今まではキャンペーンのお知らせを手で作って夜中に送信していたのですが、流石に働き方改革をしないとスタッフも疲弊してしまいそうです。
そこで、時間指定をしてキャンペーンメールを送れるようにしよう、となりました。
まず、SendGridのキャンペーンメールについて、事前に知識を入れておきましょう。
SendGrid キャンペーンメールの概要
以下のサイトが、SendGridキャンペーンメール送信に関する情報です。
API仕様は公開されていますが、キャンペーンメールを作成する手順などは、SendGridアカウントを作成して確認してください。
手順として、以下のような流れになります。
1.送信者情報を作成する
2.受信者情報を登録する
3.受信者のグループを作成する
4.メール内容を作成する
5.送信日時を設定する <-今回の記事
これら手順でAPIが用意されていますが、今回はすでに4まで作成済みであることとして、「5.送信日時を設定」し、その日時で送信されるかどうかのテストを行います。
ちなみに、1〜5まででどんなAPIを使うか、というと、次のようなAPIになります。
順番 | 手順 | API |
---|---|---|
1 | 送信者情報を作成する | Sender Identities API |
2 | 受信者情報を登録する | Contacts API |
3 | 受信者のグループを作成する | Contacts API |
4 | メール内容を作成する | Campaigns API |
5 | 送信日時を設定する | Campaigns API |
一度、SendGrid内で手動でこれらの手順を確認しておくと、APIを使うときに「あの項目がここにはまるのか」というのがわかりやすくなりますので、ぜひやってみてください。
こちらの公式資料も詳しいです。
SendGridのキャンペーンメールの手順がわかったところで、早速「手順5」をFileMakerからも送ってみましょう。
FileMakerの実装
必要なSendGrid情報
APIキーのほか、以下が必要になります。
・キャンペーンID
・送信日時
キャンペーンIDは、「手順4」でSendGrid内で作成したキャンペーンメールのIDを取得できます。
SendGridサイトでキャンペーンIDを確認する
直接SendGridサイトで確認する場合は、キャンペーンメールをクリックして編集画面に行った際にURLから確認できます。
ちなみに、送信済みのキャンペーンメールは、SendGridの「Campaign」カテゴリで確認できます。
このCAMPAIGN NAMEをクリックすると、キャンペーンIDやコンプレッションなどをグラフ化したページで色々確認できます。
このグラフは、昨年キャンペーンメールを送信したときの状態です。
テストなのでほぼゼロが続いていますが、通常この時期だとクリスマスや年末年始向けにキャンペーンの送信やメールからのクリック数などが増える時期ではないでしょうか。
APIでキャンペーンIDを確認する
通常、FileMakerなどアプリから運用する場合は、キャンペーンIDをレコードとして保存しておくのがベストと思います。
キャンペーンIDを取得するAPIの構文は、以下になります。
GET https://api.sendgrid.com/v3/campaigns?limit={limit}&offset={offset} HTTP/1.1
この構文では全てのキャンペーンIDが返ってきますが、作成日の降順で返ってきますので、最初のキャンペーンIDが最新になります。
また、キャンペーンメールの作成もAPI経由ですると、キャンペーンメール作成APIの返値でキャンペーンIDが確認できます。
今回は触れませんが、SendGrid キャンペーンメール作成APIページで確認してみてください。
キャンペーンスケジュールAPIの確認
キャンペーンをスケジュールするAPIの構文は、以下になります。
POST https://api.sendgrid.com/v3/campaigns/{campaign_id}/schedules HTTP/1.1
指定する送信日時は、UNIXタイムスタンプをJSONで指定します。
{
"send_at": 1489771528
}
これを、FileMakerでの構文に直して実装します。
スクリプト
全体的なスクリプトは、以下の画像になります。
水色部分が必要最低限の実装です。
UNIXタイムスタンプの作成
日本時間を加味したUNIXタイムスタンプを指定するので、協定世界時(UTC)に-9時間の計算を入れます。
他にもUNIXタイムスタンプの作成方法がありますが、今回は単純にUTCから9時間引いています。
GetAsNumber ( Timestamp ( Get(日付) ; Time ( 12 ; 0 ; 0 ) ) - Timestamp ( Date ( 1 ; 1 ; 1970 ) ; Time ( 0 ; 0 ; 0 ) )- 60 * 60 * 9 )
今回は、当日12時にキャンペーンメールを送りたいので、12時を指定しています。
↓この部分です。
Timestamp ( Get(日付) ; Time ( 12 ; 0 ; 0 ) )
URL から挿入 でAPI実行する
URL から挿入 スクリプトステップ一文で処理します。
サンプルなのでキャンペーンIDを直で指定していますが、運用ではレコードの保存した値などを指定してください。
あと、この1行だけだとエラーが返ってきた時の処理を省いていますので、キャンペーンIDの運用同様、エラー処理は実装してください。
よくあるエラーとして、以下があります。
エラーコード | エラーメッセージ | 弊社的よくある対応 |
---|---|---|
10 | 要求されたデータが見つかりません | 返値がない正常終了の可能性があるので、問題ない場合は処理成功とする1 |
1631 | 接続に失敗しました | API送信先で受け入れられない何かのエラーか、構文が間違えている可能性が高いので要調査。通常、このエラーが出ないようにテストすべし。ただし、API先のシステム障害や仕様変更の可能性もあるので、運用中に出た場合は緊急対応すべしorz |
エラーコード以外に、返値がターゲットに返ってきます。
今回は、"$getterJson"という変数に入るようにしています。
処理に成功すると、次のようなJSONが返ってきます。
{"id":16006868,"send_at":1671678000,"status":"Scheduled"}
"status"が"Scheduled"になっているのが確認できます。
無事、キャンペーンメールが指定した日時でスケジュールされたようです!
エラーコードの一覧は、公式ヘルプで確認してください。
https://help.claris.com/ja/pro-help/content/error-codes.html
スケジュールされた送信の確認
そうこうするうちに、12時になりました。
メールボックスを見てみましょう。
送られてきていました!
SendGridのキャンペーンメール一覧からも、送信済みが確認できます。
Happy Holidays!
これで無事、スタッフも休日をゆっくり過ごせそうですね。
働き方改革の一つにもなっていたら嬉しいですね。