IBM Watson Assistant:如何检测来自Slack或基于Web的集成的对话



当用户通过基于web的界面进入时,我希望能够返回HTML格式的文本。这很好,但如果你与Slack集成,你会得到纯粹的HTML转储到用户身上。我使用的是开箱即用的Watson Assistant提供的网络和松弛集成。有没有一种方法可以检测哪种集成在推动对话?

我有两个解决方案。都试过了。

选项1:第一个选项是使用JSON编辑器指定格式,感谢data_henrik的响应https://cloud.ibm.com/docs/assistant?topic=assistant-对话框响应json#对话框响应json目标集成。使用此解决方案时需要记住两件事:

  1. 当你做";"试试我";,您将看到多个响应。您发回的每种格式都有一个
  2. 您需要让webhook为您要定位的每个频道传回多种格式
  3. 文档中提供的格式已过期。这是我在JSON编辑器中找到的格式

JSON编辑器

{
"output": {
"generic": [{
"response_type": "text",
"channels": [{
"channel": "chat"
}],
"values": [{
"text": "$webhook_result_2.chat"
}],
"selection_policy": "sequential"
},
{
"response_type": "text",
"channels": [{
"channel": "slack"
}],
"values": [{
"text": "$webhook_result_2.slack"
}],
"selection_policy": "sequential"
}
]
}
}

选项2:第二个选项是通过聊天客户端设置一个用户定义的变量,并在webhook调用中传递。然后,代码将使用它来了解要应用的格式。没有那么优雅,但使用较少的网络带宽和处理来构建响应。

Watson提供的更新的web客户端脚本:

<script>
function preSendhandler(event) {
event.data.context.skills['main skill'].user_defined.client = "html";
}
window.watsonAssistantChatOptions = {
integrationID: "...", // The ID of this integration.
region: "...", // The region your integration is hosted in.
serviceInstanceID: "...", // The ID of your service instance.
onLoad: function (instance) {
// Subscribe to the "pre:send" event.
instance.on({
type: "pre:send",
handler: preSendhandler
});
instance.render();
}
};
setTimeout(function () {
const t = document.createElement('script');
t.src = "https://web-chat.global.assistant.watson.appdomain.cloud/loadWatsonAssistantChat.js";
document.head.appendChild(t);
});
</script>

您还需要通过将参数设置为"的webhook来将用户定义的变量传递到webhook中;客户端";以及值"0"$客户";。

让我指出Watson Assistant提供了各种方法来编写响应。有简单的回应和更复杂("丰富"(的回应,还有图像、选项、停顿等等。此外,您可以在JSON编辑器中定义响应。

后者允许创建本地JSON响应并寻址特定的输出通道。因此,您可以定义特定于Slack的响应,甚至可以使用Slack提供的高级格式选项,而不仅仅是纯文本。

总之,您不需要检测输入来自哪里,而是为您使用的输出通道设计输出。不同的观点,但相同甚至更好的结果…:(

最新更新