stevenleeg / geemusic

A bridge between Google Music and Amazon's Alexa
GNU General Public License v3.0
664 stars 181 forks source link

Unclear how to activate the skill #190

Closed pquerner closed 6 years ago

pquerner commented 6 years ago

I have added the skill to my amazon dev account, its saved and testing worked well. My setup runs on docker on a server which is accessable via internet. Testing the skill in the amazon alexa dev center worked nice (although text only), but now I'm not sure how to activate the skill. Could you please elaborate on that in the readme ?

pquerner commented 6 years ago

OK, you have to enable it in your Amazon Alexa app from your smartphone.

Once you have completed testing on your device, please complete the Description and
Publishing Information tab, then submit the skill for certification.

If it passes Amazon's testing and certification process, it will become available to Alexa end users.

The skill is available in "Skills > Your Skills" page of the Alexa App when you select 'Yes' above. You can then enable the skill and test its functionality on your device by asking Alexa, ask gee music

Sorry, I'm new to Smart Home stuff.

pquerner commented 6 years ago

I'm unable to start the skill. I tried it with enUS and deDE. When I ask "Alexa, ask gee music to play something from Linkin Park" ("frage gee music spiele linkin park") I get the response that my spotify account cant play this. (Because its a free account, but I dont want to switch to spotify...). Or "Alexa, start gee music" ("starte gee music" in german)

I really would love some help. If possible, by a german speaker or non US speaker who got it up and running and maybe can help a smart home newbie. (Non US speaker because that app seems to work fine for US, since my amazon echo is set to german)

fergyfresh commented 6 years ago

@pquerner are you perhaps in an Amazon Household? I am in one with my girlfriend and I needed to setup the dev account under her email and not mine because she was the owner of the household.

pquerner commented 6 years ago

@fergyfresh No, I live alone. The echo is connected to my Amazon account only.

fergyfresh commented 6 years ago

Thanks for the clarification, for anyone that has that issue see #160.

simonszu commented 6 years ago

Hi @pquerner, i am a german speaker, and, in fact, wrote the german translation part of GeeMusic (Just the yaml file and the sample utterances). Until now i am new to docker and struggling with https://github.com/stevenleeg/geemusic/issues/193 to get GeeMusic running at all. Maybe you can point me into the right direction, since you are more into docker, and then i can look how to help you with this issue.

Since your Echo wants to play music from Spotify, i think that Alexa doesn't really get what you are saying. You can test the interaction between Amazon and Geemusic when you enter your skill details page on developer.amazon.com and select "Test". There you can enter written text into your skill, and check what the results are. If this works in general, there has to be something with the language model. Check the metrics of your skill, is the skill accessed at all?

You didn't specify what the results of "Alexa, starte Gee Music" are. You should get presented a welcome text, but i suppose a problem with the german speech recognition engine at all: I suppose you said "Gee Music" like "Dschi-Mjusik"? The language model isn't trained very well for english words and pronounciation, try starting the skill with "Alexa, starte Gee Musik" and not "Alexa, starte Dschi Mjusic".

As far as i remember, the language toolkit has the ability to specify certain foreign words with a special tag, or even use IPA, but i am not as deep into this topic as i'd like to be.

pquerner commented 6 years ago

Hi @simonszu Thanks for getting back to me.

The written test works fine, therefore the connection to the server is running fine. (I also see the calls in my console within the docker container) I didnt check the metrics page until now. It shows 0 calls in total.

Maybe you could share a screenshot of your settings from the amazon developers page. I did get over that readme 5 times atleast, but maybe theres tiny bits which I did wrong. Better so a howto on youtube (for retards like me ^^).

"Alexa, starte Gee Musik" yields "Das weiß ich leider nicht." "Alexa, start gee music" yields a short sound I cant reconize. Probably means "I didnt understand you." ? "Alexa, starte geh musiek" yields "Meintest du Chill Musik?" (I think)

https://alexa.amazon.de doesnt say anything about those phrases above.

I also tried (Think I said this in here already) to exclusively use the enUS variant. But my accent really is in the way for this to proper work.

simonszu commented 6 years ago

Okay. First: I'm sorry for all the TOFU under my responses, I am currently contributing to this issue via mail.

This short sound is Alexa's reaction to an unexpected response, mostly unsuccessful HTTP queries, timeouts and unexpected skill results, generally: a simple exception handling. After this sound, a skill which can be in a distinct started state, like GeeMusic is stopped, think of it like an app which has crashed and needs to be restarted.

The setup of a skill in the alexa dashboard is quite a gambling session. This is a known fact to Amazon and they are constantly trying to make it better, but maybe you know, Amazon isn't very good at software.

