【问题标题】:Microsoft Bot Framework Custom Facebook MessagesMicrosoft Bot Framework 自定义 Facebook 消息
【发布时间】:2016-09-05 05:42:07
【问题描述】:

我已经开始使用 C# 中的 Bot Builder SDK 和 Microsoft Bot Framework 来开发我的聊天机器人。我已经部署了我的机器人并可以与之交互。目前我专注于facebook messenger。我已经可以使用 Microsoft.Bot.Connector.Attachment 在 Messenger 上显示卡片和按钮。您可以在Bot Connector Documentation 中找到它。 现在我正在尝试实现自定义 Facebook 消息,但没有成功。 这是我的代码:

public async Task<Message> Post([FromBody]Message message)
    {
        if (message.Type == "Message")
        {
            message.BotPerUserInConversationData = null;


            if (message.Text.Equals("test", StringComparison.InvariantCultureIgnoreCase))
            {
                var replyMessage = message.CreateReplyMessage();
                replyMessage.ChannelData = new
                {
                    notification_type = "NO_PUSH",
                    attachment = new
                    {
                        type = "template",
                        payload = new
                        {
                            template_type = "receipt",
                            recipient_name = "Stephane Crozatier",
                            order_number = "12345678902",
                            currency = "USD",
                            payment_method = "Visa 2345",
                            order_url = "http://petersapparel.parseapp.com/order?order_id=123456",
                            timestamp = "1428444852",
                            elements = new[]
                            {
                                new {
                                    title = "Classic White T-Shirt",
                                    subtitle = "100% Soft and Luxurious Cotton",
                                    quantity = 2,
                                    price = 50,
                                    currency = "USD",
                                    image_url = "http://petersapparel.parseapp.com/img/whiteshirt.png"
                                    },
                                new
                                    {
                                        title = "Classic Gray T-Shirt",
                                        subtitle = "100% Soft and Luxurious Cotton",
                                        quantity = 1,
                                        price = 25,
                                        currency = "USD",
                                        image_url = "http://petersapparel.parseapp.com/img/grayshirt.png"
                                    }
                            },
                            address = new
                            {
                                street_1 = "1 Hacker Way",
                                street_2 = "",
                                city = "Menlo Park",
                                postal_code = "94025",
                                state = "CA",
                                country = "US"
                            },
                            summary = new
                            {
                                subtotal = 75.00,
                                shipping_cost = 4.95,
                                total_tax = 6.19,
                                total_cost = 56.14
                            },
                            adjustments = new[]
                            {
                                new {name = "New Customer Discount", amount = 20},
                                new {name = "$10 Off Coupon", amount = 10}
                            }
                        }
                    }
                };

                return replyMessage;

            }

            // return our reply to the user
            try
            {
                return await Conversation.SendAsync(message, () => new EchoDialog());
            }
            catch (Exception exc)
            {
                return message.CreateReplyMessage(exc.Message);
            }
        }
        else
        {
            return HandleSystemMessage(message);
        }
    }

例如,EchoDialog 正在工作并且我得到了结果。我可以在机器人框架界面中获取数据。这是我从机器人那里得到的 json:

