Heyoooo, евангелист разработчиков Twilio здесь. 100
один за другим, и у вас не должно быть проблем
Это не то, что делает ваш код. Вы звоните sendMessage
в цикле, не ожидая, когда это будет сделано. Это, скорее всего, приведет к почти параллельным запросам X, которые приведут к ответу too many request
.
Чтобы решить эту проблему, заключите ваш код в асинхронную функцию и await
it. Чтобы это работало, вам нужно немного подправить sendMessage
, чтобы вернуть обещание (или напрямую использовать client.messages.create
), возвращаемое вспомогательной библиотекой Twilio.
async function sendMessage(params) {
return client.messages.create(params)
}
С этими настройками вы можетеоберните ваш цикл в асинхронную функцию и дождитесь успешного выполнения каждого запроса.
(async () => {
while (numberStart < numbersLen) {
try {
let maxNumbers = Math.min(numbersLen, numberStart + recipientAmount);
for (let i = numberStart; i < maxNumbers; i++) {
let number = numbers[i]['phone_number'].replace(/[^\d]/g, '')
if (number.length > 10 && number[0] === '1') {
number = number.substring(1)
cleanNumbers.push('1' + number)
} else {
cleanNumbers.push('1' + number)
}
if (i == maxNumbers - 1) {
var params = {
'body': `${event_sms_message}`,
'messagingServiceSid': 'XXXXXXXXXXXXXXX',
'to': cleanNumbers
}
await sendMessage(params)
cleanNumbers = []
numberStart = numberStart + recipientAmount;
}
} catch(e) {
console.error(e);
}
}
})();
Затем этот код будет ожидать успешного выполнения client.message.create
, и вы не должны сталкиваться с ошибками ограничения скорости (too many requests
) больше.
Дайте мне знать, если это поможет. :)