我正试图为我的消息应用添加谷歌助手对话功能。
我被困在让用户从他的联系人列表中选择一个联系人来发送消息。
考虑下面的例子。
助理:有多个Bob,请选择你想发送消息给谁?
显示所有有Bob名字的联系人。
我已经实现了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 来发送消息。