2017-02-10 8 views
0

Я использую SDK Node.js, чтобы создать бот для skype, используя инфраструктуру ботов Microsoft.CardAction и сообщение показано (node.js SDK - skype channel)

Я экспериментирую с несколькими разными типами поведения, и у меня возникают некоторые проблемы.

Например, я создал набор карт 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