Hey All,
Since yesterday my Smart Home Skill is not working anymore.
Does someone have same issue?
I used this lambda_function.py:
"""
Copyright 2019 Jason Hu <awaregit at gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""
import os
import json
import logging
import urllib3
_debug = bool(os.environ.get('DEBUG'))
_logger = logging.getLogger('HomeAssistant-SmartHome')
_logger.setLevel(logging.DEBUG if _debug else logging.INFO)
def lambda_handler(event, context):
"""Handle incoming Alexa directive."""
_logger.debug('Event: %s', event)
base_url = os.environ.get('BASE_URL')
assert base_url is not None, 'Please set BASE_URL environment variable'
base_url = base_url.strip("/")
directive = event.get('directive')
assert directive is not None, 'Malformatted request - missing directive'
assert directive.get('header', {}).get('payloadVersion') == '3', \
'Only support payloadVersion == 3'
scope = directive.get('endpoint', {}).get('scope')
if scope is None:
# token is in grantee for Linking directive
scope = directive.get('payload', {}).get('grantee')
if scope is None:
# token is in payload for Discovery directive
scope = directive.get('payload', {}).get('scope')
assert scope is not None, 'Malformatted request - missing endpoint.scope'
assert scope.get('type') == 'BearerToken', 'Only support BearerToken'
token = scope.get('token')
if token is None and _debug:
token = os.environ.get('LONG_LIVED_ACCESS_TOKEN') # only for debug purpose
verify_ssl = not bool(os.environ.get('NOT_VERIFY_SSL'))
http = urllib3.PoolManager(
cert_reqs='CERT_REQUIRED' if verify_ssl else 'CERT_NONE',
timeout=urllib3.Timeout(connect=2.0, read=10.0)
)
response = http.request(
'POST',
'{}/api/alexa/smart_home'.format(base_url),
headers={
'Authorization': 'Bearer {}'.format(token),
'Content-Type': 'application/json',
},
body=json.dumps(event).encode('utf-8'),
)
if response.status >= 400:
return {
'event': {
'payload': {
'type': 'INVALID_AUTHORIZATION_CREDENTIAL'
if response.status in (401, 403) else 'INTERNAL_ERROR',
'message': response.data.decode("utf-8"),
}
}
}
_logger.debug('Response: %s', response.data.decode("utf-8"))
return json.loads(response.data.decode('utf-8'))
Within AWS I get this error when I do a test:
{
"event": {
"payload": {
"type": "INVALID_AUTHORIZATION_CREDENTIAL",
"message": "<!DOCTYPE html><html lang=\"en-US\"><head><title>Just a moment...</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"><meta name=\"robots\" content=\"noindex,nofollow\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><style>*{box-sizing:border-box;margin:0;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%;color:#313131;font-family:system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"}body{display:flex;flex-direction:column;height:100vh;min-height:100vh}.main-content{margin:8rem auto;padding-left:1.5rem;max-width:60rem}@media (width <= 720px){.main-content{margin-top:4rem}}.h2{line-height:2.25rem;font-size:1.5rem;font-weight:500}@media (width <= 720px){.h2{line-height:1.5rem;font-size:1.25rem}}#challenge-error-text{background-image:url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0IyMEYwMyIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjQjIwRjAzIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+\");background-repeat:no-repeat;background-size:contain;padding-left:34px}@media (prefers-color-scheme: dark){body{background-color:#222;color:#d9d9d9}}</style><meta http-equiv=\"refresh\" content=\"360\"></head><body><div class=\"main-wrapper\" role=\"main\"><div class=\"main-content\"><noscript><div class=\"h2\"><span id=\"challenge-error-text\">Enable JavaScript and cookies to continue</span></div></noscript></div></div><script>(function(){window._cf_chl_opt = {cvId: '3',cZone: 'ha.hassio.nl',cType: 'managed',cRay: '9be5e5800c44d739',cH: 'VsPylRm0uTiuTsWlM8A5FnABS_brtfRyvkoIDemwAx0-1768485596-1.2.1.1-YF5WvOYqhMv61c1bLFeGTEww1J2Xg7uErhvauf6a2B75cd8LHTswQXhOMwrI563Y',cUPMDTk:\"\\/api\\/alexa\\/smart_home?__cf_chl_tk=0YS.jqrzwSDzmumyPfUu832sVapq3j0ildbe.2b8zqI-1768485596-1.0.1.1-95Aohj0JSALFds7Vb_SXZAK5jr0WMJ4T5P6Qs3x0WWM\",cFPWv: 'b',cITimeS: '1768485596',cTplC:0,cTplV:5,cTplB: '0',fa:\"\\/api\\/alexa\\/smart_home?__cf_chl_f_tk=0YS.jqrzwSDzmumyPfUu832sVapq3j0ildbe.2b8zqI-1768485596-1.0.1.1-95Aohj0JSALFds7Vb_SXZAK5jr0WMJ4T5P6Qs3x0WWM\",md: 'TZbi8VsOiAZVfFLx_KHyxmShfWC8fz6HKTo7YBNaE14-1768485596-1.2.1.1-JlhoMllCuHGRG1I0jS6nkEh8kKSfnFqjSDuqyWt03BjwIux1r_eF1SfTgf8KRm_CXsYgUsWWVSYYPUwHTIMF.qDLZu5eM0ng0P.t7YYkutI_fK8pcfk5lpLZ_0R_eEuUr7VgBb6fKJoqL4zXm0Wrhkf4eKwih.SFxvbROlI4el05JuCdIFTLSc893oQhlE8nVbUjXBVtdomIutuMThJUAKZWWVkUHjiw.NKVXLlO9fL27PwYtF2DHv2u5J_4TIVYvWGmfrQFx8vx8VHU.GChzMuhUvNYsZ633aXYieqNs7KpgbwUHHUftm67i1B8nnekvVlBoGwYt9_RXNJEA8G2HrApOY0h4TbMmeOHbWLdO5hNnYlaM.Fr36FsyUqq_eOHxVU.a.Rick0QNmvtABLTg5zX4SvXFfW4EF.TUlpmesLgLSS6D9KR9ORgT2VSTBns_nv.vRcG2b8sqwFPRVyau.unhUdHfzp4BW6OMx.1KqnCXv2cp0AIQn.RaxZk3Wx3vMW2_5oT.lJI0.bdJ2CISSP1Mmupxr6QKdXqN9gt1nRwLuvNKfdTuNUzcm6NYfLRyrUmglsWHi_wqbGG0loXq1eLEQozzDpslg2Z8G.olC2pEvipo_MrGg.peZo.VI2fr50fkq28vkBgpQHrTP5RbXhQTD0KimHzAQ7OsnYo6_t5VNnpd661x8eStVBO_3Vc4Ztmm_tmOX_qmyJrmZYHeRZSZ9XLthKw.ySYqXbRYmBUDDsFCa.LoRYznG64js9MKG10l7mA88NKj6sICYBfQfDGg._Ap.5nGDhLZOQBSHoqnj4n5TifUtF3aAnBACbuZoniahaWoX40zGo5zKPawg',mdrd: 'Bh2Ar.l0ol9zdfhVDQjtmp0O8C5QLlAW05uoWLkFx80-1768485596-1.2.1.1-uzQTda6gdy0ew9BRjDHAV_UwEFMXvk6.V_lLG5lNy2tgHhVPltlqBwDt3tBswCbqOD5T0aP0jqBzZ3QPqjwV8jk.W0Dd3bNpzOuC4oo2_LwCAQTa2LUgMvL.AvkhjXQfw7CY1EACtv44PqC0TSzxnABm8mCWCJpwH5yNz0o5SHvIB84dX4mZzzWrDJhXqoH_CvPlg35sxHejRXI9U3.d5yPTN7UXw_TcCsEX_fN_4jX31pz8h44phAhYSnyoOvIK29HxE5K.9EpcYg6sBffKqjAV.ICMsc4LN.e4TJWnPLLE49o4KG3H2FGc5hZPjwow0ZA3OvFIKbXr3mNDWc9m18IPXvfPgTmmZH.DZjjdZmsUfjySMJJ0ZkEq8Ky5wOf8RYs_3HrQrw.QwCsmlsBtLl_.SA5taIz6SQFVDzDfQ0tprRxY0IaFRyzl4yG_.0L5A7RHVMqabDUEe4NmpMPHDL_JYz1a2.mwNtJfXkW7vnwWsCcaTHDLORnCntSLGppyR8nw5lF4H_DpiBmYqw4FRbleVSPua2PQEZ2..ICRyuHt80OldX_Z0Rk3xMp3ZIT9HwWytCBH0D43kQrqAHjXJcVxcfqC9gvNtILFx25NJqJ3axx6oSVJNUXXV7eU792n6Nib5Xhv1OwoQtfteQ7a2jiwjTlmYIsKUrQ255uXxoqF_ueyFXDv2jxdnX0MR25qSiGLwUZWm6BV3SRqENraJFFN4r2dFOnX0jTgYJPJH_dJDoMJOtVOVTBTyx92wtEBwvJMLePCJmLmoMwi.YrA.ORz_JT_d4FZ65H4E1Kb0HoqvcnjkH0CAdL2EiSqz9TtDweaG4tFMaqrFkAbtVMqh6FHwXCHxbkCsIhutotq0Ar1ODyUuNJQZOW3sOdDgy3Shn7TVrl75U69h5iIpQVJzFSiF47QuQ0ukFEzxPI4Y3EH2jDtqjXzHiuqPyGmdRpQncJ.G4bo8jz6VR_LxpbVx3ZDwI15ya1Yco7r9tx3EO14pGEAdB.lpTjNMKduVEa6yK97v1RCY.i_9Ii_iZyRgrKWARJIt0ftfeTrl9kj7RTz40Up19m1XFTGXaBO34KEQk7UE3bKsXjzsqrFXX08VeurqpZMKhss..w7LVuTLmd5I.Nw_XslwP_4MMqbyU4iVldFjlq7b_67E6ip6KRh3yUssen3TaCpWdGRcJrfkwV9yegrf.GAdCpkau56cmJfwMymcV4lp2stRKFMP9grr3d0BtM35TZAOsp9R7ogLecUFxeUsXILOLyEESROlT6fuUpL5RKXni2.DWHh_q8V92t7A2geQZ9yYYb3vsk__2p3y4oofjYhXY6dxmSfUJcwzJoRPWRk4TUrZjLsWNUlhjD20vn.7bFWkzYvvITRhjji22OGLrDGv_y4GT_Y_r68x.YTuHY9AjWPJOoStNJS2e7XOVZTsBTBwQiSjhAssEv4M.rtx7EGfQ4hwcXKjih9tlCpcjkErOozCKR0HdFFsrDoisBSMAflBfhrapD6T09EjfWv9M7PwiTI8fjBWNYNzTiOgNoFwly8tyHzkNw3afL6iBkdPL.H9fH9hZ5Q_gkeHZvZC5ccFWGEUwFpRd3543P.qVarMRxzoZlGEixozO5V.HUhRdgzioSNjwBUer1Yrj74RmZJ8Q8M8_X3jlnUzC5yBjLQWaZ7bq96VnvfXfo88V9Z58V1Yqhb6L6m1SLNDdy7ZjfvtsbfNxd_45O8wfqTBLF5FbgZuTv4kR_UfapGfCMc5SK_gh3POSl17hYUpwUNj9TxCC1sX4T6NTmTqF5ZCqM1r3d25g3dX9sgZc2I7pkeDLdU.EwSDk.yxjaKNLwrJlTobCIkVkUdrCFZEx7_BesjTrFkj2yDjCL5GfyhNjMsmc6ixXSOq3w5c6iF0ysk.igvNuStPh3fXHITlj5I1m70WP6EC.853.wkv6l0azonWk_N56As0SZFnujMmeJvy1SsB571EC7ZUZdTWTC_Mj3.3SZG8IrktlyPQteQ1xVv.RnqefUy8pF30eFnenGmpBTIdGPVdFpohUf.Zkhr8KliioFKp6rtDy6qOqekCX1uoQkNtokVdDFNtqpe5l.VogOZHtiNUIJUVmvmyZhuSUzZseYWP.2v7zf10gxZJ1mOdah4zQIpzvQ3TZFcKR41a8PGNpwlB8KUu0FhMS0ClJqqKYlvBxL3XsR1yFQYQ47cra8d7K4Rt1DKmEW.y5KHFpQU_GP7.K6FpCQ3A5sbu2q6JOw694SGARohsd8tJKsALFznzxfqiuin69s0taa6NdGR54IbkvychmXtKPoyMXk7MyqfV9BzddsHUNTzVRhHnp.5PFp5lFqhZbWOKuWIefYk1Nq2xU.ObGRwG1kVvPtYY0tyalvT9q1MgBa.a.UaRUaBXx5GL7OoEAEG.XH9scV0i.5.5bqC0St5.0wmuLoKpyAN3hdk7AeJWjLJTgiVM.Y9OxdXGkd0fxMXTK6EUD5uF9TgbJlUGI2Bt_LeNrNZKEmcje1Cg1xGPHuHcnfkAfdW8sAkG8hpknd0NxSPED6bfvQl0x7v94XrQsZty.FqX0jo7l2MYet1bZTID8akH6s_stMaxyf4Bg7Swwo0jfHZpTFxvX8EBQQqRuVaqxSJgmryYS5kuaMPXrklDzXYbzoQUTusIFCDTxToazHmNIE3APl1hvK7zt6BLwJWeJ2Ydp8f5E_xCkfGwTYyw.XUOjhfco2I4FQzENUZpL0dkmSww9LnKOYActDxXTpS37QQTfi97z2rR_Q5F2l2np9rnh1uAeFdY5kuJCv.J9whWpfpTbpu6ABQaY24F6b_Z2zRdFVEouZTDVHrxA',};var a = document.createElement('script');a.src = '/cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?ray=9be5e5800c44d739';window._cf_chl_opt.cOgUHash = location.hash === '' && location.href.indexOf('#') !== -1 ? '#' : location.hash;window._cf_chl_opt.cOgUQuery = location.search === '' && location.href.slice(0, location.href.length - window._cf_chl_opt.cOgUHash.length).indexOf('?') !== -1 ? '?' : location.search;if (window.history && window.history.replaceState) {var ogU = location.pathname + window._cf_chl_opt.cOgUQuery + window._cf_chl_opt.cOgUHash;history.replaceState(null, null,\"\\/api\\/alexa\\/smart_home?__cf_chl_rt_tk=0YS.jqrzwSDzmumyPfUu832sVapq3j0ildbe.2b8zqI-1768485596-1.0.1.1-95Aohj0JSALFds7Vb_SXZAK5jr0WMJ4T5P6Qs3x0WWM\"+ window._cf_chl_opt.cOgUHash);a.onload = function() {history.replaceState(null, null, ogU);}}document.getElementsByTagName('head')[0].appendChild(a);}());</script></body></html>"
}
}
}