Benim bot farklı sorular sorar ve varsa kullanıcı bunların her biri cevap verirse, nasıl hangi soru ile ilgilidir hangi cevabı öğrenebilirim. Eğer sendTextMessage API ekleyebilir ancak kullanıcı yanıt verdiğinde, bu meta olarak tanımlanmamış geliyor bir alan adında meta vardır. sizler machina.js olarak devlet veya FSM izlemek için herhangi bir düğüm-cache kullanıyor musunuz? Nasıl şu anda sıkışmış konuşmanın işte en iyi rakam dışarı can?
bir Facebook Messenger bot içerisindeki / iz durumunu kaydetmek için doğru yolu nedir?
Sen bot ile kullanıcı konuşma olduğu takip etmek, kodunuzda bir durum kodu olabilir.
Için mesela. Eğer 10 soru varsa, başlangıçta statusCode = 0 tutmak ve ilk soru sormak. Eğer webhook bir mesaj aldığınızda, statuscode == 0 olmadığını kontrol edin ve ilk soruya cevap olarak o kullanıcı mesajı saklayın. Sonra statusCode = 1 artırır ve sonraki soru sormak.
Sen konuşma akar farklı başa birden bayraklar ve statusCodes olabilir.
Ben bu konuda kendimi çalıştırıyorum. Onların belgelerinde hiç söz edilmemiştir rağmen, ben bir bellek içi veri tabanı söz konusu olamaz takılarak sanmıyorum. O görünüyor user_idolursa olsun konuşma başlatıldığında aynıdır.
Bir API çağrısı kullanıcı muhtemelen bot performansını yavaşlatabilir olurdu oturumu yeniden katılır her zaman yapma. Ayrıca, ben gerçekten o size düşündüren ne ise API'deki meta veri anahtarı kullanarak bir "sözde dağıtılmış veritabanı" inşa edemez fark ettim. meta etiketi Server gönderilebilir -> İstemci (Messenger), ancak Müşteriden -> dokümantasyon ne diyor dan Sunucusu.
Bildiğim kadarıyla gereğince , Facebook chatbot içinde sadece ayarlayarak chatbot için kullanıcıdan veri gönderebilir geri gönderme düğmelerinden yükü onlar verdik olarak API başvurusu .
Ve Chatbot oturumunuzu veya herhangi devletler / bayrakları saklamaz .gerçekten durumu veya bayrak ya diziler ayarlayabilirsiniz ancak tüm başvurunuzu güncelleyebilir veya sunucuyu yeniden başlattığınızda kaybolur.
Gerçekten durumunu ayarlamak istiyorsanız bu nedenle, kullanmak gerekir veritabanını that.and için SenderID belirli bir kullanıcı için bu özel id tarafından veritabanından veri işleyebilir böylece aynı her şey kalacaktır.
Daha fazla ayrıntı için ödeme Burada teknik referans .
Ben nazikçe bir cevap olarak işaretlemek, bu yüzden you.If yardımcı olacağını umuyoruz.
Uygulamanızın bir ileti aldığında, kendisiyle ilişkilendirilmiş hiçbir yük veya meta var. Bu bir yük olabilir çabuk cevapta veya post-back olarak zıttır. tek yol @ Anshuman-dhamoon bu önerildiği gibi elle uygulamanızda konuşma durumunu izlemek için bir soru ile cevap ilişkilendirmek
Bunu yapmak için, her devlet için her kullanıcı, hem de sonraki durumu için bir durumunu korumak için en iyisidir.
// 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])
}
Not Eğer isteseydi, hatta değerlerini yapabilirsiniz nextStatesmevcut durumu cevabını almak çağrılabilir fonksiyonlarına ve farklı konuşma içine kapalı şube onun / onu yanıtına bağlı olarak farklı bir duruma kullanıcıyı geçirerek akar.
Ben bu çalışmayı biraz zaman geçirdim. En iyi çözüm, kullanıcının konuşma akışını izlemek için bir veritabanı kullanmaktır. POST nesne gönderenler kimliği içerir. Sen kesinlikle bu kimliği, sorulara herhangi bir cevap saklamak gerekiyordu hangi veritabanında bir satır yapmak için bu kimliği kullanabilir ve bir saha görüşmesinde hangi adımı takip etmek.
Kodunuzdaki ifadeleri doğru yanıt vermelerini eğer Sonra kullanabilirsiniz. Aşağıda bazı örnek kod:
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.'"';
}













