WhatsApp Bot - Lab Order Flow
User selects "Order Lab Exam(s)" from the main menu.
Flow Diagram
flowchart TD
START([User selects 'Order Lab Exam']) --> CHECK_PINNED{Pinned tests available?}
CHECK_PINNED -->|Yes| LAB_OPTIONS[/"Quick tests:
1. Test A (5000 XAF)
2. Test B (3000 XAF)
3. Test C (7500 XAF)
4. Test D (4000 XAF)
5. Test E (6000 XAF)
6. Other test"/]
CHECK_PINNED -->|No| CHOICE_TYPE
LAB_OPTIONS --> USER_INPUT{User Input}
USER_INPUT -->|"1-5"| CREATE_CHECKOUT[Create Checkout Cart]
USER_INPUT -->|"6 - Other"| CHOICE_TYPE[/"How would you like to order?
1. Describe test name
2. Upload prescription"/]
USER_INPUT -->|"0"| MAIN_MENU[Return to Main Menu]
USER_INPUT -->|Invalid| LAB_OPTIONS
CREATE_CHECKOUT --> CHECKOUT_LINK[/"✅ Your order is ready!
🔗 Complete Payment"/]
CHECKOUT_LINK --> COMPLETED([Conversation Completed])
CHOICE_TYPE --> CHOICE{User Choice}
CHOICE -->|"1 - Describe"| DESCRIBE_FLOW
CHOICE -->|"2 - Upload"| UPLOAD_FLOW
subgraph DESCRIBE_FLOW[Describe Test Flow]
direction TB
DESCRIBE_PROMPT[/"Please describe the test(s):"/]
DESCRIBE_PROMPT --> TEST_NAME[User enters test name]
TEST_NAME --> VALIDATE_TEST{Valid input?}
VALIDATE_TEST -->|No| DESCRIBE_PROMPT
VALIDATE_TEST -->|Yes| CHECK_USER{User exists?}
CHECK_USER -->|Yes| CREATE_ORDER_EXISTING[Create order]
CHECK_USER -->|No| ASK_NAME[/"Please enter your name:"/]
ASK_NAME --> USER_NAME[User enters name]
USER_NAME --> VALIDATE_NAME{Valid name?}
VALIDATE_NAME -->|No| ASK_NAME
VALIDATE_NAME -->|Yes| CREATE_ORDER_NEW[Create order & user]
end
CREATE_ORDER_EXISTING --> ORDER_CONFIRM
CREATE_ORDER_NEW --> ORDER_CONFIRM
ORDER_CONFIRM[/"✅ Order received!
We'll contact you shortly."/]
ORDER_CONFIRM --> COMPLETED
Upload Prescription Flow
flowchart TD
UPLOAD_START([User chose 'Upload']) --> UPLOAD_PROMPT[/"📎 Please upload your
prescription (image/PDF)"/]
UPLOAD_PROMPT --> FIRST_FILE[User uploads file]
FIRST_FILE --> VALIDATE_FILE{Valid file type?}
VALIDATE_FILE -->|No| FILE_ERROR[/"❌ Invalid file type.
Please upload image or PDF"/]
FILE_ERROR --> UPLOAD_PROMPT
VALIDATE_FILE -->|Yes| ASK_SECOND[/"File received! ✅
Upload another? (Yes/No)"/]
ASK_SECOND --> SECOND_CHOICE{User Choice}
SECOND_CHOICE -->|"Yes/Oui/1"| SECOND_UPLOAD[/"📎 Upload second file:"/]
SECOND_CHOICE -->|"No/Non/0"| NOTES_CONFIRM
SECOND_CHOICE -->|Upload file directly| SECOND_FILE_DIRECT[Process as 2nd file]
SECOND_UPLOAD --> SECOND_FILE[User uploads 2nd file]
SECOND_FILE --> GRACE_PERIOD[15-20 sec grace period]
SECOND_FILE_DIRECT --> GRACE_PERIOD
GRACE_PERIOD --> NOTES_CONFIRM[/"Add notes? (Yes/No)"/]
NOTES_CONFIRM --> NOTES_CHOICE{User Choice}
NOTES_CHOICE -->|"Yes/Oui/1"| ENTER_NOTES[/"Enter your notes:"/]
NOTES_CHOICE -->|"No/Non/0"| FINAL_CONFIRM
ENTER_NOTES --> NOTES_INPUT[User enters notes]
NOTES_INPUT --> FINAL_CONFIRM
FINAL_CONFIRM[/"📋 Order Summary:
🔬 Type: Lab
📎 Files: 2
📝 Notes: ...
Confirm? (Yes/No)"/]
FINAL_CONFIRM --> CONFIRM_CHOICE{User Choice}
CONFIRM_CHOICE -->|"Yes/Confirm"| CHECK_USER_UPLOAD{User exists?}
CONFIRM_CHOICE -->|"No/Cancel"| CANCELLED[/"Order cancelled"/]
CHECK_USER_UPLOAD -->|Yes| CREATE_FILE_ORDER[Create order with files]
CHECK_USER_UPLOAD -->|No| ASK_NAME_UPLOAD[/"Please enter your name:"/]
ASK_NAME_UPLOAD --> NAME_INPUT[User enters name]
NAME_INPUT --> CREATE_FILE_ORDER
CREATE_FILE_ORDER --> ORDER_SUCCESS[/"✅ Order created!
We'll contact you shortly."/]
ORDER_SUCCESS --> COMPLETED([Conversation Completed])
CANCELLED --> COMPLETED