2016-05-10 7 views
9

Ich habe begonnen, auf meinem Chatbot mit Bot Builder SDK in C# und Microsoft Bot Framework zu arbeiten. Ich habe meinen Bot eingesetzt und kann damit interagieren. Momentan konzentriere ich mich auf Facebook Messenger. Ich kann bereits Karten und Schaltflächen auf Messenger mit Microsoft.Bot.Connector.Attachment zeigen. Sie können es in Bot Connector Documentation finden. Jetzt versuche ich, benutzerdefinierte Facebook-Nachrichten zu implementieren, aber ohne Erfolg. mein Code hier:Microsoft Bot Framework Benutzerdefinierte Facebook-Nachrichten

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); 
     } 
    } 

Zum Beispiel EchoDialog arbeitet und ich bekomme Ergebnisse. Ich kann Daten in der Botframeworkschnittstelle erhalten. Hier ist der JSON, den ich von meinem Bot bekomme:

{ 
    "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": [] 
} 

* IDs und Namen geändert.

Hat es jemand geschafft, FB Messenger zur Anzeige von Vorlagen mit ChannelData zu bekommen?

Update: Ich überprüfte es von einem anderen fb-Konto und gelang es, Vorlage aber nur zum ersten Mal zu erhalten. Jeder nächste Versuch blieb mir ohne Antwort.

Antwort

6

Ihr Code seit gut, was meinst du, dass "jeder nächste Versuch mir wiathout Antwort blieb."?

Ich habe auch eine BOT für Messenger gemacht, und es funktioniert genau wie du. Dies ist mein Code

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);} 
    } 

und dies meine Funktion tun:

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; 
    } 

My Model Code:

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; } 
} 
}