#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
записей , которые могут содержать дополнительную информацию?