Until I get deeper into detail tomorrow, I would suggest to completely remove the skill and start from scratch. There are language models trained in the background, and it can be that these models are trained the wrong way now. Neural networks are like black boxes, one does not simply know how they work internally.

I will look into this, but I am no friend of tutorial videos, maybe some screenshots with big red circles, they can be embedded in the readme as well.

On Sat, Mar 3, 2018, 22:43 Pascal Querner notifications@github.com wrote:

Hi @simonszu https://github.com/simonszu Thanks for getting back to me.

The written test works fine, therefore the connection to the server is running fine. (I also see the calls in my console within the docker container) I didnt check the metrics page until now. It shows 0 calls in total.

Maybe you could share a screenshot of your settings from the amazon developers page. I did get over that readme 5 times atleast, but maybe theres tiny bits which I did wrong. Better so a howto on youtube (for retards like me ^^).

"Alexa, starte Gee Musik" yields "Das weiß ich leider nicht." "Alexa, start gee music" yields a short sound I cant reconize. Probably means "I didnt understand you." ? "Alexa, starte geh musiek" yields "Meintest du Chill Musik?" (I think)

https://alexa.amazon.de doesnt say anything about those phrases above.

I also tried (Think I said this in here already) to exclusively use the enUS variant. But my accent really is in the way for this to proper work.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/stevenleeg/geemusic/issues/190#issuecomment-370182154, or mute the thread https://github.com/notifications/unsubscribe-auth/AAqxI8dU0rcCfE9LFtOeIwNbvpwBRNqPks5taw5zgaJpZM4SXafo .

-- Before printing this email, think if it is really needed.

simonszu commented 6 years ago

Well then. I have enabled the skill, was pretty straight forward.

Skill Information

Skill Type: Custom Language: German Application ID: Name: Gee Music Invocation Name: gee music Audio Player: Yes Video App: No Render Template: No

Interaction Model

Filled the 4 custom slot types like in the README, and the sample utterances. For the intent schema, have a look on PR https://github.com/stevenleeg/geemusic/pull/192

Configuration

Service Endpoint Type: HTTPS Default: https://my.domain.tld/alexa (the trailing /alexa is important) Provide geographical region endpoints? No Account Linking: No Permissions: All disabled

SSL Certificate

My development endpoint has a certificate from a trusted certificate authority -> I am using Letsencrypt with a non-wildcard cert (i heard they provide wildcards since some days now)

Test

This skill is enabled for testing on your account: Enabled


After this, the skill is instantly available on your Echo, you do not need to activate it in the Alexa app or similar. I can invoke it with "Alexa, starte Dschi-Mjusic" as well as "Alexa, starte Ge Musik". However, Alexa tends to fallback to the default music provider quite often and provides no feedback if she's using Gee Music or Spotify/Prime, so maybe i have to change the utterances and the responses to make the selected provider more explicit, like the default response when you instruct Alexa to play a radio, she says that this radio comes from amazon music.

pquerner commented 6 years ago

Thanks so far. I'm no in the "main" menu of that skill and can request songs and whatnot. However, when I try to request a song from "Linkin Park", I see this in the logs. (Debug=True)

