【问题标题】:Phone Number not clickable using Azure Bot Framework Web Chat使用 Azure Bot Framework 网络聊天时无法单击电话号码
【发布时间】:2020-03-30 10:38:57
【问题描述】:

设置

我在 JavaScript 中使用 QnAMakerAzure Bot ServiceBot Framework Web Chat 客户端创建了一个 Azure QnA 网络聊天机器人。

这是我如何使用 HTML + JS 初始化机器人的示例:

<script src="https://cdn.botframework.com/botframework-webchat/4.6.0/webchat-es5.js"></script>

<div id="projekt-webchat" role="main"></div>
window.WebChat.renderWebChat(
    {
       directLine: window.WebChat.createDirectLine({
          secret: 'SECRETHERE'
       }),
       userID: 'YOUR_USER_ID',
       username: 'Web Chat User',
       locale: 'en-US',
       botAvatarInitials: 'WC',
       userAvatarInitials: 'WW'
    },
    document.getElementById('projekt-webchat')
);

我的机器人已连接到来自 QnA Maker 的知识库,该知识库具有如下 QnA 对

问题gimmenumber
回答+49 5251 123456

本机浏览器检测

某些浏览器会将其呈现为可点击的超链接并选择呼叫该号码。但是其他浏览器不把电话号码看成超链接,所以我无法点击

  • 作品 - Microsoft Edge 41
  • 作品 - Microsoft EdgeHTML 16
  • 损坏 - Google Chrome 版本 78
  • 损坏 - Microsoft Edge 版本 79

我已尝试将我的答案从 +49 5251 123456 更改为以下内容:

  • &lt;a href="tel:123-456-7890"&gt;123-456-7890&lt;/a&gt;
  • &lt;a rel="nofollow" class="external free" href="tel:+49-30-1234567"&gt;tel:+49-30-1234567&lt;/a&gt;

但答案看起来就像那些标签&lt;a&gt;&lt;/a&gt; 不是标签而是普通文本。 (所以仍然无法点击,而且看起来很丑)。

出于好奇,我自己创建了这个 HTML,它对上述所有浏览器都有相同的情况:

<div>+49 5251 123456</div>

为什么会这样?我可以修复它吗?如何修复它以便电话号码可以点击?

Markdown 渲染

机器人服务还将在答案中呈现 markdown,以将文本格式化为粗体、斜体或链接。

所以下面的例子有效

//making headings works with this
await turnContext.SendActivityAsync(MessageFactory.Text("# " + turnContext.Activity.From.Id));
//bold works
await turnContext.SendActivityAsync(MessageFactory.Text("**" + turnContext.Activity.From.Id + "**"));

但是,当我尝试使用 Markdown 呈现电话号码时,我仍然遇到问题。到目前为止,这是我尝试过的:

await turnContext.SendActivityAsync(MessageFactory.Text("[example](tel:123456)"));
await turnContext.SendActivityAsync(MessageFactory.Text("[example](tel:+49 5251 123456)"));
await turnContext.SendActivityAsync(MessageFactory.Text("[example](tel:+495251123456)"));
await turnContext.SendActivityAsync(MessageFactory.Text("[example](tel:05251123456)"));
await turnContext.SendActivityAsync(MessageFactory.Text("[example](tel:05251 123456)"));

最终会像这样错误地渲染:

【问题讨论】:

  • 你需要使用以tel:{number here}作为href的锚点——developer.mozilla.org/en-US/docs/Web/HTML/Element/a
  • @Pete imgur.com/a/d9S6g9j 没有工作可悲:(
  • 在 chrome 和 edge 中对我来说很好用:jsfiddle.net/ryan4wtu - 你有什么东西可以在你正在测试它的设备上进行调用 - 如果没有,显然什么都不会发生
  • 我认为这与 Azure WebChat Bot 本身有关。在 qnamaker.ai 和网络聊天窗口中,消息如下所示:imgur.com/a/IwVwNz3 - 我注意到的另一件事是我可以在 qnamaker.ai 中使用 markdown 格式,例如 [example](tel:12345)。但在网络聊天窗口中,我只看到不可点击的“示例”。
  • 我注意到的另一件事:如果我写这样的东西 '**myText**' myText 将在网络聊天窗口中显示为粗体。如果在那些'** **'之间,除了markdown之外还有什么文字会变粗吗?

标签: html azure azure-bot-service qnamaker tel


【解决方案1】:

如果你能达到&lt;div&gt;+49 5251 123456&lt;/div&gt;。你可以尝试添加一个onclick 事件和一些CSS,比如下面的sn-p 代码吗?

<div onclick="window.open('tel:+49 5251 123456', '_self');" style='cursor:pointer'>+49 5251 123456</div>

【讨论】:

    【解决方案2】:

    您可能应该在单独的元素中显示电话号码。当元素显示为内联块时,网络浏览器不会创建超链接。

    【讨论】:

    • 我创建了一个示例 .html,其中仅包含 &lt;div&gt;+49 5251 161920&lt;/div&gt;。该数字可在 Microsoft Edge 41.16299.611.0 Microsoft EdgeHTML 16.16299 中单击,但在其他 2 个浏览器中不可单击。我是否必须以某种方式主动停用 2 个浏览器的内联块?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多