Movie Eva

Made by qichengy

Found in Final Project - Weird Conversations

Movie Eva can help you find a movie for the day! Just simply send her a selfie and she will recommend a movie based on your mood. Prefer texting? You can text her a genre type you desire or tell her how you feel today.


Imagine this scenario: you and your friends just made a last-minute decision that you want to watch a movie together, and now you are struggling with what movie to watch. Sounds familiar? The struggle of finding a movie is real! According to Hick's law, the more options you have, the longer it takes to make a choice. With the attention to solve this problem, I created Movie Eva to recommend movies basing on your feelings or desired genre type - one movie at a time! 



With the rapid development of Artificial Intelligence and deep machine learning, there is never a lack of movie recommender that can suggest movies base on users' behavior on the internet. However, the process of finding a movie online is laborious for me. Opening a browser, typing in keywords, clicking into a movie database website, rolling through pages on the websites, and debating on choices...this process is time-consuming. So I looked to shorten this process.

How a chatbot could help shorten the process of finding a movie
Shorten process

Looking into zero-UI concepts, a chatbot will be a very suitable solution. I got some inspiration from the HuggingFace chatbot, a social AI featuring chit-chat with users, selfie trading, and character customization. The bot doesn't try to disguise itself as a human because it sometimes will provide choices of response for users, which does not resemble human texting conversation. However, this is a smart and effective way to guide the users in the interaction, especially if the bot is not able to handle out-of-range questions. 



1. Identify Bot's Personality

I started out by giving the bot a personality, which will help me visualize its language and voice and the ways it will offer help to the users.

identifying the bot's personality
Bot personality worksheet

2. Function Matrix

A function matrix helped me prioritize the features by the difficulty level. I ended up achieving most of the features in the chart, but I am still hoping to work on the follow-up conversation.

Function matrix
Function matrix

3. Conversation Flow

The conversation flow visualized the interaction before I started coding. After drawing the flow, I did some usability testing by role-playing my bot with some classmates to test out the conversation. 

Conversation flow
Conversation flow

4. Connecting APIs

I looked into 2 APIs: Microsoft Face API and the Movie DB API. The former can analyze data such as emotion from images, and the latter is a movie database that offers multiple ways to extract a movie information. I am pulling these two APIs together because I tried to recommend movies by reading users' mood if they choose to send a selfie to the bot.


#                           gems for both APIs:

#                      Microsoft Azure & theMovieDB


require 'net/http'   #emotion API library

require 'parseconfig'
require 'rest-client'
require 'themoviedb-api'  #moviedb database


#                         call for the movieDb API




response = Tmdb::Genre.movies(12)
response2 = Tmdb::Genre.movies(10749)


#                         call for the Azure face API


  uri = URI('')
  uri.query = URI.encode_www_form({
      # Request parameters

      'returnFaceId' => 'true',
      'returnFaceLandmarks' => 'false',
      'returnFaceAttributes' => 'age,gender,headPose,smile,facialHair,glasses,' +

  request =

  # Request headers

  # Replace <Subscription Key> with your valid subscription key.

  request['Ocp-Apim-Subscription-Key'] = '74e4615ad75b40179c0cca590c66615c'
  request['Content-Type'] = 'application/json'

  imageUri = media_url
  request.body = "{\"url\": \"" + imageUri + "\"}"

  response = Net::HTTP.start(, uri.port, :use_ssl => uri.scheme == 'https') do |http|


json = JSON.parse( response.body )

emotions = json.first["faceAttributes"]["emotion"]

searchEmotion = emotions.max_by{|k,v| v}[0]
Click to Expand


Movie Eva was a Ruby-based SMS bot with Sinatra framework, connected to Twilio and deployed through Heroku. It can receive images and text from the users, and reply with a movie recommendation accordingly.

Texting samples
Text convo whitebg
Movie Eva demo


1. More Usability Testing

How I decided to match different genre types to different emotions was to do a quick survey - I asked my friend to do the matching. The survey sample could have been bigger if I have more time so that the data would have been more accurate.

2. Better with Random Questions

I can dig deeper into the conversation. For example, "I feel" / "I am" + "{feeling}" can trigger a next step response such as "Why do you feel this way?"

In some usability testing, I observed that users would ignore my onboarding message and text things like "how are you doing?", "what's up" instead of following the instruction. When that happened, Movie Eva does not respond well. I will dedicate more time to polishing the conversation flow, and possibly implement the Dialogflow API. 

3. More Ways to Request a Movie

"I really like history movie. I wish I could just say 'Victoria' and it gives me a movie for that time period."

A user told me what feature she would like to see in my movie bot, and I agreed that the bot can be more versatile in terms of ways of searching. One user was trying to type in a movie's name and then realized the bot did not take name search.  Therefore, exploring how to use the "keyword" search of the movie API is my next step.

Share this Project


49714 Programming for Online Prototypes

· 9 members

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

Focused on

Movie Eva can help you find a movie for the day! Just simply send her a selfie and she will recommend a movie based on your mood. Prefer texting? You can text her a genre type you desire or tell her how you feel today.


October 19th, 2018