|
@@ -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 亚历克萨不能接受这条信息。重新发送消息最多三次,每次尝试之间至少有一秒的间隔。如果问题仍然存在,请联系亚马逊支持。
|
|
|
+'''
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
|