kintone-sendgrid-pluginを更新しました(v4)

はじめに

10日ほど前の話になりますが、sendgrid-kintone-pluginというkintoneからSendGrid経由でメールを一斉送信するプラグインを更新しました。最近物忘れがひどいので、やったことをまとめておこうと思います。

基本事項

このプラグインは、kintone上に保存したDBを宛先リストに見立てて、SendGrid経由で一斉配信する、というコンセプトで作られています。一覧画面に表示されたものが送信対象となり、送信するメールの内容はSendGridのテンプレート機能で管理します。フィルタを適用することで宛先リストの絞り込みもできます。

更新内容

今回更新したバージョンは「バージョン4」となります。ユーザ視点からすると大きな変化はありませんが、実はほぼ全面実装し直しています。一応、変更点はChange Logにまとめてありますが、たぶんわかりづらいので個別に説明します。

宛先フィールドに必須項目、値の重複を禁止の制限を加えました

宛先として指定可能なフィールドに「必須項目にする」と「値の重複を禁止する」の条件を追加しました。これまではこのような制限は明確には課していませんでしたが、SendGridのAPIの制約上、宛先フィールドは指定が必須で、ユニークである必要があるので、これに合わせてkintone側にも同じ条件を強制するようにしました。プラグインを新しいものに更新すると、この設定がないフィールドは宛先用フィールドとして選択できなくなっているので、フィールドの設定を変更する必要があります。

フィールドの設定

新デザイン対応

kintoneの新デザインにプラグインのデザインを合わせました。機能的には変更はありません。ボタンやドロップダウンがそれっぽい表示になりました。ついでにテンプレートの編集画面にも飛べるようリンクをはりました。



新SendGridロゴ

SendGridのロゴを新しいものに差し替えました。



送信者名の指定が可能に

送信者名の指定に対応しました。
From: 送信者たろう<hoge@example.com>
みたいなメールが送れるようになりました。



Web API v3のメール送信用エンドポイントに対応

メール送信用APIをWeb API v3に切り替えました。
これに合わせて、メール送信が複数リクエストに分割される際のリクエストを非同期から同期的に変更しました。そのせいで複数リクエストを行う際、以前よりもリクエストに時間がかかるようになりました。(SendGridへのメール送信リクエストは、宛先500件単位で分割発行します)以前は無制限に非同期的にリクエストを行なっていたため、高速に処理できたのは良かったのですが、この方式だと150万宛先に一斉送信するとWeb API v3の秒間3000リクエストの上限にかかる可能性が出てくるためです。もう少し、賢く同時アクセス数を制御することも考えられましたが、とりあえずシンプルな実装で利用者の反応を見てみようと思い、現在の実装に落ち着きました。「1億通くらい一斉送信するからもっと高速にして欲しい!」みたいな要望があったら是非issueをあげてください。頑張って対応します。

テンプレートの表示改善

プラグインの設定画面上でテンプレートの件名を表示するようにしました。また、テンプレートのHTMLバージョンはソースコード表示ではなく、それっぽくレンダリングして見やすくなりました。



APIキーのチェック機能追加

プラグインの設定画面上で登録したSendGridのAPIキーのパーミッションチェック機能を追加しました。パーミッションの足りないAPIキーを設定すると警告が表示され保存できないので、早い段階でAPIキーのチェックが行なえます。



断念したこと

元々今回のバージョンアップでは、SendGridのマーケティングキャンペーン機能との連携を目指していましたが、諸々の事情により断念しました。イメージとしては、kintone上での更新内容がそのままSendGridのマーケティングキャンペーン機能の宛先リストに反映され、メール送信はマーケティングキャンペーン上で管理する、という感じでした。
連携を断念した理由は以下の通りです。
  • kintoneへのファイルアップロードイベントが取れない。
    • 画面上から個別のレコード更新情報はイベントとして取得できるため、更新分の反映は行なえますが、ファイルによるアップロードイベントが取れないらしく、kintone上にファイルでアップロードされると、手動反映の必要が出てきます。これだとUXが良くありません。
  • SendGrid上で日付フィールドと数値フィールドの値を空にすることができない
    • これらのフィールドは一度値を設定すると空に変更することができないため、kintone上で値を空にしたのにSendGrid上で空にならない、といった事態が起こりえます。
いずれの項目とも、わりと大きな問題なので、一度実装しかけましたが削除しました。自前で改造したいという勇者は、リポジトリのコミット履歴をご参照ください。

今後

カテゴリ指定、送信時刻指定、テンプレートを使わずメールの件名と本文を直接指定した送信、などを考えています。送信したメールの管理にはマーケティングキャンペーン機能と連携するのが良いと思うので、SendGrid、kintone双方のAPIが改善した暁には再度実装を検討してみたいと思います。




コメント

  1. 素晴らしいプラグインを有り難うございます!
    1点ご相談です。
    当方の用途からすると「一覧画面で絞り込んだ対象に一斉送信」よりも「特定レコードに記載された宛に個別送信」、
    つまり一覧画面でなく詳細画面からボタン押下して送信したいと考えています。
    このご対応は難しいでしょうか。
    ご検討頂ければ幸いです。

    返信削除

コメントを投稿

このブログの人気の投稿

Execノードを使う

SendGridのX-SMTPAPIヘッダの使い方(Section Tags、Substitution Tags編)

Joinノードを使う(その4)