Dependencies

Before setting up the plugin, ensure you have the following dependencies:

  • A MongoDB database for storing notification templates and records
  • Access to the Kafka instance used by the FlowX.AI Engine
  • A Redis instance for caching notification templates
  • An S3-compatible file storage solution (e.g., Min.io) if you need to attach documents to notifications

Authorization configuration

Set these variables to connect to your identity management platform:

Environment VariableDescriptionDefault Value
SECURITY_OAUTH2_BASESERVERURLBase URL of the OAuth2/OIDC server-
SECURITY_OAUTH2_CLIENT_CLIENTIDOAuth2 client ID for the Notifications Plugin-
SECURITY_OAUTH2_CLIENT_CLIENTSECRETOAuth2 client secret-
SECURITY_OAUTH2_REALMOAuth2 realm name-

MongoDB configuration

The only thing that needs to be configured is the DB access info, the rest will be handled by the plugin.

Environment VariableDescriptionDefault Value
SPRING_DATA_MONGODB_URIMongoDB connection URImongodb://${DB_USERNAME}:${DB_PASSWORD}@mongodb-0.mongodb-headless,mongodb-1.mongodb-headless,mongodb-arbiter-0.mongodb-arbiter-headless:27017/notification-plugin
DB_USERNAMEUsername for runtime MongoDB connectionnotification-plugin
DB_PASSWORDPassword for runtime MongoDB connectionpassword

Redis configuration

Configure your Redis caching instance:

Environment VariableDescriptionDefault Value
SPRING_REDIS_HOSTRedis server hostnamelocalhost
SPRING_REDIS_PORTRedis server port6379
SPRING_REDIS_PASSWORDRedis server passworddefaultpassword
REDIS_TTLTime-to-live for Redis cache (milliseconds)5000000

Kafka configuration

Core Kafka settings

Environment VariableDescriptionDefault Value
SPRING_KAFKA_BOOTSTRAPSERVERSAddress of the Kafka server(s)localhost:9092
SPRING_KAFKA_SECURITYPROTOCOLSecurity protocol for Kafka connectionsPLAINTEXT
SPRING_KAFKA_CONSUMERGROUPIDConsumer group identifiernotif123-preview
KAFKA_MESSAGEMAXBYTESMaximum message size (bytes)52428800 (50MB)
KAFKA_AUTHEXCEPTIONRETRYINTERVALRetry interval after authorization exceptions (seconds)10
KAFKA_CONSUMER_THREADSNumber of consumer threads1

Topic naming configuration

Environment VariableDescriptionDefault Value
KAFKA_TOPIC_NAMING_SEPARATORPrimary separator for topic names.
KAFKA_TOPIC_NAMING_SEPARATOR2Secondary separator for topic names-
KAFKA_TOPIC_NAMING_PACKAGEPackage prefix for topic namesai.flowx.
KAFKA_TOPIC_NAMING_ENVIRONMENTEnvironment segment for topic namesdev.
KAFKA_TOPIC_NAMING_VERSIONVersion suffix for topic names.v1

Topic configurations

Each action in the service corresponds to a Kafka event on a specific topic. Configure the following topics:

OTP topics

Environment VariableDescriptionDefault Value
KAFKA_TOPIC_OTP_GENERATE_INTopic for incoming OTP generation requestsai.flowx.dev.plugin.notification.trigger.generate.otp.v1
KAFKA_TOPIC_OTP_GENERATE_OUTTopic for OTP generation resultsai.flowx.dev.engine.receive.plugin.notification.generate.otp.results.v1
KAFKA_TOPIC_OTP_VALIDATE_INTopic for incoming OTP validation requestsai.flowx.dev.plugin.notification.trigger.validate.otp.v1
KAFKA_TOPIC_OTP_VALIDATE_OUTTopic for OTP validation resultsai.flowx.dev.engine.receive.plugin.notification.validate.otp.results.v1

Notification topics

Environment VariableDescriptionDefault Value
KAFKA_TOPIC_NOTIFICATION_INTERNAL_INTopic for incoming notification requestsai.flowx.dev.plugin.notification.trigger.send.notification.v1
KAFKA_TOPIC_NOTIFICATION_INTERNAL_OUTTopic for notification delivery confirmationsai.flowx.dev.engine.receive.plugin.notification.confirm.send.notification.v1
KAFKA_TOPIC_NOTIFICATION_EXTERNAL_OUTTopic for forwarding notifications to external systemsai.flowx.dev.plugin.notification.trigger.forward.notification.v1

Audit topic

Environment VariableDescriptionDefault Value
KAFKA_TOPIC_AUDIT_OUTTopic for sending audit logsai.flowx.dev.core.trigger.save.audit.v1

