使用自定义 Twilio 参数创建 XmlHttpsRequest

Creating XmlHttpsRequest with custom Twilio Parameters

我们正在通过 xmlhttprequest 将数据传递给 Studio 的 REST Api。当我只传递 To、From 和 Body 时,它运行良好。但是,我想将自定义参数传递给 api,例如“location”和“surveyentity”,并在工作室中将其作为 flow.data.location 和 flow.data.surveyentity

使用

我们使用 XMLHttpRequest 的原因是,这是我们以前的开发人员设置我们的应用程序的方式。我知道 Twilio 只有服务器端 SDK,他们不建议像 Vue 那样把它放在前面,但我认为我们很不幸。我们目前正在使用 Vue 和 XMLHttpRequest。

async sendSmsSurvey(to, location, surveyEntity, checkedID) {
            if (location == 7 && surveyEntity == 'Google'){ 
              var url = "https://studio.twilio.com/v2/Flows/xxx/Executions";
              var phone = "xxx"; 
            }
            if (location == 8 && surveyEntity == 'Google'){
              var url = "https://studio.twilio.com/v2/Flows/xxx/Executions";
              var phone = "xxx";
            }

            var xhr = new XMLHttpRequest();
            xhr.open("POST", url);

            xhr.setRequestHeader("Accept", "application/json");
            xhr.setRequestHeader("Authorization", "Basic QUxxYyYWZiZjZhZxxxx=="); 
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.onreadystatechange = function () {

            if (xhr.readyState === 4 && surveyEntity == "Google" || surveyEntity == "EmojisGoogleRedirect" || surveyEntity == "EmojisGoogleLink") { 
                  console.log(xhr.status);
                  console.log(xhr.responseText);
                  if (xhr.status == 200 || xhr.status == 201) {
                    //
                  } else {
                    //
                  }
              } //end xhr.readyState
            }; //end xhr.onreadystatechange

            var data = "To="+to+"&From="+phone; // I wanted to add the custom parameters here like "location" and "surveyentity".
            xhr.send(data);

          },

这里是 Twilio 开发人员布道者。

我知道您对以前的开发人员的设置方式感到遗憾,但我必须建议您努力将此 API 请求从前端移至后端,以便您停止在您的应用程序中公开您的帐户 SID 和授权令牌。有了这两个细节,恶意用户就可以接管并滥用您的 Twilio 帐户。

同时,我可以在这里指导您添加自定义参数,但我强烈建议使用后端。

要在从 API 触发 Studio Flow 时添加自定义参数,您需要传递 Parameters parameter which has a JSON object of the custom parameters. The best way to do this is to use the URLSearchParams object to serialize your data

您目前拥有:

var data = "To="+to+"&From="+phone;

首先,您可以通过使用 URLSearchParams 序列化数据来改进这一点:

const urlSearchParams = new URLSearcParams();
urlSearchParams.append("To", to);
urlSearchParams.append("From", from);
const data = urlSearchParams.toString();

您需要将自定义参数添加到一个对象,然后您 JSON 将其字符串化并添加为 parameter called Parameters

const urlSearchParams = new URLSearcParams();
urlSearchParams.append("To", to);
urlSearchParams.append("From", from);

const parameters = {
  surveyEntity: surveyEntity,
  location: location
};
urlSearchParams.append("Parameters", JSON.stringify(parameters));

const data = urlSearchParams.toString();

收官之际,再呼吁一次。请将此从您的客户端移至您的服务器端并停止公开您的凭据。