从谷歌应用程序脚本调用新聊天 API 时出错

问题描述

我正在尝试从谷歌应用程序脚本调用 FreshChat API。出站消息的 GET 请求工作正常,但 POST 请求因错误而失败

异常:http://api.in.freshchat.com 的请求失败返回代码 400。截断的服务器响应:{"success":false,"errorCode":0,"errorMessage":"HTTP 405 Method Not Allowed"," errorData":null,"errorName":null}(使用 muteHttpExceptions 选项检查完整响应)

以下是请求的详细信息

function myFunctiontest() {
  var url = "http://api.in.freshchat.com/v2/outbound-messages/whatsapp";
  var headersPOST = { 
          'Authorization': 'Bearer XXXXXX','Content-Type': 'application/json','Accept': 'application/json'
          };
  var bodyPayload = {"from": {"phone_number": "+XXXXXX"},"provider": "whatsapp","to": [{"phone_number": "+XXXXX"}],"data": {"message_template": {"storage": "none","template_name": "XXXXXX","namespace": "XXXXX","language": {"policy": "deterministic","code": "en"},"template_data": [{"data": "XXXXX"}]}}};
var options = {
        'method': 'post','contentType': 'application/json','headers': headersPOST,'payload': JSON.stringify(bodyPayload),'muteHttpExceptions':true
};

  var response = UrlFetchApp.fetch(url,options);
  console.log(response.getAllHeaders());
  Logger.log(JSON.parse(response.getContentText()));
}

相同的标头适用于 GET 请求。同样的帖子请求也来自 POSTMAN。

解决方法

Freshchat 支持帮助解决了这个问题。

有两个主要变化

  1. 使用 https 而不是 http
  2. 在标题中添加了 contentType。

function myFunctiontest() {
    
    var url = "https://api.in.freshchat.com/v2/outbound-messages/whatsapp";
      var headersPOST = 'Bearer XXXXXX';
    
      var bodyPayload = {"from": {"phone_number": "+XXXXXX"},"provider": "whatsapp","to": [{"phone_number": "+ XXXXX"}],"data": {"message_template": {"storage": "none","template_name": "XXXXXX","namespace": "XXXXX","language": {"policy": "deterministic","code": "en"},"template_data": [{"data": "XXXXX"}]}}};
    var options = {
            method: 'POST',//content-type: 'application/json',headers: { Authorization: headersPOST,'content-type': 'application/json'},payload: JSON.stringify(bodyPayload),muteHttpExceptions:true
    };
    
      var response = UrlFetchApp.fetch(url,options);
      var text = response.getResponseCode();
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...