Made by Mengyang Hong

Found in Conversational Service

MealOrderHelper helps busy CMU students order take-out meals from multiple meals providers in an easier way.


MealOrderHelper is an SMS bot aiming at helping students with busy schedules at CMU order lunch/dinner easier.


I came up with this idea from the friction that I have experienced during the process of ordering meals in Wechat groups from nearby restaurants. From my observation, most of the Chinese students at CMU are having the same frustrating experience: We need to first join a number of meal delivery groups on Wechat. Since each restaurant has their own group, our main chat screens have been filled these groups with unwanted messages popping up all day. Then we type messages to tell the meal provider number meals we would like to order, the location we would like to pick up (choose one from Gate Building, Cyrt Hall, and Library) and other add-ons. Sometimes the meal provider will miss someone’s order due to a large number of messages. Finally, when the meal provider arrives on campus, he will notify students to pick up by sending a message in the group. That time is not fixed every day so students will need to constantly check the messages in groups in order not to miss their meals.

On the meal providers’ side, Wechat has a limit of 500 people at maximum for each group, so some of the restaurants have up to 4 groups to manage, which adds to the difficulty for them to organize and track everything. Some students will change pick-up location, cancel meals or change beverages after making an order, which makes it even messier for them to record everything precisely.

Therefore, I see the opportunity of making a chatbot to connect each student and each meal provider. With its help, students only need one conversation interface to order meals from different restaurants without having to endure endless popping-up messages created by other students making orders. Also, meal providers no longer need to keep eyes on various chat groups and keep track of everything. The chatbot should automatically generate a neat list of order details for them.


Bot Personality:

I designed the bot's personality to give her a subtle sense of human touch. MealOrderHelper has a warm and lovely personality. She is super friendly and helpful, very polite but not so formal. She is like a friend who really cares about you and supports you. In the current version, she can only react to your requests, however, in the future she will not only be a submissive servant but will also suggest you do things. She is likely to say something like: “Hey do you want to skip your lunch? Why not quickly order something now. Don’t work too hard! ” “Wow restaurant XX is providing your favorite poke bowl today! Would you like to order one?”


Conversation Structure:

The full function of this bot should be able to serve two groups of people: the students who want to order meals and meal providers who run the restaurant and delivery business. The conversation design focus on providing clear guidance to reduce confusion during the conversation, simplifying the process and handling errors gracefully. In the current version of the functioning prototype, I only worked on the student side interaction.


Data Structure:

To realize the proposed function, 4 relational tables need to be created. "Students" table and "Providers" table are used to store information related to each user, while "Menus" table and "Orders" table are used to compile logs made by all the users.



The prototype is written in Ruby with Sinatra framework, then it is deployed to Heroku server and connected to Twilio's SMS services. The script mainly contains a series of conditional statements to keep the conversation going.


I have used a built-in Time method to pull the current local time, therefore when users ask for the menu, the bot will let them know whether they can make an order now and show them the right menu if it is available at the moment.

time =
current_time = time.hour.to_i

meal_type = "none"
if current_time >= 14 && current_time <= 18
  meal_type = "dinner"
elsif current_time >= 0 && current_time <14
  meal_type = "lunch"


if meal_type == "none"
  message = "Sorry, the ordering service is not available now. You can make lunch orders between 12:00am-14:00pm and dinner orders between 14:00pm-18:00pm."
  message = "Here is today's #{meal_type} menu: 1. Fried Chicken Bento($8), Rosetea Cafe 2. Stew Beef on Rice($7), Orient Express 3. Shrimp Curry($10), Sichuan Gourmet. Which one would you like to choose? "
Click to Expand

Prototype Screenshots:


Next Steps:

I will finish coding the meal-provider-side conversation and incorporate sessions and database into the code to make it capable of storing each user's data. Also, I will define more classes to make sure all the keywords that I have defined don't conflict with Twilio's commands.

Share this Project


49714 Programming for Online Prototypes

· 15 members

A hands on introduction to building online products and services through code

Focused on

MealOrderHelper helps busy CMU students order take-out meals from multiple meals providers in an easier way.


October 19th, 2017