Posílání více odpovědí zprávy na jednom zpětného vystavení na Facebook Messenger roboty

hlasů
1

Chci zasílat více odpovědí pro jednoho uživatele spouštěné zpětného vystavení na Messenger. Sledoval jsem jeho posel dokumentaci pro vývojáře a opravdu nemohli zjistit, jak to udělat.

Můj kód struktura je velmi podobná na cvičeních Dali na místě, mám ‚ handlePostback funkci‘, která identifikuje přijatou postback a srovnává ji se souborem předdefinovaných uživatelských dat nalézt ‚ odpověď ‘ JSON objekt. Tato odpověď je dána ‚ callSendAPI ‘, která klade tento objekt JSON do základního formátu odesláním zprávy zpět do API Messenger.

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
}

To je základní struktura, teď chci odeslat více zpráv jako odpověď na jednu zpětného vystavení . Trochu jsem kopání, a jsem zjistil, že řešením by mohlo být vytvoření zprávy [] pole. Ale jak to mám udělat? Protože moje ‚odpověď‘ je generován pomocí této funkce a struktura zprávy by měl vypadat takto (myslím):

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

Doufám, že jsem mohl vysvětlit mou otázku, prosím dejte mi vědět, jestli můžu poskytnout další podrobnosti!

Položena 25/11/2017 v 06:17
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
-1

Neupravujte callSendAPIfunkce. Ve vaší handlePostbackfunkci volat callSendAPIvícekrát.

callsendAPI(sender_psid,response1);
callsendAPI(sender_psid,response2);
Odpovězeno 26/11/2017 v 13:01
zdroj uživatelem

hlasů
1

Přesná otázka. Pokud nejste obeznámeni s Node.js způsob, jak to udělat, není příliš zřejmé, a to není zdokumentováno i na Facebooku Poslat API dokumentace.

Za prvé, váš přístup odesílání více zpráv, pomocí matice, jak jste si možná již všimli, nebude fungovat. Facebook má řešení pro odesílání až 100 volání API s jednou žádostí, ale podle mého názoru to není potřeba ve vaší situaci. Pokud se chcete dozvědět více o to vyzkoušet batched Bližší informace najdete na to, že realizace je jiná než vaše.

Jedním z řešení, které bude fungovat, je zavolat na callSendAPIfunkci více krát. Ale toto řešení má jednu velkou nevýhodu : Nebudete moci ovládat skutečné pořadí odeslaných zpráv. Například pokud chcete odeslat dvě samostatné zprávy, nelze zaručit, který bude odeslán jako první pro uživatele .

Chcete-li tento problém vyřešit, co potřebujete k řetězu své callSendAPIfunkce způsobem, který zaručuje, že příští callSendAPIvolání dojde až poté, co je odesláno Již první zpráva. To lze provést v NodeJS by buď pomocí zpětných volání nebo sliby . Pokud nejste obeznámeni s jedním z nich, můžete si přečíst tento pro zpětná volání, a to za sliby.

Budete muset upravit svůj callSendAPIfunkci a zejména tu část, která odešle požadavek POST Facebooku. Uvedu řešení vašeho problému pomocí slibů a modulu node-fetch .

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),
  });
}

Odpovězeno 26/11/2017 v 14:19
zdroj uživatelem

hlasů
0

Zjistil jsem, níže odkaz užitečný vyřešit způsob, jak implementovat více odpovědí na jednom sloupku dozadu.

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

Jak jste řekl, pole by mělo fungovat. Vytvořte proměnné pole s více zpráv odezvy

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

A tlačit proměnnou pole vaší funkci

function callSendAPI(sender_psid,response) {

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

Nakonec tlačit pole do svého funkčního pole

body.message.push(multipleResponse.messages);
Odpovězeno 24/01/2018 v 22:10
zdroj uživatelem

hlasů
0

@Christos Panagiotakopoulos. Nejsem dostat mou mainMenuResponse který je přivázán pomocí té doby. Spíše jsem dostat odpověď třikrát. Funkce handlePostback =>

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

Funkce callSendAPI =>

// 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);
    }
  });
}
Odpovězeno 21/04/2019 v 08:44
zdroj uživatelem

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