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?
Mi a helyes utat, hogy mentse / track állam belsejében egy Facebook Messenger bot?
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.
É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.
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.
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.
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.'"';
}













