Jeśli mój bot prosi różne pytania, a jeśli użytkownik odpowiada każdy z nich, w jaki sposób mogę się dowiedzieć, której odpowiedź dotyczy, do którego pytanie. Znajduje się pole zwane metadane, które można podłączyć do interfejsu API sendTextMessage ale gdy użytkownik odpowiada, to metadane przychodzi jako niezdefiniowane. Czy wy użyć dowolnego węzła-cache dla stanu lub FSM śledzenia takich jak machina.js? Jak mogę najlepiej dowiedzieć się, w jakim rozmowy obecnie utknęły w?
Co jest właściwym sposobem na zaoszczędzenie / stan toru wewnątrz bot Facebook Messenger?
Można mieć kod statusu w kodzie, aby śledzić, gdzie rozmowa użytkownika z botem jest.
Dla np. jeśli masz 10 pytań, zachować StatusCode = 0 na początku, i zadać pierwsze pytanie. Po odebraniu wiadomości do webhook, sprawdź czy StatusCode == 0, i przechowywać tę wiadomość użytkownika jako odpowiedź na pierwsze pytanie. Następnie zwiększamy StatusCode = 1 i zadać następne pytanie.
Można mieć wiele flagi i statusCodes do czynienia z różnymi płynie rozmowa.
Biegnę w tej kwestii sam. Choć nie zostało wspomniane w ogóle w ich dokumentacji, nie sądzę mocowania baza danych w pamięci to nie wchodzi w rachubę. Wydaje się, żeuser_id jest taka sama, niezależnie od tego, kiedy rozmowa jest inicjowana.
Wykonywanie połączenia API każdym razem użytkownik wraca sesję prawdopodobnie spowolnić działanie bota. Również zauważyłem, że naprawdę nie można zbudować „bazę” pseudo-rozprowadzane za pomocą klawisza metadane API jeśli to, co pan sugeruje. Znacznik metadanych mogą być wysyłane z serwera -> Client (Messenger), ale nie z Klientem -> Server z tego, co mówi dokumentacja.
Zgodnie z moją wiedzą , w Facebooku chatbota można wysłać dane od użytkownika do chatbota tylko poprzez ustawienie ładunek z przycisków odświeżenie strony , ponieważ mają one podane w dokumentacji API .
I chatbota nie będzie przechowywać sesji ani żadnych Zjednoczone / flagi .you mogą ustawić status lub flagi lub tablice ale podczas aktualizacji aplikacji lub ponowne uruchomienie serwera zostaną utracone.
Tak więc, jeśli naprawdę chcesz ustawić statusu należy użyć bazy danych dla that.and Sender pozostanie taki sam za każdym razem, więc można obsługiwać dane z bazy danych przez dany identyfikator dla konkretnego użytkownika.
Aby uzyskać więcej informacji kasy Referance techniczną tutaj .
Mam nadzieję, że to pomoże you.If tak, prosimy oznaczyć go jako odpowiedź.
Kiedy aplikacja odbiera komunikat, nie ma ładowność lub metadane związane z nim. Jest to w przeciwieństwie do szybkiej odpowiedzi lub post-tyłu, który może mieć ładunek. Jedynym sposobem, aby powiązać odpowiedź na pytanie to jest ręcznie śledzić stan rozmów w aplikacji jak sugeruje @ Anshuman-dhamoon
Aby to zrobić, to najlepiej, aby utrzymać stan dla każdego użytkownika, a także następnego stanu dla każdego stanu.
// 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])
}
Uwaga Jeśli chcesz, możesz nawet zrobić wartościnextStates do płatnych na żądanie funkcji, które mają odpowiedź aktualnego stanu oraz odgałęzienie do innej rozmowy przepływa przez przejście użytkownika do innego stanu w zależności od jego / jej odpowiedzi.
Spędziłem trochę czasu na pracę z tym. Najlepszym rozwiązaniem jest użycie bazy danych do śledzenia przepływu rozmowy użytkownika. Przedmiotem POST zawiera nadawców ID. Można użyć tego identyfikatora, aby wiersz w bazie danych, w której chcesz pewno trzeba przechowywać identyfikator, żadnych odpowiedzi na pytania, a pole do śledzenia których krok w rozmowie.
Następnie można użyć instrukcji if w kodzie powrotu prawidłowych odpowiedzi. Niektóre przykładowy kod poniżej:
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.'"';
}













