【问题标题】:Using Google Apps Script and to update Slack status使用 Google Apps 脚本并更新 Slack 状态
【发布时间】:2017-04-20 18:34:30
【问题描述】:

我刚刚开始学习 Slack API,我想使用 Google Apps 脚本来设置 custom status。这是我得到的代码(不知何故我的配置文件变量有问题:

function setStatus() {
 //https://api.slack.com/docs/presence-and-status

  var token = MYTOKEN; //https://api.slack.com/apps
  var apiEndpoint = "https://slack.com/api/";
  var myUserID = MYUSERID;

  var method = "users.profile.set";
  var profile = {"status_text": "test"};
  var payload = {"token": token, "user" : myUserID, "profile" : profile};

  Logger.log(payload);

  var completeUrl = apiEndpoint + method;
  var jsonData = UrlFetchApp.fetch(completeUrl, {"method" : "post", "payload" : JSON.stringify(payload)});
  var object = JSON.parse(jsonData.getContentText());
  Logger.log(object);
}

但我收到的错误消息是{ok=false, error=invalid_form_data}

已经通过此代码成功更改了存在(只是“方法”和“有效负载”变量已更改):

function setPresence() {
 //https://api.slack.com/docs/presence-and-status

  var token = MYTOKEN; //https://api.slack.com/apps
  var apiEndpoint = "https://slack.com/api/";
  var myUserID = MYUSERID;

  var method = "users.setPresence";  
  var payload = {"token": token, "user" : myUserID, "presence" : "auto"}; //Presence can either be "auto" or "away"

  Logger.log(payload);

  var completeUrl = apiEndpoint + method;
  var jsonData = UrlFetchApp.fetch(completeUrl, {"method" : "post", "payload" : JSON.stringify(payload)});
  var object = JSON.parse(jsonData.getContentText());
  Logger.log(object);
}

因此,如果有人可以帮助指出我如何错误地传递了 profile,那就太好了!

【问题讨论】:

    标签: google-apps-script slack-api


    【解决方案1】:

    您的脚本几乎是正确的。我稍微修改了一下。请检查一下。通过这个脚本,我已经确认可以更改“status_text”。请包含 users.profile:write 到范围并再次检索访问令牌。

    修改后的脚本:

    function setStatus() {
     //https://api.slack.com/docs/presence-and-status
    
      var token = MYTOKEN; //https://api.slack.com/apps
      var apiEndpoint = "https://slack.com/api/";
      var myUserID = MYUSERID;
    
      var method = "users.profile.set";
      var profile = {"status_text": "test"};
      var payload = {token: token, user: myUserID, profile: JSON.stringify(profile)};
    
      Logger.log(payload);
    
      var completeUrl = apiEndpoint + method;
      var jsonData = UrlFetchApp.fetch(completeUrl, {method: "post", payload: payload});
      var object = JSON.parse(jsonData.getContentText());
      Logger.log(object);
    }
    

    【讨论】:

    • 啊 - 这就是我所缺少的!给以后看到这个的人注意:var profile = {"status_text: "test"}; 会让你将消息设置为test,但为了将其设置回空白,你必须使用var profile = {"status_text": "", "status_emoji" : ""};(你不能只使用@987654325 @ - 它不起作用)
    【解决方案2】:

    我也是 .NET 开发人员,所以对于那些想要 C# 解决方案的人,我已将最终解决方案转换为 .NET:

    string apiEndpoint = "https://slack.com/api/";
    string method = "users.profile.set";
    string completeUrl = apiEndpoint + method;
    string token = MYTOKEN; //Put your token here
    string userID = MYUSERID; //Put your user id here
    JObject profile = new JObject()
    {
        {"status_text", "" },
        {"status_emoji", "" }
    };
    NameValueCollection payload = new NameValueCollection()
    {
        {"token", token },
        {"user", userID },
        {"profile", profile.ToString() }
    };
    
    using (WebClient client = new WebClient())
    {
        var response = client.UploadValues(completeUrl, "POST", payload);
        string responseText = (new UTF8Encoding()).GetString(response);
    
        Console.WriteLine(responseText);
    }
    

    如果你不想要依赖于Newtonsoft.Json 的东西,那么你可以用这个代替:

    JObject profile = new JObject()
    {
        {"status_text", "" },
        {"status_emoji", "" }
    };
    

    string profile = "{" +
                        "\"status_text\":\"\"," + /* e.g. "\"status_text\":\"test\","*/
                        "\"status_emoji\":\"\"" +
                     "}";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多