Поделиться через


Использование API людей для получения сведений о наиболее релевантных для вас людях

Приложения Microsoft Graph могут использовать API людей для получения сведений о наиболее релевантных для пользователя людях. Релевантность определяется шаблонами общения и совместной работы пользователя, а также его бизнес-отношениями. В качестве людей могут выступать локальные контакты, контакты из каталога организации, а также лица, с которыми пользователь недавно общался.

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

API "Люди" полезен при выборе сценариев, таких как создание сообщения электронной почты или создание собрания. Например, вы можете использовать API людей в сценариях написания электронных писем.

Добавление человека в качестве релевантного или "сотрудника"

Чтобы человек был добавлен как релевантный или "сотрудник" для владельца профиля в Delve, чтобы он отображался в карточке профиля владельца или возвращался от API людей, между ним и владельцем профиля должна быть общедоступная связь. На приведенном ниже рисунке показаны пользователь A, индекс связи с другими пользователями (пользователь Б) и общедоступный профиль с подмножеством связей пользователя.

Изображение связей «Работа с»

Ниже приведены примеры общедоступных связей:

  • Люди, объединенные в организационную диаграмму: менеджер, прямой подчиненный, коллеги (с общим руководителем)
  • Члены общедоступной группы или списка рассылки с менее чем 30 участниками. Список членов общедоступных групп доступен в каталоге.

Если владелец профиля связывается с кем-то, и между этими людьми нет общедоступной связи, например, подключение к организационной диаграмме или общая группа, факт данной связи не будет виден другим.

Рейтинг людей, то есть порядок их отображения на странице владельца профиля, определяется общедоступным обменом данными между владельцем профиля и пользователем в списке.

Примеры общедоступной коммуникации:

  • Отправка и получение писем друг другу в рамках общедоступной группы
  • Приглашение пользователей на собрания в рамках группы, когда приглашено больше X людей

Ранжирование не меняется на основании того, кто является пользователем A (человек, который ищет чужую страницу). Ранжирование определяется уровнем взаимодействия между пользователем Б (владелец профиля) и пользователем В (человек, отображающийся в списке владельца профиля).

Чтобы пользователь В появился в списке, владелец профиля должен состоять в относительно небольшой группе или списке рассылки с этим пользователем, которые являются общедоступными (т.е список участников доступен в каталоге).

Люди вне организации не отображаются в списке владельцев профиля. Люди они по электронной почте или с кем-то встречаются, но не являются частью одной организации, не появляются как люди, с которыми работает владелец.

Отключение "сотрудников"

Администраторы могут управлять отображением или возвращением людей, релевантных для владельца профиля, на двух уровнях:

  • Для организации:
    • Включено для всей организации. Это параметр по умолчанию.
    • Отключено для всей организации, кроме владельца профиля.
  • Для Microsoft Entra группы в организации:
    • Отключить для указанной Microsoft Entra группы. Это полезно для включения "работы с" для организации, за исключением участников в группе Microsoft Entra.

Дополнительные сведения см. в статье Настройка элементов управления конфиденциальности аналитики людей.

Authorization

