如何从facebook messenger Bot Framework C#

时间:2017-05-15 10:14:52

标签: c# botframework facebook-messenger

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

任何帮助将不胜感激。

由于

1 个答案:

答案 0 :(得分:2)

(也在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;
}

正如您所看到的,有趣的值是字段" Postback.Referral.Reference" OR" Referral.Reference"在这个ChannelData中(假设它是一个新的对话),所以我要检查第一个是否为null并且在这种情况下试图获得第二个

希望它会有所帮助。

PS:不要忘记在Messenger机器人设置上设置开始按钮。