Ποιος είναι ο σωστός τρόπος για να αποθηκεύσετε / κατάσταση κομμάτι μέσα σε ένα bot Facebook Messenger;

ψήφοι
8

Αν bot μου ζητά διαφορετικές ερωτήσεις και αν ο χρήστης απαντά σε κάθε ένα από αυτά, πώς μπορώ να μάθω ποια απάντηση σχετίζεται με τις οποίες ερώτηση. Υπάρχει ένα πεδίο που ονομάζεται μετα-δεδομένα που μπορείτε να συνδέσετε με το API sendTextMessage αλλά όταν ο χρήστης απαντά, η μεταδεδομένα έρχεται ως απροσδιόριστη. Έχετε παιδιά χρησιμοποιήσετε οποιοδήποτε κόμβο-cache για την παρακολούθηση κράτος ή μια FSM όπως machina.js; Πώς μπορώ καλύτερα να καταλάβω τι της συζήτησης αυτή τη στιγμή κολλήσει στην;

Δημοσιεύθηκε 22/08/2016 στις 09:11
πηγή χρήστη
Σε άλλες γλώσσες...                            


5 απαντήσεις

ψήφοι
2

Μπορείτε να έχετε έναν κωδικό κατάστασης στον κώδικά σας, για να παρακολουθείτε όπου η συνομιλία των χρηστών με το bot είναι.

Για παράδειγμα. αν έχετε 10 ερωτήσεις, να κρατήσει statuscode = 0 αρχικά, και να ζητήσει από το πρώτο ερώτημα. Όταν λάβετε ένα μήνυμα για να webhook σας, ελέγξτε αν statuscode == 0, και να αποθηκεύσετε το μήνυμα του χρήστη ως απάντηση στην πρώτη σας ερώτηση. Στη συνέχεια, αυξάνει statusCode = 1 και να ζητήσει την επόμενη ερώτηση.

Μπορείτε να έχετε πολλαπλές σημαίες και statusCodes να ασχοληθεί με διαφορετικές ροές συνομιλία.

Απαντήθηκε 30/08/2016 στις 10:52
πηγή χρήστη

ψήφοι
1

Τρέχω σε αυτό το θέμα ο ίδιος. Αν και δεν έχει αναφερθεί καθόλου στην τεκμηρίωσή τους, δεν νομίζω ότι συνδέονται μια βάση δεδομένων στη μνήμη είναι έξω από το θέμα. Φαίνεται ότι η user_idείναι η ίδια, ανεξάρτητα από το πότε αρχίζει η συζήτηση.

Κάνοντας μια κλήση API, κάθε φορά που ο χρήστης συνδεθεί ξανά στη συνεδρία κατά πάσα πιθανότητα θα επιβραδύνει την απόδοση του bot. Επίσης, παρατήρησα ότι δεν μπορείς να κατασκευάσει πραγματικά μια «ψευδο-κατανεμημένη βάση δεδομένων», χρησιμοποιώντας το κλειδί μεταδεδομένων στο API, αν αυτό είναι αυτό που προτείνει. Η ετικέτα μεταδεδομένων μπορούν να σταλούν από το διακομιστή -> πελάτη (Messenger), αλλά όχι από πελάτη -> Server από ό, τι λέει η τεκμηρίωση.

Απαντήθηκε 02/09/2016 στις 19:55
πηγή χρήστη

ψήφοι
2

Σύμφωνα με τις γνώσεις μου , στο Facebook chatbot μπορείτε να στείλετε δεδομένα από το χρήστη να chatbot μόνο με τον καθορισμό ωφέλιμο φορτίο από τα κουμπιά postback που έχουν δώσει στην αναφορά API .

Και chatbot δεν θα αποθηκεύσει τη συνεδρία σας ή οποιεσδήποτε καταστάσεις / σημαίες .Μπορείτε να ορίσετε την κατάσταση ή τις σημαίες ή συστοιχίες, αλλά όλα θα χαθούν κατά την ενημέρωση της εφαρμογής σας ή να κάνετε επανεκκίνηση του διακομιστή σας.

έτσι, αν θέλετε πραγματικά να το καθεστώς που θα πρέπει να χρησιμοποιήσετε τη βάση δεδομένων για that.and senderID θα παραμείνει ίδια κάθε φορά, έτσι ώστε να μπορεί να χειριστεί τα δεδομένα από τη βάση δεδομένων με το συγκεκριμένο id για το συγκεκριμένο χρήστη.

