【问题标题】:Bot Framework V3 - How to define HandleSystemMessageBot Framework V3 - 如何定义 HandleSystemMessage
【发布时间】:2016-08-31 08:26:07
【问题描述】:

我正在努力使用 Microsoft Bot Framework 将我的机器人从 V1 移植到 V3。

如果我无法找到要下载的完整示例,那么我遇到了与前一个略有不同的 HandleSystemMessage 函数的问题,并且无法找到解释如何定义它的示例代码或文档。

我的理解应该是这样的:

private async void HandleSystemMessage(Activity message)
{
}

但是里面的代码呢?如何处理过去的事情?

谢谢

【问题讨论】:

    标签: bots botframework


    【解决方案1】:

    请参阅以下文档以将您的机器人从 V1 更新到 V3 https://docs.botframework.com/en-us/support/upgrade-to-v3/#navtitle

    Microsoft People 提供了开发自己的机器人的示例,请参阅下面的链接包含一些示例,例如 Echo Bot、Sand Witch Bot 和 Pizza Bot 等。 https://github.com/Microsoft/BotBuilder/tree/master/CSharp/Samples

    类似于 V1 bot,V3 bot 具有如下 Activity 类型

    如果您想了解有关活动类型的更多信息,请参阅下面的链接

    https://docs.botframework.com/en-us/csharp/builder/sdkreference/activities.html

    HandleSystemMessage(活动消息)方法的示例代码。

      private async Task<Activity> HandleSystemMessage(Activity message)
        {
            if (message.Type == ActivityTypes.DeleteUserData)
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                // Handle conversation state changes, like members being added and removed
                // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
                // Not available in all channels
                IConversationUpdateActivity conversationupdate = message;
                using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
                {
                    var client = scope.Resolve<IConnectorClient>();
                    if (conversationupdate.MembersAdded.Any())
                    {
                        var reply = message.CreateReply();
                        foreach (var newMember in conversationupdate.MembersAdded)
                        {
                            if (newMember.Id != message.Recipient.Id)
                            {
                                reply.Text = $"Welcome {newMember.Name}! ";
                            }
                            else
                            {
                                reply.Text = $"Welcome {message.From.Name}";
                            }
                            await client.Conversations.ReplyToActivityAsync(message);
                        }
                    }
                }
            }
            else if (message.Type == ActivityTypes.ContactRelationUpdate)
            {
                // Handle add/remove from contact lists
                // Activity.From + Activity.Action represent what happened
                IContactRelationUpdateActivity update = message;
                using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
                {
                    var client = scope.Resolve<IConnectorClient>();
                    if (update.Action.ToLower() == "add")
                    {
                        var reply = message.CreateReply();
                        reply.Text = $"Welcome to the XXXX bot! To start an conversation with this bot send **XXXX** or **XXXX** command.\r \n if you need help, send the **Help** command.";
                        await client.Conversations.ReplyToActivityAsync(reply);
                    }
                }
            }
            else if (message.Type == ActivityTypes.Typing)
            {
                // Handle knowing tha the user is typing
            }
            else if (message.Type == ActivityTypes.Ping)
            {
            }
    
            return null;
        }
    

    希望对你有帮助

    -基肖尔

    【讨论】:

    • 不确定为什么不接受这个答案。当您粘贴此代码时,您可以在此处添加关于命名空间的几件事需要添加到默认模板中。喜欢使用 Autofac;使用 Microsoft.Bot.Builder.Dialogs;并使用 System.Linq。并感谢它为我所做的工作。
    【解决方案2】:

    它位于入门模板中,您可以下载here。为了您的方便,我把它复制在这里。

    private Activity HandleSystemMessage(Activity message)
    {
        if (message.Type == ActivityTypes.DeleteUserData)
        {
            // Implement user deletion here
            // If we handle user deletion, return a real message
        }
        else if (message.Type == ActivityTypes.ConversationUpdate)
        {
            // Handle conversation state changes, like members being added and removed
            // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
            // Not available in all channels
        }
        else if (message.Type == ActivityTypes.ContactRelationUpdate)
        {
            // Handle add/remove from contact lists
            // Activity.From + Activity.Action represent what happened
        }
        else if (message.Type == ActivityTypes.Typing)
        {
            // Handle knowing tha the user is typing
        }
        else if (message.Type == ActivityTypes.Ping)
        {
        }
    
        return null;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      相关资源
      最近更新 更多