Explorar o código

alexa事件网关api

lang %!s(int64=4) %!d(string=hai) anos
pai
achega
c1b786a6ef
Modificáronse 1 ficheiros con 91 adicións e 65 borrados
  1. 91 65
      controller/deviceStatus.py

+ 91 - 65
controller/deviceStatus.py

@@ -114,7 +114,7 @@ class deviceStatus(TemplateView):
         uid_nick = request_dict.get("uid_nick", '')
 
         logger = logging.getLogger('django')
-        logger.info('in_my_api_updateOrAdd------------------')
+        logger.info('class:deviceStatus-------function:addOrUpdate------------------')
         logger.info(UID)
         logger.info(userID)
         logger.info(uid_nick)
@@ -137,74 +137,73 @@ class deviceStatus(TemplateView):
                 alexAuth.update(
                     access_token = res['access_token'],
                     refresh_token = res['refresh_token'],
-                    expiresTime = now_time + 3200,
+                    expiresTime = now_time + 3000,
                     updTime = now_time,
                 )
-                access_token = res['access_token'],
+                access_token = res['access_token']
             else:
                 return JsonResponse({'code':102,'msg':'get refresh_token fail'})
+
         api_uri = 'https://api.amazonalexa.com/v3/events'
-        messageId = str(uuid.uuid4())
-        access_token = access_token
-        bearer_access_token = 'Bearer {access_token}'.format(access_token=access_token)
-        headers =  {'content-type': "application/json", 'Authorization': bearer_access_token}
-        payload = {
+        messageId = str(uuid.uuid4()).strip()
+        bearer_access_token = "Bearer {access_token}".format(access_token=access_token)
+        headers =  {"content-type": "application/json", "Authorization": bearer_access_token}
+        payload_json = {
             "event": {
                 "header": {
                     "namespace": "Alexa.Discovery",
                     "name": "AddOrUpdateReport",
                     "payloadVersion": "3",
-                    "messageId": messageId
+                    "messageId": messageId,
                 },
                 "payload": {
-                    "endpoints": {
-                        "endpointId": UID,
-                        "manufacturerName": 'zosi smart',
-                        "modelName": 'P1425-LE',
-                        "friendlyName": uid_nick,
-                        "description": 'Camera connected via zosi smart',
-                        "displayCategories": ['CAMERA'],
-                        "cookie": {},
-                        "capabilities": [
-                            {
-                                "type": 'AlexaInterface',
-                                "interface": 'Alexa.CameraStreamController',
-                                "version": '3',
-                                "cameraStreamConfigurations": [
-                                    {
-                                        "protocols": ['RTSP'],
-                                        "resolutions": [{'width': 1280, 'height': 720}],
-                                        "authorizationTypes": ['NONE'],
-                                        "videoCodecs": ['H264'],
-                                        "audioCodecs": ['ACC']
-                                    }]
-                            },
-                            # {
-                            #     "type": 'AlexaInterface',
-                            #     "interface": 'Alexa.MediaMetadata',
-                            #     "version": '3',
-                            #     "proactivelyReported": True,
-                            #     # "retrievable": True
-                            #
-                            # }
-                        ]
+                    "endpoints": [
+                        {
+                            "endpointId": UID,
+                            "manufacturerName": "zosi smart",
+                            "modelName": "P1425-LE",
+                            "friendlyName": uid_nick,
+                            "description": "Camera connected via zosi smart",
+                            "displayCategories": ["CAMERA"],
+                            "capabilities": [
+                                {
+                                    "type": "AlexaInterface",
+                                    "interface": "Alexa.CameraStreamController",
+                                    "version": "3",
+                                    "cameraStreamConfigurations": [
+                                        {
+                                            "protocols": ["RTSP"],
+                                            "resolutions": [{"width": 1280, "height": 720}],
+                                            "authorizationTypes": ["NONE"],
+                                            "videoCodecs": ["H264"],
+                                            "audioCodecs": ["ACC"],
+                                        }
+                                    ],
+                                }
+                            ],
+                        }
+                    ],
+                    "scope": {
+                        "type": "BearerToken",
+                        "token": 'sdf',
                     },
-                    'scope': {
-                        'type': 'BearerToken',
-                        'token': access_token
-                    }
-                }
+                },
             }
         }
-        response = requests.post(api_uri, payload, headers)
-        request_json = response.json()
-        return JsonResponse({'res': request_json})
+
+        response = requests.post(api_uri, json=payload_json, headers=headers)
+        logger.info('--------addOrUpdate_response')
+        logger.info(response)
+        return JsonResponse({'res':'success'})
+
+
+        # return json.dumps('test',indent=4,sort_keys=True,ensure_ascii=False)   #格式化返回内容
 
     def delete(self,request_dict, response):
         UID = request_dict.get("UID", '')
         userID = request_dict.get("userID", '')
         logger = logging.getLogger('django')
-        logger.info('in_my_api_delete------------------')
+        logger.info('class:deviceStatus-------function:delete------------------')
         logger.info(UID)
         logger.info(userID)
         if UID == '':
@@ -226,35 +225,47 @@ class deviceStatus(TemplateView):
                 alexAuth.update(
                     access_token = res['access_token'],
                     refresh_token = res['refresh_token'],
-                    expiresTime = now_time + 3200,
+                    expiresTime = now_time + 300,
                     updTime = now_time,
                 )
-                access_token = res['access_token'],
+                access_token = res['access_token']
             else:
                 return JsonResponse({'code':102,'msg':'get refresh_token fail'})
         messageId = str(uuid.uuid4())
         headers = {
-            'Authorization': "Bearer " + access_token,
-            'Content-Type': "application/json;charset=UTF-8",
-            'Cache-Control': "no-cache"
+            "Authorization": "Bearer " + access_token,
+            "Content-Type": "application/json;charset=UTF-8",
+            "Cache-Control": "no-cache"
         }
+
         payload = {
-            'endpoints': [
-                {
-                    'endpointId': UID
+            "event": {
+                "header": {
+                    "namespace": "Alexa.Discovery",
+                    "name": "DeleteReport",
+                    "messageId": messageId,
+                    "payloadVersion": "3"
+                },
+                "payload": {
+                    "endpoints": [
+                        {
+                            "endpointId": UID
+                        }
+                    ],
+                    "scope": {
+                        "type": "BearerToken",
+                        "token": access_token
+                    }
                 }
-            ],
-            "scope": {
-                "type": "BearerToken",
-                "token": access_token
             }
         }
-        # return JsonResponse({'res': headers})
+        # return JsonResponse({"res": headers})
 
         api_uri = 'https://api.amazonalexa.com/v3/events'
-        response = requests.post(api_uri, payload, headers)
-        request_json = response.json()
-        return JsonResponse({'res': request_json})
+        response = requests.post(api_uri, json=payload, headers=headers)
+        logger.info('--------delete_response')
+        logger.info(response)
+        return JsonResponse({'res':'success'})
 
 
     def getRefreshToken(self,refresh_token):
@@ -275,6 +286,21 @@ class deviceStatus(TemplateView):
 
 
 
+#请求alexa事件网关接口失败错误码
+'''
+400 Bad Request	INVALID_REQUEST_EXCEPTION	消息无效,可能是因为缺少字段、不正确的值或格式错误的 JSON。根据文档检查邮件以验证邮件是否包含所有必需的字段。
+401 Unauthorized	INVALID_ACCESS_TOKEN_EXCEPTION	访问令牌无效,因为它已过期或格式错误。刷新令牌并重试请求。如果用户禁用您的技能,这也会使访问令牌失效。这意味着用户已吊销授权,您可以停止为他们发送更改报告。
+403 Forbidden	SKILL_NEVER_ENABLED_EXCEPTION	请确保将事件发送到正确的区域终结点。例如,北美中的事件应发送到北美终结点。
+403 Forbidden	INSUFFICIENT_PERMISSION_EXCEPTION	令牌没有所需的权限。确保该技能具有发送 Alexa 事件的权限。请参阅异步消息身份验证的步骤。
+404 Not Found	SKILL_NOT_FOUND_EXCEPTION	找不到与此令牌关联的技能 ID。当技能处于不同阶段(如认证)时生成用户的访问令牌时,将发生此错误。尝试禁用并重新启用此用户的技能。
+413 Payload Too Large	REQUEST_ENTITY_TOO_LARGE_EXCEPTION	事件有效负载的大小太大。请求中允许的最大终结点数为 300。以较小的有效负载发送邮件。
+429 Too Many Requests	THROTTLING_EXCEPTION	请求数过高。重新发送消息最多三次,每次发送尝试之间至少有一秒的间隔。
+500 Internal Server Error	INTERNAL_SERVICE_EXCEPTION	Alexa 发生错误,无法处理该消息。重新发送消息最多三次,每次发送尝试之间至少有一秒的间隔。如果问题仍然存在,请联系亚马逊支持。
+503 Service Unavailable	SERVICE_UNAVAILABLE_EXCEPTION	亚历克萨不能接受这条信息。重新发送消息最多三次,每次尝试之间至少有一秒的间隔。如果问题仍然存在,请联系亚马逊支持。
+'''
+
+
+