Slacker manager provides three APIs:

  • Synchronous API to get advice about the operation being performed (accept, reject, …)

  • Event/Snapshot stream providing data from the services to the risk engine

  • Command API allowing risk functions to perform various actions using bank microservice.

This documents will guide you how to configure and create notification in slacker manager services.

(blue star) How to configure the notification

  • Configuration for notifications in slacker manager service, add below text into resources/application.yml file.

safi-services:
  output-manager:
    uri: ${SAFI_OUTPUT_MANAGER_URL:`https://output-manager.apps.dev.safibank.online`}
  • Create a configuration class file in package (ph.safibank.slackermanager.property) to map the fields in yml file

@ConfigurationProperties("safi-services")
class SafiServiceConfiguration {
    @Inject
    lateinit var outPutManager: OutPutManager

    @ConfigurationProperties("output-manager")
    class OutPutManager {
        lateinit var uri: String
    }
}

(blue star) How to send notification

  1. Slack manager subscribe the changes in GCP subscription channel(slacker-manager-commands-sub-dev)

  2. Slacker will delegate StackerCommandExecutor to process the message received from GCP sub topics

  3. StackerCommandExecutor will construct a new message with a unique idempotencyId and call output manager api through http post method

  4. Output manager will send this message to Kafka topic(message.internal.channel) with a customized idempotencyId

Publisher-subscriber relationships can be one-to-many (fan-out), many-to-one (fan-in), and many-to-many, as shown in the following diagram:

Below is an example for risk transaction reject scenario:

  • Go to GCP PUB/SUB menu, choose the subscription the slacker manager service listen, then create a mockup message with below code and click publish.

{
  "commandType": "SEND_NOTIFICATION",
  "customerId": "2b827c7b-a7e9-4116-af78-940963fd85e4",
  "params": {
      "messageType": "RISK_TRANSACTION_REJECTED",
      "amount": "1100"
   }
}
  • Go to slacker manager service add a breakpoint in GooglePubSubCommandListener

  • Slacker manager will forward this message to output manager service when the command type is SEND_NOTIFICATION

{
 "idempotencyId":"c604b22b-940b-448f-922d-0bef9af382a9",
 "customerId":"2b827c7b-a7e9-4116-af78-940963fd85e4",
 "amount":"1100"
}
  • Output manager will handle the request and forward this message to Kafka topic message.internal.channel

 {
  "idempotencyId": "c604b22b-940b-448f-922d-0bef9af382a9", 
  "customerId": "2b827c7b-a7e9-4116-af78-940963fd85e4", 
  "messageTemplate": "Your transaction with amount {amount} was approved by risk.", 
  "messageTitle": "SaFi bank notification", 
  "deliveryChannel": "PUSH", 
  "messageValues": {"amount": "1100.0"}, 
  "metadata": {}
}

(blue star)  Notification types

Message Type

Endpoint

Avaliable

CARD_CHARGED

https://output-manager.apps.dev.safibank.online/message/cardCharged

False

TRANSACTION_REJECTED

https://output-manager.apps.dev.safibank.online/message/transactionRejected

False

TRANSACTION_FAILED

https://output-manager.apps.dev.safibank.online/message/transactionFailed

False

CASH_IN_TRANSACTION_CANCELLED

https://output-manager.apps.dev.safibank.online/message/cashInTransactionCancelled

False

CASH_OUT_TRANSACTION_SUCCESSFUL

https://output-manager.apps.dev.safibank.online/message/cashOutTransactionSuccessful

False

CASH_IN_TRANSACTION_SUCCESSFUL

https://output-manager.apps.dev.safibank.online/message/cashInTransactionSuccessful

False

OVERDRAFT_REPAID

https://output-manager.apps.dev.safibank.online/message/overdraftRepaid

False

OVERDRAFT_TOP_UP_REJECTED

https://output-manager.apps.dev.safibank.online/message/overdraftTopUpRejected

False

OVERDRAFT_TOPPED_UP

https://output-manager.apps.dev.safibank.online/message/overdraftToppedUp

False

OVERDRAFT_OPENED

https://output-manager.apps.dev.safibank.online/message/overdraftOpened

False

OVERDRAFT_GRACE_PERIOD_END_NOTIFICATION

https://output-manager.apps.dev.safibank.online/message/overdraftGracePeriodEndNotification

False

OVERDRAFT_MONEY_DEDUCTED

https://output-manager.apps.dev.safibank.online/message/overdraftMoneyDeducted

False

OVERDRAFT_FEE_PAID_NOTIFICATION

https://output-manager.apps.dev.safibank.online/message/overdraftFeePaidNotification

False

OVERDRAFT_FEE_PERIOD_END_NOTIFICATION

https://output-manager.apps.dev.safibank.online/message/overdraftFeePeriodEndNotification

False

OVERDRAFT_PERSONAL_LOAN_CREATED

https://output-manager.apps.dev.safibank.online/message/overdraftPersonalLoanCreated

False

CARD_CREATION_PRINTED

https://output-manager.apps.dev.safibank.online/message/cardCreationPrinted

False

CARD_CREATION_ORDER_REJECTED

https://output-manager.apps.dev.safibank.online/message/cardCreationOrderRejected

False

CARD_CREATION_ON_DELIVERY_PICKEDUP

https://output-manager.apps.dev.safibank.online/message/cardCreationOnDeliveryPickedup

False

CARD_CREATION_ON_DELIVERY_ON_COURIER

https://output-manager.apps.dev.safibank.online/message/cardCreationOnDeliveryOnCourier

