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

使用Microsoft Bot Framework无法在Skype for Business显示欢迎消息求助

解决Skype for Business中欢迎消息不生效的问题

嘿,这个问题我之前也碰到过!主要是因为Skype for Business(简称SfB)作为企业级渠道,对Bot Framework的事件处理逻辑和模拟器、Web Chat不一样,你的示例代码可能没适配它的特殊行为。下面是你可能缺失的关键部分:

1. 精准识别用户加入的事件,排除Bot自身

SfB在会话创建时,会把Bot自己也加入到membersAdded数组里,而很多示例代码只是简单检查有没有成员加入,导致Bot误把自己加入的事件当成用户加入,自然不会触发欢迎消息。你需要加个判断,只处理非Bot成员的加入:

protected override async Task OnConversationUpdateActivityAsync(ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    foreach (var member in turnContext.Activity.MembersAdded)
    {
        // 排除Bot自己,只响应真实用户的加入
        if (member.Id != turnContext.Activity.Recipient.Id)
        {
            await turnContext.SendActivityAsync(MessageFactory.Text("欢迎使用我的机器人!有什么我能帮你的吗?"), cancellationToken);
        }
    }
    await base.OnConversationUpdateActivityAsync(turnContext, cancellationToken);
}

2. 增加"首次消息触发欢迎"的 fallback 逻辑

有时候SfB不会在用户打开会话时立即发送conversationUpdate事件,这时候就需要退而求其次:在用户发送第一条消息时,主动发送欢迎消息。你可以用会话状态来标记是否已经发过欢迎消息,避免重复发送:

// 先定义一个会话状态类
public class ConversationData
{
    public bool WelcomeMessageSent { get; set; } = false;
}

// 在OnMessageActivityAsync里处理
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    var conversationStateProperty = _conversationState.CreateProperty<ConversationData>(nameof(ConversationData));
    var conversationData = await conversationStateProperty.GetAsync(turnContext, () => new ConversationData());

    // 如果还没发过欢迎消息,先发送
    if (!conversationData.WelcomeMessageSent)
    {
        await turnContext.SendActivityAsync(MessageFactory.Text("嗨!欢迎来到我的机器人会话~"), cancellationToken);
        conversationData.WelcomeMessageSent = true;
        await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken);
    }

    // 处理用户的正常消息逻辑
    await turnContext.SendActivityAsync(MessageFactory.Text($"我收到你说的:{turnContext.Activity.Text}"), cancellationToken);
}

3. 检查SfB渠道的配置是否正确

最后别忘了确认你的Bot已经在Azure门户的Bot Channels Registration里正确启用了Skype for Business渠道,权限设置也没问题(比如允许内部用户发起会话),有时候配置问题也会导致消息发不出去。

为什么模拟器和Web Chat能正常运行?因为它们在用户首次连接时,会明确发送只包含用户的conversationUpdate事件,不需要额外判断,所以示例代码直接就能生效;但SfB的事件机制更贴合企业场景,需要更严谨的逻辑适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:28:07