在 google appscript 上捕获 Twilio 的拨出呼叫状态

问题描述

我正在尝试获取传出 twilio 呼叫的状态并将其更新到电子表格中。 “已完成、忙碌、无应答、取消、失败”。

但是,我不知道在哪里包含 StatusCallBackEvent 以及如何从 Google Apps 脚本访问检索到的状态。

这是我必须发起出站呼叫的代码

function makeCall(to) {
  var call_url = "https://api.twilio.com/2010-04-01/Accounts/" + TWILIO_ACCOUNT_SID + "/Calls.json";
  
  var payload = {
    "To": "+" + String(to),"From" : TWILIO_NUMBER,"Url": "http://a1fb888ec032.ngrok.io/" +"voice","Method": "GET"
  };
  
  var options = {
    "method" : "post","payload" : payload
  };
  
  options.headers = {    
    "Authorization" : "Basic " + Utilities.base64Encode(TWILIO_ACCOUNT_SID + ":" + TWILIO_AUTH_TOKEN)
  };

  var response = UrlFetchApp.fetch(call_url,options);
  UrlFetchApp.fetch(call_url,options);

  return JSON.parse(response);
}

解决方法

这里是 Twilio 开发者布道者。

要接收呼叫状态,您需要在创建呼叫时设置 StatusCallback URL。该 URL 应指向您控制的 URL,当它收到来自 Twilio 的 HTTP 请求时,该 URL 可以更新您的电子表格。

  var payload = {
    "To": "+" + String(to),"From" : TWILIO_NUMBER,"Url": "http://a1fb888ec032.ngrok.io/" +"voice","Method": "GET","StatusCallback": "https://SOME_URL"
  };

您可以use Google Sheets and App Script to set up a web application接收这样的网络钩子。简而言之,您需要创建具有 doPost 方法(默认情况下 Twilio webhook 是 POST 请求)并返回成功响应的脚本。 Twilio statusCallback webhooks 不希望响应中包含任何内容,因此您可以使用空文本输出。

这样的事情可能会奏效:

function doPost(event) {
  var callSid = event.parameter("CallSid");
  var status = event.parameter("CallStatus");
  // update spreadsheet with call status
  return ContentService.createTextOutput('');
}

查看关于 turning scripts into web appsTwilio call status callbacks 的文档了解更多详情。