2017-02-10 142 views
0

我正在使用Node.js SDK爲使用Microsoft bot框架的Skype創建bot。顯示CardAction和消息(node.js SDK - skype頻道)

我正在嘗試幾種不同的行爲,我遇到了一些問題。

例如,我創建了一組帶有圖像,文本和3個按鈕的ThumbNails卡片。一個按鈕打開一個網頁。另外兩個在Prompt.choice中用於繼續進行對話。 問題是我相信我需要顯示提示符工作的標籤。 這是正確的嗎? 因爲標籤可能很長/或者用戶再次看到他按下的內容可能沒有任何意義。

我嘗試粘貼一些代碼,試圖更好地解釋:

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

]); 

回答

0

在你的情況下,它會更好地使用對話的行動。當卡片中的按鈕被按下時,它將啓動相應的對話框。完成後,它將返回到當前對話框。請注意,您可以在顯示卡後隨時按下卡上的按鈕。所以,這可能會在任何時候發生,這就是爲什麼對話行爲在這裏是更好的選擇。

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. 

請注意,如果你不想select:100顯示在聊天過程中,你可以使用 builder.CardAction.postBack代替imBack(不支持所有平臺)。

+0

嗨謝謝,非常感謝您的回答。 你說得對,可以隨時按下,這可能是一個問題。 – jsabina

+0

問題是他們想要卡內的按鈕..我會嘗試postBack建議,謝謝! – jsabina