Για περισσότερες λεπτομέρειες ταμείο τεχνικών εμπορική επωνυμία εδώ .

Ελπίζω ότι αυτό θα βοηθήσει you.if έτσι, παρακαλούνται να το επισημάνετε ως απάντηση.

Απαντήθηκε 07/09/2016 στις 06:40
πηγή χρήστη

ψήφοι
8

Όταν η εφαρμογή σας λαμβάνει ένα μήνυμα, δεν υπάρχει ωφέλιμο φορτίο ή μεταδεδομένα που συνδέονται με αυτό. Αυτό είναι σε αντίθεση με μια γρήγορη απάντηση, ή μετα-back που μπορεί να έχει ένα ωφέλιμο φορτίο. Ο μόνος τρόπος για να συνδέσει μια απάντηση με ένα ερώτημα αυτό είναι να παρακολουθείτε το χέρι την κατάσταση συνομιλία στην εφαρμογή σας, όπως προτείνεται από @ anshuman-dhamoon

Για να γίνει αυτό, είναι καλύτερο να διατηρήσει μια κατάσταση για κάθε χρήστη, καθώς και η επόμενη κατάσταση για κάθε κράτος.

// optionally store this in a database
const users = {}

// an object of state constants
const states = {
    question1: 'question1',
    question2: 'question2',
    closing: 'closing',
}

// mapping of each to state to the message associated with each state
const messages = {
    [states.question1]: 'How are you today?',
    [states.question2]: 'Where are you from?',
    [states.closing]: 'That\'s cool. It\'s nice to meet you!',
}

// mapping of each state to the next state
const nextStates = {
    [states.question1]: states.question2,
    [states.question2]: states.closing,
}

const receivedMessage = (event) => {
    // keep track of each user by their senderId
    const senderId = event.sender.id
    if (!users[senderId].currentState){
        // set the initial state
        users[senderId].currentState = states.question1
    } else {
        // store the answer and update the state
        users[senderId][users[senderId].currentState] = event.message.text
        users[senderId].currentState = nextStates[users[senderId.currentState]]
    }
    // send a message to the user via the Messenger API
    sendTextMessage(senderId, messages[users[senderId].currentState])
}

Σημείωση Αν θέλατε, μπορείτε να κάνετε ακόμα και τις αξίες της nextStatesσε απαιτητών λειτουργίες που λαμβάνουν την απάντηση της τρέχουσας κατάστασης και διακλαδίζονται σε διαφορετικές συνομιλία ρέει από το πέρασμα του χρήστη σε μια διαφορετική κατάσταση, ανάλογα με την ανταπόκριση του / της.

Απαντήθηκε 14/04/2017 στις 03:37
πηγή χρήστη

ψήφοι
1

Έχω περάσει κάποιο χρονικό διάστημα την εργασία με αυτό. Η καλύτερη λύση είναι να χρησιμοποιήσετε μια βάση δεδομένων για την παρακολούθηση της ροής συνομιλία του χρήστη. Το αντικείμενο POST περιέχει τον αποστολείς ID. Μπορείτε να χρησιμοποιήσετε αυτό το αναγνωριστικό για να κάνει μια σειρά στη βάση δεδομένων στην οποία θα πρέπει σίγουρα να αποθηκεύσετε αυτό το αναγνωριστικό, καμία απάντηση στα ερωτήματα, και ένα πεδίο για να παρακολουθείτε τις οποίες βήμα προς τη συνομιλία.

Στη συνέχεια, μπορείτε να χρησιμοποιήσετε αν δηλώσεις στον κώδικά σας να επιστρέψουν τις κατάλληλες απαντήσεις. Μερικά παράδειγμα παρακάτω κώδικα:

if( $currentStep == '1' ){

    // Ask Next Question
    $message_to_reply = "Thank you! What's your name?";
    $message_to_reply = '"text":"'.$message_to_reply.'"';

} elseif( $currentStep == '2' ){

    // Ask Next Question
    $message_to_reply = "Thank you! What's your email address?";
    $message_to_reply = '"text":"'.$message_to_reply.'"';


} elseif( $currentStep == '3' ){

    // Ask Next Question
    $message_to_reply = "Thank you! What's your address?";
    $message_to_reply = '"text":"'.$message_to_reply.'"';

}
Απαντήθηκε 21/12/2017 στις 20:26
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more