是否可以使用Microsoft Graph API唯一标识电子邮件地址,电话等?

时间:2018-08-31 00:51:33

标签: microsoft-graph

尝试与Graph联系人建立2向同步。当我从Graph收到针对特定联系人的回复时,我似乎找不到找到唯一标识电话/电子邮件属性的方法。

在我的用例中,每个电子邮件地址和电话号码都是单独的实体,具有唯一的ID来标识它们。这可以解决具有多个相同类型(例如家庭,工作,学校,移动电话)的地址或号码的极端情况。

在一个理想的世界中,我希望能够与在Graph中创建时唯一标识它的每个电话/电子邮件实体一起发送元数据。这样,当我设置订阅或什至查询联系人时,我可以直接将返回的联系人对象电话/电子邮件映射到我们的特定电话/电子邮件。

这可能吗?我知道Google有可以解决此问题的ID。

2 个答案:

答案 0 :(得分:1)

Outlook Contacts的结构与Google通讯录略有不同。 Outlook使用不同的电话号码属性,而不是使用具有单独的gd:phoneNumber值的单个rel属性。

请记住,某些电话号码属性是集合而不是单个值(即homePhones),这一点也很重要。这些集合是有序的,因此可以轻松地将这些集合映射回Outlook的UI。例如,homePhones[0]保留“家庭电话”值,而homePhones[1]插入“家庭电话2”。

关于1:1映射:

  • http://schemas.google.com/g/2005#home == homePhones[0]
  • http://schemas.google.com/g/2005#work == businessPhones[0]
  • http://schemas.google.com/g/2005#mobile == mobilePhone

最后,默认情况下,Microsoft Graph仅返回一组有限的电话号码。以我的经验,由Graph返回的集合几乎总是足够的,但是肯定有一些边缘情况(例如,医疗保健行业仍在使用寻呼机)。

您可以使用Extended Properties访问这些其他电话号码。这是通过使用MAPI标记名称专门请求给定属性来完成的。

例如,如果您需要检索Pager属性,则可以请求MAPI标识符0x3A21作为扩展属性:

/v1.0/me/contacts?$expand=singleValueExtendedProperties($filter=id eq 'String 0x3A21') 

您可以找到MAPI属性here的完整列表。

答案 1 :(得分:0)

"homePhones": [],
"mobilePhone": "124124124124",
"businessPhones": [
     "+86 (510) 12114142"
],
"spouseName": null,
"personalNotes": "",
"children": [],
"emailAddresses": [
   {
   "name": "Charles Test(test@microsoft.com)",
   "address": "Test.Test@microsoft.com"
   }
],
"homeAddress": {},
"businessAddress": {
   "city": "Wuxi"
},
"otherAddress": {} 

您知道电话参考不是唯一的,用户可以共享相同的电话号码,因此除非电话参考是用户的ID,否则它不能用作所有MS Authentication API中的唯一标识。因此,不可能拥有完美的世界。

出于相同的原因,用户可以共享相同的地址引用,因此不能在所有MS身份验证API中将其用作唯一标识。因此,对于您的完美世界也是不可能的。