2016-05-10 23 views
9

Ho iniziato a lavorare sul mio chatbot utilizzando Bot Builder SDK in C# e Microsoft Bot Framework. Ho distribuito il mio bot e posso interagire con esso. Attualmente mi sto concentrando su Facebook Messenger. Posso già mostrare schede e pulsanti su Messenger utilizzando Microsoft.Bot.Connector.Attachment. Puoi trovarlo in Bot Connector Documentation. Ora sto cercando di implementare messaggi personalizzati di Facebook, ma senza successo. Ecco il mio codice:Microsoft Bot Framework Messaggi Facebook personalizzati

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

Ad esempio, EchoDialog sta lavorando e ottengo risultati. Posso ottenere i dati nell'interfaccia del bot framework. Ecco il json che ottengo dal mio bot:

{ 
    "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 e nomi modificati.

Qualcuno è riuscito a ottenere FB Messenger per visualizzare i modelli utilizzando ChannelData?

Aggiornamento: Ho controllato da un altro account fb e sono riuscito a ottenere il modello ma solo per la prima volta. Ogni tentativo successivo mi è rimasto senza risposta.

risposta

6

Il tuo codice da allora, cosa intendi che "ogni tentativo successivo mi è rimasto senza risposta".?

ho fatto un BOT anche per Messenger, e funziona proprio come te. Questo è il mio codice

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

e questa mia funzione fare:

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 Code Modello:

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