Facebook Messenger Botlar tek postback birden cevap mesajları gönderme

oy
1

Ben Messenger üzerindeki tek bir kullanıcı tarafından tetiklenen geri gönderme için birden cevap göndermek istiyorum. Ben Messenger'ın takip ediyorum geliştirici belgelerini ve gerçekten bunun nasıl bulamadı.

Benim kod yapısı onlar sitesinde verdiğim öğreticiler çok benzer, ben 'var handlePostback alınan geri gönderme tanımlayan ve' bulmak için önceden tanımlanmış yükleri bir dizi karşılaştırır 'fonksiyonunu yanıtı ' JSON nesnesi. Bu yanıt 'verilir callSendAPI geri Messenger API mesaj göndererek temel biçime bu JSON nesnesi koyar'.

function handlePostback(sender_psid,receivedPostback)
{ if(payload== 'defined_payload') {
  response = {
  text: 'Some text'
  };
callSendAPI(sender_psid,response);
}

function callSendAPI(sender_psid,response) {
let body = {
recipient: {
id= sender_psid
},
message: response
};
// Followed by code for POST request to the webhook
}

Bu şimdi bir cevap niteliği taşıyan birden çok ileti göndermek istediğiniz, temel yapısı olan bir geri gönderme . Biraz araştırma yaptım ve çözüm bir mesaj [] dizi oluşturmak için olabileceğini gördük. Ama nasıl bunu yapıyorsun? Benim 'tepkisi' kendini görevinde oluşturuluyor ve mesajlar yapısı (Sanırım) şu şekilde görünmelidir Çünkü:

let body = {
 recipient: {
 id=sender_psid
 },
 messages: [ {
  response1
  },
  {
  response2
  }
 ]
};

Benim soru, daha fazla ayrıntı sağlayabilir varsa bana bildirin lütfen açıklayabilir umut!

Oluştur 25/11/2017 saat 06:17
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
-1

Değişiklik yapmayın callSendAPIişlevi. Sizin de handlePostbackişlevi çağırır callSendAPIbirden çok kez.

callsendAPI(sender_psid,response1);
callsendAPI(sender_psid,response2);
Cevap 26/11/2017 saat 13:01
kaynak kullanıcı

oy
1

Güzel soru. Bunu yapmanın yolu node.js aşina değilseniz çok açık değildir ve bu değil Facebook'un Gönder API Dokümantasyon iyi belgelenmiştir.

Öncelikle, işe yaramaz gözlemledim olabileceğinden bir dizi kullanarak, birden çok ileti gönderme yaklaşımınız. Facebook'tan tek isteği ile 100 API Aramalar kadar gönderiyor ama bence bu durumda gerekli değildir için bir çözümü var. Eğer kontrol hakkında daha fazla bilgi edinmek istiyorsanız Dok Talep Belgeleri , sen uygulama sizinkinden farklı olduğunu göreceksiniz.

Çalışacak bir çözüm aramaktır callSendAPIfonksiyonu birden çok kez. Ama bu çözüm bir ana dezavantajı var : Gönderilen mesajların asıl dizisini kontrol etmek mümkün olmayacaktır. Eğer iki ayrı mesaj göndermek istiyorsanız Örneğin, kullanıcıya ilk gönderilecek olan garanti edemez .

Eğer zincirine sizin ihtiyaç Bu sorunu çözmek için callSendAPIbir sonraki garanti bir şekilde işlevlerini callSendAPIilk mesaj zaten gönderildikten sonra arama yalnızca gerçekleşecek. Sen tarafından NodeJS yapabilirsiniz geri aramalar ve vaatlerde kullanarak . Eğer bunlardan birini aşina değilseniz, okuyabilir bu geri aramalar için ve bu sözlerin için.

Eğer değiştirmeniz gerekir callSendAPIfonksiyonu ve Facebook'a POST isteği gönderir özellikle parçasını. Ben kullanarak sorununa çözüm sunacak sözler ve modül düğümü getirme .

const fetch = require('node-fetch');

function handlePostback(sender_psid,receivedPostback){ 
  if (payload == 'defined_payload') {
    response = {
      text: 'Some text'
    };
    response2 = //... Another response
    response3 = //... Another response
  callSendAPI(sender_psid,response).then(() => {
    return callSendAPI(sender_psid, response2).then(() => {
      return callSendAPI(sender_psid, response3); // You can add as many calls as you want
      });
   });
  }
}

function callSendAPI(sender_psid,response) {
  let body = {
    recipient: {
      id= sender_psid
    },
    message: response
  };
  const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN); // Here you'll need to add your PAGE TOKEN from Facebook
  return fetch('https://graph.facebook.com/me/messages?' + qs, {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify(body),
  });
}

Cevap 26/11/2017 saat 14:19
kaynak kullanıcı

oy
0

Geri tek yayında birden yanıtları uygulamak için bir yol sıralamak için aşağıdaki bağlantıyı yararlı buldum.

https://codingislove.com/build-facebook-chat-bot-javascript/

Dediğin gibi, dizi çalışması gerekir. çoklu yanıt mesajları ile bir dizi değişken oluşturmak

var multipleResponse = {
   messages: [{
      response1
   },
   {
      response2
   }]
};

Ve fonksiyona dizi değişkeni itmek

function callSendAPI(sender_psid,response) {

    let body = {
         recipient: {
            id= sender_psid
         },
         message: []
    };
    // Followed by code for POST request to the webhook
}

Son olarak işlev dizisine dizi itmek

body.message.push(multipleResponse.messages);
Cevap 24/01/2018 saat 22:10
kaynak kullanıcı

oy
0

@Christos Panagiotakopoulos. Sonra kullanarak zincirleme benim mainMenuResponse almıyorum. Aksine, ben üç kere tepkisini alıyorum. handlePostback fonksiyonu =>

// Handles messaging_postbacks events
function handlePostback(sender_psid, received_postback) {
  let response;

  // Get the payload for the postback
  let payload = received_postback.payload;

  // Set the response based on the postback payload
  if (payload === 'fashionTip') {
    response = { "text": getFashionTip() } // calls a function which gives a fashion-tip

  // Send the message to acknowledge the postback
  callSendAPI(sender_psid, response).then(() => {
    return callSendAPI(sender_psid, mainMenuResponse)
  });

callSendAPI fonksiyonu =>

// Sends response messages via the Send API
function callSendAPI(sender_psid, response) {
  // construct the message body
  let request_body = {
    "recipient": {
      "id": sender_psid
    },
    "message": response
  }

  // Send the HTTP request to the messenger platform
  request({
    "uri": "https://graph.facebook.com/v2.6/me/messages",
    "qs": {"access_token": PAGE_ACCESS_TOKEN},
    "method": "POST",
    "json": request_body
  }, (err, res, body) => {
    if (!err) {
      console.log("Message sent!");
    } else {
      console.error("Unable to send mesage:" + err);
    }
  });
}
Cevap 21/04/2019 saat 08:44
kaynak kullanıcı

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