एक फेसबुक मैसेंजर बॉट अंदर बचाने के लिए / ट्रैक राज्य सही तरीका क्या है?

वोट
8

मेरी बॉट अलग सवाल पूछता है और यदि उपयोगकर्ता उनमें से प्रत्येक का उत्तर देता है, तो, मैं कैसे बाहर जो जवाब जो प्रश्न से संबद्ध मिल रहा है। वहाँ एक क्षेत्र कहा जाता है कि आप मेटाडाटा sendTextMessage एपीआई को संलग्न कर सकते हैं, लेकिन जब उपयोगकर्ता से प्रतिक्रिया करता है, इस मेटाडाटा के रूप में अपरिभाषित में आता है। आप लोग इस तरह के machina.js के रूप में ट्रैकिंग राज्य या एक FSM के लिए किसी भी नोड कैश का उपयोग करें? कैसे मैं क्या बातचीत की हम वर्तमान में फंस रहे हैं पर सबसे अच्छा पता लगाने कर सकते हैं?

22/08/2016 को 09:11
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


5 जवाब

वोट
2

आप जहां बॉट के साथ उपयोगकर्ता बातचीत है का ट्रैक रखने के अपने कोड में स्थिति कोड कर सकते हैं।

के लिए उदाहरण के लिए। आप 10 प्रश्न हैं, statusCode = 0 शुरू में रखने के लिए, और पहला सवाल पूछते हैं। आप अपने webhook के लिए एक संदेश प्राप्त होता है, यदि statusCode == 0 देखें, और अपना पहला सवाल के जवाब के रूप कि उपयोगकर्ता संदेश की दुकान। तब statusCode = 1 को बढ़ा देते हैं और अगले सवाल पूछने।

आप एक से अधिक झंडे और statusCodes अलग बातचीत बहती है से निपटने के लिए कर सकते हैं।

30/08/2016 को 10:52
का स्रोत उपयोगकर्ता

वोट
1

मैं इस मुद्दे में अपने आप चल रहा हूँ। हालांकि यह उनके दस्तावेज में बिल्कुल उल्लेख नहीं किया गया है, मैं अटैच एक में स्मृति डेटाबेस सवाल से बाहर है नहीं लगता। ऐसा लगता है कि user_idजब बातचीत शुरू किया जाता है की परवाह किए बिना एक ही है।

एक API हर बार उपयोगकर्ता सत्र शायद बॉट के प्रदर्शन को धीमा होगा पुनः सम्मिलित कॉल करना। इसके अलावा, मैंने देखा है कि तुम सच में एपीआई में मेटाडाटा कुंजी का उपयोग करता है, तो वह यह है कि तुम क्या सुझाव दे रहे थे द्वारा एक "छद्म वितरित डाटाबेस" का निर्माण नहीं कर सकते। मेटाडाटा टैग सर्वर से भेजा जा सकता है -> क्लाइंट (मैसेंजर) नहीं बल्कि क्लाइंट से -> क्या प्रलेखन कहते से सर्वर।

02/09/2016 को 19:55
का स्रोत उपयोगकर्ता

वोट
2

मेरी जानकारी के अनुसार , फेसबुक chatbot में आप सिर्फ सेट करके chatbot करने के लिए उपयोगकर्ता से डेटा भेज सकते हैं पोस्टबैक बटन से पेलोड के रूप में वे में दे दिया है API संदर्भ

और chatbot अपने सत्र या किसी राज्य / झंडे संग्रहीत नहीं करेगा है.आप स्थिति या झंडे या सरणियों सेट कर सकते हैं लेकिन सभी जब आप अपने आवेदन को अपडेट करने या अपने सर्वर को पुनः आरंभ खो जाएगा।

हां, तो आप का उपयोग करना चाहिए क्या तुम सच में स्थिति सेट करना चाहते हैं डेटाबेस है.और के लिए SenderID ही हर रहेगा ताकि आप विशेष उपयोगकर्ता के लिए है कि विशेष आईडी द्वारा डेटाबेस से डेटा संभाल कर सकते हैं।

अधिक जानकारी के लिए चेकआउट यहां तकनीकी सन्दर्भ

मुझे आशा है कि इस you.if तो मदद मिलेगी, कृपया एक जवाब के रूप में चिह्नित करें।

07/09/2016 को 06:40
का स्रोत उपयोगकर्ता

वोट
8

जब आपके एप्लिकेशन संदेश प्राप्त करता है, वहाँ कोई पेलोड या उससे संबद्ध मेटाडाटा है। यह एक त्वरित-उत्तर या बाद वापस जो एक पेलोड हो सकता है के रूप में विरोध किया है। एक ही तरीका है एक सवाल @ अंशुमन-dhamoon द्वारा इस रूप में सुझाव मैन्युअल रूप से अपने अनुप्रयोग में बातचीत स्थिति को ट्रैक करने के लिए है के साथ एक प्रतिक्रिया संबद्ध करने के लिए

ऐसा करने के लिए, यह प्रत्येक उपयोगकर्ता, साथ ही प्रत्येक राज्य के लिए अगले राज्य के लिए एक राज्य बनाए रखने के लिए सबसे अच्छा है।

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

नोट यदि आप चाहते हैं तो आप भी के मूल्यों कर सकते हैं nextStatesप्रतिदेय कार्यों कि वर्तमान स्थिति के जवाब लेने में और अलग अलग बातचीत में बंद शाखा उसकी / उसके जवाब के आधार पर एक अलग राज्य के लिए उपयोगकर्ता को पारित करके बहती है।

14/04/2017 को 03:37
का स्रोत उपयोगकर्ता

वोट
1

मैं कुछ समय बिताया है इस के साथ काम कर रहे। सबसे अच्छा समाधान उपयोगकर्ता की बातचीत प्रवाह ट्रैक करने के लिए एक डेटाबेस का उपयोग करने के लिए है। पोस्ट वस्तु प्रेषकों आईडी में शामिल है। आप डेटाबेस जिसमें आप निश्चित रूप से इस आईडी, सवालों का कोई जवाब स्टोर करने के लिए आवश्यकता होगी में एक पंक्ति बनाने के लिए इस आईडी का उपयोग कर सकते हैं, और एक क्षेत्र बातचीत में जो कदम का ट्रैक रखने के लिए।

तो फिर तुम अगर अपने कोड में बयान उचित प्रतिक्रिया के वापस जाने के लिए उपयोग कर सकते हैं। नीचे दिए गए कुछ उदाहरण कोड:

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

}
21/12/2017 को 20:26
का स्रोत उपयोगकर्ता

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