{
  "type": "Message",
  "id": "CeBI3NS7w0k",
  "conversationId": "D9b6pW1TY29TDUB5qx6CL5U59fv49oBQK5iKABIA0nFC0C8C",
  "created": "2016-05-10T09:34:46.5131971Z",
  "language": "en",
  "text": "",
  "attachments": [],
  "from": {
    "name": "TestBot",
    "channelId": "test",
    "address": "mytestbot",
    "id": "mytestbot",
    "isBot": true
  },
  "to": {
    "name": "devportal",
    "channelId": "test",
    "address": "devportal",
    "id": "JMQ0KLCKN6R",
    "isBot": false
  },
  "replyToMessageId": "FUjcCRhTmu0",
  "participants": [
    {
      "name": "devportal",
      "channelId": "test",
      "address": "devportal",
      "id": "JMQ0KLCKN6R",
      "isBot": false
    },
    {
      "name": "TestBot",
      "channelId": "test",
      "address": "mytestbot",
      "id": "mytestbot",
      "isBot": true
    }
  ],
  "totalParticipants": 2,
  "mentions": [],
  "channelConversationId": "mytestbot",
  "channelData": {
    "notification_type": "NO_PUSH",
    "attachment": {
      "type": "template",
      "payload": {
        "template_type": "receipt",
        "recipient_name": "Stephane Crozatier",
        "order_number": "12345678902",
        "currency": "USD",
        "payment_method": "Visa 2345",
        "order_url": "http://petersapparel.parseapp.com/order?order_id=123456",
        "timestamp": "1428444852",
        "elements": [
          {
            "title": "Classic White T-Shirt",
            "subtitle": "100% Soft and Luxurious Cotton",
            "quantity": 2,
            "price": 50,
            "currency": "USD",
            "image_url": "http://petersapparel.parseapp.com/img/whiteshirt.png"
          },
          {
            "title": "Classic Gray T-Shirt",
            "subtitle": "100% Soft and Luxurious Cotton",
            "quantity": 1,
            "price": 25,
            "currency": "USD",
            "image_url": "http://petersapparel.parseapp.com/img/grayshirt.png"
          }
        ],
        "address": {
          "street_1": "1 Hacker Way",
          "street_2": "",
          "city": "Menlo Park",
          "postal_code": "94025",
          "state": "CA",
          "country": "US"
        },
        "summary": {
          "subtotal": 75,
          "shipping_cost": 4.95,
          "total_tax": 6.19,
          "total_cost": 56.14
        },
        "adjustments": [
          {
            "name": "New Customer Discount",
            "amount": 20
          },
          {
            "name": "$10 Off Coupon",
            "amount": 10
          }
        ]
      }
    }
  },
  "hashtags": []
} 

*ID 和名称已更改。

有没有人设法让 FB Messenger 使用 ChannelData 显示模板?

更新:我从另一个fb帐户检查并成功获取模板,但只是第一次。每次下一次尝试都让我没有回应。

【问题讨论】:

    标签: c# botframework facebook-messenger chatbot


    【解决方案1】:

    你的代码很好,你是什么意思“每次下一次尝试都让我没有响应。”?

    我也为 Messenger 做了一个 BOT,它和你一样工作。这是我的代码

        public async Task<Message> Post([FromBody]Message message)
        {
            if (message.Type == "Message"){
                Message ReplyMessage = message.CreateReplyMessage();
                ReplyMessage.ChannelData = getFBFunctionMenu();
                return ReplyMessage;
            }else{return HandleSystemMessage(message);}
        }
    

    这是我的功能:

        public object getFBFunctionMenu(){
            Models.Messenger fbmsg = new Models.Messenger();
            fbmsg.ChannelData = new MessengerChannelData { notification_type = "NO_PUSH", attachment = new MessengerAttachment { payload = new MessengerPayload() } };
            fbmsg.ChannelData.attachment.type = "template";
            fbmsg.ChannelData.attachment.payload.template_type = "generic";
            List<MessengerElement> e = new List<MessengerElement>();
            List<MessengerButton> bs = new List<MessengerButton>();
            bs.Add(new MessengerButton{type = "web_url",title = "Facebook",url ="http://www.facebook.com/"});
            bs.Add(new MessengerButton{type = "web_url",title = "Google",url ="http://www.google.com/"});
            bs.Add(new MessengerButton{type = "web_url",title = "Amazon",url ="http://www.amazon.com/"});
            e.Add(new MessengerElement
            {
                title = "My Favorte Site",
                subtitle = "some descript",
                item_url = "http://localhost/",
                image_url = "http://loalhost/img.png",
                buttons = bs.ToArray()
            });
            fbmsg.ChannelData.attachment.payload.elements = e.ToArray();
            return fbmsg.ChannelData;
        }
    

    我的模型代码:

     namespace WiAdvance.BotConnector.Messenger.Models
     {
    
    public class Messenger
    {
        public MessengerChannelData ChannelData { get; set; }
    }
    public class MessengerChannelData
    {
        public string notification_type { get; set; }
        public MessengerAttachment attachment { get; set; }
    }
    public class MessengerAttachment
    {
        public string type { get; set; }
        public MessengerPayload payload { get; set; }
    }
    
    public class MessengerPayload
    {
        public string template_type { get; set; }
        public MessengerElement[] elements { get; set; }
    }
    
    public class MessengerElement
    {
        public string title { get; set; }
        public string subtitle { get; set; }
        public string item_url { get; set; }
        public string image_url { get; set; }
        public MessengerButton[] buttons { get; set; }
    }
    
    public class MessengerButton
    {
        public string type { get; set; }
        public string url { get; set; }
        public string title { get; set; }
        public string payload { get; set; }
    }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-28
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多