

好了,是时候将所有内容整合到一个非常酷的认知注入式应用程序中了。
这是“沃森大厦入门”系列的结论。 在第1部分中,您学习了使用Watson Work Services开发应用程序的基础知识,在第2部分中,您可以开始将学到的知识应用到自己的AI注入应用程序中。 您的应用正在利用AI来识别对话中的可行语言。
现在,我们将其带入一个完整的圈子。 在本文中,我们将描述注释“ actionSelected”。 有效地,您可以将Watson在对话中标识的可操作语言映射到用户在离开对话时可以采取的有意义的动作。 生产力如何?
这样的用例是无止境的(想象,安排会议,查找实验室结果,寻找销售机会,创建待办事项,等等),但是在东海岸,我们在飓风季节的中间轻拍了一下,所以要跟上天气是我们的首要任务,因此我们将继续进行Weather App场景。
快速回顾
在第2部分中,我们构建了Weather应用程序,以便在有人发布与Weather或Forecast相关的消息时对会话进行注释。 沃森检测到了这种与天气有关的语言,并在其下划线标明了这一点。


因此,现在我们希望当用户实际单击该语言时发生一些事情。 明显的动作是向用户显示即将到来的预测。
那么这是怎么发生的呢?
使对话可行
每当用户单击带下划线的消息时,Watson Work Services都会添加一个actionSelected注释,其中包括通过Watson Assistant对话框设置的操作。 您的代码正在创建一个侦听器,用于每当发生注释添加事件时,便会检查其是否为actionSelected ,然后在您的代码中启动该动作。 在这种情况下-显示本地预测。


建立用户体验
借助targetedMessage和操作卡,我们能够构建健壮的交互式用户体验,以向我们的应用程序用户显示此信息。
targetedMessage
首先,targetedMessage突变可让您的应用与用户进行直接的私人通信。 这意味着,当用户单击对话中带下划线的文本并启动操作时,而不是空间中的每个人都看到应用程序的响应,交互将在专用面板中弹出,只有发起操作的用户才能看到并与之互动。
这是针对性消息突变的JSON。
突变{
createTargetedMessage(input:{
对话编号:“'+对话编号+'”,
targetUserId:“'+ userId +'”,
targetDialogId:“'+ dialogId +'”,
附件:[
{
类型:CARD,
cardInput:
{
类型:INFORMATION,
informationCardInput:
{
标题:“'WEATHER'”,
副标题:“”,
文字:“天气”,
日期:1500573338000,
纽扣: [
{
文字:“分享天气”,
有效负载:“ SHARE_WEATHER”,
风格:主
}
]
}
}
}
]
}
)
{
成功的
}
}注意: constructionId ,userId和dialogId是实际值的占位符
动作卡
接下来,我们可以为用户提供自定义体验,以便使用操作卡在该专用目标消息面板中进行交互。 操作卡旨在使您能够为最终用户带来更丰富,更具交互性的体验。 (注意:操作卡不是定制用户体验的唯一方法,请查看我们的开发人员体验以了解更多信息)。 操作卡本质上是一些副本,在可视框中包含一个操作按钮。 动作卡有多种变体,实际上,您的目标消息实际上可能响应一条消息显示多张卡,例如,显示几张卡可以用来显示最新新闻标题。


但是,在此示例中,我们将从如何创建基本的一键式操作卡开始。 非常简单。 要创建动作卡,您需要:
- 构建有针对性的消息突变
- 使用CARD类型添加附件。
- 添加一个启动操作的按钮。
( 请参见上面的代码块 )
用户单击检测到的操作


用户看到可用的操作


用户选择一个动作,然后使用该动作卡查看目标消息页面。


但是我们不希望这种经历止于此。 用户希望能够对卡进行操作。 再次,我们将使用actionSelected来为卡上的按钮分配一个操作。 在我们的示例应用程序中,卡定义如下所示:
createGraphQLOptions.body + ='有效载荷:“ SHARE_'+ operationWeather +'”,';
该有效负载就是操作,因此,如果用户单击按钮,Watson Work Services将为actionSelected创建注释,并且您的应用程序可以侦听该操作。 收到此操作后,您的应用即可执行该操作。
在我们的示例中,卡片将显示“天气”或“天气预报”,并提供一个选项供用户发布或共享该信息到对话中,以供所有人查看。


! 不需要你的雨衣⛅️
您的应用程序要做的最后一件事就是清理一下。 换句话说,一旦用户采取行动,您就希望卡片消失。 为此,您需要创建另一条针对性的消息,以覆盖前一条消息。 这是如何做:
- 完成动作
函数processWeather(spaceId,accessToken,msgTitle,msgText){
const appMessage = {
“ type”:“ appMessage”,
“ version”:“ 1”,
“注释”:[{
“ type”:“泛型”,
“ version”:“ 1”,
“ title”:“”,
“ text”:“”,
“ color”:“ #ececec”,
}]
}; const sendMessageOptions = {
“ url”:“ https://api.watsonwork.ibm.com/v1/spaces/${space_id}/messages”,
“标题”:{
“ Content-Type”:“ application / json”,
“ jwt”:“”
},
“ method”:“ POST”,
“身体”: ””
}; sendMessageOptions.url = sendMessageOptions.url.replace(“ $ {space_id}”,spaceId);
sendMessageOptions.headers.jwt = accessToken;
appMessage.annotations [0] .title = msgTitle;
appMessage.annotations [0] .text = msgText;
sendMessageOptions.body = JSON.stringify(appMessage); request(sendMessageOptions,function(err,response,sendMessageBody){if(err || response.statusCode!== 201){
console.log(“错误:发布到” + sendMessageOptions.url +“导致http状态代码:” + response.statusCode +“和错误” + err);
}});}
2.然后,用此目标消息通知用户。
突变{
createTargetedMessage(输入:
{
对话编号:“'+对话编号+'”,
targetUserId:“'+ userId +'”,
targetDialogId:“'+ dialogId +'”,
注释:[
{
genericAnnotation:
{
标题:“天气共享。请单击X关闭此面板。”,
文字:“”
}
}
]
}
)
{
成功的
}
}注意: constructionId ,userId和dialogId是实际值的占位符
用户将看到以下内容:


做得好! 普罗赛克的时间到了! 🍾
获取代码
是否想细读此天气应用程序的代码? 转到Github“ jarusso / weatherbotj。 这里没什么花哨的,但希望它可以成为您收费应用程序的良好起点。