I came across the game Akinator some time ago. During gameplay, it attempts to determine what fictional or real-life “character” the player is thinking of by asking a series of questions. The game has a huge database of characters, where user can contribute the missing ones. I got interested in how actually the platform works as it sometimes can guess the thought of character by asking less than ten questions. There is no public explanation how exactly it works. In fact, it goes by simple elimination and some people have sheared their assumptions how it is done:
The genie is a really successful realization of a fictional character who lives in Internet and keeps people amazed.
I imagined how it would look like the fortunetelling in future – when you do not necessarily have to be present during the seance, everything is done online, but the conversation and experience must be very close to the real one, which should be achieved most probably through artificial intelligence and machine learning.
So, I came up with the idea of Electronic Tarot Oracle, where Google Home Mini is used as a medium to communicate with the oracle. In order to develop a conversation with Google Home you should use a tool called Dialogflow. Google Dialoflow give users new ways to interact with a product by building engaging voice and text-based conversational interfaces, such as voice apps and chatbots, powered by AI. It uses machine learning to understand what users are saying. That is why we should provide (feed) Dialogflow examples of what a user might say when interacting with a product.
There are some concepts that needs to introduced as I go along. The most important ones which I used are intents, contexts, fallback, training phrases, responses, fulfillment. Intents are simple messaging objects that describe how to do something. Contexts represent the current state of a user’s request and allow your agent to carry information from one intent to another. Combinations of input and output contexts can control the conversational path the user takes through the dialog. Fulfillment defines the conversational interface for the Action to obtain user input and the logic to process the input and eventually fulfill the Action. So, you can basically extent standard Google processing by using a custom Webhook and logic. Training phrases define what users need to say (the grammar) to trigger the intent. Dialogflow automatically handles natural variations of the provided example phrases. Fallbacks are intents which are triggered in case Dialogflow has difficulties recognizing the flow.
Conversation can be made either using Google Assistant on mobile or Google Home. To start, you just have to say “Hi Google. Talk to Tarot Oracle“.
Storyboard: At first stage El. Oracle is introducing itself followed by a short story about fortunetelling, then asks for a name. Then the user is asked to think about a question and shuffle the Tarot cards placed in front. After cards has been shuffled, user deals 7 cards face down in a pile. Oracle asks the user to write down on a paper a keyword representing the question and crunches. Then user is supposed to hold the paper closed to forehead (that is a part of a ritual) and turn the top Tarot card. Now, Oracle starts the actual reading by predicting information about person’s life followed by mysterious revelation of the drawn Tarot card. The conversations ends by asking the person to register an account in case anyone wants to do more readings.
I end up using 5 intents which are described bellow:
(1) intent – Default Welcome
Input context: none
Output context: awaiting_name
Hi. I am an electronic tarot reading oracle. People may have very different expectations of what a tarot reading means based on what we see in movies or television. Look at me, psychic doesn’t need to be with you physically to access your energy field. A reading can last just a few minutes or as long as you require. All you need is a good internet connection and me. The first reading is a trial version, it means you do not need to register an account. Let’s start. What is your name ?
(2) intent – UserProvidesName
Input context: awaiting_name
Output context: awaiting_ready
That is correct! I knew that your name is $given-name, because I am a tarot reading oracle. Are you ready for cleromancy ? $given-name, Look at me, now, I want you to clear your mind and be alert, we are going to create an esoteric experience together. Please put away all unnecessary things that can distract your attention. Have a question in mind to do the reading for. Keep your question focused on yourself and on the present. Then grab the Tarot deck in front of you. Say “I am ready” when you are ready.
(3) intent – UserGrabsTheDeck
Input context: awaiting_ready
Output context: awaiting_dealt
#awaiting_ready.given-name, start shuffling the deck. Relax, it is important to keep the question in your mind while mixing the cards. Eliminate all external forces on you and be alert. Stop shuffling the cards NOW. Deal 7 cards, face down, on each other, making a pile. Let me know if you are done.
(4) intent – UserWritesQuestion
Input context: awaiting_dealt
Output context: awaiting_paper_crunch
Write down just one keyword representing your question followed by your age in a numerical format. Crunch the paper and hold close on your forehead. How does it feel ?
(5) intent – UserTurnsTheCard
Input context: awaiting_paper_crunch
Output context: none
This is the final intent which means it is the end of conversation.
Immediately put away the papers and turn face up the top Tarot card……
My goal was to create a conversation, a reading experience, which is as close as possible compared with a in-person reading practice. That is why I trained the Oracle with phrases as most of the people would have responded. To make the communication for comfortable I added some personalized lines, where oracle is refereed to person by name. And eventually, I added some bits of magic to make the experience seem more magical.