File storage configuration

Based on use case you can use directly a file system or an S3 compatible cloud storage solution (for example min.io).

The file storage solution can be configured using the following environment variables:

Environment VariableDescriptionDefault Value
APPLICATION_FILESTORAGE_TYPEStorage type to use (s3 or fileSystem)s3
APPLICATION_FILESTORAGE_DISKDIRECTORYDirectory for file storage when using filesystemMS_SVC_NOTIFICATION
APPLICATION_FILESTORAGE_S3_ENABLEDEnable S3-compatible storagetrue
APPLICATION_FILESTORAGE_S3_SERVERURLURL of S3-compatible serverhttp://minio-service:9000
APPLICATION_FILESTORAGE_S3_ENCRYPTIONENABLEDEnable server-side encryptionfalse
APPLICATION_FILESTORAGE_S3_ACCESSKEYAccess key for S3minio
APPLICATION_FILESTORAGE_S3_SECRETKEYSecret key for S3secret
APPLICATION_FILESTORAGE_S3_BUCKETPREFIXPrefix for bucket namesqdevlocal-preview-paperflow

SMTP setup

Configure SMTP settings for sending email notifications:

Environment VariableDescriptionDefault Value
SIMPLEJAVAMAIL_SMTP_HOSTSMTP server hostnamesmtp.gmail.com
SIMPLEJAVAMAIL_SMTP_PORTSMTP server port587
SIMPLEJAVAMAIL_SMTP_USERNAMESMTP server usernamenotification.test@flowx.ai
SIMPLEJAVAMAIL_SMTP_PASSWORDSMTP server passwordpaswword
SIMPLEJAVAMAIL_TRANSPORTSTRATEGYEmail transport strategy (e.g., SMTP, EXTERNAL_FORWARD)SMTP
APPLICATION_MAIL_FROM_EMAILDefault sender email addressnotification.test@flowx.ai
APPLICATION_MAIL_FROM_NAMEDefault sender nameNotification Test

Email attachments configuration

Configure handling of email attachments:

Environment VariableDescriptionDefault Value
SPRING_HTTP_MULTIPART_MAXFILESIZEMaximum file size for attachments15MB
SPRING_HTTP_MULTIPART_MAXREQUESTSIZEMaximum request size for multipart uploads15MB

OTP configuration

Configure One-Time Password generation and validation:

Environment VariableDescriptionDefault Value
FLOWX_OTP_LENGTHNumber of characters in generated OTPs4
FLOWX_OTP_EXPIRETIMEINSECONDSExpiry time for OTPs (seconds)6000 (10 minutes)

Logging configuration

Control logging levels for different components:

Environment VariableDescriptionDefault Value
LOGGING_LEVEL_ROOTRoot logging level-
LOGGING_LEVEL_APPApplication-specific log levelDEBUG
LOGGING_LEVEL_MONGO_DRIVERMongoDB driver log levelINFO
LOGGING_LEVEL_THYMELEAFThymeleaf template engine log levelINFO
LOGGING_LEVEL_FCM_CLIENTFirebase Cloud Messaging client log levelOFF
LOGGING_LEVEL_REDISRedis/Lettuce client log levelOFF

Usage notes

Topic naming convention

Topics follow a standardized naming convention:

  • Example: ai.flowx.dev.plugin.notification.trigger.generate.otp.v1
  • Structure: {package}.{environment}.{component}.{action}.{subject}.{version}

Consumer error handling

When KAFKA_CONSUMER_ERRORHANDLING_ENABLED is set to true:

  • The application will retry processing failed messages according to KAFKA_CONSUMER_ERRORHANDLING_RETRIES
  • Between retries, the application will wait for the duration specified by KAFKA_CONSUMER_ERRORHANDLING_RETRYINTERVAL

For example, if KAFKA_CONSUMER_ERRORHANDLING_RETRYINTERVAL is set to 5000 (5 seconds) and KAFKA_CONSUMER_ERROR_HANDLING_RETRIES is set to 5, the consumer application will make up to 5 attempts, waiting 5 seconds between each attempt.

Message size configuration

The KAFKA_MESSAGE_MAX_BYTES setting affects multiple Kafka properties:

  • spring.kafka.producer.properties.message.max.bytes
  • spring.kafka.producer.properties.max.request.size
  • spring.kafka.consumer.properties.max.partition.fetch.bytes

OAuth authentication

When using the ‘kafka-auth’ profile, the security protocol changes to ‘SASL_PLAINTEXT’ and requires OAuth configuration via the KAFKA_OAUTH_* variables.