False

CARD_CREATION_DELIVERY_FAILED_FIRST_ATTEMPT

https://output-manager.apps.dev.safibank.online/message/cardCreationDeliveryFailedFirstAttempt

False

CARD_CREATION_DELIVERY_RETURN_TO_SENDER

https://output-manager.apps.dev.safibank.online/message/cardCreationDeliveryReturnToSender

False

CARD_CREATION_DELIVERY_COMPLETED

https://output-manager.apps.dev.safibank.online/message/cardCreationDeliveryCompleted

False

CARD_CREATION_DELIVERY_CANCELLED

https://output-manager.apps.dev.safibank.online/message/cardCreationDeliveryCancelled

False

CARD_CREATION_PICKUP_SUCCESSFUL

https://output-manager.apps.dev.safibank.online/message/cardCreationPickupSuccessful

False

CARD_CREATION_CARD_SUBMITTED

https://output-manager.apps.dev.safibank.online/message/cardCreationCardSubmitted

False

CARD_CREATION_EMBOSS_REJECTED

https://output-manager.apps.dev.safibank.online/message/cardCreationEmbossRejected

False

LOCKED_POCKET_TARGET_REACHED_AND_LOCK_RENEWED

https://output-manager.apps.dev.safibank.online/message/lockedPocketTargetReachedAndLockRenewed

False

LOCKED_POCKET_TARGET_REACHED

https://output-manager.apps.dev.safibank.online/message/lockedPocketTargetReached

False

UNLOCKED_POCKET_TARGET_AMOUNT_REACHED

https://output-manager.apps.dev.safibank.online/message/unlockedPocketTargetAmountReached

False

UNLOCKED_POCKET_TARGET_DATE_REACHED

https://output-manager.apps.dev.safibank.online/message/unlockedPocketTargetDateReached

False

CARD_CREATION_ACTIVATION_FAILED

https://output-manager.apps.dev.safibank.online/message/cardCreationActivationFailed

False

CARD_UPDATE_PIN_FAILED

https://output-manager.apps.dev.safibank.online/message/cardUpdatePinFailed

False

CARD_CREATION_ACTIVATION_SUCCEED

https://output-manager.apps.dev.safibank.online/message/cardCreationActivationSucceed

False

CARD_UPDATE_PIN_SUCCEED

https://output-manager.apps.dev.safibank.online/message/cardUpdatePinSucceed

False

CARD_BLOCK_SUCCEED

https://output-manager.apps.dev.safibank.online/message/cardBlockSucceed

False

CARD_BLOCK_FAILED

https://output-manager.apps.dev.safibank.online/message/cardBlockFailed

False

CARD_UNBLOCK_SUCCEED

https://output-manager.apps.dev.safibank.online/message/cardUnblockSucceed

False

CARD_UNBLOCK_FAILED

https://output-manager.apps.dev.safibank.online/message/cardUnblockFailed

False

CARD_FREEZE_SUCCEED

https://output-manager.apps.dev.safibank.online/message/cardFreezeSucceed

False

CARD_FREEZE_FAILED

https://output-manager.apps.dev.safibank.online/message/cardFreezeFailed

False

CARD_UNFREEZE_SUCCEED

https://output-manager.apps.dev.safibank.online/message/cardUnfreezeSucceed

False

CARD_UNFREEZE_FAILED

https://output-manager.apps.dev.safibank.online/message/cardUnfreezeFailed

False

OPERATION_LIMIT_APPROACHING

https://output-manager.apps.dev.safibank.online/message/operationLimitApproaching

False

OPERATION_LIMIT_APPROACHING_HIGHEST_PLAN

https://output-manager.apps.dev.safibank.online/message/operationLimitApproachingHighestPlan

False

SUBSCRIPTION_DAY_BEFORE_CHARGE

https://output-manager.apps.dev.safibank.online/message/subscriptionDayBeforeCharge

False

SUBSCRIPTION_CHARGE_FAILED

https://output-manager.apps.dev.safibank.online/message/subscriptionChargeFailed

False

RISK_TRANSACTION_REJECTED

https://output-manager.apps.dev.safibank.online/message/riskTransactionRejected

True

RISK_TRANSACTION_APPROVED

https://output-manager.apps.dev.safibank.online/message/riskTransactionApproved

True

CARD_CHANGE_NAME_SUCCEED

https://output-manager.apps.dev.safibank.online/message/cardChangeNameSucceed

False

CARD_CHANGE_NAME_FAILED

https://output-manager.apps.dev.safibank.online/message/cardChangeNameFailed

False

POCKET_TARGET_DATE_REACHED

https://output-manager.apps.dev.safibank.online/message/pocketTargetDateReached

False

Highlight important information in a panel like this one. To edit this panel's color or style, select one of the options in the menu.

WIP - DLQ Management & Error Handling in Kafka

Slacker technical documentation

https://cloud.google.com/pubsub/docs/overview

Attachments:

~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
~drawio~557058:6252ea08-006d-4991-baf7-f107bb56d703~Notification workflow.tmp (application/vnd.jgraph.mxfile)
Notification workflow (application/vnd.jgraph.mxfile)
Notification workflow.png (image/png)
data.csv (text/csv)
截屏2022-09-20 17.43.53.png (image/png)
截屏2022-09-20 17.49.09.png (image/png)
截屏2022-09-20 17.52.49.png (image/png)
截屏2022-09-20 17.53.54.png (image/png)
截屏2022-09-20 17.56.42.png (image/png)
截屏2022-09-21 11.53.33.png (image/png)