【问题标题】:How can I get Referral params from facebook messenger Bot Framework C#如何从 facebook messenger Bot Framework C# 获取推荐参数
【发布时间】:2017-05-17 21:56:12
【问题描述】:

我想根据 Facebook 用户用于访问我的机器人的链接为他们初始化一些数据。我找到了这篇文章: https://developers.facebook.com/docs/messenger-platform/referral-params 但我不知道如何从机器人框架(C#)获取推荐参数。我的目的是基于这样的链接设置用户数据:https://m.me/{BOT_ID}?ref={SOME_MESSAGE}

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: c# botframework facebook-messenger


    【解决方案1】:

    (在github上的问题跟踪器之后也在这里回复以分享我的解决方案)

    我成功地尝试做同样的事情。 首先奇怪的一点:请注意,如果您之前与机器人交谈过,则该值不在同一个地方...

    所以我正在做以下事情:

    • 定义了一个FacebookChannelData类,其中RefParameter是你想要的参数,以便从收到的json消息中获取这些字段

    代码:

    public class FacebookChannelData
    {
        [JsonProperty("Sender")]
        public Sender Sender { get; set; }
    
        [JsonProperty("Recipient")]
        public Recipient Recipient { get; set; }
    
        [JsonProperty("Timestamp")]
        public long Timestamp { get; set; }
    
        [JsonProperty("Postback")]
        public Postback Postback { get; set; }
    
        [JsonProperty("Referral")]
        public Referral Referral { get; set; }
    
        public string RefParameter
        {
            get
            {
                string val = "";
    
                if (Postback != null && Postback.Referral != null && !String.IsNullOrWhiteSpace(Postback.Referral.Reference))
                {
                    val = Postback.Referral.Reference;
                }
                else if (Referral != null && !String.IsNullOrWhiteSpace(Referral.Reference))
                {
                    val = Referral.Reference;
                }
                return val;
            }
        }
    }
    
    public class Recipient
    {
        [JsonProperty("Id")]
        public string Id { get; set; }
        [JsonProperty("Name")]
        public string Name { get; set; }
    }
    
    public class Sender
    {
        [JsonProperty("Id")]
        public string Id { get; set; }
    
        [JsonProperty("Name")]
        public string Name { get; set; }
    }
    
    public class Postback
    {
        [JsonProperty("Payload")]
        public string Payload { get; set; }
    
        [JsonProperty("Referral")]
        public Referral Referral { get; set; }
    }
    
        public class Referral
        {
            [JsonProperty("Ref")]
            public string Reference { get; set; }
    
            [JsonProperty("Source")]
            public string Source { get; set; }
    
            [JsonProperty("Type")]
            public string Type { get; set; }
    }
    
    • 所以获取 facebook 传入消息的 ChannelData 就像:

    代码:

    if (incomingMessage.TryGetChannelData(out FacebookChannelData channelDataInfo))
    {
        return channelDataInfo.RefParameter;
    }
    else
    {
        return String.Empty;
    }
    

    如您所见,有趣的值是此 ChannelData 中的字段“Postback.Referral.Reference”或“Referral.Reference”(考虑到它是否是新对话),所以我正在检查是否第一个为空,在这种情况下试图获得第二个

    希望对您有所帮助。

    PS:不要忘记在您的 Messenger 机器人设置中设置一个开始按钮。

    【讨论】:

    • 如果该回复有帮助,请不要忘记接受,谢谢
    • 非常感谢您提供此解决方案!它让我很头疼
    • 这就是为什么我说“不要忘记在您的 Messenger 机器人设置中设置开始按钮。”在PS部分
    猜你喜欢
    • 2019-06-04
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2017-10-05
    • 2016-08-09
    相关资源
    最近更新 更多