2017-02-10 2 views
0

Ich benutze das Node.js SDK, um einen Bot für Skype zu erstellen, mit dem Microsoft Bot-Framework.CardAction und Nachricht angezeigt (node.js SDK - Skype-Kanal)

Ich experimentiere nur wenige verschiedene Verhaltensweisen und habe einige Probleme.

Zum Beispiel habe ich eine Reihe von ThumbNails-Karten mit Bild, Text und jeweils 3 Tasten erstellt. Ein Knopf öffnet eine Webseite. Die anderen beiden werden in einer Eingabeaufforderung verwendet, um in der Konversation fortzufahren. Das Problem ist, dass ich glaube, ich muss das Etikett für die Aufforderung zur Arbeit zeigen. Ist das richtig? Da das Etikett möglicherweise lang ist/oder es für den Benutzer möglicherweise keinen Sinn macht, wieder zu sehen, was er gedrückt hat.

Ich versuche, einige Code einzufügen, um zu versuchen und besser zu erklären:

bot.dialog('/mydialog', [ 
    function (session) { 
    // Ask the user to select an item from a carousel. 
    var msg = new builder.Message(session) 
     .textFormat(builder.TextFormat.xml) 
     .attachmentLayout(builder.AttachmentLayout.carousel) 
     .attachments([ 
      new builder.ThumbnailCard(session) 
       .title("Card number 1") 
       .text("Description first card") 
       .images([ 
       builder.CardImage.create(session, "https://www.example.org/img1.gif") 
         .tap(builder.CardAction.showImage(session, "ttps://www.example.org/img1.gif")), 
      ]) 
       .buttons([ 
        builder.CardAction.openUrl(session, "https://google.com", "Website"), 
        builder.CardAction.imBack(session, "select:100", "button 1"), 
        builder.CardAction.imBack(session, "select:101", "Button2") 

       ]), 
      new builder.ThumbnailCard(session) 
       .title("Card 2") 
       .text("Description card 2") 
       .images([ 
        builder.CardImage.create(session, "https://image.jpg") 
         .tap(builder.CardAction.showImage(session, "https://image.jpg")), 
       ]) 
       .buttons([ 
        builder.CardAction.openUrl(session, "https://google.com", "Website"), 
        builder.CardAction.imBack(session, "select:200", "button3"), 
        builder.CardAction.imBack(session, "select:201", "button4") 
       ]), 
      ]); 

    builder.Prompts.choice(session, msg, "select:100|select:101|select:200|select:201"); 
}, 
function (session, results) { 
    var action, item; 
    var kvPair = results.response.entity.split(':'); 
    switch (kvPair[0]) { 
     case 'select': 
      action = 'selected'; 
      break; 
    } 
    switch (kvPair[1]) { 
     case '100': 
      item ="/dialog1"; 
      break; 
     case '101': 
      item ="/dialog2"; 
      break; 
     case '200': 
      item ="/dialog3"; 
      break; 
     case '201': 
      item ="/dialog4"; 
      break; 

    } 

      session.beginDialog(item); 
} 

]); 

Antwort

0

In Ihrem Fall wäre es besser, Dialog Aktionen zu verwenden. Wenn ein Knopf in einer Karte gedrückt wird, wird ein entsprechender Dialog gestartet. Nachdem es beendet ist, wird es zum aktuellen Dialog zurückkehren. Beachten Sie, dass Sie die Schaltflächen in den Karten jederzeit nach der Anzeige drücken können. Es kann also jederzeit passieren, weshalb Dialogaktionen hier die bessere Wahl sind.

bot.beginDialogAction("select:100:action:just:unique:name", 
     "/dialog1", { matches: "select:100"}); 
bot.beginDialogAction("select:101:action:just:unique:name", 
     "/dialog2", { matches: "select:101"}); 
// and so on. 

Beachten Sie, dass, wenn Sie nicht zu select:100 wollen wird im Chat angezeigt wird, können Sie builder.CardAction.postBack statt imBack verwenden (nicht auf allen Plattformen unterstützt).

+0

Hallo Sergey, vielen Dank für Ihre Antwort. Sie haben Recht damit, dass es jederzeit gedrückt werden kann, das könnte ein Problem sein. – jsabina

+0

Problem ist, dass sie den Knopf innerhalb der Karte wollen .. Ich werde versuchen, den postBack wie vorgeschlagen, danke! – jsabina

Verwandte Themen