Alexa Smart Home Skill not working since 14-01-2026

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>"
    }
  }
}

I’m only experiencing hiccups, but they do seem to be more prevalent than usual. I’ll try turning something on/off using Alexa, it won’t work. Then I’ll use Siri, it works. Then I’ll use Alexa again and it will work. Strange… I haven’t checked AWS for any errors with the skill, but I will if more people report having issues.

I did the hard way to create a fully new Skill. Even with the new Skill I have the same issue. Testing it in dev console.

When I wanna enable the SKILL I get message:

“Unable to link the skill at this time”

I can’t point to where this issue is coming from.

The text Just a moment… in the error is so unknown for me.

Without the LONG_ACCESS_TOKEN I see this error:

Status: Succeeded
Test Event Name: Discovery

Response:
{
  "event": {
    "payload": {
      "type": "INVALID_REQUEST",
      "message": "Authentication token is required"
    }
  }
}

The area below shows the last 4 KB of the execution log.

Function Logs:
START RequestId: b1972ebf-8052-4265-994e-54d52db449aa Version: $LATEST
[INFO]	2026-01-15T15:01:48.309Z	b1972ebf-8052-4265-994e-54d52db449aa	Processing Alexa request
2026-01-15 15:01:48,309 - HomeAssistant-SmartHome - INFO - [lambda_function.py:61] - Processing Alexa request
2026-01-15 15:01:48,309 - HomeAssistant-SmartHome - DEBUG - [lambda_function.py:62] - Event payload: {
"directive": {
"header": {
"namespace": "Alexa.Discovery",
"name": "Discover",
"payloadVersion": "3",
"messageId": "1bd5d003-31b9-476f-ad03-71d471922820"
},
"payload": {
"scope": {
"type": "BearerToken"
}
}
}
}
[DEBUG]	2026-01-15T15:01:48.309Z	b1972ebf-8052-4265-994e-54d52db449aa	Event payload: {
  "directive": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "Discover",
      "payloadVersion": "3",
      "messageId": "1bd5d003-31b9-476f-ad03-71d471922820"
    },
    "payload": {
      "scope": {
        "type": "BearerToken"
      }
    }
  }
}
2026-01-15 15:01:48,310 - HomeAssistant-SmartHome - DEBUG - [lambda_function.py:70] - Base URL: https://ha.mydomain.com
[DEBUG]	2026-01-15T15:01:48.310Z	b1972ebf-8052-4265-994e-54d52db449aa	Base URL: https://ha.mydomain.com
2026-01-15 15:01:48,310 - HomeAssistant-SmartHome - DEBUG - [lambda_function.py:101] - Token not found in request, using LONG_LIVED_ACCESS_TOKEN from environment
[DEBUG]	2026-01-15T15:01:48.310Z	b1972ebf-8052-4265-994e-54d52db449aa	Token not found in request, using LONG_LIVED_ACCESS_TOKEN from environment
2026-01-15 15:01:48,310 - HomeAssistant-SmartHome - ERROR - [lambda_function.py:105] - No authentication token available
[ERROR]	2026-01-15T15:01:48.310Z	b1972ebf-8052-4265-994e-54d52db449aa	No authentication token available
[ERROR]	2026-01-15T15:01:48.310Z	b1972ebf-8052-4265-994e-54d52db449aa	Error processing request: Authentication token is required
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 106, in lambda_handler
    raise ValueError('Authentication token is required')
ValueError: Authentication token is required
2026-01-15 15:01:48,310 - HomeAssistant-SmartHome - ERROR - [lambda_function.py:149] - Error processing request: Authentication token is required
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 106, in lambda_handler
raise ValueError('Authentication token is required')
ValueError: Authentication token is required
END RequestId: b1972ebf-8052-4265-994e-54d52db449aa
REPORT RequestId: b1972ebf-8052-4265-994e-54d52db449aa	Duration: 101.45 ms	Billed Duration: 250 ms	Memory Size: 128 MB	Max Memory Used: 49 MB	Init Duration: 148.14 ms

Request ID: b1972ebf-8052-4265-994e-54d52db449aa

Did a second test. now subdomain direct to my Router. this is working.
Before everything was running behind Cloudflare Zero Trust.

I think there is the issue going on…

Issue solved!
yesterday turned on AI Labyrinth and Bot fight mode in Cloudflare. Disabled both and now everything is back again