You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Twilio向WhatsApp发送Hero卡片报错如何解决

问题说明

基于Bot Framework Node.js SDK开发的聊天机器人完成WhatsApp(Twilio通道)集成后,尝试发送Hero卡片实现按钮交互时触发运行错误,错误信息如下:

Error: TwilioWhatsAppAdapter.parseActivity():
 An activity text or attachment with contentUrl must be specified.
故障原因

Twilio官方提供的WhatsApp适配器对Bot Framework原生Hero卡片的解析有强制校验规则:

  • Hero卡片必须传入带有效contentUrl的媒体附件(通常是公网可访问的HTTPS图片),如果只配置标题、文本和按钮、留空媒体字段,就会直接抛出上述解析错误
  • 适配器不会自动将无媒体的Hero卡片转换为WhatsApp支持的原生交互消息格式,不存在隐式转换逻辑
可行解决方案
  • 补全Hero卡片必填的媒体参数
    给Hero卡片添加公网可访问的HTTPS协议图片,填入卡片的媒体字段(对应contentUrl校验要求),即可通过解析正常下发,参考代码:

    const { MessageFactory, CardFactory } = require('botbuilder');
    
    const interactiveCard = CardFactory.heroCard(
        '功能选择',
        '请点击下方按钮选择需要办理的业务',
        ['https://替换为自己的公网HTTPS图片地址.png'], // 该字段不可留空,否则触发解析错误
        CardFactory.actions([
            { type: 'imBack', title: '业务咨询', value: 'consult' },
            { type: 'imBack', title: '进度查询', value: 'query' }
        ])
    );
    await turnContext.sendActivity(MessageFactory.attachment(interactiveCard));
    

    注意:该方式下发的内容在WhatsApp端会先展示图片、标题、文本,按钮以快速回复形式展示,不会完全对齐其他渠道的Hero卡片排版

  • 直接通过channelData传递WhatsApp原生交互结构
    跳过Bot Framework原生卡片封装,直接在活动的channelData字段写入Twilio支持的WhatsApp交互式消息格式,不需要强制附带contentUrl媒体资源,适配稳定性更高,参考代码:

    await turnContext.sendActivity({
        text: '请选择需要的操作',
        channelData: {
            persistentAction: [
                { "type": "reply", "title": "业务咨询", "payload": "consult" },
                { "type": "reply", "title": "进度查询", "payload": "query" }
            ]
        }
    });
    
  • 用Suggested Actions实现纯按钮交互
    如果不需要卡片的图文展示效果,直接使用Bot Framework原生的建议动作(Suggested Actions)下发按钮,Twilio适配器对该组件的适配不需要contentUrl参数,不会触发解析错误,参考代码:

    const { MessageFactory } = require('botbuilder');
    const replyMsg = MessageFactory.text('请选择对应操作选项');
    replyMsg.suggestedActions = {
        actions: [
            { type: 'imBack', title: '业务咨询', value: 'consult' },
            { type: 'imBack', title: '进度查询', value: 'query' }
        ],
        to: []
    };
    await turnContext.sendActivity(replyMsg);
    
注意事项
  • WhatsApp单条交互消息最多支持3个按钮,超出数量会被Twilio接口直接拦截
  • 卡片使用的图片链接必须是公网可无鉴权访问的HTTPS地址,不支持HTTP链接、内网地址、带权限校验的私有资源地址

内容的提问来源于stack exchange,提问作者hamza khalid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:21:34