javascript - 使用 Twilio 的 API 的 Google 脚本正确运行但未返回正确的值
问题描述
我遇到了未输出正确值的脚本的问题。否则它完全按预期工作。这是整个脚本:
var statusColumnPos = [2,5]; // Position of status column
var searchColumn = 3 // Column C to search for number of entries
var dataTab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Booking Tracker"); // Get sheet by Name
var accountSID = "accountSID"; // account SID
var token = "accessToken"; // access token
var authorizationEncoded = "Basic " + Utilities.base64Encode(accountSID+":"+token);
var twillioNumber = "xxxxxxxxxx" // twillio number
var twillioAPI = "https://api.twilio.com/2010-04-01/Accounts/"+accountSID+"/Messages.json"
function getSmsDataFromCell(pos) {
var cell = dataTab.getRange(pos, statusColumnPos[1]);
var smsNumber = cell.offset(0, 1).getDisplayValue();
var smsMessage = cell.offset(0,2).getDisplayValue();
return [smsNumber, smsMessage];
}
function statusChecker() {
var searching = true;
var count = 1;
while(searching) {
var value = dataTab.getRange(count,searchColumn);
if (value.getValue() == "") {
searching = false;
break;
} else {
count++;
}
}
var values = dataTab.getRange(statusColumnPos[0], statusColumnPos[1], count - 2);
var arr = values.getValues();
var newArr = [];
for(var i = 0; i < arr.length; i++)
{
if (arr[i][0] === "READY") {
newArr = newArr.concat(i+2);
}
}
for (var i = 0; i < newArr.length; i++) {
var data = getSmsDataFromCell(newArr[i]);
dataTab.getRange(newArr[i], statusColumnPos[1] + 3).setValue("SENDING");
var result = sendMessage(data[1], data[0], twillioNumber);
if (result) {
dataTab.getRange(newArr[i], statusColumnPos[1] + 3).setValue("SENT");
} else {
dataTab.getRange(newArr[i], statusColumnPos[1] + 3).setValue("FAILED")
}
}
}
function sendMessage(message, to, from) {
var formData = {
'Body': message,
'From': from,
'To': to,
};
var options = {
'method' : 'post',
'contentType': 'application/x-www-form-urlencoded',
'payload' : formData,
'headers' : {
'Authorization': authorizationEncoded
}
};
var response = UrlFetchApp.fetch(twillioAPI, options);
if (response.getResponseCode() === 200 ) {
return true
} else {
Logger.log(response.getContentText());
return false
};
}
我遇到的具体问题是此部分没有返回 TRUE:
var response = UrlFetchApp.fetch(twillioAPI, options);
if (response.getResponseCode() === 200 ) {
return true
} else {
Logger.log(response.getContentText());
return false
};
或者以下语句未按预期工作:
var result = sendMessage(data[1], data[0], twillioNumber);
if (result) {
dataTab.getRange(newArr[i], statusColumnPos[1] + 3).setValue("SENT");
} else {
dataTab.getRange(newArr[i], statusColumnPos[1] + 3).setValue("FAILED")
}
}
}
SMS 消息按预期发送,但不是在发送后导致 SENT,而是在发送后导致 FAILED。这个结构对我来说似乎是合理的,所以我不想通过在我的脚本中交换 SENT/FAILED 来“快速修复”它。有人看到我没看到的东西吗?
解决方案
根据 Twilio 的 API 文档,POST
orPUT
请求仅在更新资源时返回 HTTP 状态代码 200,而在创建新资源时返回 201:
可能的 POST 或 PUT 响应状态代码
- 200 OK:请求成功,我们更新了资源并且响应正文包含表示。
- 201 CREATED:请求成功,我们创建了一个新资源,响应正文包含表示。
来源:使用 HTTP POST 和 PUT 方法创建或更新资源。
当我对此进行测试时,返回状态码 201 并成功发送了一条文本。
推荐阅读
- javascript - 在 jquery 函数中设置变量
- javascript - 如何使用变量来决定对 DOM 元素进行哪些更改?
- tableau-api - Tableau - 将一个计算的结果作为过滤器传递以从另一个数据源获取数据
- python - 如何加快我的代码在 NLP 问题中清理文档的速度
- javascript - 如何在 PHP 中实现 JS 风格的按位左移运算符?
- c# - 如何使用条件或基于数组改进 List.Findall()?
- node.js - 如何在 graphql-yoga 中实现干净的 Next.js URL
- javascript - 如何使 mixin 填充状态 ES6 模块?
- r - 在R中的while循环内打印绘图
- c - 为什么 main 函数和 func 函数的 char 指针 p 的输出不同?