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

如何在contactRelationUpdate事件中发送建议按钮?是否存在会话限制?

解决contactRelationUpdate事件中发送带建议按钮消息的问题

首先明确:这不属于功能限制,我们可以通过提取事件中的关键信息来手动构造并发送带附件(建议按钮)的消息,不需要依赖完整的session对象。以下是两种可行的实现方案:

方案1:从message参数提取核心字段构造消息

contactRelationUpdate事件传入的message参数里已经包含了发送消息所需的所有关键信息,比如serviceUrl、conversation.id、recipient.id等,我们可以直接用这些字段来构造带按钮的消息并发送。

以JavaScript为例(Bot Framework v4):

// 处理contactRelationUpdate事件
async onContactRelationUpdate(context) {
  if (context.activity.action === 'add') {
    // 从事件中提取必要信息
    const { serviceUrl, conversation, recipient } = context.activity;
    
    // 构造带建议按钮的Hero卡片
    const welcomeCard = {
      contentType: 'application/vnd.microsoft.card.hero',
      content: {
        text: '欢迎添加我!点击下方按钮开始互动吧',
        buttons: [
          {
            type: 'imBack',
            title: '获取帮助',
            value: '帮助'
          },
          {
            type: 'openUrl',
            title: '查看教程',
            value: 'https://example.com/tutorial'
          }
        ]
      }
    };

    // 构造完整的消息对象
    const replyMessage = {
      type: 'message',
      text: '欢迎加入!',
      attachments: [welcomeCard]
    };

    // 使用适配器发送消息
    await context.adapter.sendActivities(
      serviceUrl,
      conversation.id,
      recipient.id,
      [replyMessage]
    );
  }
}

方案2:利用Bot Framework上下文的createReply方法

如果你的Bot Framework版本支持,context对象本身提供了createReply()方法,即使没有完整session,也能直接创建带附件的回复消息,这种方式更简洁:

async onContactRelationUpdate(context) {
  if (context.activity.action === 'add') {
    // 创建基础回复
    const reply = context.createReply('欢迎来到我的服务!');
    
    // 添加建议按钮卡片
    reply.attachments = [{
      contentType: 'application/vnd.microsoft.card.hero',
      content: {
        buttons: [
          { type: 'imBack', title: '开始对话', value: '开始' },
          { type: 'openUrl', title: '了解更多', value: 'https://example.com' }
        ]
      }
    }];

    // 发送消息
    await context.sendActivity(reply);
  }
}

注意事项

  • 不同渠道(Skype/Messenger)对卡片元素的支持有细微差异,建议在目标渠道中测试按钮的显示和交互效果;
  • 确保serviceUrl是有效的,contactRelationUpdate事件中的serviceUrl是当前会话的有效端点,无需额外处理;
  • 如果使用的是Bot Framework的其他语言版本(比如C#),核心逻辑一致:从事件中提取会话和端点信息,构造带附件的消息后发送。

内容的提问来源于stack exchange,提问作者Aren Hovsepyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:32:29