Я использую API людей, чтобы позволить пользователям создавать объекты в моей системе из своих контактов Google, через API людей, и сохраняю resourceName (то есть 'people / c7760106965272617307'), чтобы отслеживать контакт Google, связанный с объектом. был создан из.
Я хочу иметь возможность периодически обновлять объекты, чтобы соответствовать тому, что находится в Google. то есть, если контакт обновляет номер телефона, субъект получает обновленный номер телефона. Поэтому я вызываю API списка, передавая токен syn c, чтобы получить контакты, которые изменились с момента последнего вызова. Это работает для обновлений, редактирования и удаления, но я не могу найти способ обнаружить, когда два контакта были объединены в контактах Google.
Состояние документов: https://developers.google.com/people/api/rest/v1/people#Person .PersonMetadata
previousResourceNames [] Любые прежние имена ресурсов, которые имел этот человек. Заполняется только для запросов connections.list, которые включают токен синхронизации.
Так что, если я: - вызову API списка, запрашивающего токен syn c - создание контакта A и контакта B - вызов API списка передавая токен syn c, я получаю только два созданных контакта и новый токен syn c:
{
"resourceName": "people/c1465347538402693914",
"etag": "%EgcBAj0JPjcuGgQBAgUHIgxab0lZTFBvUU43bz0=",
"metadata": {
"sources": [
{
"type": "CONTACT",
"id": "1455f5d28afc531a",
"etag": "#ZoIYLPoQN7o=",
"updateTime": "2020-02-26T15:35:34.021Z"
}
],
"objectType": "PERSON"
},
"names": [
{
"metadata": {
"primary": true,
"source": {
"type": "CONTACT",
"id": "1455f5d28afc531a"
}
},
"displayName": "Contact A",
"familyName": "A",
"givenName": "Contact",
"displayNameLastFirst": "A, Contact"
}
]
},
{
"resourceName": "people/c4555919836853785218",
"etag": "%EgcBAj0JPjcuGgQBAgUHIgx2WmJHUUtjNTcxQT0=",
"metadata": {
"sources": [
{
"type": "CONTACT",
"id": "3f39e0f40cd35282",
"etag": "#vZbGQKc571A=",
"updateTime": "2020-02-26T15:35:44.056Z"
}
],
"objectType": "PERSON"
},
"names": [
{
"metadata": {
"primary": true,
"source": {
"type": "CONTACT",
"id": "3f39e0f40cd35282"
}
},
"displayName": "Contact B",
"familyName": "B",
"givenName": "Contact",
"displayNameLastFirst": "B, Contact"
}
}
Если затем объединить два контакта и вызвать API, передав новый syn c токен, который я получаю:
{
"resourceName": "people/c4555919836853785218",
"etag": "%EgcBAj0JPjcuGgQBAgUHIgxqNlFVYnIwaU9vVT0=",
"metadata": {
"sources": [
{
"type": "CONTACT",
"id": "3f39e0f40cd35282"
}
],
"deleted": true,
"objectType": "PERSON"
}
}
Итак, TDLR; Я могу узнать, что один из контактов был удален, но не то, чтобы он был объединен с другим контактом.
Кажется, что поле previousResourceNames [] будет делать именно то, что я хочу, но я не могу заставить его возвращать данные, либо при использовании функции API в docs:
https://developers.google.com/people/api/rest/v1/people.connections/list
или используя приведенный ниже код js:
const service = google.people({version: 'v1', auth: authClient});
const result = await service.people.connections.list({
resourceName: 'people/me',
personFields: 'names,emailAddresses,phoneNumbers,metadata',
//requestSyncToken: true
syncToken: "insert token here"
});
console.info("Google Returned", JSON.stringify(result.data, null, 4));
Интересно, нужно ли мне предоставить дополнительные области или что-то еще в запрашиваемом лице поля.
Запрошенные области:
'https://www.googleapis.com/auth/contacts',
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile'