फेसबुक मैसेंजर क्रम में संदेश भेजने के लिए नहीं बीओटी

वोट
9

मैं एक साधारण Facebook मैसेंजर chatbot निर्माण के साथ चारों ओर खेल रहा हूँ और मैं मुसीबत अनुक्रम में संदेश भेजने आ रही है।

यहाँ

उपरोक्त उदाहरण में, यह क्रम में हैलो!, 1, 2, 3 मुद्रित किया जाना चाहिए था। मैं वर्तमान में पाया फेसबुक डॉक्स अनुसरण कर रहा हूँ यहाँ इस सरल पाठ संदेश के समारोह को लागू करने। मैं अपने एक्सप्रेस Node.js सर्वर नीचे दिए गए कोड को शामिल किया है:

परिभाषित sendTextMessage()समारोह:

var request = require(request);
function sendTextMessage(user, text) {
    messageData = {
        text: text
    };
    request({
        url: https://graph.facebook.com/v2.6/me/messages,
        qs: {access_token: PAGE_ACCESS_TOKEN},
        method: POST,
        json: {
            recipient: {id: user},
            message: messageData
        }
    }, function(error, response, body) {
        if (error) {
            console.log(Error sending message: , error);
        } else if (response.body.error) {
            console.log(Error: , response.body.error);
        } else {
            console.log(Message successfully send.)
        }
    });
}

जवाब भेजने का यह उपयोग करते हुए:

sendTextMessage(user, Hello!);
sendTextMessage(user, 1);
sendTextMessage(user, 2);
sendTextMessage(user, 3);

मैं भी एक साधारण कतार को लागू करने की कोशिश की है कि संदेशों कतारों और केवल एक के बाद एक समय में एक संदेश भेजता requestहै सफलता कॉलबैक। यह मैं संदेह है कि मैं मैसेंजर एपीआई के साथ सही ढंग से बातचीत नहीं कर रहा हूँ कर रही है।

किसी को भी इस मुद्दे का सामना करना पड़ा है? मैं संदेशों क्रम में भेजने के लिए कैसे मिल सकता है? धन्यवाद!

संपादित करें

क्योंकि मैं एक साधारण कतार लागू किया है लेकिन अभी भी मैं यहां अपने सरल कतार प्रणाली के लिए कोड शामिल कर रहा हूँ इस समस्या का सामना,।

var queue = [];
var queueProcessing = false;

function queueRequest(request) {
    queue.push(request);
    if (queueProcessing) {
        return;
    }
    queueProcessing = true;
    processQueue();
}

function processQueue() {
    if (queue.length == 0) {
        queueProcessing = false;
        return;
    }
    var currentRequest = queue.shift();
    request(currentRequest, function(error, response, body) {
        if (error || response.body.error) {
            console.log(Error sending messages!);
        }
        processQueue();
    });
}

queueRequest(/* Message 1 */);
queueRequest(/* Message 2 */);
queueRequest(/* Message 3 */);

अद्यतन करें

यह बग फेसबुक की सूचना मिली थी, लेकिन यह लग रहा है जैसे वे इसे ठीक करने नहीं जा रहे हैं । कृपया फेसबुक की पोस्ट पर टिकट धागा पढ़ा यहाँ वे क्या कहते हो रहा है पर जानकारी के लिए। (इस पर फेसबुक का ध्यान प्राप्त करने के लिए लुईस के लिए धन्यवाद)

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


11 जवाब

वोट
-2

इसलिए हर एक समय की एक निश्चित अवधि के बाद चला जाता है आप उन्हें एक setTimeout सुविधा के अंदर डाल कर सकते हैं।

तो यह बदल देते हैं:

sendTextMessage(user, "Hello!");
sendTextMessage(user, "1");
sendTextMessage(user, "2");
sendTextMessage(user, "3");

इसके साथ:

sendTextMessage(user, "Hello!");              

// 1 second

