Google 表单在提交时发出 POST 请求

blu*_*rbo 12 google-forms

有没有办法在每次填写表单时调用 Google Forms 上的外部 API 端点?

Mar*_*ear 10

在您的应用程序脚本中尝试类似的操作:

var POST_URL = "enter your webhook URL";
function onSubmit(e) {
    var form = FormApp.getActiveForm();
    var allResponses = form.getResponses();
    var latestResponse = allResponses[allResponses.length - 1];
    var response = latestResponse.getItemResponses();
    var payload = {};
    for (var i = 0; i < response.length; i++) {
        var question = response[i].getItem().getTitle();
        var answer = response[i].getResponse();
        payload[question] = answer;
    }
  
    var options = {
        "method": "post",
        "contentType": "application/json",
        "payload": JSON.stringify(payload)
    };
UrlFetchApp.fetch(POST_URL, options);
};
Run Code Online (Sandbox Code Playgroud)

请务必将 POST_URL 变量替换为您的 webhook,您可以使用requestcatcher.com来测试这一点。

通过单击侧面菜单中的“触发器”向脚本添加触发器

  1. 打开菜单(右上角的点)
  2. 点击进入Script Editor
  3. 粘贴上面的代码(更改POST_URL)
  4. 单击clock图标(左侧菜单),这意味着Triggers
  5. 单击右下角的蓝色Add trigger按钮(将显示一个表单,如下图所示)。
  6. 它应该显示onSubmit在 下Choose which function to run
  7. 确保Select event type设置为On form submit
  8. 单击Save按钮。

之后,提交您的表格并注意收到的请求。

在此输入图像描述

  • 这是快速而有效的。我更新了要遵循的步骤。不确定这些是否已经过时(尽管几周前就已回答),但 Google Forms 的侧面菜单中没有“触发器”(如前所述)。感谢您的解决方案! (2认同)

小智 8

首先: 您需要设置您的应用程序脚本项目,您将通过以下方式完成此操作:

访问script.google.com打开脚本编辑器。(您需要登录 Google 帐户。)如果这是您第一次访问 script.google.com,您将被重定向到介绍 Apps 脚本的页面。单击“开始脚本编写”以进入脚本编辑器。欢迎屏幕将询问您要创建哪种类型的脚本。单击空白项目或关闭。删除脚本编辑器中的所有代码并粘贴以下代码。 视频文档会有所帮助

其次, 您需要创建一个可安装的触发器,您可以将其直接添加到表单或包含响应的电子表格中

function setUpTrigger(){
  ScriptApp.newTrigger('sendPostRequest') /* this has the name of the function that will have the post request */
  .forForm('formkey') // you'll find it in the url
  .onFormSubmit()
  .create();
}
Run Code Online (Sandbox Code Playgroud)

检查文档

第三步 创建sendPostRequest函数并向其中添加UrlFetchApp

function sendPostRequest(e){
 // Make a POST request with form data.
var resumeBlob = Utilities.newBlob('Hire me!', 'text/plain', 'resume.txt');
var formData = {
  'name': 'Bob Smith',
  'email': 'bob@example.com',
  'resume': resumeBlob
};
// Because payload is a JavaScript object, it is interpreted as
// as form data. (No need to specify contentType; it automatically
// defaults to either 'application/x-www-form-urlencoded'
// or 'multipart/form-data')
var options = {
  'method' : 'post',
  'payload' : formData
};
  
UrlFetchApp.fetch('https://httpbin.org/post', options);
}
Run Code Online (Sandbox Code Playgroud)

检查文档


小智 4

使用 Google 脚本,这非常简单。

\n\n

只需创建一个绑定到电子表格的新项目并创建 2 个元素:

\n\n
    \n
  • 一个函数,其中包含进行调用的所有相关数据(请参阅 有关从 Google Apps 脚本发出 HTTP 请求的文档)
  • \n
  • 链接到电子表格的触发器。您可以将其设置为在每次编辑或提交表单时运行
  • \n
\n\n

Voil\xc3\xa0,您的工作表将在提交时调用您希望的任何端点。您甚至可以解析电子表格以将该数据返回到您的端点

\n