• 1
  • 166
  • 167
  • 168(current)
  • 169
  • 170
  • 173
Release Kanzi: Amazon Alexa skill for Kodi
Create mLab account and database
fill out codi config
uri mongodb
user/pass mongo db mongo db
proxy use =yes
Music warning =Yes
seems to koko alexa connected when i try to "alexa ask koko to play musik" answer "party mode playing" ore somthing but no sound on echo dot
Noch One who can Help ??
url from developer console looks like "https://proxy.lexigr.am/proxy?file=http://xxxxxx:[email protected]:8080/vfs//storage/music/Falco/Greatest Hits/02 Der Kommissar.mp3"
when put this into the firefox browser i get "Unauthorized"
I can only call that way
Question: Alexa ask koko play song xyz
Answer Playing xyz
But no music on Alexa

Who can help me here ?

Cloudwatch log:https://paste.kodi.tv/acebitetin
Cloudwatch error
json Input
log json output
You haven't stated but it's obvious that you've set up an alternate reverse-proxy server for your Kodi box.  I suspect that either it's not working properly or your Kodi box isn't wholly configured for remote access.  To check both, copy the entire URL from the output JSON you've posted and paste it into a browser.  If both are working, depending on your browser, either the song file should download or play on your computer.  If neither occurs, either the reverse proxy isn't working or Kodi isn't set up right to respond to rpc calls.

A couple of other points.  How have you set up authentication of your reverse proxy?  If it's name/password, which are you passing in your kodi.config file?  Have you looked at your kodi box setup to make sure that it's set up properly? so that it will include the kodi box username and password?  The URL you show passes the username and password to your reverse proxy, not to kodi.  You'll need to have your reverse proxy configured so that it will pass kodi's name and password on to the kodi box. UR

Another check:  Try accessing kodi's Chorus2 web interface by putting the reverse proxy URL and port into a browser, including name:[email protected] before the URL.  Does Chorus2 start?  If not, try putting the kodi box URL into the browser.  If it starts directly but not through the reverse proxy, you have a reverse proxy problem.  If the reverse proxy asks for name and password, it's not configured properly.

One other point.  If all of this works, try playing a song from the Chorus2 web interface in "local" rather than "kodi" mode.   Does the song play?  If the song seems to start but not play, and the song time counter stays at zero, it's likely there's a problem in the "sources.xml" file of your kodi box.  A direct reference to your music files needs to be included in the   "music" section of the sources files, as I show from my own (Raspberry pi) kodi box exemplies:

        <default pathversion="1"></default>
            <path pathversion="1">/media/pi/</path>

This is a reply to MichiKrem's 1/29 original question.  I noticed in your posting of the kodi.config file that you don't name an S3 or OwnCloud bucket for cache storage of Kodi library information.  If it's true that you haven't done either, this could be your problem.  In order for Alexa Kodi/Kanzi or Koko to work, Alexa needs to obtain information from your Kodi library.  In the absence of the cache, in which Kanzi/Koko will build various pieces of your library for rapid access, Kanzi/Koko must get them each time from the Kodi box.  This may be causing Kanzi/Koko timeouts.

You will need to set up the bucket ahead of time using either AWS S3, or your own internet-reachable cache.  If using AWS S3, you'll also need to use AWS IAM to set up Kodi user credentials.  In either case, Kanzi/Koko will populate the cache over time with JSON data identifying the URI's of your Kodi's media files
which will be added to the JSON RPG calls to your Kodi media libraries.

Thanks @RodinMe Your observation that Kanzi was using the user:[email protected] url format seems to have shed light on why I have an apparently working HTTPS to HTTP reverse proxy enabling access to the Kodi web-server, and yet Kanzi doesn't see it. Configured to use HTTP everything is working great, but I'd really rather be using HTTPS.

Does anybody know how to configure HA-Proxy under pfSense to pass such a user:password pair to an HTTP backend? Seems like really basic functionality, but I've yet to find out how to configure this.


I have more debug information.

HAProxy is reporting the following when Kanzi tries to connect:
fd[0007] OpenSSL error[0x14094418] ssl3_read_bytes: tlsv1 alert unknown ca

