I'm revisiting a skill I started making a little while ago, and now it's giving me an odd message when I try to open it.
"To use Alexa Adventure Game skill, a parent needs to give permission. To do that, I sent some information to the home screen of your Alexa App."
I assume the problem has something to do with parental permissions and I want to fix it. This skill worked the last time I used it.
This is something which will come up when you've ticked YES to the question "Is this skill directed to or does it target children under the age of 13?" on the Privacy & Compliance page under Distribution. As a result of this, your skill will be considered a "kid skill".
You only have to enable the use of Alexa kid skills on your account once, but the process will differ depending on if you are in the US or elsewhere.
If possible, the most straightforward thing would be to open the Alexa App (or the Alexa website) and follow the steps to enable kid skills. If you haven't configured your skill to display a card, Amazon suggest you can also go directly to their parental consent page to grant the appropriate permissions.
Lastly, one reason why this didn't show up last time you were working on your skill could be that Amazon changed there policy a few months back to now require specific enabling of kid skills.
Related
I am trying to create a simple survey skill in Amazon Alexa where Alexa asks the user a question and they respond in any manner they feel like (open-ended). For example, if Alexa asks "Do you cook?", a user may respond in many ways such as "Yes I do cook", "My son does the cooking" etc.
The issue I am getting is that the questions can have similar responses so when I create an utterance in the Alexa dev console they overlap (utterance conflicts) and I am redirected to the error handler. (note each question has its own intent)
Is there any other way I can go about creating a survey without using intents?
Can I capture the full user response to a slot?
The reason being I want to store the user's response in a database.
Unfortunately, Alexa Skills aren't designed to do Speech To Text.
When a user talks to a device, the request goes through multiple steps:
Automated Speech Recognition > It does Speech To Text internally
Natural Language Understanding (NLU) > Using Machine Learning, it will understand what the user want to do (Stop a skill, play music, switch on the light, ...)
Depending of the context, if the NLU understand that the user is trying to respond to your skill (the interaction model match what the user is saying), it will send a POST request to your skill. But it will not send you the Speech To Text.
Documentation
Although, the intent AMAZON.SearchQuery will do the job but you will have to use a prefix: My answer is {query} and not directly {query} because all requests will be redirected to this intent otherwise. It will not look like a good & smooth user experience.
I have two queries related to Alexa Skill -
I am using the Account Linking feature, But when I logged in with one account I am unable to login with another account, any idea? for more information on this please refer here
https://forums.developer.amazon.com/questions/233563/how-to-delinking-an-linked-account-from-my-alexa-s.html
For User Full Name I have created a custom Slot, but unable to fetch Exact Full Name spoken to Echo show device by the user, for example, Use speaks Danny Stone but Alexa device capture it as "Danny", Dannys tone", "Danni" etc.
Any help would be appreciated
For the name, do a two or three slot response pattern on that intent. First name can use Amazon's built in first name slot type. For the other(s), you'll need custom slots with lots of examples.
For unlinking an account, check out this option: https://developer.amazon.com/en-US/docs/alexa/account-linking/skill-activation-api.html#disable-and-unlink
I read your query on the other forum. I would suggest you clear the cache of your Alexa app if you are logging on to your phone. If it does not help then open an incognito browser and disable enable the skill and link the desired account.
Use custom AMAZON.FirstName intent or AMAZON.Person intent for the names. I am not sure that it will be able to recognize some tricky names.
I am developing an Alexa Skill, and before releasing the first version of it, I wanted to be sure that I can notify my users about new features.
How can I do this ? What are my options ?
I saw Alexa Proactive Event, but I'm not sure about how to use it and if it's the right choice.
Following options:
Visually
(of course who reads when using alexa ;-) )
alexa developer console -> distribution -> whats new
For my skills I also updated the "detailed description" with some mini release notes before this "whats new" text field existed.
Voice
You can check in your backend logic if your user uses the skill after your update.
Therefore you would need to save the time whenever a user uses your skill (of course you need the times before your update but a backend update is independent from your skill update with certification).
Now if a requests come in you check the lastUsage time and can send out your special update message.
Of course you could also do via a flag (flag all users which got the message) instead of lastUsageTime.
Will be helpfull for persisting this data (alreadyGotUpdate message flag or lastSkillUsageTime): https://developer.amazon.com/de/docs/alexa-skills-kit-sdk-for-nodejs/manage-attributes.html#persistenceadapter
I am trying to build a conversational skill in Amazon Alexa. Once I start my skill, how can I know what the user said for the second time when I set should_end_session as false?
How do you mean what the user said for the second time? Any response a user provides in a live session should match one of the utterances for your skill and those utterances are linked to intents.
What response are you trying to get from the user? Please provide more information.
I want to write a program that analyzes your fantasy baseball team and notifies you of recommended actions, possibly multiple times per day. The problem is, you aren't playing fantasy baseball on my site, you're playing on yahoo, or cbs, or espn, etc.
On the majority of these sites, fantasy teams and leagues are not public, so you must be logged in and a member of the league to see the teams in the league.
All that I need is the plain html for the team page on each of those sites to be sent to my server, where I can then parse and analyze the file and send user notifications.
The problem is that I need username/password combinations to easily get this data to my server when I need it, and I think there will be a lot of people who wouldn't want to entrust their yahoo/espn/cbs password to me.
I have come up with several possible ways to solve this problem:
The most obvious way is to ask for their credentials for the site on which their team is hosted. Then I could just programmatically log in and request the data I need. I'm guessing a number of people would be comfortable giving me their credentials, and a number of them not so much.
Write a desktop client, which the user then downloads. The client would require their credentials, but it could then basically do exactly the same thing that the server based version would do, log in, request the page, and send the page back to my server. The difference being that their password would never need to leave their desktop. Their computer would need to be on, and this program running for this method to work.
Write browser add-ons that navigate to the page I need, use the cookie that is saved from a previous login to login to the site, and send the page back to my server. This doesn't require my software to ever ask for their password, but if the cookie expires I am hosed, and I don't know much about browser add-ons besides.
I'm sure there are other options, but these are what I've come up with so far.
I have two questions:
1. What are the other possibilities for this type of task?
2. Am I over-estimating people's reluctance to give me their yahoo (for example) password? Is option (1) above the obvious choice?
It was suggested in the comments that I try yahoo pipes, and that looked like a promising suggestion so I explored it a bit. Having looked now at this, I don't think that is an option. So, it looks like I'll be going with option 1.
This is a problem I grappled with a couple of years ago when I wanted to do the same thing. Our site is http://benchcoach.com and the options we were considering were the following:
Original we considered getting the user's credentials and login. We would then log in and scrape their league and team info. The problem there is that after reading several of the various terms of service, this would definitely be violating the terms of service. On top of this, Yahoo! was definitely one of the sites we were considering and their users have email (where we could get access to sensitive data), and Yahoo! wallet. In addition, it would be pretty trivial for Yahoo/ESPN/CBS to block our programmatic logins by IP Address.
The solution we settled on (not 100% happy but it does seem to work) was asking our users to install a bookmarklet (like delicious, digg or reddit) which would post the current html page to our servers, where we could parse the data and load our database. If they were still logged into their Yahoo/ESPN/CBS account, we would direct them directly to the pages, otherwise, those sites would prompt for authentication. Clicking the bookmarklet once more, would post the page to our servers.
The pros of this approach was that we never collected anyone's credentials so any concern of security would have been alleviated. Secondly, it would make it impossible for Yahoo/ESPN/CBS to block access to our service since we would never be connecting directly to their servers but rather the user's browser would be posting the contents of their browser to our server.
The problems with this is that it takes 2 clicks to post a page to our site. For head to head leagues, we needed 3-4 pages so it would take our user 6-8 clicks to sync their league to our servers. We're still looking at options for this.
One important note is that I ran into the product manager of the Yahoo Fantasy Football site at a conference a year ago. We talked about how we were getting the Yahoo data, and he confirmed that getting credentials would violate their TOS and they may stop us. While I don't think they would have, it would have made it hard to invest time and energy to develop this only to have them block our site and pissing of users by closing their accounts.
A potentially more complicated answer could possibly be done with (for example) yahoo pipes.
Hypothetically, you create a pipe which prompts the user for their credentials and provides them with a url which contains their scraped data. They enter this URL in their site, and never have to provide their credentials directly. Even better, for the security-conscious, it would be possible to examine what the pipe was actually doing before entering any information.
The downside would be increased complexity (as well as you'd have to write and maintain the pipe). Having said that, you could provide a link directly to the published pipe from your site, to make things as easy as possible.
Option 1 is the obvious choice. People who trust your site will provide the details. There is no other way you can login to other site while screen scraping.