2017-02-10 10 views
0

私はNode.js SDKを使用して、Microsoftボットフレームワークを使用してSkype用のボットを作成しています。CardActionとメッセージ表示(node.js SDK - skypeチャンネル)

私はいくつかの異なる動作を実験しており、いくつか問題があります。

たとえば、画像、テキスト、3つのボタンでサムネイルカードを作成しました。 1つのボタンでWebページを開きます。他の2つは、会話を進めるために、プロンプトで使用されます。 問題は、プロンプトを表示するためにラベルを表示する必要があると考えていることです。 これは間違いありませんか? ラベルが長すぎるか、またはユーザーが彼が何を押したかを再度見ることができない可能性があるためです。

私が試してみて、よりよく説明するためにいくつかのコードを貼り付けてみてください:あなたのケースで

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

ダイアログのアクションを使用する方が良いでしょう。カード内のボタンが押されると、対応するダイアログが開始されます。終了後、現在のダイアログに戻ります。カードが表示された後はいつでもボタンを押すことができます。したがって、いつでもダイアログアクションがより良い選択となる理由があります。あなたがチャットに表示されているselect:100にしたくない場合は、あなたが builder.CardAction.postBack代わりのimBackは、(すべてのプラットフォームでサポートされていません)を使用すること

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. 

注意。

+0

こんにちはSergey、ありがとうございました。 これはいつでも押すことができると言っているので、問題になる可能性があります。 – jsabina

+0

問題は、カード内のボタンが欲しいということです。私はポストバックを試みます。 – jsabina

関連する問題