在Amazon Lex中实现Lambda返回响应的HTML超链接渲染
解决Amazon Lex返回超链接响应(不使用ResponseCard)的问题
首先得说,你当前遇到的问题根源很明确——用了PlainText类型的消息,Lex会把这种类型的内容完全当作纯文本处理,根本不会解析HTML标签,所以你的链接代码才会原封不动显示成字符串。
下面给你具体的调整方案和思路:
1. 改用CustomPayload内容类型
Lex支持CustomPayload这个类型,它允许你发送自定义格式的内容,像Web前端、Facebook Messenger这类支持HTML的集成渠道,就能正常解析里面的<a>标签。调整后的代码是这样的:
var message = { 'contentType': 'CustomPayload', 'content': 'We offer x,y,z. For more information, visit our <a href="www.xyz.com">website</a>' };
不过要注意两个点:
- Lex自带的测试控制台可能还是不会渲染HTML(它主要用来验证文本逻辑),但只要把机器人集成到支持HTML解析的外部平台,这个链接就能正常显示并点击。
- 不同渠道对HTML的支持不一样,比如Slack得用它自己的链接格式
[website](www.xyz.com),你可以在Lambda里根据渠道类型动态调整CustomPayload的内容。
2. 语音场景的补充方案(如果需要)
如果你的机器人要支持语音交互(比如和Alexa集成),可以用SSML类型,通过语音引导用户访问链接,但SSML本身不支持可点击的超链接——它只负责语音输出,所以这个方案只适用于语音交互场景,文本交互不适用。
举个SSML的例子:
var message = { 'contentType': 'SSML', 'content': '<speak>We offer x, y, z. For more information, visit our website at www.xyz.com</speak>' };
关键提醒
要是你必须在Lex内置测试控制台里看到可点击的链接,那目前确实没办法——因为控制台只支持PlainText和简单的ResponseCard展示,不解析HTML。但只要集成到外部支持HTML的平台,CustomPayload就能正常生效。另外尽量只用基础的<a>标签,复杂HTML在不同渠道的兼容性很差。
内容的提问来源于stack exchange,提问作者Anoop
相关产品推荐
相关产品推荐

