【问题标题】:How to display a welcome message from my Bot using Microsoft Bot Framework如何使用 Microsoft Bot Framework 显示来自我的 Bot 的欢迎消息
【发布时间】:2017-08-14 02:18:19
【问题描述】:

我想在有人连接到我的机器人时显示欢迎消息。我使用了 github (https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/demo-ContosoFlowers) 上的 demo-ContosoFlowers 示例中的技术,该技术在 Bot Framework Emulator 中运行良好,但在 Skype 或 Facebook Messenger 中却不行。具体来说,MessageController.HandleSystemMessage 中的这段代码不会触发:

        else if (message.Type == ActivityTypes.ConversationUpdate)
        {
            if (message.MembersAdded.Any(o => o.Id == message.Recipient.Id))
            {
                var reply = message.CreateReply(Resources.RootDialog_Welcome_Message);

                ConnectorClient connector = new ConnectorClient(new Uri(message.ServiceUrl));

                await connector.Conversations.ReplyToActivityAsync(reply);
            }
        }

有人知道如何正确执行此操作吗?

【问题讨论】:

    标签: c# botframework


    【解决方案1】:

    我今天还试用了 ContosoFlowers 演示。我遇到了您描述的相同行为:在模拟器中,触发了 ConversationUpdate 代码,但在 Skype 中没有。但是,我确实注意到 ContactRelationUpdate 活动类型确实在 Skype 中触发(我没有尝试过 Facebook Messenger)。如果您的目标是在有人“连接”到您的机器人时显示欢迎消息,您可以尝试使用 ContactRelationUpdate 活动类型,如下所示:

    else if (message.Type == ActivityTypes.ContactRelationUpdate)
    {
        if(message.Action == "add")
        {
            var reply = message.CreateReply("WELCOME!!!");
            ConnectorClient connector = new ConnectorClient(new Uri(message.ServiceUrl));
            await connector.Conversations.ReplyToActivityAsync(reply);
        }
    }
    

    【讨论】:

    • 我对此进行了测试,现在我在 Skype 中得到了预期的行为。 Facebook Messenger 我仍然不确定。我同意这样更好,并且我们已经实施了更改,但是我想在新对话开始时发送欢迎消息,而不仅仅是在添加新联系人时。我会继续调查。感谢您的帮助埃里克
    • 我想显示一个“欢迎用户名!!!”信息。知道为什么 message.From.Name 在此状态下不可用吗?因为它在我发送用户的第一条消息后可用,但我需要它作为问候消息...
    • 我尝试了这个解决方案,但我得到的 'message.Action' 为空。
    【解决方案2】:

    创建一个类并将其包含在您的 fb 回调 url 中。 FacebookProfile 是我的班级,在通话后保存姓名和其他信息。

     public static async Task<FacebookProfile> GetFacebookProfile(string accessToken)
                {
                    var uri = GetUri("https://graph.facebook.com/v2.6/me",
                        Tuple.Create("fields", "name,email,id,first_name,last_name"),
                        Tuple.Create("access_token", accessToken));
    
                    var res = await FacebookRequest<FacebookProfile>(uri);
                    return res;
                }
    

    【讨论】:

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