429 - {"status": "error", "message": "Api max rps достигла"} при отправке запроса на многие чаты sendFlow API - PullRequest
1 голос
/ 10 января 2020

Я пытаюсь установить CustomField для подписчиков Manychat, используя его API. Ссылка на их API:

https://api.manychat.com/swagger# / Subscriber / post_fb_subscriber_setCustomFieldByName

Ниже приведен код запроса:

   var rp = require("request-promise");
   var config = require("./../campaign_config.json");

module.exports = { setWaybillForUser :  async function setWaybillForUser(userid,waybill,dbRef){

        var options = { method: 'POST',
          uri: 'https://api.manychat.com/fb/subscriber/setCustomFieldByName',
          headers: 
           {'Cache-Control': 'no-cache',
             Accept: '*/*',
             Authorization: config.Manychat_token,  
             'Content-Type': 'application/json' },
          body: 
           { subscriber_id: parseInt(userid),
             field_name: 'waybill',
             field_value: waybill },
          json: true };

        try {
        const response = await rp(options);
        console.log(response);
        if (response.status == "success") {
            return dbRef.child('datanode').child(userid).update({
                "Order_Status": 3
            }).then(function () {
                //do nothing.
            }).catch(function (error) {
                console.log(error);
            });
        }
    }
    catch (err) {
        console.log(err.message);
    }
    }
};

I ' я вызываю эту функцию несколько раз, так как есть много абонентов, для которых функция должна работать. Код, по которому он вызывается:

dbRef.child("subData").once('value').then(function(snapshot){
        var data = snapshot.val();
        var keys = Object.keys(data);

        let promiseArray = [];
        let orderStatusArr =[];
        for(let i=0; i< keys.length; i++){

                    var order_status =  data[keys[i]].Order_Status;
                    var subid =  data[keys[i]].UserID;
                    var waybill =  data[keys[i]].Waybill_Number;
                    if(order_status == 1){
                        orderStatusArr.push({
                            "Order_Status":order_status,
                            "UserID": subid,
                            "Waybill_Number":waybill
                        });
                    }
        }

        for(let i=0; i<orderStatusArr.length;i++){
            var order_status =  orderStatusArr[i].Order_Status;
            var subid =  orderStatusArr[i].UserID;
            var waybill =  orderStatusArr[i].Waybill_Number;

            promiseArray.push(setWaybillsForUser.setWaybillForUser(subid,waybill,dbRef));
        }

        Promise.all(promiseArray).then(() => {
            // all done here
            response.send("success");
        }).catch(function(err) {
            console.log(err.message); 
          });

    })

Когда я запускаю код - он регистрирует успех для одних запросов, а выше - для других. Одновременно он может успешно выполнить код для 10 подписчиков.

1 Ответ

3 голосов
/ 10 января 2020

С этой страницы :

Есть ли ограничения на количество вызовов API?

Для методов POST существует только ограничение на количество запросов в секунду (на страницу):

  1. / fb / sending / sendFlow, / fb / sending / sendContent - 25 RPS;
  2. / fb / subscriber / addTag, / fb / subscriber / removeTag, / fb / subscriber / setCustomField - 10 RPS .

Так что, судя по этому и опубликованным симптомам, похоже, что второе правило применимо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...