Message Notify

メール、SMSなど様々な配信チャネルを通じてMessage Entityを送信するための、プラグインベースの通知フレームワークを提供します。

message_notify
7,237 sites
38
drupal.org
Drupal 8 Drupal 9 Drupal 10 Drupal 11 Drupal 12

インストール

Drupal 12 v8.x-1.1
composer require 'drupal/message_notify:8.x-1.1'
Drupal 11, 10, 9 v8.x-1.5
composer require 'drupal/message_notify:8.x-1.5'
Drupal 8 v8.x-1.2
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に表示するフィールドを設定します。

MessageNotifyException: Could not send notification

このエラーは指定されたNotifierプラグインが存在しない場合に発生します。send()メソッドに渡されたNotifier名を確認してください。デフォルトは'email'です。SMSの場合は、SMS Frameworkモジュールがインストールされ設定されていることを確認してください。

MessageNotifyException: Cannot send to anonymous owner

メッセージには所有者(uid)が設定されているか、受信者のメールアドレスを含む'mail'オプションを渡す必要があります。$message->setOwnerId($uid)でメッセージ所有者を設定するか、オプション配列で['mail' => 'recipient@example.com']を渡してください。

送信後にメッセージが保存されない

デフォルトでは、メッセージは配信成功時のみ保存されます。'save on success'と'save on fail'オプションを確認してください。配信結果に関係なく常にメッセージを保存するには['save on success' => TRUE, 'save on fail' => TRUE]を渡します。

新しいMessage TemplateにView Modeが表示されない

View Modeは新しいMessage Bundleが作成されるときに自動作成されますが、モジュールが先に有効化されている場合のみです。既存のTemplateについては、サイト構築 > Message Template > [対象のTemplate] > 表示管理でEntity View Displayを手動で作成してください。

Security Notes 4
  • メールコンテンツでのXSS攻撃を防ぐため、Message Template内のユーザー提供コンテンツは常に検証およびサニタイズしてください。
  • 「mail」オプションには注意が必要です - メールインジェクション攻撃を防ぐため、送信前にメールアドレスを検証してください。
  • メール件名はセキュリティのためHTMLが自動的に除去されますが、本文コンテンツも適切にサニタイズする必要があります。
  • 不正な通知送信を防ぐため、カスタムNotifierプラグインのaccess()メソッドで適切なアクセス制御を実装してください。