And the AWS Cloudwatch logs report the following. Any ideas as to what might be causing this?
SSLError: HTTPSConnectionPool(host='ABCDEFGH.com', port=443): Max retries exceeded with url: /jsonrpc (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))
Non-2xx from app: hdrs=['500 INTERNAL SERVER ERROR', [('Content-Type', 'text/html'), ('Content-Length', '291')]], body=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>
: AssertionError
Traceback (most recent call last):
File "/var/task/alexa.py", line 65, in lambda_handler
return ask.run_aws_lambda(event)
File "/var/task/flask_ask/core.py", line 633, in run_aws_lambda
raise AssertionError("Non-2xx from app: hdrs=, body=".format(headers, output))
AssertionError: Non-2xx from app: hdrs=['500 INTERNAL SERVER ERROR', [('Content-Type', 'text/html'), ('Content-Length', '291')]], body=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>
Hi All,
Been trying to set this up for 2 days, keeps hanging on Deploy skill, i believe i have followed instructions correctly, could i kindly request some assistance with below, not sure where I went wrong.

1. I have setup appropriate external access to kodi via dyndns host name and port
2. created user "kodi-alexa" in IAM with AmazonS3FullAccess & AdministratorAccess
3. Setup Amazon S3 bucket with full associated full access policy below to above user under bucket policy section
    "Version": "2012-10-17",
    "Id": "Policy1553677XXXXXX9",
    "Statement": [
            "Sid": "Stmt1553677XXXXX",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::XXXXXXX:user/kodi-alexa"
            "Action": "s3:*",
            "Resource": "arn:awsConfused3:::kodi-alexa-12345678"

4. setup skill as per instructions in guide and uploaded zip
5. left device id section untouched in config file as I cant get device ids as skill is not deployed. (not sure about this)

here is my config example with bold default edit outs:
Global configuration
# Currently supported languages: en, de, fr
language = en

# By default, if you ask to play media without specifying the type, the skill
# will search through the entire library to find a match.
# For example, if you ask, "Alexa, ask Kodi to play ninety nine red balloons,"
# the skill will search library items in the following order to find the song:
#   Movies -> Shows -> Artists -> Songs -> Albums
# If your library is really large, this can take some time to complete.  While
# it will eventually execute, Alexa may report that the skill timed out.  If
# this behavior bothers you, you can disable deep searches.
# When disabled, Alexa will simply provide help in the response directing you
# to issue a play command that includes the media type of the item.
deep_search = yes

# Limit number of items we add to playlists.
# Some requests will cause the skill to create a temporary playlist in Kodi
# before executing your command.  This operation is expensive in Kodi, so we
# provide the option here to limit the number of items added.
# The default is 100 to match Kodi's own 'party mode.'  Higher values will
# make these operations slower, but if your setup can handle it, you're free
# to set this to whatever you like.
# Set to an empty string for unlimited.
playlist_max_items = 100

# Search result limits for new (unwatched) Movies and Episodes.
# By default we ask kodi to return a max of 100 results per JSON request.
# Here you can set this figure to optimize the system for you.
# Results are always retrieved in order of newest episodes and movies first.
# Lower figures will produce faster results and limit them to only media that
# you've recently added to the library.
unwatched_shows_max_results     = 100
unwatched_episodes_max_results  = 100
unwatched_movies_max_results    = 100

# Set logging level.  Possible values are:
loglevel = INFO

# Log sensitive or personally identifying information.
# Disabling this prevents the skill from logging the target address for Kodi
# and your device IDs.
# It is enabled by default to make it easy for you to identify your Echo
# devices for mapping to specific instances of Kodi.
logsensitive = yes

# Global Alexa skill configuration
# Set skill_id to enable verification of requests by Flask-Ask.
skill_id = (left blank default)

# Maximum number of items to generate per slot.
# If the skill is failing to save, you may need to reduce this.  Conversely,
# if Alexa is having problems distinguishing your requests (executing the
# wrong Intent, for instance), you may need to increase this.
slot_items_max = 100

# Default parameters common to all Alexa devices and the web simulator
# The Kodi webserver only supports HTTP, but if you've set up a reverse HTTPS
# proxy you can change this to https.
scheme   = http
address  = myddnsdomain.com
port     = 2341
# If using a reverse proxy you might need to add an extra bit to the url
# before "jsonrpc" (don't use slashes before or after).
subpath  =
username = kodi
password = my password

# Caching of Kodi responses.
# Provide an Amazon S3 bucket or a directory name here and provide credentials
# for one of the cache backends below to enable.
cache_bucket =kodi-alexa-12345678

# Amazon S3 cache backend.
# Provide an AWS user key and key ID here to enable.
s3_cache_aws_access_key_id =AKIAJWORZXXXXXXXX
s3_cache_aws_secret_access_key =dbLi9YRS2XGJbDnHAQIXXXXXXXXXXXX

# ownCloud/nextCloud cache backend.
# Provide the base URL for your ownCloud server and a valid user and password
# combination to enable.
owncloud_cache_url =
owncloud_cache_user =
owncloud_cache_password =

# Read timeout -- how long to wait for responses from Kodi before giving up.
# Normally there is no need to change this.
read_timeout = 120

# For some commands, we don't care about the response from Kodi, so we send
# them "fire-and-forget."  If you've got a proxy server in the middle, though,
# it's possible the command might not make it to Kodi before the skill exits.
# If Alexa is telling you she has completed a command but it sometimes does
# not actually execute on Kodi, you may need to increase this.
read_timeout_async = 0.01

# Set shutdown to 'quit' if you'd like "Alexa, tell Kodi to shut down"
# to quit Kodi instead of shutting down the system.
shutdown =

# Your local time zone for responses that include absolute times.
# See https://en.wikipedia.org/wiki/List_of_tz...time_zones
# For example, if you are in the Eastern US time zone, you would use:
# timezone = US/Eastern
# Leave empty if you don't need or want absolute time responses.  An example
# is asking when the currently playing item will end.  If you have this
# defined, it will also tell you the wall-clock time when the item will
# conclude.
timezone = Australia/Sydney

# Setup MongoDB to handle playing music from Kodi to your Alexa device
# Must accept agreement saying I'm not liable for stolen information
# since your username and password for Kodi will be stored in plaintext
# in a database and will be transferred over the internet to a HTTPS
# proxy server for you to have this functionality.
# mongodb_uri will look like: `mongodb://user:[email protected]:port/database`
# If you're using alternative proxy from Heroku, alt_proxty looks like:
# `https://my-kodi-proxy.herokuapp.com/proxy?file=`

# Override default values by specifying them below for individual devices.
# The usual reason to do this is to associate a given Echo device with a
# particular instance of Kodi in your house, but you can override any of
# the other configuration variables from the DEFAULT section here too.
# Device IDs can be found in the skill server / lambda log. Below ids left defaulted

# living room dot
address = living-room-kodi

# kitchen echo
address = living-room-kodi

# kids room dot
address = kids-room-kodi

# office dot
address = office-kodi

# tap
address = living-room-kodi

Thank you kindly, any assistance with potential root causes would be greatly appreciated
I installed lexigram on npm 6.9.0 , under Linux (in qnap system)

I used
lexigram login --no-browser true
(because the browser login crashes)

I follow:
Please create a new profile or overwrite the existing profile.
and then
There is no AWS credential setup yet, do you want to continue the initialization? (Default: False) Yes

After i enter the correct Aws authorization Code, i get this error:

Please enter your Authorization Code:  xxxxxxxxxxxxxxxxxxxxxxxxx
Tokens fetched and recorded in ask-cli config.
The property "[email protected]" does not exist.
        fn = function () { throw arg; };

TypeError: Cannot use 'in' operator to search for 'expires_at' in undefined
    at new AccessToken (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/simple-oauth2/lib/client/access-token.js:20:22)
    at Object.createAccessToken [as create] (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/simple-oauth2/lib/client/access-token.js:37:12)
    at isTokenExpired (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/ask-cli/lib/utils/oauth-wrapper.js:72:35)
    at Object.tokenRefreshAndRead (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/ask-cli/lib/utils/oauth-wrapper.js:59:10)
    at Object.module.exports.requestWithUrl (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/ask-cli/lib/api/request-wrapper.js:37:18)
    at Object.module.exports.request (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/ask-cli/lib/api/request-wrapper.js:23:20)
    at Object.callListVendor (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/ask-cli/lib/api/api-wrapper.js:243:20)
    at Object.module.exports.setVendorId (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/ask-cli/lib/init/set-vendor.js:13:16)
    at lwa.login (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/ask-cli/lib/init/init.js:54:23)
    at OAuth.authorizationCode.getToken (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/ask-cli/lib/init/lwa.js:63:13)
    at tryCatcher (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/bluebird/js/main/util.js:26:23)
    at Promise.successAdapter (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/bluebird/js/main/nodeify.js:23:30)
    at Promise._settlePromiseAt (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/bluebird/js/main/promise.js:582:21)
    at Promise._settlePromises (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/bluebird/js/main/promise.js:700:14)
    at Async._drainQueue (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/bluebird/js/main/async.js:123:16)
    at Async._drainQueues (/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/overlay/2b67427589b152723e829dd0e21bce8a357012d97e57fe8ab6acc6db255c93b5/root/usr/local/lib/node_modules/lexigram-cli/node_modules/bluebird/js/main/async.js:133:10)

How can I solve?
It has probably been asked already, but I couldn't find it and I won't read 168 pages of technical issues.

When deploying the skill to Amazon using ask-cli it also pre-generates values for slots like "SHOW" or "MOVIES", etc. These slots contain content from my *current* kodi library. Are those values being refreshed periodically or only generated upon deployment? How do you deal with, say, adding a new TV show or another movie?

And to not only ask but also give back:
During installation I had two problems:
1. Do not block calls to "api.amazonalexa.com". I acidentally Pi-Holed this domain and I went through hell to find out, that I myself was to blame...
2. If you have your Kodi installation behind a reverse proxy using Nginx AND use AWS Lambda, like I do, add the configuration "proxy_ignore_client_abort on;" in your Nginx configuration (http://nginx.org/en/docs/http/ngx_http_p...ient_abort). AWS Lambda only fires requests and then doesn't give a damn anymore. Nginx doesn't like this and sends a "499" response back instead of "200" and doesn't forward anything to Kodi.


I just found this:
(2017-12-23, 19:54)jingai Wrote: The slots don't need to contain all items in your library. They are just a representative sample.

There is no need to add more or regenerate after adding new items unless you're having specific trouble with a new title being recognized.
Is this accurate?
Yes, it's accurate.
(2019-04-14, 16:23)jingai Wrote: Yes, it's accurate.

That's great! Thanks for answering!


I have a few questions (to anyone) before I try to set this skill up.

1) I have tried the other Alexa/Kodi skill, and whilst it works well enough, I found that generally it was just quicker/simpler to pick up the remote..
How is the response time (lag?) of this skill?

2) I'm still finding Alexa to be a bit hit and miss in terms of accuracy.
How accurate is this skill? do you find yourself repeating commands often?

3) After having installed this, do you find yourselves using it over the remote, and if so why?

BTW, this is in no way any form of trolling about this add-on - It's an awesome achievement, I just find that sometimes, the idea of something outweighs it's practicality...

I currently use Alexa and OpenHAB to control my Lights, Fans, and Aircons. This is especially useful when I'm away from home.
I haven't felt the need to add in my Tvs or Amps, or anything else for that matter.... and I'm just not sure that this would beat a remote....
Although I do like the idea of walking into a room and saying, "Kodi play BBC News", and the TV switching on to KODI playing that channel!

Trying to use Kanzi for the first time. Followed the instructions in the documentation for the most simple setup (Heroku with no additional init configuration besides username, password, address and port), and I am getting 'lexigram deploy kanzi' to run semi-successfully until the last step, "Deploy skill". Here it just continuously shows the spinning yellow line while stating " -> Deploying skill information". All other steps seem to have been performed correctly but I can't get past this step. Any ideas why this is happening and what I can do about it?
  • 1
  • 166
  • 167
  • 168(current)
  • 169
  • 170
  • 173

Logout Mark Read Team Forum Stats Members Help
Kanzi: Amazon Alexa skill for Kodi15
This forum uses Lukasz Tkacz MyBB addons.