2017-07-02 8 views
2

Also versuche ich, vorgeschlagene Karten zu verwenden, um einen schöneren Knopfeingang für einen WebChat-Bot zu geben, wenn niemand andere Vorschläge hat? Habe zur Zeit die builder.prompts funktioniert.Microsoft BotFramework - Vorgeschlagene Karten

aber mein Problem ist, das folgende Beispiel verwenden:

var msg = new builder.Message(session) 
    .text("Thank you for expressing interest in our premium golf shirt! What color of shirt would you like?") 
    .suggestedActions(
     builder.SuggestedActions.create(
       session, [ 
        builder.CardAction.imBack(session, "productId=1&color=green", "Green"), 
        builder.CardAction.imBack(session, "productId=1&color=blue", "Blue"), 
        builder.CardAction.imBack(session, "productId=1&color=red", "Red") 
       ] 
      )); 
session.send(msg); 

Wie komme ich eigentlich die Antwort? Es schreibt automatisch den Benutzerwert in den Chat (den ich zu vermeiden versuche) Habe versucht, response.entity usw. zu verwenden, aber nichts gibt es zurück.

Die Dokumentation sagt "Wenn der Benutzer eine der vorgeschlagenen Aktionen antippt, erhält der Bot eine Nachricht vom Benutzer, die den Wert der entsprechenden Aktion enthält."

Danke.

Antwort

3

Ein paar Dinge dafür.

Zunächst steht im Grunde für IM zurück oder Instant Message zurück. Es sendet die Antwort an die Konversation. Sie wollen postBack, die die Antwort verbergen wird, aber bedenken Sie, dass für einige Kanäle postBack auf imBack zugeordnet wird, so dass Sie einige Untersuchungen durchführen müssen. Für den Bot-Emulator wird postBack die Antwort ausblenden.

Für die zweite Sache, wenn Sie Ihre Konsole sehen, wenn der Bot läuft, sehen Sie, dass der Bot auf dem Weg zu diesem Wert im imBack Methode versuchen. Sie sollten dies durch einen Dialog oder eine Absicht erfassen. Hier ist ein kleines, wahrscheinlich ineffizient Beispiel:

intents.matches(/^suggest/i, [(session) => { 
    var msg = new builder.Message(session) 
     .text("Thank you for expressing interest in our premium golf shirt! What color of shirt would you like?") 
     .suggestedActions(
      builder.SuggestedActions.create(
        session, [ 
         builder.CardAction.postBack(session, "productId=1&color=green", "Green"), 
         builder.CardAction.postBack(session, "productId=1&color=blue", "Blue"), 
         builder.CardAction.postBack(session, "productId=1&color=red", "Red") 
        ] 
       )); 
     session.send(msg); 
}]); 

intents.matches(/^productId/i, [ 
    (session, args, next) => { 
     console.log(args); 
    } 
]); 

In dem obigen Beispiel, dass ist Absicht Dialoge verwenden, kann ich auf den Wert aus dem matched Array, das in dem args des zweiten intent.matches Methodenaufrufes ist.

Es gibt andere Möglichkeiten, dies zu tun, aber dies ist ein schnelles und schmutziges Beispiel.

+0

Super, danke für Ihre Hilfe. –

Verwandte Themen