setTimeout(function() {
    sendTextMessage(user, "1");
}, 1000)

// 2 seconds

setTimeout(function() {
    sendTextMessage(user, "2");
}, 2000)

// 3 seconds

setTimeout(function() {
    sendTextMessage(user, "3");
}, 3000)    

और वे एक के बाद एक जाना चाहिए। तुम भी एक दूसरे के अंदर कार्यों एम्बेड अगर जरूरत हो सकता है।

14/05/2016 को 01:39
का स्रोत उपयोगकर्ता

वोट
0

इसके बजाय स्थिर समय समाप्ति को जोड़ने का है, मैं एक कतार डेटा संरचना पैदा करेगा। बॉट एक संदेश भेजने करना चाहती है, कतार के अंत करने के लिए सामग्री जोड़ देते हैं। संदेश पोस्ट कॉलबैक पर, वहाँ कतार में अभी भी कोई संदेश नहीं है अगर फिर से प्रत्यावर्तन का उपयोग कर की जाँच करें और फ़ंक्शन को कॉल करें और उसके अनुसार कतार से हटा दें।

14/05/2016 को 01:47
का स्रोत उपयोगकर्ता

वोट
0

वे आदेश है कि वे भेजा जाता है में प्राप्त किया जाना चाहिए। सुनिश्चित करें कि आप वास्तव में उन्हें क्रम में भेज रहे हैं न बुला एक async समारोह 4 बार (और आदेश भेजने इसकी गारंटी नहीं है)। (मैंने पढ़ा है कि आप इसे परीक्षण किया लेकिन मेरे सारे परीक्षण में मैं कभी नहीं देखा है एक आदेश से बाहर आते हैं, तो भेजने आदेश की गारंटी दी गई थी प्राप्त करते हैं।)

17/05/2016 को 01:13
का स्रोत उपयोगकर्ता

वोट
4

तुम मुझे / / संदेश के साथ कोई पोस्ट भेजने के बाद, आप एक प्रतिक्रिया संदेश आईडी है कि प्राप्त करेंगे (मेरा साथ शुरू जो शायद संदेश आईडी के लिए खड़ा है 'मध्य।'?):

{ recipient_id: '1015411228555555',
  message_id: 'mid.1464375085492:b9606c00ca33c12345' }

बाद पूरी तरह से अमेरिकन प्लान मैसेंजर एपीआई द्वारा प्राप्त किया जा रहा है, तो आप अपने webhook के लिए एक कॉल (कोई संदेश की घटनाओं के साथ) प्राप्त होंगे कि प्राप्ति की पुष्टि करता है:

{ sender: { id: '1015411228555555' },
  recipient: { id: '566031806XXXXXX' },
  delivery:
   { mids: [ 'mid.1464375085492:b9606c00ca33c12345' ],
     watermark: 1464375085604,
     seq: 176 } }

मुझे लगता है कि डिलीवरी रसीद सबसे अच्छा तरीका है, वितरण सुनिश्चित करने के फिर अगले संदेश भेजना है।

27/05/2016 को 18:56
का स्रोत उपयोगकर्ता

वोट
8

मैं इस बारे में फेसबुक पर एक बग रिपोर्ट प्रस्तुत क्योंकि मैं एक ही समस्या हो रही थी। वे स्वीकार किया है कि यह वास्तव में एक बग है और इसे ठीक करने के काम कर रहे हैं: https://developers.facebook.com/bugs/565416400306038

22/06/2016 को 20:57
का स्रोत उपयोगकर्ता

वोट
0

एक वादा के रूप में भेजने अनुरोध को लागू करने और केवल फलस्वरूप संदेश भेजने एक बार पिछले एक हल हो गई है

const send = (userId, messageData)  => {

      return new Promise((resolve, reject) => {
        request
        (
            {
                url     : BASE_URL + "me/messages",
                qs      : { access_token : PAGE_ACCESS_TOKEN },
                method  : "POST",
                json    : 
                        {
                            recipient: { id : userId },
                            message: messageData,
                        }
            }, (error, response, body) => 
            {
                if (error) { console.log("Error sending message: " + response.error); return reject(response.error); }
                else if (response.body.error) { console.log('Response body Error: ' + response.body.error); return reject(response.body.error); }

                console.log("Message sent successfully to " + userId); 
                return resolve(response);
            }
        );    
    });
};
10/04/2017 को 12:24
का स्रोत उपयोगकर्ता

वोट
0

मैं एप्लिकेशन कि messagehandling के हर शुरुआत पर 0 पर रीसेट करता है करने के लिए एक MessageId काउंटर गयी। तब मैं उस नंबर * 100 एमएस के साथ देरी। इस तरह से मैं जानबूझकर देरी की तरह कोड के साथ के रूप में अच्छी तरह से जोड़ सकते हैंmessageDelay += 15

receivedMessage(event) {
  messageDelay = 0;
  //...

SendMessage का विस्तार:

function sendTextMessage(recipientId, messageText) {
//...
  setTimeout(function() {
    callSendAPI(messageData);
  }, messageDelay++ * 100)    
}
17/06/2017 को 00:29
का स्रोत उपयोगकर्ता

वोट
0

संदेश क्रम में भेज रहा है नहीं, क्योंकि अनुरोध फेसबुक पर अतुल्यकालिक रूप से भेजा जाता है और किसी भी क्रम में भेजा जा सकता है।

इसे सुलझाने के लिए आप अगले कॉल करनी होगी sendTextMessageजब संदेश है कि यह पहले भेजा जाना चाहिए एक प्रतिक्रिया प्राप्त हुआ है।

17/06/2017 को 06:35
का स्रोत उपयोगकर्ता

वोट
0

पुनरावर्ती समाधान @ user3884594 द्वारा प्रस्तावित आधार पर, मैं एक तरह से यह इस का उपयोग कर काम करते हैं (मैं आदेश सरल बनाने के लिए से निपटने त्रुटि हटाया) बनाने:

send_messages (["message 01", "message 02", "message 03"]);

function send_messages (which, i = 0)
{
    request({
        url: 'https://graph.facebook.com/v2.10/me/messages',
        qs: { access_token: FACEBOOK_ACCESS_TOKEN },
        method: 'POST',
        json: { recipient: { id: senderId }, message: { text: which [i] }
    }, (error, response, body) => 
    {
        // You need to put your error handling logic here
        if (i++ < which.length - 1)
            send_messages (which, i);
    });
}
21/09/2017 को 04:07
का स्रोत उपयोगकर्ता

वोट
0

मैं बिल्कुल वैसा ही समस्या थी, कि समाधान मेरे लिए काम किया:

function sendMessage(recipient, messages, accessToken, i) {


    axios.post(baseURL + 'v2.11/me/messages/?access_token=' + accessToken,
        Object.assign({}, {
            messaging_type: "RESPONSE",
            recipient: {
                id: recipient
            }
        }, messages[i]['payload']) )
        .then(response => {

            if(i < messages.length) sendMessage( recipient, messages, accessToken, i+1 );

            },
            error => {})
        .catch(error => {});

}
sendMessage(recipient, flow['messages'], flow['page']['accessToken'], 0);

यह मेरा सवाल है: अनुक्रमिक संदेश फेसबुक भेजें-API का उपयोग कर भेजा जा रहा है

20/01/2018 को 05:07
का स्रोत उपयोगकर्ता

वोट
0

आप प्राप्त कर सकते हैं QUEUINGवादे से।

function delay(time) {
  return new Promise(function(resolve, reject) {
    setTimeout(resolve, time);
  });
}

delay(2000).then(() => {
  console.log('hi');
  delay(2000).then(() => {
    console.log('hello');
    delay(2000).then(() => {
      console.log('welcome');
    })
  })
})

20/12/2019 को 12:27
का स्रोत उपयोगकर्ता

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