读取谷歌助手应用中的用户联系人

问题描述 投票:0回答:1

我正试图为我的消息应用添加谷歌助手对话功能。

我被困在让用户从他的联系人列表中选择一个联系人来发送消息。

考虑下面的例子。

  1. 用户:嘿,谷歌,跟ScoopMessages对话。
  2. 助理:欢迎你,你想给谁发信息?
  3. 用户:Bob
  4. 助理:有多个Bob,请选择你想发送消息给谁?

    显示所有有Bob名字的联系人。

我已经实现了1和2的对话,但我无法实现3和4。我没有找到任何博客来源显示如何选择一个联系人。这可能吗?请给我一个例子,或者让我知道如何建立这个功能?

dialogflow actions-on-google google-contacts-api google-assistant-sdk
1个回答
1
投票

你的要求涉及很多部分,所以让我们把它分解成这些部分。

  1. 认证用户
  2. 获取联系信息
  3. 消除联系的歧义
  4. 发送信息

认证用户

第一步,你需要知道用户是谁,这样你就可以查找他们的联系人。为此,您需要使用 账户链接 以便他们的助理账户可以链接到你为他们维护的账户。虽然你想使用他们的谷歌联系人--但你并不能通过助理自动获得这个权限。

与此相关的是,你需要一个 令牌 来调用Google APIs获取他们的联系人,而这个访问令牌需要有特定的授权才能访问你需要的范围。后面的部分就比较棘手了--单靠账户链接是做不到这一点的,你也无法单靠语音来获得他们的授权。最简单的方法是将 "Google Sign In for Assistant和OAuth "方案一起使用。StackOverflow上的这个答案 提供了一些关于如何工作的指导。

获取联系信息

有了auth令牌,在他们给出名字的意图手,你就能够代表他们对用户的联系人进行查询。然而,在这里,你会遇到两个来自谷歌的竞争性API,每个API都有自己的怪癖。

这两个API都有各自的特点。联系人API 是一个较老的协议,结果是用他们较老的gData格式在XML中返回的,但它提供了一个做查询的方法。该 人员API 是较新的,并以JSON格式返回数据,但不提供查询字段的方法。人际关系API正式取代了联系人API,后者是一个新的API。"将来会被废弃".

使用联系人API,你可以做一个 疑问 对应一个词,它将搜索用户联系人中的所有文本字段。以您的例子中的 "Bob "为例,它可能看起来像这样

GET https://www.google.com/m8/feeds/contacts/default/full?q=Bob

然而,在人脉API中,你需要使用 人脉.列表 方法,很可能指定你想要 "names "和 "nicknames "字段。有了这个列表,你就可以在这些字段中搜索匹配的字段。

如果有一个匹配,你就可以了。

如果有一个以上的匹配项,那么...

歧义联系人

.你得回复要求这样做的用户。如果数量有限,你大概可以说:"你想发给谁?Bob Smith还是Joe Bob?"

然而,如果有更多的人,你可以提示有多少个 "Bob",并显示一个 转盘 如果用户使用的是支持可视化列表的设备。但是,如果用户使用的是支持可视化列表的设备,那么 请记住,你不能依赖这一点 - 他们可能使用的是语音设备,或者可能没有办法通过屏幕输入。

发送信息

你没有说明你是如何发送消息的,但请记住,履行并不运行在用户的设备上--它运行在你控制的某个webhook上。这种情况下,你可能会再次使用他们的 auth token 来发送消息。

© www.soinside.com 2019 - 2024. All rights reserved.