Чтобы вызвать API людей в Microsoft Graph, приложению требуются соответствующие разрешения:

  • People.Read — используется для отправки общих вызовов API людей. Пример: https://graph.microsoft.com/v1.0/me/people/. Для использования разрешения People.Read требуется согласие пользователя.
  • Разрешение People.Read.All необходимо для получения людей, наиболее релевантных для указанного пользователя, в вызовах организации пользователя, выполнившего вход в систему (https://graph.microsoft.com/v1.0/users/{id}/people). Для использования разрешения People.Read.All требуется согласие администратора.

Просмотр людей

Запросы в этом разделе содержат людей, наиболее релевантных для пользователя, выполнившего вход (/me), или для конкретного пользователя в организации пользователя, выполнившего вход. Для этих запросов требуется Люди. Чтение или Люди. Разрешение Read.All соответственно. По умолчанию каждый ответ возвращает 10 записей, но это можно изменить с помощью параметра запроса $top .

Получение коллекции релевантных людей

С помощью указанного ниже запроса можно получить людей, наиболее релевантных для пользователя, выполнившего вход в систему (/me), на основании его шаблонов общения и совместной работы, а также бизнес-отношений.

GET https://graph.microsoft.com/v1.0/me/people/

Ниже показан пример отклика. По умолчанию каждый ответ возвращает 10 записей. Это можно изменить с помощью параметра запроса $top . В этом примере используется $top для ограничения ответа тремя записями.

HTTP/1.1 200 OK
Content-type: application/json

{
  "value": [
    {
      "id": "8CE6E1DE-CB84-4BF5-971D-D3ECF452E2B5",
      "displayName": "Lorrie Frye",
      "givenName": "Lorrie",
      "surname": "Frye",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "Paralegal",
      "companyName": null,
      "yomiCompany": "",
      "department": "Legal",
      "officeLocation": "20/1109",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 980 555 0101"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    },
    {
      "id": "5767393D-42BA-4E5C-BEE4-52BB25639CF4",
      "displayName": "Maynard Denman",
      "givenName": "Maynard",
      "surname": "Denman",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "Web Marketing Manager",
      "companyName": null,
      "yomiCompany": "",
      "department": "Sales & Marketing",
      "officeLocation": "20/1101",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 918 555 0101"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    },
    {
      "id": "914B5191-11FA-4C0B-A354-0FA8C8EFD585",
      "displayName": "Darrel Halsey",
      "givenName": "Darrel",
      "surname": "Halsey",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "Attorney",
      "companyName": null,
      "yomiCompany": "",
      "department": "Legal",
      "officeLocation": "14/1102",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 205 555 0103"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    }
  ]
}

Запрос последующей страницы с людьми

Если первый ответ не содержит полный список соответствующих людей, можно сделать второй запрос, используя $top и $skip для запроса дополнительных страниц с информацией. Если предыдущий запрос содержит дополнительные сведения, следующий запрос получает следующую страницу людей с сервера.

GET https://graph.microsoft.com/v1.0/me/people/?$top=3&$skip=10

Ниже показан пример отклика. По умолчанию каждый ответ возвращает 10 записей. Это можно изменить с помощью параметра запроса $top . В этом примере используется $top для ограничения ответа тремя записями.

HTTP/1.1 200 OK
Content-type: application/json

{
  "value": [
    {
      "id": "1F28616D-BDFE-4080-8F06-03366A851688",
      "displayName": "Felix Coppola",
      "givenName": "Felix",
      "surname": "Coppola",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "CVP Legal",
      "companyName": null,
      "yomiCompany": "",
      "department": "Legal",
      "officeLocation": "19/2109",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 309 555 0104"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    },
    {
      "id": "8A3FC021-6DBB-44AC-8884-B7B500CC260A",
      "displayName": "Lenora Rowland",
      "givenName": "Lenora",
      "surname": "Rowland",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "Marketing Assistant",
      "companyName": null,
      "yomiCompany": "",
      "department": "Sales & Marketing",
      "officeLocation": "18/1106",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 954 555 0118"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    },
    {
      "id": "032C9919-4DF9-4715-8C46-4D0FAE7B3EB2",
      "displayName": "Manuel Collette",
      "givenName": "Manuel",
      "surname": "Collette",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "Accountant II",
      "companyName": null,
      "yomiCompany": "",
      "department": "Finance",
      "officeLocation": "98/2202",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+20 255501070"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    }
  ]
}

Сортировка в отклике

По умолчанию люди в ответе сортируются по их релевантности для запроса. Вы можете изменить порядок людей в ответе с помощью параметра $orderby . Этот запрос выбирает наиболее подходящих людей, сортирует их по displayName, а затем возвращает первые 10 человек в отсортированный список.

GET https://graph.microsoft.com/v1.0/me/people/?$orderby=displayName

Ниже показан пример отклика. По умолчанию каждый ответ возвращает 10 записей. Это можно изменить с помощью параметра $top . В следующем примере используется $top для ограничения ответа тремя записями.

HTTP/1.1 200 OK
Content-type: application/json

{
  "value": [
    {
      "id": "818E29A1-E6BB-4EDA-AB20-8230B4B1E290",
      "displayName": "Adriana Ramos",
      "givenName": "Adriana",
      "surname": "Ramos",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "Product Marketing Manager",
      "companyName": null,
      "yomiCompany": "",
      "department": "Sales & Marketing",
      "officeLocation": "18/2111",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 425 555 0109"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    },
    {
      "id": "62633BAA-1CB9-4FA2-9B8F-55AB1840B69D",
      "displayName": "Alyce Cooley",
      "givenName": "Alyce",
      "surname": "Cooley",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "Marketing Assistant",
      "companyName": null,
      "yomiCompany": "",
      "department": "Sales & Marketing",
      "officeLocation": "131/1104",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 858 555 0110"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    },
    {
      "id": "6BB54D2C-EF20-48DA-ADD9-AE757DD30C4E",
      "displayName": "Alyssa Clarke",
      "givenName": "Alyssa",
      "surname": "Clarke",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "Corporate Security Officer",
      "companyName": null,
      "yomiCompany": "",
      "department": "Operations",
      "officeLocation": "24/1106",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 262 555 0106"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    }
  ]
}

Изменение количества возвращаемых людей и полей

Вы можете изменить количество людей, возвращаемых в отклике, настроив параметр $top.

В следующем примере запрашивают 1000 пользователей, наиболее важных для /me. Запрос также ограничивает объем данных, отправляемых обратно с сервера, запрашивая только displayName пользователя.

GET https://graph.microsoft.com/v1.0/me/people/?$top=1000&$Select=displayName

Ниже показан пример отклика.

HTTP/1.1 200 OK
Content-type: application/json

{
  "value": [
    {
      "id": "8CE6E1DE-CB84-4BF5-971D-D3ECF452E2B5",
      "displayName": "Lorrie Frye"
    },
    {
      "id": "5767393D-42BA-4E5C-BEE4-52BB25639CF4",
      "displayName": "Maynard Denman"
    },
    {
      "id": "914B5191-11FA-4C0B-A354-0FA8C8EFD585",
      "displayName": "Darrel Halsey"
    },
    {
      "id": "E3C5B235-DE15-4566-B7B1-7A8E32426540",
      "displayName": "Roscoe Seidel"
    },
    {
      "id": "6BB54D2C-EF20-48DA-ADD9-AE757DD30C4E",
      "displayName": "Alyssa Clarke"
    },
    {
      "id": "818E29A1-E6BB-4EDA-AB20-8230B4B1E290",
      "displayName": "Adriana Ramos"
    },
    {
      "id": "62633BAA-1CB9-4FA2-9B8F-55AB1840B69D",
      "displayName": "Alyce Cooley"
    },
    {
      "id": "6BB9CC1F-418D-4DDF-AB0C-6A1C4ABCDBF4",
      "displayName": "Wayne Leeper"
    },
    {
      "id": "E7D40AC5-0078-4575-B1F3-F738124C4BC9",
      "displayName": "Jan Travis"
    },
    {
      "id": "6F99D1CC-4FCC-49E4-9160-E8AB01BF3E83",
      "displayName": "Charlotte Delacruz"
    },
    {
      "id": "1F28616D-BDFE-4080-8F06-03366A851688",
      "displayName": "Felix Coppola"
    },
    {
      "id": "8A3FC021-6DBB-44AC-8884-B7B500CC260A",
      "displayName": "Lenora Rowland"
    },
    {
      "id": "032C9919-4DF9-4715-8C46-4D0FAE7B3EB2",
      "displayName": "Manuel Collette"
    }
  ]
}

Типы включаемых результатов

По умолчанию Microsoft Graph предоставляет результаты только для почтового ящика, то есть ваши сохраненные контакты или людей, с которыми вы наиболее часто взаимодействуете. Чтобы получить результаты для каталога всей организации, укажите заголовок HTTP, как показано ниже.

"X-PeopleQuery-QuerySources: Mailbox,Directory”

Выбор возвращаемых полей

Вы можете ограничить объем данных, возвращаемых с сервера, с помощью параметра $select , чтобы выбрать одно или несколько полей. Поле @odata.id всегда возвращается.

В примере ниже показано, как ограничить перечень полей, возвращаемых в отклике, полями displayName и scoredEmailAddresses для 10 наиболее релевантных людей.

GET https://graph.microsoft.com/v1.0/me/people/?$select=displayName,scoredEmailAddresses

Ниже показан пример отклика. По умолчанию каждый ответ возвращает 10 записей. Это можно изменить с помощью параметра $top . В этом примере используется $top для ограничения ответа тремя записями.

HTTP/1.1 200 OK
Content-type: application/json

{
  "value": [
    {
      "id": "8CE6E1DE-CB84-4BF5-971D-D3ECF452E2B5",
      "displayName": "Lorrie Frye",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ]
    },
    {
      "id": "5767393D-42BA-4E5C-BEE4-52BB25639CF4",
      "displayName": "Maynard Denman",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ]
    },
    {
      "id": "914B5191-11FA-4C0B-A354-0FA8C8EFD585",
      "displayName": "Darrel Halsey",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ]
    }
  ]
}

Использование фильтра для ограничения количества информации в отклике

Вы можете использовать параметр $filter, чтобы ограничить количество информации в отклике и возвращать только тех людей, записи которых содержат указанные критерии.

При выполнении указанного ниже запроса информация в отклике ограничивается экземплярами person со свойством personType, причем экземпляр person назначается как класс, а organizationUser — как подкласс.

GET https://graph.microsoft.com/v1.0/me/people/?$filter=personType/class eq 'Person' and personType/subclass eq 'OrganizationUser'

Ниже показан пример отклика. По умолчанию каждый ответ возвращает 10 записей. Это можно изменить с помощью параметра $top . В этом примере используется $top для ограничения ответа тремя записями.

HTTP/1.1 200 OK
Content-type: application/json

{
  "value": [
    {
      "id": "8CE6E1DE-CB84-4BF5-971D-D3ECF452E2B5",
      "displayName": "Lorrie Frye",
      "givenName": "Lorrie",
      "surname": "Frye",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "Paralegal",
      "companyName": null,
      "yomiCompany": "",
      "department": "Legal",
      "officeLocation": "20/1109",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 980 555 0101"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    },
    {
      "id": "5767393D-42BA-4E5C-BEE4-52BB25639CF4",
      "displayName": "Maynard Denman",
      "givenName": "Maynard",
      "surname": "Denman",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "Web Marketing Manager",
      "companyName": null,
      "yomiCompany": "",
      "department": "Sales & Marketing",
      "officeLocation": "20/1101",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 918 555 0101"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    },
    {
      "id": "914B5191-11FA-4C0B-A354-0FA8C8EFD585",
      "displayName": "Darrel Halsey",
      "givenName": "Darrel",
      "surname": "Halsey",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "Attorney",
      "companyName": null,
      "yomiCompany": "",
      "department": "Legal",
      "officeLocation": "14/1102",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 205 555 0103"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    }
  ]
}

Выбор полей, которые возвращаются в отфильтрованном отклике

Сочетая параметры $select и $filter, вы можете создать настраиваемый список людей, релевантных для пользователя, и получать только те поля, которые необходимы вашему приложению.

В следующем примере возвращается displayName и scoredEmailAddresses людей, отображаемое имя которых равно указанному имени. В этом примере возвращаются только пользователи, отображаемое имя которых равно "Лорри Фрай".

GET https://graph.microsoft.com/v1.0/me/people/?$select=displayName,scoredEmailAddresses&$filter=displayName eq 'Lorrie Frye'

Ниже приводится пример отклика.

HTTP/1.1 200 OK
Content-type: application/json

{
  "value": [
    {
      "id": "8CE6E1DE-CB84-4BF5-971D-D3ECF452E2B5",
      "displayName": "Lorrie Frye",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 8
        }
      ]
    }
  ]
}

Просмотр людей, релевантных для другого пользователя

Указанный ниже запрос возвращает данные о людях, наиболее релевантных для другого пользователя из организации вошедшего в систему пользователя, как описано в статье о реализации функции «Работа с». Для выполнения этого запроса требуется разрешение People.Read.All. Применяются также все параметры запроса, описанные в предыдущих разделах.

В этом примере отображаются люди, релевантные для пользователя Roscoe Seidel.

GET https://graph.microsoft.com/v1.0/users('[email protected]')/people/

Ниже показан пример отклика. По умолчанию каждый ответ возвращает 10 записей. Это можно изменить с помощью параметра $top . В приведенном ниже примере используется $top для ограничения ответа тремя записями.

HTTP/1.1 200 OK
Content-type: application/json

{
  "value": [
    {
      "id": "56155636-703F-47F2-B657-C83F01F49BBC",
      "displayName": "Clifton Clemente",
      "givenName": "Clifton",
      "surname": "Clemente",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "Director",
      "companyName": null,
      "yomiCompany": "",
      "department": "Legal",
      "officeLocation": "19/2106",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 20
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 309 555 0101"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    },
    {
      "id": "6BF27D5A-AB4F-4C43-BED0-7DAD9EB0C1C4",
      "displayName": "Sheree Mitchell",
      "givenName": "Sheree",
      "surname": "Mitchell",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "Product Manager",
      "companyName": null,
      "yomiCompany": "",
      "department": "Sales & Marketing",
      "officeLocation": "20/2107",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 10
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 918 555 0107"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    },
    {
      "id": "B3E5302D-EAF0-4E8B-8C6C-A2AE64B4B163",
      "displayName": "Vincent Matney",
      "givenName": "Vincent",
      "surname": "Matney",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "CVP Engineering",
      "companyName": null,
      "yomiCompany": "",
      "department": "Engineering",
      "officeLocation": "23/2102",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": 10
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 502 555 0102"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    }
  ]
}

Поиск людей

Запросы в этом разделе позволяют искать людей, относящихся к вошедшего пользователя (/me) и других пользователей в организации вошедшего пользователя. Для этих запросов требуется Люди. Разрешение на чтение, за исключением поиска соответствующих пользователей других пользователей, для которого требуется Люди. Read.All. По умолчанию каждый ответ возвращает 10 записей, но это можно изменить с помощью параметра $top .

Использование поиска для выбора людей

Используйте параметр $search для выбора людей, удовлетворяющих определенному набору критериев.

Приведенный ниже поисковый запрос возвращает список релевантных для /me людей, чье свойство displayName или emailAddress содержит слово, начинающееся с буквы j.

GET https://graph.microsoft.com/v1.0/me/people/?$search=j

Ниже показан пример отклика. По умолчанию каждый ответ возвращает 10 записей. Это можно изменить с помощью параметра $top . В этом примере используется $top для ограничения ответа тремя записями.

HTTP/1.1 200 OK
Content-type: application/json

{
  "value": [
    {
      "id": "E3C5B235-DE15-4566-B7B1-7A8E32426540",
      "displayName": "Jan Travis",
      "givenName": "Jan",
      "surname": "Travis",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": "VP Sales",
      "companyName": null,
      "yomiCompany": "",
      "department": "Sales & Marketing",
      "officeLocation": "19/3123",
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": "sip:[email protected]",
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": -12.297347783416837
        }
      ],
      "phones": [
        {
          "type": "Business",
          "number": "+1 732 555 0102"
        }
      ],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    },
    {
      "id": "C43BF05E-5B6B-4DCF-B2FC-0837B09E0FA9",
      "displayName": "Jacob Cazares (TAILSPIN)",
      "givenName": null,
      "surname": null,
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": null,
      "companyName": null,
      "yomiCompany": "",
      "department": null,
      "officeLocation": null,
      "profession": "",
      "userPrincipalName": "",
      "imAddress": null,
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": -12.298154282019846
        }
      ],
      "phones": [],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "PersonalContact"
      }
    },
    {
      "id": "6BB9CC1F-418D-4DDF-AB0C-6A1C4ABCDBF4",
      "displayName": "Jewell Montgomery",
      "givenName": "Jewell",
      "surname": "Montgomery",
      "birthday": "",
      "personNotes": "",
      "isFavorite": false,
      "jobTitle": null,
      "companyName": null,
      "yomiCompany": "",
      "department": null,
      "officeLocation": null,
      "profession": "",
      "userPrincipalName": "[email protected]",
      "imAddress": null,
      "scoredEmailAddresses": [
        {
          "address": "[email protected]",
          "relevanceScore": -12.531408487977451
        }
      ],
      "phones": [],
      "postalAddresses": [],
      "websites": [],
      "personType": {
        "class": "Person",
        "subclass": "OrganizationUser"
      }
    }
  ]
}

Для поиска используется алгоритм нечеткого соответствия. Они возвращают результаты на основе точного соответствия, а также выводов о намерении поиска. Предположим, в коллекции people вошедшего пользователя есть пользователь с отображаемым именем Tyler Lee и электронным адресом [email protected]. Все следующие поисковые запросы возвращают этого пользователя Тайлера в качестве одного из результатов.

GET https://graph.microsoft.com/v1.0/me/people?$search="tyler"                //matches both Tyler's name and email
GET https://graph.microsoft.com/v1.0/me/people?$search="tylerle"              //matches Tyler's email
GET https://graph.microsoft.com/v1.0/me/people?$search="[email protected]"  //matches Tyler's email. Note the quotes to enclose '@'.
GET https://graph.microsoft.com/v1.0/me/people?$search="tiler"                //fuzzy match with Tyler's name
GET https://graph.microsoft.com/v1.0/me/people?$search="tyler lee"            //matches Tyler's name. Note the quotes to enclose the space.