Kdyby můj bot ptá na různé otázky, a pokud uživatel odpoví na každé z nich, jak mohu zjistit, který odpověď se vztahuje ke kterému otázka. K dispozici je pole s názvem metadata, které můžete připojit k API sendTextMessage ale když uživatel odpoví, to metadata přichází v nedefinované. Si kluci použít jakýkoliv uzel-cache pro sledování stavu nebo FSM jako je machina.js? Jak mohu nejlépe postava se na to, co v rozhovoru jsme v současné době uvízl v?
Jaký je správný způsob, jak ušetřit / stav trati uvnitř Facebook Messenger bot?
Můžete mít stavový kód v kódu, aby sledovat, kde se uživatel konverzace s bot je.
Pro např. Máte-li na 10 otázek, mějte statuscode = 0 na začátku, a položit první otázku. Když obdržíte zprávu na váš webhook, zkontrolujte, zda statuscode == 0, a uložit, že uživatel zprávu jako odpověď na vaši první otázku. Pak přírůstek statuscode = 1 a položit další otázku.
Můžete mít několik vlajek a statusCodes jednat s různými konverzace toky.
Běžím do tohoto problému sám. I když to nebylo zmíněno vůbec v jejich dokumentaci, nemyslím si, že připojení databáze aplikace v paměti, je vyloučeno. Zdá se, že user_idje stejná bez ohledu na to, kdy je zahájena konverzace.
Uskutečnění volání API pokaždé uživatel vrátí k sezení by pravděpodobně zpomalit výkon bota. Také jsem si všiml, že nemůžete opravdu postavit „pseudo-distribuované databáze“ pomocí klíče metadat v rozhraní API, jestli to je to, co se navrhuje. Značka metadat může být odeslán ze serveru -> Client (Messenger), ale ne z Client -> Server od toho, co dokumentace říká.
Podle mých znalostí , na Facebooku Chatbot můžete posílat data z uživatele na Chatbot pouhým nastavením náklad z Postback tlačítky jako oni dali v odkazu API .
A Chatbot nebude ukládat vaši relaci nebo jakékoliv States / vlajky .Můžete nastavit stav nebo příznaky nebo skupiny, ale při aktualizaci aplikace nebo restartování serveru bude vše ztraceno.
ano, pokud si opravdu chcete nastavit stav byste měli používat databázi pro that.and SenderID zůstane stejný pokaždé, takže můžete pracovat s daty z databáze tímto konkrétním ID pro konkrétního uživatele.
Pro více informací pokladny technické referance zde .
Doufám, že to you.If pomůže tak, laskavě označit ji jako odpověď.
Když vaše aplikace obdrží zprávu, neexistuje žádný náklad nebo metadata spojená s ní. To je na rozdíl od rychlého odpovědi nebo po zádech, které mohou mít užitečné zatížení. Jediným způsobem, jak zjistit, k jakému odezvu s otázkou to je ručně sledovat stav konverzace ve vaší aplikace, který navrhl @ anshuman-dhamoon
Jak to udělat, je to nejlepší pro udržení stavu pro každého uživatele, jakož i dalšího stavu pro každý stát.
// 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])
}
Poznámka: Pokud byste chtěli, můžete si dokonce vytvořit hodnoty nextStatesdo vypověditelnými funkcí, které berou v odpověď na současný stav a odbočí do jiného rozhovoru proudí předáním uživatele na jiného státu v závislosti na jeho / její odpovědi.
Strávil jsem nějaký čas pracovat s tím. Nejlepším řešením je použít databázi sledovat tok konverzace uživatele. Objekt POST obsahuje odesílatele ID. Můžete použít tento identifikátor, aby řádek v databázi, ve které byste určitě potřebovat uložit toto číslo, žádné odpovědi na otázky, a pole sledovat, z nichž krok v rozhovoru.
Potom můžete použít if v kódu vrátit správné odpovědi. Některé ukázkový kód níže:
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.'"';
}













