You can find the skill here. Let's get started:
AWS LambdaTo fetch the feelings we'll use We Feel Fine's public API.
- Go to the AWS Portal
- Create a Lambda function using the Blank Function template
- For the trigger click on the dotted box on the left and choose Alexa Skills Kit
- On the next screen, name the function
We Feel Fine
, pickNode.js 4.3
for the runtime, paste in the code from theindex.js
file in GitHub (or copy it from below)
- Pick
lambda_basic_execution
for the Execution Policy then continue onward. If there isn't a basic execution role set up yet choose Create new role from template(s) for Role. Set the Role Name to "lambda_basic_execution
" and select Basic Lambda Permissions from the Policy Templates. This permission set defines what amazon services the function will have access to.
'use strict';
var http = require('http');
function buildSpeechletResponse(title, output, repromptText, shouldEndSession) {
return {
outputSpeech: {
type: 'PlainText',
text: output,
},
card: {
type: 'Simple',
title: `${title}`,
content: `${output}`,
},
reprompt: {
outputSpeech: {
type: 'PlainText',
text: repromptText,
},
},
shouldEndSession,
};
}
function buildResponse(sessionAttributes, speechletResponse) {
return {
version: '1.0',
sessionAttributes,
response: speechletResponse,
};
}
function startTalking(session, callback, intent, backoff) {
getJson(
session,
intent,
0,
function(results) {
session.results = results;
var resultText = '';
for (var i = 0, len = results.length; i < len - 1; i++) {
resultText += results[i].text + ' ... ... ';
}
const sessionAttributes = session.attributes;
const cardTitle = 'WeFeelFine';
const speechOutput = resultText + ' ... Shall I continue?';
const repromptText = 'Shall I continue?';
const shouldEndSession = false;
callback(sessionAttributes,
buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession));
}
);
}
function startHelp(callback) {
const sessionAttributes = {};
const cardTitle = 'WeFeelFine';
const speechOutput = "How are others feeling? Ask how women are feeling in Japan. How do people feel in rainy weather. What are happy people saying.";
const repromptText = "I can filter by feelings, gender, locations and even weather.";
const shouldEndSession = false;
callback(sessionAttributes,
buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession));
}
function shutUp(session, callback) {
const sessionAttributes = session.attributes;
const cardTitle = 'WeFeelFine';
const speechOutput = "";
const shouldEndSession = false;
callback(sessionAttributes,
buildSpeechletResponse(cardTitle, speechOutput, null, shouldEndSession));
}
function handleSessionEndRequest(callback) {
const cardTitle = 'WeFeelFine';
const speechOutput = "";
const shouldEndSession = true;
callback({}, buildSpeechletResponse(cardTitle, speechOutput, null, shouldEndSession));
}
function onSessionStarted(sessionStartedRequest, session) {
console.log(`onSessionStarted requestId=${sessionStartedRequest.requestId}, sessionId=${session.sessionId}`);
}
function onLaunch(launchRequest, session, callback) {
console.log(`onLaunch requestId=${launchRequest.requestId}, sessionId=${session.sessionId}`);
const sessionAttributes = {};
const cardTitle = 'WeFeelFine';
const speechOutput = "Welcome to we feel fine. Ask how people are feeling to get started.";
const repromptText = "Or ask for help to hear more options,";
const shouldEndSession = false;
callback(sessionAttributes,
buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession));
}
function onIntent(intentRequest, session, callback) {
console.log(`onIntent requestId=${intentRequest.requestId}, sessionId=${session.sessionId}`);
const intent = intentRequest.intent;
const intentName = intentRequest.intent.name;
if (!session.attributes) {
session.attributes = {};
}
if (intentName === 'HowDoWeFeelIntent') {
startTalking(session, callback, intent);
} else if (intentName === 'AMAZON.YesIntent') {
startTalking(session, callback, intent);
} else if (intentName === 'AMAZON.HelpIntent') {
startHelp(callback);
} else if (intentName === 'AMAZON.StopIntent' || intentName === 'AMAZON.CancelIntent' || intentName === 'AMAZON.NoIntent') {
handleSessionEndRequest(callback);
} else {
throw new Error('Invalid intent');
}
}
function onSessionEnded(sessionEndedRequest, session) {
console.log(`onSessionEnded requestId=${sessionEndedRequest.requestId}, sessionId=${session.sessionId}`);
// Add cleanup logic here
}
function getDate() {
var start = new Date(2005, 11, 31);
var end = new Date(2014, 7, 1);
return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
}
function getURL(intent, backoff) {
var date = getDate();
var day = date.getDate();
var month = date.getMonth() + 1;
var year = date.getFullYear();
var url = "http://api.wefeelfine.org:8080/ShowFeelings";
url += "?display=text&returnfields=sentence,postdate,imageid&limit=10";
if (!backoff) {
url += "&postdate="+year+"-";
if (month < 10) {
url += "0";
}
url += month+"-";
if (day < 10) {
url += "0";
}
url += day;
}
else if (backoff == 1) {
url += "&postmonth="+month+"&postyear="+year;
}
else if (backoff == 2) {
url += "&postyear="+year;
}
if (intent.slots) {
if (intent.slots.gender && intent.slots.gender.value) {
if (['male', 'man', 'men', 'boys', 'guys', 'dudes'].indexOf(intent.slots.gender.value) !== -1) {
url += "&gender=1";
}
else if (['female', 'woman', 'women', 'girls', 'gals', 'chicks'].indexOf(intent.slots.gender.value) !== -1) {
url += "&gender=0";
}
}
if (intent.slots.feeling && intent.slots.feeling.value) {
url += "&feeling="+intent.slots.feeling.value;
}
if (intent.slots.age && intent.slots.age.value) {
if (intent.slots.age.value >= 0 && intent.slots.age.value < 10) {
url += "&agerange=0";
}
else if (intent.slots.age.value >= 10 && intent.slots.age.value < 20) {
url += "&agerange=10";
}
else if (intent.slots.age.value >= 20 && intent.slots.age.value < 30) {
url += "&agerange=20";
}
else if (intent.slots.age.value >= 30 && intent.slots.age.value < 40) {
url += "&agerange=30";
}
else if (intent.slots.age.value >= 40 && intent.slots.age.value < 50) {
url += "&agerange=40";
}
else if (intent.slots.age.value >= 50 && intent.slots.age.value < 60) {
url += "&agerange=50";
}
else if (intent.slots.age.value >= 60 && intent.slots.age.value < 70) {
url += "&agerange=60";
}
else if (intent.slots.age.value >= 70 && intent.slots.age.value < 80) {
url += "&agerange=70";
}
else if (intent.slots.age.value >= 80 && intent.slots.age.value < 90) {
url += "&agerange=80";
}
else if (intent.slots.age.value >= 90 && intent.slots.age.value < 100) {
url += "&agerange=90";
}
}
if (intent.slots.condition && intent.slots.condition.value) {
if (intent.slots.condition.value == "sunny") {
url += "&conditions=1";
}
else if (intent.slots.condition.value == "rainy") {
url += "&conditions=2";
}
else if (intent.slots.condition.value == "snowy") {
url += "&conditions=3";
}
else if (intent.slots.condition.value == "cloudy") {
url += "&conditions=4";
}
}
if (intent.slots.country && intent.slots.country.value) {
url += "&country="+intent.slots.country.value;
}
if (intent.slots.state && intent.slots.state.value) {
url += "&state="+intent.slots.state.value;
}
if (intent.slots.city && intent.slots.city.value) {
url += "&city="+intent.slots.city.value;
}
}
return url;
}
function getJson(session, intent, backoff, eventCallback) {
if (!backoff) {
backoff = 0;
}
if (backoff > 3) {
return eventCallback([{text:"I was unable to find any feelings with these filters. I'm sorry."}]);
}
var url = getURL(intent, backoff);
console.log(url);
http.get(url, function(res) {
var body = '';
res.on('data', function (chunk) {
body += chunk;
});
res.on('end', function () {
//console.log(body);
if (body === '') {
backoff++;
console.log('backoff : '+backoff);
getJson(session, intent, backoff, eventCallback);
}
else {
var results = body.split("\t<br>\r");
var resultJson = [];
for (var i = 0, len = results.length; i < len - 1; i++) {
var result = results[i];
var splitResult = result.split(/\t/);
var json = {};
if (splitResult.length === 3) {
json.image = splitResult.pop();
}
json.date = splitResult.pop();
json.text = splitResult.pop();
resultJson.push(json);
}
eventCallback(resultJson);
}
});
}).on('error', function (e) {
console.log("Got error: ", e);
});
}
// --------------- Main handler -----------------------
// Route the incoming request based on type (LaunchRequest, IntentRequest,
// etc.) The JSON body of the request is provided in the event parameter.
exports.handler = (event, context, callback) => {
try {
console.log(`event.session.application.applicationId=${event.session.application.applicationId}`);
if (event.session.application.applicationId !== 'INSERT-ID-HERE') {
callback('Invalid Application ID');
}
if (event.session.new) {
onSessionStarted({ requestId: event.request.requestId }, event.session);
}
if (event.request.type === 'LaunchRequest') {
onLaunch(event.request,
event.session,
(sessionAttributes, speechletResponse) => {
callback(null, buildResponse(sessionAttributes, speechletResponse));
});
} else if (event.request.type === 'IntentRequest') {
onIntent(event.request,
event.session,
(sessionAttributes, speechletResponse) => {
callback(null, buildResponse(sessionAttributes, speechletResponse));
});
} else if (event.request.type === 'SessionEndedRequest') {
onSessionEnded(event.request, event.session);
callback();
}
} catch (err) {
callback(err);
}
};
- And create a Custom Slot Type named AGES with these values:
1 year old
2 year olds
3 year olds
4 year olds
5 year olds
6 year olds
7 year olds
8 year olds
9 year olds
10 year olds
11 year olds
12 year olds
13 year olds
14 year olds
15 year olds
16 year olds
17 year olds
18 year olds
19 year olds
20 year olds
21 year olds
22 year olds
23 year olds
24 year olds
25 year olds
26 year olds
27 year olds
28 year olds
29 year olds
30 year olds
31 year olds
32 year olds
33 year olds
34 year olds
35 year olds
36 year olds
37 year olds
38 year olds
39 year olds
40 year olds
41 year olds
42 year olds
43 year olds
44 year olds
45 year olds
46 year olds
47 year olds
48 year olds
49 year olds
50 year olds
51 year olds
52 year olds
53 year olds
54 year olds
55 year olds
56 year olds
57 year olds
58 year olds
59 year olds
60 year olds
61 year olds
62 year olds
63 year olds
64 year olds
65 year olds
66 year olds
67 year olds
68 year olds
69 year olds
70 year olds
71 year olds
72 year olds
73 year olds
74 year olds
75 year olds
76 year olds
77 year olds
78 year olds
79 year olds
80 year olds
81 year olds
82 year olds
83 year olds
84 year olds
85 year olds
86 year olds
87 year olds
88 year olds
89 year olds
90 year olds
91 year olds
92 year olds
93 year olds
94 year olds
95 year olds
96 year olds
97 year olds
98 year olds
99 year olds
100 year olds
- And create a Custom Slot Type named AMAZON.US_CITY with these values:
Shanghai
Karachi
Beijing
São Paulo
Dhaka
Delhi
Lagos
Istanbul
Tokyo
Mumbai
Moscow
Guangzhou
Shenzhen
Suzhou
Kinshasa
Cairo
Jakarta
Lahore
Seoul
Mexico City
Lima
London
New York City
Bengaluru
Bangkok
Dongguan
Chongqing
Nanjing
Tehran
Shenyang
Bogotá
Ho Chi Minh City
Hong Kong
Baghdad
Chennai
Changsha
Wuhan
Tianjin
Hanoi
Faisalabad
Rio de Janeiro
Foshan
Zunyi
Santiago
Riyadh
Ahmedabad
Singapore
Shantou
Yangon
Saint Petersburg
Sydney
Abidjan
Chengdu
Alexandria
Melbourne
Kolkata
Ankara
Xi'an
Surat
Johannesburg
Dar es Salaam
Harbin
Giza
Izmir
Zhengzhou
New Taipei City
Los Angeles
Cape Town
Yokohama
Hangzhou
Xiamen
Quanzhou
Berlin
Busan
Rawalpindi
Guayaquil
Jeddah
Durban
Hyderabad
Kabul
Casablanca
Hefei
Pyongyang
Madrid
Peshawar
Ekurhuleni
Nairobi
Zhongshan
Multan
Pune
Addis Ababa
Jaipur
Buenos Aires
Lucknow
Wenzhou
Incheon
Quezon City
Kiev
Salvador
Rome
Luanda
Kaohsiung
Surabaya
Taichung
Taipei
Gujranwala
Chicago
Osaka
Quito
Dubai
Toronto
Bandung
Brasília
Daegu
Houston
Nagpur
Brisbane
Nagoya
Phnom Penh
Kochi
Paris
Medan
Perth
Minsk
Sapporo
Bucharest
Manila
Hamburg
Kuala Lumpur
Montreal
Davao City
Barcelona
Caloocan
Philadelphia
Phoenix
Kobe
Guadalajara
Auckland
Fukuoka
Kyoto
Munich
Kawasaki
Milan
Adelaide
Fez
Calgary
Cologne
- And create a Custom Slot Type named CONDITIONS with these values:
sunny
rainy
snowy
cloudy
- And create a Custom Slot Type named COUNTRIES with these values:
Afghanistan
Albania
Algeria
American Samoa
Andorra
Angola
Anguilla
Antarctica
Antigua and Barbuda
Argentina
Armenia
Aruba
Australia
Austria
Azerbaijan
Bahamas
Bahrain
Bangladesh
Barbados
Belarus
Belgium
Belize
Benin
Bermuda
Bhutan
Bolivia
Bosnia and Herzegovina
Botswana
Brazil
Brunei Darussalam
Bulgaria
Burkina Faso
Burundi
Cambodia
Cameroon
Canada
Cape Verde
Cayman Islands
Central African Republic
Chad
Chile
China
Christmas Island
Cocos (Keeling) Islands
Colombia
Comoros
Democratic Republic of the Congo (Kinshasa)
Congo, Republic of (Brazzaville)
Cook Islands
Costa Rica
Ivory Coast
Croatia
Cuba
Cyprus
Czech Republic
Denmark
Djibouti
Dominica
Dominican Republic
East Timor (Timor-Leste)
Ecuador
Egypt
El Salvador
Equatorial Guinea
Eritrea
Estonia
Ethiopia
Falkland Islands
Faroe Islands
Fiji
Finland
France
French Guiana
French Polynesia
French Southern Territories
Gabon
Gambia
Georgia
Germany
Ghana
Gibraltar
Great Britain
Greece
Greenland
Grenada
Guadeloupe
Guam
Guatemala
Guinea
Guinea-Bissau
Guyana
Haiti
Holy See
Honduras
Hong Kong
Hungary
Iceland
India
Indonesia
Iran (Islamic Republic of)
Iraq
Ireland
Israel
Italy
Jamaica
Japan
Jordan
Kazakhstan
Kenya
Kiribati
Korea, Democratic People's Rep. (North Korea)
Korea, Republic of (South Korea)
Kosovo
Kuwait
Kyrgyzstan
Lao, People's Democratic Republic
Latvia
Lebanon
Lesotho
Liberia
Libya
Liechtenstein
Lithuania
Luxembourg
Macau
Macedonia, Rep. of
Madagascar
Malawi
Malaysia
Maldives
Mali
Malta
Marshall Islands
Martinique
Mauritania
Mauritius
Mayotte
Mexico
Micronesia, Federal States of
Moldova, Republic of
Monaco
Mongolia
Montenegro
Montserrat
Morocco
Mozambique
Myanmar, Burma
Namibia
Nauru
Nepal
Netherlands
Netherlands Antilles
New Caledonia
New Zealand
Nicaragua
Niger
Nigeria
Niue
Northern Mariana Islands
Norway
Oman
Pakistan
Palau
Palestinian territories
Panama
Papua New Guinea
Paraguay
Peru
Philippines
Pitcairn Island
Poland
Portugal
Puerto Rico
Qatar
Reunion Island
Romania
Russian Federation
Rwanda
Saint Kitts and Nevis
Saint Lucia
Saint Vincent and the Grenadines
Samoa
San Marino
Sao Tome and Principe
Saudi Arabia
Senegal
Serbia
Seychelles
Sierra Leone
Singapore
Slovakia (Slovak Republic)
Slovenia
Solomon Islands
Somalia
South Africa
South Sudan
Spain
Sri Lanka
Sudan
Suriname
Swaziland
Sweden
Switzerland
Syria, Syrian Arab Republic
Taiwan (Republic of China)
Tajikistan
Tanzania; officially the United Republic of Tanzania
Thailand
Tibet
Timor-Leste (East Timor)
Togo
Tokelau
Tonga
Trinidad and Tobago
Tunisia
Turkey
Turkmenistan
Turks and Caicos Islands
Tuvalu
Uganda
Ukraine
United Arab Emirates
United Kingdom
United States
Uruguay
Uzbekistan
Vanuatu
Vatican City State (Holy See)
Venezuela
Vietnam
Virgin Islands (British)
Virgin Islands (U.S.)
Wallis and Futuna Islands
Western Sahara
Yemen
Zambia
Zimbabwe
- And create a Custom Slot Type named FEELINGS with these values:
better
bad
good
right
guilty
sick
same
sorry
well
down
alone
happy
great
comfortable
sad
free
lost
stupid
tired
weird
lonely
old
home
ill
horrible
off
different
whole
pretty
safe
done
special
wrong
empty
loved
worse
depressed
fine
new
hurt
terrible
best
close
real
confident
uncomfortable
lucky
awful
crying
shitty
missing
accomplished
big
cold
complete
first
head
alive
used
important
crappy
hard
ok
ready
able
okay
wanted
fat
sure
lazy
nice
strong
stuck
compelled
blessed
strange
awkward
warm
certain
weak
overwhelmed
normal
proud
helpless
full
stressed
behind
mean
dumb
hot
dead
deep
trapped
true
crazy
angry
dirty
small
drained
useless
low
ashamed
both
nervous
high
obligated
huge
numb
young
miserable
baby
closer
upset
silly
relaxed
morning
cool
bored
gross
scared
worthless
confused
walking
man
blah
dizzy
wonderful
needed
eating
odd
playing
sleepy
skin
excited
amazing
whatever
light
knowing
productive
selfish
exhausted
relieved
funny
fun
beautiful
human
happier
alright
wasting
content
growing
ugly
hungry
secure
broken
changed
super
frustrated
missed
grown
open
icky
connected
refreshed
awesome
wasted
anxious
blue
fit
insecure
inspired
seen
older
pathetic
drunk
afraid
known
found
calm
positive
sharing
worst
necessary
turned
slipping
nauseous
mad
cut
responsible
side
disappointed
emotional
awake
inadequate
waste
current
motivated
lame
disconnected
entire
creative
short
future
hopeless
satisfied
million
driving
perfect
power
holding
boring
fool
changing
isolated
breaking
late
ago
naked
smart
rambling
uneasy
jealous
beat
heavy
set
dancing
welcome
happening
restless
busy
pissed
torn
distant
vulnerable
personal
clean
turning
embarrassed
standing
beginning
failed
fucked
obliged
spent
express
optimistic
sore
deal
tried
burning
random
darn
disgusting
healthy
nostalgic
wearing
social
sexy
learned
fast
bleeding
rested
killing
glad
rusty
middle
asking
prepared
justified
absolute
extra
inclined
violated
ripped
dark
fortunate
biggest
burnt
hanging
fake
worried
abandoned
easy
honest
due
general
pulled
group
drinking
threatened
won
possible
lying
interesting
bitter
unloved
poor
building
akin
sound
grateful
annoyed
slow
weather
forgotten
major
fly
lousy
neglected
insane
floating
written
involved
inferior
moved
unhappy
vital
ignored
cramped
clear
honored
fair
forced
rejected
forward
grab
faint
negative
worked
party
utter
easier
fantastic
serious
unwanted
foolish
heard
fresh
pushing
pushed
useful
particular
across
retarded
giddy
rush
paper
ridiculous
fighting
minute
appreciated
drifting
level
intense
sweet
tiny
evil
black
yucky
invisible
worn
bloated
rich
homesick
further
rushed
gay
worthy
appropriate
soft
choice
early
burst
passing
powerful
deprived
rough
straight
screwed
pressured
singing
queasy
lifted
front
incomplete
spring
adult
sudden
desperate
broke
country
hollow
detached
defeated
state
conscious
blame
lethargic
powerless
disgusted
constant
bigger
annoying
spoiled
tight
cheating
similar
shut
slight
interested
bottomed
kept
natural
younger
bottom
decent
winter
shy
peaceful
accepted
exact
acting
difficult
non
tense
energetic
lacking
subject
ground
ahead
attached
loving
settled
sister
thankful
wet
capable
pointless
physical
usual
familiar
liked
blank
loose
laughing
otherwise
empowered
english
present
anti
drawn
stopped
cute
incredible
hopeful
pure
large
failing
static
cheap
white
superior
fulfilled
panic
groggy
complaining
mixed
paranoid
greatest
shot
actual
common
giant
treated
quiet
cutting
dread
closest
simple
nauseated
war
mature
crushed
finished
unprepared
allowed
closing
pleased
intimidated
rotten
woozy
filled
liberated
ended
attractive
red
public
meaning
lower
extreme
opposite
healthier
understanding
several
thrown
touched
jumping
passionate
rising
bound
discouraged
four
bloody
fallen
offended
willing
independent
insulted
spinning
unsure
born
likely
business
semi
melancholy
pregnant
daily
touching
earlier
aware
painful
hearing
experienced
potential
staring
tied
luckiest
generous
led
fading
nasty
surrounded
damned
immense
unmotivated
unable
impossible
void
shell
rude
magic
pop
sluggish
privileged
successful
creeping
speaking
dry
apathetic
closed
insignificant
sharp
bum
irritated
cooking
flat
brave
greater
exposed
dull
unfair
following
alienated
spiritual
stable
attack
unwell
burned
crummy
granted
store
longing
hung
secret
chill
american
locked
understood
road
solid
favorite
related
paid
expected
flowing
correct
bitchy
entitled
rid
mental
unworthy
pressing
shaking
slightest
star
popular
worthwhile
fragile
ripping
based
figured
setting
exciting
blind
thin
wondering
caring
sexual
bothered
horrid
stuffed
lovely
thousand
regular
unsettled
sane
shallow
stale
wandering
final
suffering
romantic
pretend
cranky
tough
beaten
higher
qualified
hidden
riding
grumpy
wide
proper
deserved
suicidal
significant
plain
curling
smug
raw
feverish
protected
smiling
comfy
wee
immature
hated
obvious
leading
picked
tall
pm
wrapped
fuzzy
eaten
crack
six
massive
uninspired
suffocating
girly
needy
sign
fabulous
worrying
intelligent
sometime
poorly
indifferent
limited
shared
ruined
wise
tearing
searching
sent
dragging
genuine
bright
outcast
swimming
removed
private
smoking
alien
crashing
unsafe
concerned
unproductive
pressed
cross
overall
ambitious
unattractive
vindicated
jack
smaller
honoured
informed
happiest
wicked
dear
sea
cheerful
cheek
claustrophobic
opened
loud
yelling
horny
comforted
moody
spread
betraying
mellow
enlightened
returning
crash
degree
thru
afternoon
shock
dressed
invincible
bought
original
frail
drowsy
melting
organized
focused
struggling
surface
shaky
sentimental
regardless
childish
rolling
matt
stabbing
creepy
holy
included
stabbed
quality
warmed
renewed
bond
dress
covered
catching
round
punished
bare
overcome
shed
earned
improved
surprised
profound
impending
complicated
previous
wild
senior
split
sliding
recent
incompetent
green
dirt
misunderstood
ignorant
scary
sensitive
color
stoned
unique
naughty
cynical
unlike
stretched
chicken
christian
welcomed
festive
sucking
equal
affected
resentful
hundred
unimportant
headed
excellent
double
validated
sticking
quick
released
nuts
mum
stopping
uncertain
expressed
chipper
foreign
mighty
professional
sicker
antisocial
bush
specific
sickly
artistic
balanced
wretched
elated
shattered
tremendous
driven
underneath
swell
protective
l
stagnant
apprehensive
throbbing
funky
panicky
weary
pre
bar
stiff
female
bruised
incapable
noticed
thick
disoriented
plane
material
smooth
unstable
active
gentle
center
encouraged
key
bone
record
blown
friendly
land
male
wrath
twenty
average
built
fatter
unappreciated
pouring
added
smothered
itchy
boss
frozen
tipsy
grand
taught
unhealthy
various
skinny
gloomy
terrified
raped
racing
size
meaningful
individual
chocolate
doomed
jaded
dangerous
idiotic
false
achy
valid
expecting
heartbroken
addicted
fatigued
whining
buried
pleasant
adventurous
bursting
helpful
laid
aching
committed
greedy
meaningless
unsatisfied
improving
political
considered
shocked
chinese
violent
wronged
ben
french
poetic
scattered
vague
dun
precious
separate
surrounding
centered
visiting
irritable
camp
vain
abused
sober
dramatic
dependent
silent
endless
unfulfilled
hip
irrational
freezing
brick
cast
intruding
alert
moral
pessimistic
surreal
entering
answering
placed
musical
defensive
restricted
master
enormous
depressing
twisted
fellow
saved
larger
relaxing
stinging
completed
confined
draining
ultimate
irresponsible
valuable
sympathetic
infinite
patient
naive
routine
unusual
dripping
hypocritical
clever
dejected
novel
graduate
brilliant
feminine
determined
jittery
freshman
temporary
distracted
cozy
shouting
accurate
basic
unreal
exploding
destined
competent
homeless
religious
square
harsh
washed
cruel
brown
stressful
lonesome
separated
percent
tingly
direct
contributing
inevitable
frightened
associated
planned
healing
sticky
drugged
pink
rare
swallowed
approaching
humiliated
upbeat
sheepish
thirsty
rose
reluctant
quarter
stretch
cream
whiny
listless
famous
mountain
petty
trusted
curious
humbled
disturbed
choking
tingling
resolved
trembling
mediocre
swelling
discontent
spoken
stifled
swollen
dehydrated
assured
fitting
developed
envious
impatient
invited
dreadful
panicked
destroyed
lean
ambivalent
sincere
innocent
adequate
realizing
japanese
supported
reassured
farther
ancient
unwelcome
junior
goofy
twisting
paralyzed
misplaced
obsessed
wound
upper
criminal
stranded
continuing
witty
banging
spare
essential
winning
shaken
traveling
inappropriate
lowest
stunning
careful
radiating
dumped
reasonable
sold
unknown
unclean
rotting
clueless
local
typical
stone
opposed
neutral
relevant
inept
confusing
cheesy
minor
climbing
heavier
described
required
valued
instant
modern
convinced
slave
bastard
mild
controlled
crowded
promised
starving
adam
loopy
intimate
continued
net
stretching
official
west
discovered
crushing
frustrating
sappy
iffy
wed
manic
developing
stolen
persons
radio
arguing
mere
complex
chosen
injured
downright
crossed
flush
bomb
burdened
raining
remembered
base
available
mid
spreading
consumed
slack
stirring
dazed
pet
saving
unaccomplished
diet
received
virgin
metal
enthusiastic
lingering
tender
seeping
swamped
frisky
unnecessary
ultra
comforting
flip
blocked
heartless
superficial
ordinary
congested
brief
cracking
review
grey
pulsing
scratch
cancer
bass
invested
regretful
smashing
edgy
alt
lesser
firm
ungrateful
contented
vice
bold
pro
disillusioned
japan
matured
teenage
spanish
shining
nicer
seven
permanent
aged
faded
engaged
mass
increasing
boiling
supporting
disappointing
yelled
deflated
cleansed
switch
respected
coward
magical
bouncy
extended
redundant
wired
destructive
plastic
china
perky
latter
agitated
vast
critical
intellectual
biting
dissatisfied
troubled
commercial
cursed
euphoric
expanding
backed
adrift
guest
inform
fired
logical
bipolar
rebel
teen
uplifted
directed
internal
dam
domestic
disappearing
existing
freer
romance
rights
sheer
acid
philosophical
eight
ideal
national
fancy
bye
former
winding
downhill
leaning
clingy
chatty
upcoming
connecting
tested
psycho
concerning
tourist
looser
mushy
dated
constrained
slapped
glum
stuffy
vibrating
nagging
oppressed
intended
undeserving
devastated
acceptable
eternal
packed
mopey
teeny
zero
multiple
swept
chilled
wobbly
unpleasant
rent
hesitant
amused
fixed
faced
effective
peculiar
sociable
recovered
gorgeous
fatigue
lifeless
impressed
shamed
sounding
expensive
fifth
financial
bizarre
indebted
accepting
virtuous
twelve
severe
shifting
bay
deserving
educated
rational
reborn
indescribable
immediate
bonded
hostile
hideous
south
manly
haunted
sweaty
healed
academic
unfinished
wiser
pretentious
arrogant
subtle
greasy
talkative
entertaining
baking
bland
triumphant
bust
amazed
handled
dried
messy
mini
named
ecstatic
parked
tail
fried
score
disjointed
tortured
delicate
drastic
twilight
trusting
graduated
consuming
urgent
concrete
affecting
humble
cocky
beneficial
punk
sufficient
practicing
signed
raised
rebellious
introspective
spiraling
pointing
overloaded
divine
steady
questioning
comic
cheery
contrary
supportive
gold
alternate
terrific
lang
stripped
catholic
shittier
par
filthy
imposing
attacking
bouncing
dedicated
autumn
united
cracked
damaged
honey
whiney
talented
deserted
realistic
latest
controlling
bubbling
billion
sickish
sheltered
pent
suspicious
shameful
electric
log
tangible
legal
wood
competing
slutty
flash
imagined
resting
performing
solved
coherent
british
squishy
covering
according
sour
invigorated
tainted
trade
choked
unnatural
frantic
north
strained
peachy
merry
prettier
sorted
overlooked
carefree
asian
serene
fleeting
suspect
chilly
reckless
distinct
seeking
obsessive
bragging
clumsy
jet
fifteen
polite
golden
distressed
joined
starved
cornered
definite
articulate
substantial
applied
unsteady
disheartened
aggressive
addressed
joyful
studied
blanket
anonymous
bereft
jake
constricted
paris
rolled
conservative
spaced
unbearable
enjoyable
stubborn
checked
woods
strung
alcoholic
queer
fairy
fifty
tony
unconditional
aimless
liquid
model
jumpy
elementary
charged
liberal
thrilled
defined
whispered
eager
gripping
advanced
occasional
absorbed
giggly
standard
wounded
legitimate
fond
chin
peckish
frazzled
salt
minus
orange
medical
grave
morose
owed
beloved
tragic
texas
reflective
ant
insensitive
lurking
challenging
struck
neat
elaborate
desired
piercing
bugs
lesbian
apparent
grouchy
foggy
spontaneous
lit
crippled
root
floaty
traditional
uptight
bittersweet
constructive
dishonest
daring
loyal
handed
refreshing
boxed
owned
blonde
sneaking
invading
illegal
phantom
stalking
mundane
recovering
limp
crabby
pale
unfortunate
gigantic
aroused
smashed
flustered
raising
lone
milk
smacking
cleaned
threatening
glorious
trivial
perpetual
fatty
favourite
fourth
withdrawn
casual
flushed
corrupt
sunny
futile
august
patriotic
babbling
satisfying
flipping
hateful
resigned
disorganized
emotionless
stated
gray
frumpy
drunken
insulting
sarcastic
hectic
scratching
closet
charitable
deaf
flood
abnormal
primary
solo
outdoor
righteous
distraught
military
sacred
drowned
dependant
colour
reserved
hammered
enemy
groovy
corny
thoughtful
presented
attending
german
delicious
spectacular
sassy
leaking
doubtful
mourning
haunting
absent
toe
underlying
irritating
grimy
overweight
wrecked
classic
advance
unbalanced
impotent
lee
blamed
obnoxious
unbelievable
thirty
complacent
possessed
glowing
repressed
soaking
spiffy
grasping
smoked
cautious
proved
east
jolly
appealing
pampered
sweating
proof
naming
reverse
increased
moist
digital
uncreative
defending
melancholic
crafty
linked
sixteen
restrained
disgustingly
freed
pat
pitiful
efficient
protecting
competitive
proven
downtown
yearning
nonsense
heather
icy
trained
desert
suspended
pointed
spoilt
downstairs
bawling
greek
participating
gathering
stock
painted
apt
piano
affectionate
singled
damp
cluttered
absurd
disrespectful
convicted
stalked
smallest
hotter
degraded
despondent
typed
demanding
jewish
downward
sounded
upstairs
hack
contemplative
weightless
chained
bull
swirling
tensing
racist
prone
combined
cultural
snapping
motherless
weepy
belittled
winded
mistaken
twin
blissful
blushing
central
sophisticated
nude
obese
chubby
seedy
indulgent
painless
conceited
chaotic
secluded
flawed
rewarding
polar
brushed
teary
revealing
wonky
raging
jumbled
devoid
transported
dang
pensive
shiny
speeding
whit
recorded
juvenile
consistent
revealed
masochistic
blunt
hooked
peak
trampled
confirmed
dandy
agreed
friendless
newborn
feat
soaked
estranged
initial
swaying
rubber
weeping
picky
unexpected
frank
submissive
lonelier
prize
aggravated
erased
churning
lasting
decadent
chilling
remaining
irish
executed
admitted
passive
handicapped
recognized
epic
visual
volunteer
straining
assuming
flooding
purple
flown
authentic
materialistic
alike
unfit
bent
practical
unstoppable
bubbly
easiest
civil
highest
universal
unoriginal
loaded
cleansing
indecisive
bearing
bleak
international
cultured
stirred
regressing
collective
represented
forgiving
rooted
fearful
oozing
extraordinary
designed
revived
slim
handy
established
warming
idle
puffy
battered
excessive
inviting
portrayed
western
sneak
disturbing
horrified
sexier
delirious
crisp
amusing
upsetting
blinded
transparent
psychic
neurotic
underwater
prior
freaky
fitter
yellow
prime
punishing
enraged
ace
smothering
native
mocking
wan
remorseful
witnessed
caressing
wary
forsaken
splitting
guarded
dire
relative
tiniest
published
dreamed
suitable
functioning
appreciative
unlucky
crucial
tapped
solitary
sales
silky
encouraging
defective
unexplainable
saucy
victorious
sport
strip
european
timid
expert
sole
compelling
associate
indian
instinct
fluffy
homicidal
randy
ridden
playful
classy
corporate
trial
swinging
morbid
repetitive
iron
italian
pan
accountable
crossing
counter
shocking
royal
refer
remiss
immune
joyous
pulsating
cheering
gooey
keen
unresolved
abstract
hurtful
desirable
alternative
buzzing
devoted
gothic
aging
altered
sear
medium
scratched
mysterious
intoxicated
psychotic
suppressed
amiss
strangled
introverted
unpretty
supreme
functional
fluid
hilarious
crazed
repeated
victimized
pursuing
technical
cursing
luckier
remote
mistreated
condemned
hormonal
speechless
desolate
kindred
discombobulated
itching
secondary
unreasonable
trashy
breathless
joint
masculine
abroad
drying
lively
joking
bohemian
contagious
irrelevant
apologetic
releasing
premature
adjusted
unlikely
stimulated
numbing
hibernating
infected
wistful
print
moaning
whispering
overdue
slick
divided
equipped
fourteen
union
escaped
mexican
disloyal
melodramatic
dodgy
entertained
narrow
homey
murderous
skinnier
ironic
mainstream
bow
observing
vicious
emerging
unnoticed
scratchy
sublime
formal
wasteful
outdated
incident
teasing
curled
possessive
unorganized
landed
embarrassing
mortal
compulsive
acknowledged
tickling
sinister
induced
immortal
divorced
undesirable
maternal
tumbling
reliable
offensive
ordered
tangled
heated
managing
subconscious
butch
costume
disgruntled
generic
fooling
stereotypical
toxic
parallel
visible
daunted
stumbling
exclusive
careless
trendy
knowledgeable
contained
invalid
southern
chemical
pending
puzzled
cleared
ringing
napping
vocal
loneliest
faithful
harassed
numerous
hazy
attempted
unrequited
oldest
convenient
straw
incoherent
furious
crystal
sunk
adopted
radical
unanswered
noble
insufficient
imminent
russian
untrue
weekly
weighted
persecuted
spiteful
foul
compatible
sloppy
saturated
irate
psychological
charming
scientific
sneaky
erotic
neglectful
kindly
melted
dedicate
impulsive
ongoing
cherished
allergic
cloudy
produced
marching
- And create a Custom Slot Type named GENDERS with these values:
male
female
man
woman
men
women
boys
girls
guys
gals
dudes
chicks
- And for sample utterances put:
HowDoWeFeelIntent how do people feel
HowDoWeFeelIntent how do we feel
HowDoWeFeelIntent what are people feeling
HowDoWeFeelIntent how do {age} people feel
HowDoWeFeelIntent what are {age} people feeling
HowDoWeFeelIntent how do {gender} feel
HowDoWeFeelIntent what are {gender} feeling
HowDoWeFeelIntent what are people feeling in {country}
HowDoWeFeelIntent what are people feeling in {state}
HowDoWeFeelIntent what are people feeling in {city}
HowDoWeFeelIntent what are people feeling in {city} {state}
HowDoWeFeelIntent what are people feeling in {city} {country}
HowDoWeFeelIntent what are {gender} feeling in {country}
HowDoWeFeelIntent what are {gender} feeling in {state}
HowDoWeFeelIntent what are {gender} feeling in {city}
HowDoWeFeelIntent what are {gender} feeling in {city} {state}
HowDoWeFeelIntent what are {gender} feeling in {city} {country}
HowDoWeFeelIntent how do people feel in {country}
HowDoWeFeelIntent how do people feel in {state}
HowDoWeFeelIntent how do people feel in {city}
HowDoWeFeelIntent how do people in {country} feel
HowDoWeFeelIntent how do people in {state} feel
HowDoWeFeelIntent how do people in {city} feel
HowDoWeFeelIntent how do people feel in {condition} weather
HowDoWeFeelIntent how do people in {condition} weather feel
HowDoWeFeelIntent how do {gender} feel in {country}
HowDoWeFeelIntent how do {gender} feel in {state}
HowDoWeFeelIntent how do {gender} feel in {city}
HowDoWeFeelIntent how do {gender} in {country} feel
HowDoWeFeelIntent how do {gender} in {state} feel
HowDoWeFeelIntent how do {gender} in {city} feel
HowDoWeFeelIntent how do {gender} feel in {condition} weather
HowDoWeFeelIntent how do {gender} in {condition} weather feel
HowDoWeFeelIntent what do {feeling} people say
HowDoWeFeelIntent what are {feeling} people saying
HowDoWeFeelIntent what do {feeling} {gender} say
HowDoWeFeelIntent what are {feeling} {gender} saying
HowDoWeFeelIntent how do {age} {gender} feel
HowDoWeFeelIntent what are {age} {gender} feeling
HowDoWeFeelIntent what are {age} people feeling in {country}
HowDoWeFeelIntent what are {age} people feeling in {state}
HowDoWeFeelIntent what are {age} people feeling in {city}
HowDoWeFeelIntent what are {age} people feeling in {city} {state}
HowDoWeFeelIntent what are {age} people feeling in {city} {country}
HowDoWeFeelIntent what are {age} {gender} feeling in {country}
HowDoWeFeelIntent what are {age} {gender} feeling in {state}
HowDoWeFeelIntent what are {age} {gender} feeling in {city}
HowDoWeFeelIntent what are {age} {gender} feeling in {city} {state}
HowDoWeFeelIntent what are {age} {gender} feeling in {city} {country}
HowDoWeFeelIntent how do {age} people feel in {country}
HowDoWeFeelIntent how do {age} people feel in {state}
HowDoWeFeelIntent how do {age} people feel in {city}
HowDoWeFeelIntent how do {age} people in {country} feel
HowDoWeFeelIntent how do {age} people in {state} feel
HowDoWeFeelIntent how do {age} people in {city} feel
HowDoWeFeelIntent how do {age} people feel in {condition} weather
HowDoWeFeelIntent how do {age} people in {condition} weather feel
HowDoWeFeelIntent how do {age} {gender} feel in {country}
HowDoWeFeelIntent how do {age} {gender} feel in {state}
HowDoWeFeelIntent how do {age} {gender} feel in {city}
HowDoWeFeelIntent how do {age} {gender} in {country} feel
HowDoWeFeelIntent how do {age} {gender} in {state} feel
HowDoWeFeelIntent how do {age} {gender} in {city} feel
HowDoWeFeelIntent how do {age} {gender} feel in {condition} weather
HowDoWeFeelIntent how do {age} {gender} in {condition} weather feel
- In the Configuration tab select AWS Lambda ARN and choose North America, then paste in the ARN from your lambda function.
- Now we can go back to the Lambda function and bind it to this skill. Towards the top of the page, in small font, you should see an ID like
amzn1.echo-sdk-ams.app.{UniqueID}
Copy it. Back in the lamba function go to line 282 in the code and replace the placeholder id with the skill id
- For the Publishing Information tab select Social for the Category and Communication for the Sub Category. After some basic testing instructions and skill descriptions put "Alexa, ask we feel fine what are people saying?", "How do people feel in Tokyo?" and "What are happy people saying?" for the Example Phrases. Upload the icons from the GitHub repo or copy them from this page (I also highly recommend vectr for online vector graphics) and then it's on to Privacy.
- For Privacy and Compliance say No to everything and check the box for Export Compliance.
- Finally, you can hit that sweet, sweet Submit for Certification button. With any luck it will be listed on the store for all to enjoy.
Congratulations! Now your Alexa enabled device is a little more in touch with the human condition!
Comments