Helping patients to get their medicine. Project for Dev.to - Twilio hackathon.
Its goal is to facilitate the process of getting the receipt from the doctor and sequentially getting the medicine from the pharmacy.
Kuracado offers a dashboard through which the doctor can communicate and put in communication the patients, and the pharmacy. It offers also a shipping monitoring when the pharmacy sends the medicine to the patient.
This application is a demo that assumes the existence of an actual database containing all the data regarding the actors involved in the system.
Every time a user sends a message to the WhatsApp Sandbox, the webhook is called and the server collects the data. The application uses the AJAX polling technique to continuously fetch new messages from the server.
Once the receipt is ready and transformed from HTML code to an image, it is sent to both the patient and the pharmacy. After preparing the medicine, the pharmacy texts the patient with the package's tracking code.
Since only one WhatsApp Sandbox is available, and all the users are registered in the same sandbox; the message from the pharmacy to the patient is passing through the doctor that works as an interceptor. This way, the messages received by the pharmacy will not be registered but just forwarded to the patient.
- Dashboard to visualize incoming messages in realtime
- Form to build the receipt
- Monitor on the pharmacy shipment
- Node.js web server using Express.js
- Web user interface using Vue along with Bootstrap Vue for the UI components
- Linting and formatting using Prettier
- Interactive configuration of environment variables upon running
npm run setup
usingconfigure-env
- Project specific environment variables using
.env
files anddotenv-safe
by comparing.env.example
and.env
.
Before we begin, we need to collect all the config values we need to run the application:
Config Value | Description |
---|---|
Twilio account Sid | Your primary Twilio account identifier - find this in the Console. |
Twilio auth Token | Used to authenticate - just like the above, you'll find this here. |
Twilio phone number | A phone number for the WhatsApp sandbox E.164 format - you can get it here |
Patient phone number | This is an existing WhatsApp phone number that will play the role of the patient E.164 format |
Pharmacy number | This is an existing WhatsApp phone number that will play the role of the pharmacy E.164 format |
Server Url | Is the tunnel url (e.g. using Ngrok). It is used to fetch the receipt image in the Whatsapp message |
- Before proceeding, it is mandatory to expose the
/receive-message
endpoint provided by the server. This is the webhook that Twilio calls every time there is an incoming message directed to our sandbox. It is possible to achieve this using ngrok. After the ngrok setup launch the command to generate the URL that exposes the local environment to the world:
# cd in the directory where ngrok is installed
# The port 1337 is the default port used by the server
# If a different port is used this command has to be launched with the correct port
./ngrok http 1337
Now copy the URL and paste it in the Twilio console in the section Programmable SMS
> WhatsApp
> Sandbox
inside the WHEN A MESSAGE COMES IN
input.
This Url is also needed for setting the Server Url environment variable
- To be able to send messages to the sandbox, it is mandatory to be registered. Go to
Programmable SMS
>WhatsApp
>Sandbox
and follow the instructions given.
After the above requirements have been met:
- Clone this repository and
cd
into it
git clone git@github.com:nvignola/kuracado.git
cd kuracado
- Install dependencies
npm install
- Set your environment variables
npm run setup
See Kuracado Settings to locate the necessary environment variables.
- Run the application
At the moment only development mode is supported.
Start the server
npm run server:dev
Start the client
npm run client:dev
Navigate to http://localhost:1234 and start texting your sandbox. That's it! 🎉