Google People API обнаруживает объединенные контакты с помощью syncToken - предыдущиеResourceNames не включены - PullRequest
1 голос
/ 26 февраля 2020

Я использую 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...