Message Notify
メール、SMSなど様々な配信チャネルを通じてMessage Entityを送信するための、プラグインベースの通知フレームワークを提供します。
message_notify
インストール
composer require 'drupal/message_notify:8.x-1.1'
composer require 'drupal/message_notify:8.x-1.5'
composer require 'drupal/message_notify:8.x-1.2'
概要
Message Notifyは、Messageモジュールに不可欠なコンパニオンモジュールであり、柔軟で拡張可能な通知フレームワークを提供します。プラグインベースのアーキテクチャを使用して、様々な配信チャネルを通じてMessage Entityをユーザーに送信できます。
このモジュールにはメール通知のビルトインサポートが含まれており、SMS通知の基盤も提供します(SMS Frameworkモジュールが必要)。開発者はカスタムNotifierプラグインを作成して、プッシュ通知、Slackメッセージ、その他のコミュニケーションチャネルなど、追加の配信方法をサポートできます。
Message NotifyはDrupalのView Modeを活用して、異なる通知チャネル向けにメッセージコンテンツのレンダリング方法を制御します。メール通知では、「Notify - Email subject」と「Notify - Email body」のView Modeが自動的に作成され、サイトビルダーがメールの件名と本文に表示するフィールドを個別に設定できます。
Features
- メッセージ送信のための拡張可能な配信方法を実現するプラグインベースのNotifierシステム
- Drupalのメールシステムを使用してメッセージを配信するビルトインのEmail Notifierプラグイン
- SMS Notifierプラグインの基盤(実際の配信にはSMS Frameworkモジュールが必要)
- 新しいMessage Templateが作成されるとメール用View Mode(mail_subject、mail_body)を自動作成
- メッセージ所有者の優先言語またはメッセージの言語を使用するオプション付きの多言語サポート
- 配信成功時または失敗時のメッセージ保存動作を設定可能
- アーカイブ目的でレンダリングされた出力をメッセージフィールドに保存する機能
- メッセージ内の動的コンテンツのためのTokenサポート(Messageモジュールから継承)
- メール通知のカスタマイズ可能な「送信元」アドレス
- 通知を送信すべきかどうかを判断するNotifierプラグインのアクセス制御
Use Cases
コメント通知システム
Nodeにコメントが投稿されたときにコンテンツ作成者にメール通知を送信します。件名と本文フィールドを持つMessage Templateを作成し、View Modeを設定してから、hook_comment_insert()を使用してメッセージを作成し、message_notify.senderサービスを使用してNode作成者に送信します。
ユーザー登録通知
新規ユーザーが登録したときに管理者に通知します。登録通知用のMessage Templateを作成し、hook_user_insert()を実装してメッセージを作成し、管理者ユーザーにメールで送信します。
注文ステータス更新(ECサイト)
ECサイトで注文ステータスが変更されたときにトランザクションメールを送信します。各注文ステータス(発注済み、発送済み、配達済み)に適切なコンテンツを持つMessage Templateを作成し、注文状態が変更されたときに通知をトリガーします。
コンテンツモデレーションワークフロー通知
コンテンツがレビューのために送信されたときに編集者に、またはコンテンツが公開/却下されたときに作成者に通知します。DrupalのContent Moderationと統合して、各ワークフロー遷移で適切な通知を送信します。
カスタムマルチチャネル通知
Slack、Telegram、プッシュ通知など追加チャネルを通じて通知を送信するカスタムNotifierプラグインを作成します。MessageNotifierBaseを拡張し、deliver()メソッドを実装して外部サービスと統合します。
ダイジェストメールシステム
Queue APIと組み合わせてダイジェストメールを作成します。即座に配信する代わりに、メッセージをキューに入れ、カスタムView ModeとTemplateを使用して複数の通知を含む定期的なダイジェストメールを送信します。
Tips
- 「Notify - Email subject」View Modeを設定して、Message Templateのテキストフィールドの最初の部分のみを表示し、簡潔なメール件名を作成してください。
- 受信者の優先言語の代わりにメッセージの言語でメールを送信するには「language override」オプションを使用します - システム通知に便利です。
- 「rendered fields」オプションを使用してレンダリングされた出力をカスタムフィールドに保存し、ユーザーに送信された内容の正確なアーカイブを保持します。
- MessageNotifierBaseを拡張してカスタムNotifierプラグインを作成します - deliver()メソッドを実装するだけで済みます。
- hook_mail_alter()を使用して、メールが送信される前にカスタムヘッダー、添付ファイルを追加したり、メールを変更したりします。
- Message Entityはメールの$params['message_entity']で利用可能で、hook_mail_alter()実装で使用できます。
- 開発中に送信メールをキャプチャするには、MaillogやDevelなどのモジュールでメール配信をテストしてください。
- message_notify_exampleサブモジュールを有効化して、コメント通知の実際の実装例を確認できます。
Technical Details
Hooks 3
hook_message_notifier_info_alter
プラグインマネージャーによって検出されたNotifierプラグイン定義をモジュールが変更できるようにします。
hook_mail
Message Notifyはhook_mail()を実装して、レンダリングされたメッセージのView Modeからメールの件名と本文を設定します。
hook_mail_alter
Message Notifyが送信するメールを配信前に変更するために使用できる標準のDrupal Hook。Message Entityは$params['message_entity']で利用可能です。
Troubleshooting 6
Drupalのメールシステムが正しく設定されていることを確認してください。/admin/config/system/mailsystemでメールシステム設定を確認します。メール配信を設定するためにSMTPやMailsystemなどのモジュールの使用を検討してください。Drupalログでメール関連のエラーを確認します。
Message Templateで「Notify - Email subject」と「Notify - Email body」のView Modeが正しく設定されていることを確認してください。サイト構築 > Message Template > [対象のTemplate] > 表示管理に移動し、各View Modeに表示するフィールドを設定します。
このエラーは指定されたNotifierプラグインが存在しない場合に発生します。send()メソッドに渡されたNotifier名を確認してください。デフォルトは'email'です。SMSの場合は、SMS Frameworkモジュールがインストールされ設定されていることを確認してください。
メッセージには所有者(uid)が設定されているか、受信者のメールアドレスを含む'mail'オプションを渡す必要があります。$message->setOwnerId($uid)でメッセージ所有者を設定するか、オプション配列で['mail' => 'recipient@example.com']を渡してください。
デフォルトでは、メッセージは配信成功時のみ保存されます。'save on success'と'save on fail'オプションを確認してください。配信結果に関係なく常にメッセージを保存するには['save on success' => TRUE, 'save on fail' => TRUE]を渡します。
View Modeは新しいMessage Bundleが作成されるときに自動作成されますが、モジュールが先に有効化されている場合のみです。既存のTemplateについては、サイト構築 > Message Template > [対象のTemplate] > 表示管理でEntity View Displayを手動で作成してください。
Security Notes 4
- メールコンテンツでのXSS攻撃を防ぐため、Message Template内のユーザー提供コンテンツは常に検証およびサニタイズしてください。
- 「mail」オプションには注意が必要です - メールインジェクション攻撃を防ぐため、送信前にメールアドレスを検証してください。
- メール件名はセキュリティのためHTMLが自動的に除去されますが、本文コンテンツも適切にサニタイズする必要があります。
- 不正な通知送信を防ぐため、カスタムNotifierプラグインのaccess()メソッドで適切なアクセス制御を実装してください。