Menu

Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

Workflow Automation with Node.js and Express

Download the Code

One of the more abstract concepts you'll handle when building your business is what the workflow will look like.

At its core, setting up a standardized workflow is about enabling your service providers (agents, hosts, customer service reps, administrators, and the rest of the gang) to better serve your customers.

To illustrate a very real-world example, today we'll build a Node.js and Express webapp for finding and booking vacation properties — tentatively called Airtng.

Here's how it'll work:

  1. A host creates a vacation property listing
  2. A guest requests a reservation for a property
  3. The host receives an SMS notifying them of the reservation request. The host can either Accept or Reject the reservation
  4. The guest is notified whether a request was rejected or accepted

Learn how Airbnb used Twilio SMS to streamline the rental experience for 60M+ travelers around the world.

Workflow Building Blocks

We'll be using the Twilio REST API to send our users messages at important junctures. Here's a bit more on our API:

Ready to go? Boldly click the button right after this sentence.

Let's Boldly Go to the Next Step

Authenticate Our Users

For this workflow to work, we need to handle user authentication. We're going to rely on Passport for Node.js.

Each User will need to have a countryCode and a phoneNumber which will be required to send SMS notifications later.

Loading Code Sample...
      
      
          
          
          
          
        
      models/user.js

      Next let's model the vacation properties.

      Next

      Vacation Property Model

      In order to build our rentals company we'll need a way to create the property listings.

      The Property belongs to the User who created it (we'll call this user the host moving forward) and contains only two properties: a description and an imageUrl.

      Loading Code Sample...
          
          
              
              
              
              
            
          models/property.js

          The Vacation Property Model

          models/property.js

          Next up, the reservation model.

          Next

          Reservation Model

          The Reservation model is at the center of the workflow for this application.

          It is responsible for keeping track of:

          • The guest who performed the reservation
          • The vacation_property the guest is requesting (and associated host)
          • The status of the reservation: pending, confirmed, or rejected
          Loading Code Sample...
              
              
                  
                  
                  
                  
                
              models/reservation.js

              The Reservation Model

              models/reservation.js

              Next, let's look at triggering the creation of a new reservation.

              Next

              Create a Reservation

              The reservation creation form holds only a single field field: the message that will be sent to the host when reserving one of her properties. The rest of the information necessary to create a reservation is taken from the vacation property.

              A reservation is created with a default status pending, so when the host replies with an accept or reject response our application knows which reservation to update.

              Loading Code Sample...
                  
                  
                      
                      
                      
                      
                    
                  routes/reservations.js

                  Reservation creation

                  routes/reservations.js

                  In the next step, we'll take a look at how the SMS notification is sent to the host when the reservation is created.

                  Next

                  Notify The Host

                  When a reservation is created, we want to notify the owner of said property that someone has made a reservation.

                  This is where we use Twilio Node Helper Library to send an SMS message to the host, using our Twilio phone number. As you can see, sending SMS messages using Twilio is just a few lines of code.

                  Now we just have to wait for the host to send an SMS response accepting or rejecting the reservation so we can notify the guest and host that the reservation information is updated.

                  Loading Code Sample...
                      
                      
                          
                          
                          
                          
                        
                      Notify through SMS the host of the new reservation

                      Send out reservation notifications

                      Notify through SMS the host of the new reservation

                      The next step shows how to handle and configure the host's SMS response.

                      Next

                      Handle Incoming Messages

                      The reservations/handle endpoint handles our incoming Twilio request and does three things:

                      1. Checks for a pending reservation from the incoming user.
                      2. Updates the status of the reservation.
                      3. Responds to the host and sends notification to the guest.
                      Next

                      Set Up Twilio Webhooks

                      In the Twilio console, you should change the 'A Message Comes In' webhook to call your application's endpoint in the route /handle:

                      SMS Webhook

                      One way to expose your machine to the world during development is to use ngrok. Your URL for the SMS web hook on your phone number should look something like this:

                      http://<subdomain>.ngrok.io/handle

                      An incoming request from Twilio comes with some helpful including the From phone number and the message Body.

                      We'll use the From parameter to lookup the host and check if she has any pending reservations. If she does, we'll use the message body to check if she accepted or rejected the reservation.

                      Loading Code Sample...
                          
                          
                              
                              
                              
                              
                            
                          routes/reservations.js

                          Deal with host responses

                          routes/reservations.js

                          In the last step, we'll use Twilio's TwiML and instruct Twilio to send SMS messages to the guest.

                          Next

                          TwiML Response

                          After updating the reservation status, we must notify the host that he/she has successfully confirmed or rejected the reservation. If no reservation is found, we send an error message instead.

                          If a reservation is confirmed or rejected we send an additional SMS to the guest to pass along the news.

                          We use the verb Message from TwiML to instruct Twilio's server that it should send SMS messages.

                          Loading Code Sample...
                              
                              
                                  
                                  
                                  
                                  
                                
                              routes/reservations.js

                              Build the TwiML Response

                              routes/reservations.js

                              And that's a wrap! Next let's take a look at other features you might enjoy in your application.

                              What Else Can I Build?

                              Where to Next?

                              Node.js goes great with a helping of Twilio... let us prove it:

                              IVR: Phone Tree

                              Easily route callers to the right people and information with an IVR (interactive voice response) system.

                              Automated Survey

                              Instantly collect structured data from your users with a survey conducted over a voice call or SMS text messages.

                              Did this help?

                              Thanks for checking this tutorial out! Tweet to us @twilio with what you're building!

                              Agustin Camino Jose Oliveros David Prothero Samuel Mendes Paul Kamp Andrew Baker  Kat King

                              Need some help?

                              We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd browsing the Twilio tag on Stack Overflow.

                              Loading Code Sample...