[TECHDOC][MOBILE] NDR Based OTP
Jira Ticket :
https://app.devrev.ai/shipsy/works/ISS-255559
Problem Statement :
OTP to be triggered based on selected undelivered reason . This is to be handled in App flow V2 config
Solution :
1. In App flow v2 ,
we receive App flow config , where on undelivered , the config with flow id :
failure_config
is used in transaction where we use stepsingle_choice_reason
.This step has list of reason and branch step based on reason id .
Now each NDR will be mapped with list of steps ,
For NDR , with step OTP , if this feature is enabled , app will expect key :
should_generate_otp
similar to shown in json below :
"branch_steps": { "NSR": [ { "action_id": "otp", "type": "otp_dialog", "control": { "visibility": "mandatory" }, "config": { "should_generate_otp": true }, "ui": { "pretty_name": "OTP" } } ], "INCORRECT ADDRESS": [ { "action_id": "otp", "type": "otp_dialog", "control": { "visibility": "optional" }, "config": { "should_generate_otp": false }, "ui": { "pretty_name": "OTP" } } ] },
In Above example ,
We will show a button to generate OTP in the OTP screen
2. UI / UX Actions
Send OTP
as mentioned above , button :
Send OTP
will be shown on UI based on above explained configsOn clicking Send OTP , it will call api :
/api/RiderApp/validateOtpOnDelivery
request body will now contain :
status
where status will beattempted
signifying undelivered flow .This will trigger message to end customer.
Request Body now will look like :
@Serializable data class ResendDeliveryOtpRequest( @SerialName("reference_number") val referenceNumber: String, @SerialName("task_id") val taskId: String, @SerialName("status") val status: String )
On Response , we will handle success or failure , to intimate user about API status i.e., success or failure via Toast message.
use-case modified will be
ResentOtpUseCase
ResendOtp
Same Request will go for every Resend / Send OTP click , no check based on
should_generate_otp
received in app flow v2 config.
Verify OTP
here if otp was generated ,
/api/RiderApp/validateOtpOnDelivery
API will be calledRequest JSON will look like :
{ "status": "attempted", "task_id": "TASK789", "task_failure_reason_id": "REASON001", "otp": "123456" // entered by user }
Currently , there is no API called in app flow v2 for validating , it is matched with
task.otp
So this flow will be executed when
should_generate_otp
is true.UseCase modified :
OtpUseCase
Rest flow will be same as existing.