2016-05-03 5 views
4

Ich arbeite an einem Bot mit dem C# Microsoft Bot Framework und ich möchte Nachrichten mit Aktionsschaltflächen an Facebook Messenger senden. Ich habe den Bot erfolgreich erstellt, ihn bereitgestellt und kann über Messenger mit ihm kommunizieren und versuche nun, das Erscheinungsbild der Bot-Antworten zu verfeinern. Ich konnte einzelne Karten und Karussells erstellen, indem ich die Karteninformationen in Message.Attachements platzierte, aber ich möchte auch Aktionsschaltflächen hinzufügen. Die Messenger-Plattform-Dokumente beschreiben Button und "generische" Vorlagen in ihrem Send API Reference, aber für das Leben von mir kann ich nicht herausfinden, wie man den Bot-Connector zwingt, Knöpfe an Messenger zu senden. Es wäre großartig, wenn ich einfach den Send-API-JSON in die Message.ChannelData-Eigenschaft einfügen könnte, aber kein Glück. Hat es jemand geschafft, Messenger dazu zu bringen, Buttons aus dem Bot-Framework anzuzeigen?Microsoft Bot Framework Nachrichten mit Schaltflächen in Facebook Messenger

Antwort

7

Um Ihrer Nachricht Schaltflächen hinzuzufügen, können Sie dem Anhang mehrere Aktionen hinzufügen. Jede Aktion wird nach Konnektor einer Schaltfläche zugeordnet. Mehrere Anhänge werden einem Karussell in Facebook Messenger zugeordnet. Im Folgenden finden Sie ein Beispiel für das Hinzufügen von 3 Schaltflächen zur Nachricht.

  var reply = context.MakeMessage(); 
      reply.Attachments = new List<Attachment>(); 

      var actions = new List<Microsoft.Bot.Connector.Action>(); 
      for (int i = 0; i < 3; i++) 
      { 
       actions.Add(new Microsoft.Bot.Connector.Action 
       { 
        Title = $"Button:{i}", 
        Message = $"Action:{i}" 
       }); 
      } 

      reply.Attachments.Add(new Attachment 
      { 
       Title = "Choose one:", 
       Actions = actions 
      }); 

      await context.PostAsync(reply); 
+2

Awesome! Das hat perfekt funktioniert. Mein Problem war, dass ich eine alte Version der Microsoft.Bot.Connector Nuget-Bibliothek hatte, die die Aktionen nicht hatte. Erforderlich für ein Upgrade auf Version 1.1.0. Vielen Dank! – Bill

+1

Welcher Typ ist Kontext? Könnten Sie bitte die gesamte Methode posten? Ich versuche gerade, von v3 auf v1 zu downgraden, um zu sehen, ob Buttons funktionieren (in v3 werden sie nicht korrekt angezeigt und funktionieren auch nicht auf Skype auf Facebook Messenger). – Alin

+0

Ich denke Kontext wäre jede Implementierung von IDialogContext – dodoconr

1

Updating Lösung für Version 3.9.0:

 var actions = new List<CardAction>(); 
     for (int i = 0; i < 3; i++) 
     { 
      actions.Add(new CardAction 
      { 
       Title = $"Button:{i}", 
       Text = $"Action:{i}" 
      }); 
     } 

     reply.Attachments.Add(
      new HeroCard 
      { 
       Title = "Choose option", 
       Buttons = actions 
      }.ToAttachment() 
     ); 

     await context.PostAsync(reply);