@ 字符未显示在 Watson Conversation Service 响应字符串中

@ character is not displayed in Watson Conversation Service response string

在使用 IBM Watson Conversation Service (WCS) 时,我想在响应中打印电子邮件地址。问题是 WCS 忽略了 @ 符号之后的所有字符和 @ 字符本身。

我尝试使用 '\ 来转义它,但没有太大帮助。

如何在响应字符串中打印电子邮件地址?

我不确定你的问题,但是,如果你想 return 对话中的邮件地址,你可以在 context 中添加 mail 地址值变量[高级回复]:

{
  "context": {
    "mail": "mail@domain.com"
  },
  "output": {
    "text": {
      "values": [
        "Your mail address is $mail"
      ],
      "selection_policy": "sequential"
    }
  }
}

并使用$mail[访问上下文变量的方法]来访问这个值,return在你的对话中是这样的:

if bot recognizes yourCondition response "Your mail address is $mail

但是,如果您想为此使用一些自定义代码,您可以从对话消息调用中添加 return,例如:

//add inside your call, like:
conversation.message(payload, function (err, data) {
    data.context.mail= "mail@domain.com";
    if (err) {
      return res.status(err.code || 500).json(err);
    }
    updateMessage(payload, data, req, res);

  });
}); 

并且在您的 Watson Conversation 服务中,您可以在每个带有 $mail 的响应消息中使用此变量。

如果将电子邮件地址作为上下文变量传递到 Watson Conversation 服务,那么它可以作为响应字符串的一部分 returned(打印)。假设变量名为 "email",其值为 "henrik@example.com",响应如下:

Hello, your mail address is <? $email ?>

会 return:

Hello, your mail address is henrik@example.com

但是,如果要打印出@等特殊字符,则需要小心。 The reason is that it refers to entities. It is a shorthand。在这种情况下,您需要使用 \ 转义该符号,例如 \@。这是一个硬编码的响应:

Please contact support at support\@example.com

如果您需要写一个静态电子邮件地址,您可能需要破解它。如果您在响应中添加(虚拟)变量,WCS 似乎假设您知道自己在做什么。

例如:Email addr@gmail.com!

结果:Email addr!(文本)

但是:Email addr@gmail.com! <? $x >

结果:Email addr@gmail.com! (link)

前者只是字面意思'addr'

后者是 link: (addr@gmail.com) < a href="mailto:addr@gmail.com" class="WAC__Link WAC__Link-email" target="_blank" rel="noopener noreferrer">addr@gmail.com

这是同样的问题。我曾经面对过。解决方案非常简单。

如果您使用的是 watson 助手 UI 尝试响应,例如

youremail\@gmail.com

它会起作用, 如果您使用 watson 助手 API 来操作对话框。 你必须给

"youremail\@gmail.com"

我不知道这是为什么。但是,解决方案似乎有效。