Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 发送tweet失败。错误是:{quot;name";:“Exception";}-Google应用程序脚本_Javascript_Google Apps Script_Google Sheets_Twitter - Fatal编程技术网

Javascript 发送tweet失败。错误是:{quot;name";:“Exception";}-Google应用程序脚本

Javascript 发送tweet失败。错误是:{quot;name";:“Exception";}-Google应用程序脚本,javascript,google-apps-script,google-sheets,twitter,Javascript,Google Apps Script,Google Sheets,Twitter,为了收集从我的个人资料发送的电报消息,在电子表格中注册并从这些消息创建推文,我设置了以下模型: var token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; var telegramUrl = "https://api.telegram.org/bot" + token; var webAppUrl = "https://script.google.com/macros/s/UUUUUUUUUUUUUUUUUUUUU

为了收集从我的个人资料发送的电报消息,在电子表格中注册并从这些消息创建推文,我设置了以下模型:

var token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var telegramUrl = "https://api.telegram.org/bot" + token;
var webAppUrl = "https://script.google.com/macros/s/UUUUUUUUUUUUUUUUUUUUUUUUUUU";

function setWebhook() {
  var url = telegramUrl + "/setWebhook?url=" + webAppUrl;
  var response = UrlFetchApp.fetch(url);
}

function doPost(e) {
  var contents = JSON.parse(e.postData.contents);
  var dateNow = Utilities.formatDate(new Date(), "GMT-03:00", "yyyy-MM-dd' 'HH:mm:ss' '");
  var id = contents.message.from.id;

  if (id != 123456789) return;

  var username = contents.message.from.username;
  var name = contents.message.from.first_name + " " + contents.message.from.last_name;
  var text = contents.message.text;
  
  if (!text) return;
  
  var ssId = "ID TO SPREADSHEET";
  var sheet = SpreadsheetApp.openById(ssId).getSheetByName("SPREADSHEET NAME");
  
  sheet.appendRow([dateNow, id, username, name, text]);
  
  var twitterKeys= {
    TWITTER_CONSUMER_KEY: "<<consumer key>>",
    TWITTER_CONSUMER_SECRET: "<<consumer secret>>",
    TWITTER_ACCESS_TOKEN: "<<access token>>",
    TWITTER_ACCESS_SECRET: "<<access secret>>"
  };
  
  var props = PropertiesService.getScriptProperties();
  
  props.setProperties(twitterKeys);
  twit = new Twitter.OAuth(props);

  var service = new Twitter.OAuth(props);
  
  if ( service.hasAccess() ) {
    
    var response = twit.sendTweet(text);
    
    if (response) {
      
      Logger.log("Tweet ID " + response.id_str);
      
    } else {
      
      // Tweet could not be sent
      // Go to View -> Logs to see the error message
      
    }
  }
}
我想获得一些关于我需要在脚本中编辑哪些内容的帮助,以便在电报中收集的消息变成文本,并作为新的tweet发送到Twitter。

修改点: 当我使用以下示例脚本和您提供的令牌测试发布文本时

const url = "https://api.twitter.com/1.1/statuses/update.json"
const params = {muteHttpExceptions: true, "method":"POST","payload":"status=test","headers":{"Authorization":"###"},"escaping":false};
const res = UrlFetchApp.fetch(url, params);
console.log(res.getContentText())
我确认了
{“请求”:“\/1.1\/statuses\/update.json”,“错误”:“只读应用程序无法发布”。}
。从这个错误消息来看,您当前问题的原因似乎是由于您的twitter帐户的应用程序端设置了使用twitter API。遗憾的是,此错误消息在您正在使用的中未显示。不幸的是,由此无法直接找到问题的原因

为此,请将twitter应用程序API的权限从“读取”修改为“读写”和“读+写+直接消息”。修改权限后,请获取新的访问令牌和密码。通过这个流程,当使用新的访问令牌和密码时,脚本工作

参考:

关于
消息发送tweet失败。错误是:{“name”:“Exception”}出现在日志记录中。
,脚本中出现的错误在哪里?而且,错误消息只是这样?例如,如果错误发生在API上,则会显示错误号?Hi@Tanaike,事实上,当我运行脚本时,没有任何错误导致它无法最终确定。但是,当我将发送tweet的脚本与其他脚本分开时,在运行脚本时,它会显示我发送的日志消息。消息的完整脚本完美地保存在电子表格中,但它在没有发布tweet的情况下完成了脚本,因此我相信失败也是一样的。由于脚本是在机器人发送消息时激活的,所以我不是激活它的人,我不知道如何查看API响应,如果您能帮助我,我可以。谢谢您的回复。从您的回复中,您无法在脚本中找到发生错误的行,也无法找到与API相关的错误号。我的理解正确吗?而且,我不得不为我糟糕的英语水平道歉。我无法理解
,但当我将发送推文的脚本与其他脚本分开时,在运行脚本时,它会显示我发送的错误消息。
完整的模板消息会完美地保存在电子表格中,但它会在不发布推文的情况下完成脚本,因此,我认为错误是相同的。
。我将对其进行重新表述以提供帮助:当我运行问题的第二个脚本时,会出现问题中的日志消息。运行历史记录中的第一个脚本全部结束,没有错误,但推文未发布。感谢您的回复。首先,我可以考虑你的代码>新推特.OAuth[PROPS] 可以用来发送文本到API吗?而且,在您的脚本中,
newtwitter.OAuth(props)
被使用了两次。例如,当你使用它一次,你会得到什么结果?顺便说一下,在我当前的环境中,我无法直接测试API,因为我没有考虑它。这只是我的猜测。对此我深表歉意。
const url = "https://api.twitter.com/1.1/statuses/update.json"
const params = {muteHttpExceptions: true, "method":"POST","payload":"status=test","headers":{"Authorization":"###"},"escaping":false};
const res = UrlFetchApp.fetch(url, params);
console.log(res.getContentText())