Mi a helyes utat, hogy mentse / track állam belsejében egy Facebook Messenger bot?

szavazat
8

Ha a bot kéri, különböző kérdéseket, és ha a felhasználó nem fogadja mindegyik, hogyan tudhatom meg, melyik válasz vonatkozik, amelyek a kérdést. Van egy olyan területen úgynevezett metaadatok, amit csatolni kell a sendTextMessage API, de ha a felhasználó válaszol, a metaadatokat jön, mint meghatározatlan. Srácok használjon node-cache követésére állami vagy FSM, mint machina.js? Hogyan lehet a legjobban kitalálni, hogy mi a beszélgetés jelenleg ragadt?

A kérdést 22/08/2016 09:11
a forrás felhasználó
Más nyelveken...                            


5 válasz

szavazat
2

Tudod van egy státusz kódot a kódot, hogy nyomon követni, ahol a felhasználó beszélgetés a bot.

Pl. Ha 10 kérdés, folyamatosan statusCode = 0 kezdetben, fel az első kérdést. Ha kap egy üzenetet, hogy a webhook, ellenőrizze statusCode == 0, és tárolja a felhasználó üzenetet választ az első kérdésre. Ezután növeljük statusCode = 1, és kérje a következő kérdés.

Egyszerre több zászlók és statusCodes kell kezelni a különböző beszélgetés folyik.

Válaszolt 30/08/2016 10:52
a forrás felhasználó

szavazat
1

Én ezzel a problémával magam. Bár azt nem említik meg a saját dokumentációs, nem hiszem, hogy rögzítené egy memóriában adatbázis jöhet szóba. Úgy tűnik, hogy az user_idugyanaz, függetlenül a beszélgetés megkezdésekor.

Hogy egy API hívás minden alkalommal, amikor a felhasználó újra csatlakozik a munkamenet valószínűleg lassítja a teljesítményt a bot. Azt is észrevettem, hogy nem igazán lehet építeni egy „ál-elosztott adatbázis” a metaadatok segítségével írjuk be az API, ha ez az, amit javasolnak. A metaadatcímke küldhető Server -> Client (Messenger), de nem az ügyfél -> kiszolgáló, amit a dokumentáció szerint.

Válaszolt 02/09/2016 19:55
a forrás felhasználó

szavazat
2

Mint egy tudásom , a Facebook chatbot küldhet adatokat felhasználót chatbot csak azáltal töltet postback gombokat , mivel azok megadott API referencia .

És chatbot nem tárolja a session vagy államok / flags .Az állapot beállítása vagy zászló vagy tömbök, de minden elvész, amikor frissíti az alkalmazást, vagy indítsa újra a kiszolgálót.

Tehát, ha szeretné beállítani állapotát kell használni adatbázis számára that.and senderID marad ugyanaz mindig, így tudja kezelni az adatokat adatbázis adott id adott felhasználó.

További részleteket a pénztár műszaki jelölne itt .

Remélem, ez segít you.If így, kérjük jelölje meg a választ.

Válaszolt 07/09/2016 06:40
a forrás felhasználó

szavazat
8

Amikor az alkalmazás egy üzenetet kap, nincs rakomány vagy hozzátartozó metaadatokat. Ez ellentétben a gyors választ, vagy post-vissza, ami lehet egy hasznos. Az egyetlen módja annak, hogy társítani egy válasz egy kérdés ez manuálisan követni a beszélgetést állam az alkalmazás által javasolt @ anshuman-dhamoon

Ehhez a legjobb, ha állapotának fenntartását minden felhasználó számára, valamint a következő állapotot minden állapotra.

// 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])
}

Megjegyzés Ha akart, akkor is, hogy az értékek nextStatesa lehívható függvénynek, amelyek a válasz a jelenlegi állapot és szétágazni különböző beszélgetés folyik el, hogy a felhasználó számára, hogy egy másik állam attól az ő / ő választ.

Válaszolt 14/04/2017 03:37
a forrás felhasználó

szavazat
1

Már egy ideig dolgozik ezen. A legjobb megoldás az, hogy egy adatbázis nyomon követésére a felhasználó beszélgetés áramlását. A POST objektum tartalmazza a küldők ID. Használhatja ezt az azonosítót, hogy egy sort az adatbázist, amelyben azt feltétlenül kell tárolni ezt az azonosítót, bármilyen választ adni a kérdésekre, és a helyszíni nyomon követni, amelynek lépés a beszélgetést.

Akkor használja, ha állítások a kódban, hogy visszatérjen a helyes válaszokat. Néhány példa az alábbi kódot:

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.'"';

}
Válaszolt 21/12/2017 20:26
a forrás felhasználó

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