Küldés több válasz üzenet egyetlen postback Facebook Messenger Botok

szavazat
1

Azt akarom, hogy küldjön több válaszokat egy felhasználó által kiváltott postback a Messenger. Követtelek Messenger fejlesztői dokumentációban és nem igazán tudta meg, hogyan kell ezt csinálni.

Saját kód szerkezete nagyon hasonló az oktató, hogy már adott az oldalon, van egy „ handlePostback ” funkció, amely azonosítja a kapott postback, és összehasonlítja azt egy előre rakományának, hogy megtalálják a „ válasz ” JSON objektumot. Ezt a választ adni „ callSendAPI ”, amely helyére teszi ezt a JSON objektumot az alapvető formája az üzenet elküldése vissza a Messenger API-t.

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
}

Mivel ez az alapvető szerkezetét, most szeretne több üzenetet adott válaszként egy postback . Én néhány ásni, és azt tapasztaltam, hogy a megoldás az lehet, hogy hozzon létre egy üzenet [] tömb. De hogyan tudom ezt megtenni? Mert a „válasz” van rajta keresztül keletkezett funkciót, és az üzenetek szerkezetét kell kinéznie (azt hiszem):

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

Remélem tudtam magyarázni a kérdésemre, kérem tudassa velem, ha én nyújthat további részleteket!

A kérdést 25/11/2017 06:17
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
-1

Ne módosítsa callSendAPIa funkciót. Az Ön handlePostbackfüggvényhívás callSendAPItöbbször.

callsendAPI(sender_psid,response1);
callsendAPI(sender_psid,response2);
Válaszolt 26/11/2017 13:01
a forrás felhasználó

szavazat
1

Jó kérdés. Ha nem ismeri node.js az utat megtenni, nem túl egyértelmű, és ezt nem írták jól Facebook küldése API dokumentáció.

Először is, a megközelítés küldése több üzenetet, egy mezőhöz, ahogy azt esetleg megfigyelhető nem fog működni. Facebook egy megoldást küldött a 100 API kéri egy kérés, de véleményem szerint ez nem szükséges a helyzetet. Ha azt szeretnénk, hogy többet megtudni róla, nézd meg a Batched kérése dokumentáció , akkor rájön, hogy a végrehajtás más, mint a tiéd.

Az egyik megoldás, hogy működni fog, hogy hívja a callSendAPIfunkciót többször. De ez a megoldás van egy nagy hátránya : Nem lesz képes a tényleges szekvenciáját üzenetet küldött. Például, ha azt szeretné, hogy küldjön két különböző üzeneteket, nem tudja garantálni, amelyik elküldésre kerül először a felhasználónak .

A probléma megoldásához meg kell lánc a callSendAPIfunkciók olyan módon, amely garantálja, hogy a következő callSendAPIhívás csak akkor történik meg, miután az első üzenet elküldését. Ezt megteheti a NodeJS által segítségével akár visszahívások vagy ígéreteket . Ha még nem ismeri egyiket sem, akkor olvassa el ezt a visszahívás és ez az ígéreteket.

El kell módosítani a callSendAPIfunkció különösen az a része, amely elküldi a POST kérés Facebookon. Fogom bemutatni egy megoldást a kérdés segítségével ígéretek és a modul node-csel .

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

Válaszolt 26/11/2017 14:19
a forrás felhasználó

szavazat
0

Találtam az alábbi linken hasznos arra, hogy az út, hogy végre több válaszokat egyetlen post vissza.

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

Ahogy mondtad, tömb kell dolgozni. Hozzon létre egy tömböt változó több válaszüzenetet

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

És nyomja meg a tömb változót a függvény

function callSendAPI(sender_psid,response) {

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

Végül nyomja meg a tömböt a funkció tömb

body.message.push(multipleResponse.messages);
Válaszolt 24/01/2018 22:10
a forrás felhasználó

szavazat
0

@Christos Panagiotakopoulos. Nem kapok én mainMenuResponse amelyet chained használ majd. Inkább kapok választ háromszor. handlePostback funkció =>

// 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 funkció =>

// 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);
    }
  });
}
Válaszolt 21/04/2019 08:44
a forrás felhasználó

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