11:17:09 web.1  | 172.17.0.1 - - [04/Mar/2018 11:17:09] "POST /alexa HTTP/1.1" 200 -
11:17:20 web.1  | --------------------------------------------------------------------------------
11:17:20 web.1  | DEBUG in selection [/geemusic/geemusic/intents/selection.py:164]:
11:17:20 web.1  | Fetching song None by None from None.
11:17:20 web.1  | --------------------------------------------------------------------------------
11:17:20 web.1  | 172.17.0.1 - - [04/Mar/2018 11:17:20] "POST /alexa HTTP/1.1" 500 -
11:17:20 web.1  | Traceback (most recent call last):
11:17:20 web.1  |   File "/usr/lib/python3.6/site-packages/flask/app.py", line 1997, in __call__
11:17:20 web.1  |     return self.wsgi_app(environ, start_response)
11:17:20 web.1  |   File "/usr/lib/python3.6/site-packages/flask/app.py", line 1985, in wsgi_app
11:17:20 web.1  |     response = self.handle_exception(e)
11:17:20 web.1  |   File "/usr/lib/python3.6/site-packages/flask/app.py", line 1540, in handle_exception
11:17:20 web.1  |     reraise(exc_type, exc_value, tb)
11:17:20 web.1  |   File "/usr/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
11:17:20 web.1  |     raise value
11:17:20 web.1  |   File "/usr/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
11:17:20 web.1  |     response = self.full_dispatch_request()
11:17:20 web.1  |   File "/usr/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
11:17:20 web.1  |     rv = self.handle_user_exception(e)
11:17:20 web.1  |   File "/usr/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
11:17:20 web.1  |     reraise(exc_type, exc_value, tb)
11:17:20 web.1  |   File "/usr/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
11:17:20 web.1  |     raise value
11:17:20 web.1  |   File "/usr/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
11:17:20 web.1  |     rv = self.dispatch_request()
11:17:20 web.1  |   File "/usr/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
11:17:20 web.1  |     return self.view_functions[rule.endpoint](**req.view_args)
11:17:20 web.1  |   File "/usr/lib/python3.6/site-packages/flask_ask/core.py", line 629, in _flask_view_func
11:17:20 web.1  |     result = self._map_intent_to_view_func(self.request.intent)()
11:17:20 web.1  |   File "/geemusic/geemusic/intents/selection.py", line 172, in play_song_radio
11:17:20 web.1  |     artist = api.get_artist(song['artist'])
11:17:20 web.1  | TypeError: 'bool' object is not subscriptable
11:17:20 web.1  | 172.17.0.1 - - [04/Mar/2018 11:17:20] "POST /alexa HTTP/1.1" 200 -
simonszu commented 6 years ago

That's interesting. I tried it with Linkin Park, to reproduce your error. "Alexa starte Gee Music" - "Willkommen bei Gee Music" - "Spiele Lieder von Linkin Park" - "Hier ist Musik von Linkin Park, die du magst"...and then music.

The skill, when started, has two states: One state when it waits actively for user input, e.g. right after starting. Then, the blue ring is still lighting, and you can pass commands without the "Alexa" keyword, and a second state where you have to actively interrupt the workflow, e.g. during playback, where you need to call the Echo with the "Alexa" keyword. During this state, GeeMusic is still active, but not listening to your input, so the blue ring is switched off. Maybe you messed this up?

I honestly have no idea why Amazon detects your utterance and calls GeeMusic's API correctly, but doesn't provide any data values.

pquerner commented 6 years ago
11:43:37 web.1  |       "type": "Standard"
11:43:37 web.1  |     },
11:43:37 web.1  |     "directives": [
11:43:37 web.1  |       {
11:43:37 web.1  |         "audioItem": {
11:43:37 web.1  |           "stream": {
11:43:37 web.1  |             "offsetInMilliseconds": 0,
11:43:37 web.1  |             "token": "0b9bf4ec-8ca9-4400-b6f3-e2bc6ce160fc",
11:43:37 web.1  |             "url": "http://alexa-geemusic.xxxxxxxx.de/alexa/stream/T7ctr6fblsay6cp2w4ttrofoiem"
11:43:37 web.1  |           }
11:43:37 web.1  |         },
11:43:37 web.1  |         "playBehavior": "REPLACE_ALL",
11:43:37 web.1  |         "type": "AudioPlayer.Play"
11:43:37 web.1  |       }
11:43:37 web.1  |     ],
11:43:37 web.1  |     "outputSpeech": {
11:43:37 web.1  |       "text": "Hier ist Musik von deinem pers\u00f6nlichen Radiosender.",
11:43:37 web.1  |       "type": "PlainText"
11:43:37 web.1  |     },
11:43:37 web.1  |     "shouldEndSession": true
11:43:37 web.1  |   },
11:43:37 web.1  |   "sessionAttributes": {},
11:43:37 web.1  |   "version": "1.0"

I see a HTTP call in here, not HTTPS. However, I have a working LE certificate on that subdomain. And I redirect all calls to the docker container. Its working fine in the test environment (I see https calls there), but not when I use the actual voice ?

Can you show me your vhost configuration maybe? This is mine currently: https://github.com/stevenleeg/geemusic/issues/151#issuecomment-369398390

simonszu commented 6 years ago

No problem, but i am using nginx. I don't know if all my directives are needed for geemusic, but i deploy my vhost configs with ansible, and therefore maybe something is redundant or not needed. https://pastebin.com/Df2tetcX

pquerner commented 6 years ago

OK, I'm terrible stupid. My APP_URL was pointing to http for no real reasons. Everything is working now. Sometimes it cant find stuff or results in a completely mistaken intent. (Ie. "Spiele das Album Immersion von Pendulum" -> "Du musst ein Lied zuerst mögen") but I'll get there.

Thank you simon. :+1:

simonszu commented 6 years ago

Sometimes it's the small things ;) You're welcome.