Синхронизация состояния отчета «Умный дом» новое устройство | Запрошенный объект не найден. [404]

#c# #google-api #google-smart-home

Вопрос:

Я реализовал API HomeGraph с помощью пакета Google.Api.Домашняя служба.v1 (1.50.0.2260)

Похоже, что это также работает нормально, функция ReportStateAndNotification отлично работает с запросом, выполнением и некоторыми запросами синхронизации.

Но когда я добавляю новое устройство в свою систему через наше приложение, и запрос на синхронизацию отправляется в Google и поступает в наш сервер, API HomeGraph вернет исключение при отправке этого запроса на синхронизацию..

-> Запрос на синхронизацию >не создает исключения, когда я изменяю имя устройства в нашем приложении. Это происходит только при добавлении новых устройств.

Я просмотрел в Google и несколько сообщений StackOverflow.. Но я, наверное, что-то упускаю. В большинстве сообщений говорится, что проверьте ключ API и т. Д., Но тогда функция ReportStateAndNotification всегда должна завершаться ошибкой, а не только тогда, когда запрос на синхронизацию поступает от Google на наш сервер. Может ли кто-нибудь указать мне правильное направление?

Функция, используемая для запросов на синхронизацию:

 public static void Send(Dictionary<string, object> deviceStateList, string requestId, string googleCustomerId)
    {
        string deviceIdList = String.Format("({0})", string.Join(", ", deviceStateList.Keys));
        try
        {
            var jsonFilePath = _appSettingsRetriever.PrivateGoogleAuthenticationFile;
            string scope = "https://www.googleapis.com/auth/homegraph";

            using (var stream = new FileStream(jsonFilePath, FileMode.Open, FileAccess.Read))
            {
                GoogleCredential credentials = GoogleCredential.FromStream(stream);
                if (credentials.IsCreateScopedRequired)
                    credentials = credentials.CreateScoped(scope);

                HomeGraphServiceService service = new HomeGraphServiceService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credentials
                });

                var request = new ReportStateAndNotificationRequest
                {
                    AgentUserId = googleCustomerId,
                    RequestId = requestId,
                    Payload = new StateAndNotificationPayload
                    {
                        Devices = new ReportStateAndNotificationDevice
                        {
                            States = deviceStateList
                        }
                    }
                };                  
                _log.Debug($"Sending to HomeGraph for devices: {deviceIdList} customer: {googleCustomerId} requestId: {requestId}");
                DevicesResource.ReportStateAndNotificationRequest rp = service.Devices.ReportStateAndNotification(request);
                ReportStateAndNotificationResponse resop = rp.Execute();
            }
        }
        catch (Exception ex)
        {
            _log.Error($"Exception in ReportToHomeGraph for Customer: {googleCustomerId}. DeviceList: {deviceIdList}. JsonPath: {_appSettingsRetriever.PrivateGoogleAuthenticationFile} Exception: {ex}.");
        }
    }
 

Исключение:

 2021-09-24 14:16:13,547 [110] ERROR ReportToHomeGraph                  
 Exception in ReportToHomeGraph for Customer: 05. DeviceList: (
 fe965e6a-21ad-425f-b594-914bf63510a9, 
 1cc0ee97-a87f-44c5-a3e3-a39d159ee193, 
 618cdf94-2b31-434f-b91e-00837d155d4a
 ).
 JsonPath: C:/myfile.json Exception: The service homegraph has thrown an exception:
 Google.GoogleApiException: Google.Apis.Requests.RequestError
Requested entity was not found. [404]
Errors [
    Message[Requested entity was not found.] Location[ - ] Reason[notFound] Domain[global]
]

   at Google.Apis.Requests.ClientServiceRequest`1.<ParseResponse>d__35.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Google.Apis.Requests.ClientServiceRequest`1.Execute()
   at BusinessLogic.GoogleAssistant.TokenService.HomeGraph.ReportToHomeGraph.Send(Dictionary`2 deviceStateList, 
   String requestId, String googleCustomerId) in C:ReposGoogleAssistant
   .TokenServiceHomeGraphReportToHomeGraph.cs:line 57.
 

Комментарии:

1. Вы проверяли ведение журнала в облаке на наличие каких-либо syncLog записей , которые могут содержать дополнительную информацию?