Trello doesn't move cards between lists using Google App Script

I think I have try all the solutions around here, and none of them worked for me.

The problem is that I can't move cards between list using the trello api. I have tried this ways to do it:
Number 1:

var API_KEY = '********************************';
var TOKEN = '************************************************************';
var ID_LIST = '***************************';

  var payload = {
    "value": ID_LIST,
    "token": TOKEN,
    "key": API_KEY
  };
  var options = {
    "method": "PUT",
    "payload": payload
  };
  // Post the payload to Trello
  try {
    var response = UrlFetchApp.fetch('http://api.trello.com/1/cards/[id of my card]/idList', options);
    Logger.log(response);
  } catch (e) {
    // Log any errors 
    Logger.log("ERROR:\n"+e.message);
  }

Number 2:

function createOAthService_Trello() {

  var consumerKey='*************************';
  var consumerSecret = '********************************************************'

  var service = OAuth1.createService("trello");
  service.setAccessTokenUrl("https://trello.com/1/OAuthGetAccessToken");
  service.setRequestTokenUrl("https://trello.com/1/OAuthGetRequestToken");
  service.setAuthorizationUrl("https://trello.com/1/OAuthAuthorizeToken?scope=read,write");
  service.setPropertyStore(PropertiesService.getScriptProperties());

  service.setCallbackFunction('authCallback_Trello');

  service.setConsumerKey(consumerKey);
  service.setConsumerSecret(consumerSecret);

  return service;
}



function checkServiceAccess(){
      var service = createOAthService_Trello();
      var emailAddress ='*****@********.com';

      if(service.hasAccess()){
        return service;
    }
    else {
      var authorizationUrl = service.authorize();
      MailApp.sendEmail(emailAddress, 'Google Script App Needs Authorization (Trello)', 'Please visit the following URL and then re-run the script: ' + authorizationUrl);
      Logger.log('Please visit the following URL and then re-run the script: ' + authorizationUrl);
  }
}
function moveCard(){
      var service = checkServiceAccess();
      var url = 'http://api.trello.com/1/cards/[myCardId]/idList?value=[newListId]&token=[myToken]&cards=open&lists=open'
      var options = {"method" : "put"};

      var raw= service.fetch(url, options);
      Logger.log(raw);
}

This two pieces of code doesn't crash. But they don't move any card, and only return a Log with the ID of the list where they are placed.
I have checked a thousand of times for the id's to be correct, so that can't be the problem. It doesn't seem to be a problem with the PUT request, because I can Update descriptions, titles,... But with the DELETE request,it fires a "Unexpected exception". Maybe they are related.

Also, I have tried to insert this on my code:

<html>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="https://trello.com/1/client.js?key=*****************************"></script>
</html>

//eval(UrlFetchApp.fetch('https://trello.com/1/client.js?key=************************').getContentText());

var success = function(successMsg) {
  asyncOutput(successMsg);
};

var error = function(errorMsg) {
  asyncOutput(errorMsg);
};

Logger.log(Trello.get('/member/me/boards', success, error));

But it crash because it can't find the Trello global variable. I'm really desperate, any help will be apreciated . Thank you for your time! :)

1 answer

1 vote
Oscar Triscon Community Champion Apr 26, 2017

> This two pieces of code doesn't crash. But they don't move any card, and only return a Log with the ID of the list where they are placed.

This means the request has been successful. Is the list returned not the correct one? The id returned should match the idList you passed in your request, confirming that the card was moved to that new list.

No, it returns the id where the card is placed. It doesn't even move it.

Thanks for helping :)

 

Oscar Triscon Community Champion Apr 26, 2017

Are you sure the idList you're passing is the correct one? If it's not moving it, you may be passing the existing list instead of the new one.

The ListId where its placed ends with 98, I'm trying to move to someone ended on 96...

Also, I realized that putting a wrong id works in the same way...

Oscar Triscon Community Champion Apr 26, 2017

So, when you PUT the idList for a card, you get back the card object, something like this:

{
 "id": "A_CARD_ID",
 "badges": {
  "votes": 0,
  "viewingMemberVoted": false,
  "subscribed": false,
  "fogbugz": "",
  "checkItems": 0,
  "checkItemsChecked": 0,
  "comments": 0,
  "attachments": 0,
  "description": false,
  "due": null,
  "dueComplete": false
 },
 "checkItemStates": [],
 "closed": false,
 "dateLastActivity": "2017-04-26T16:06:36.553Z",
 "desc": "",
 "descData": null,
 "due": null,
 "dueComplete": false,
 "email": null,
 "idBoard": "A_BOARD_ID",
 "idChecklists": [],
 "idLabels": [],
 "idList": "A_LIST_ID",
 "idMembers": [],
 "idShort": 2870,
 "idAttachmentCover": null,
 "manualCoverAttachment": false,
 "labels": [],
 "name": "X",
 "pos": 98303,
 "shortUrl": "https://trello.com/c/XXXXXXX",
 "url": "https://trello.com/c/XXXXXXXX/2870-x"
}

Where A_CARD_ID, A_BOARD_ID and A_LIST_ID are id numbers.

Does the idList returned not match the "value" parameter your pass in?

No, actually when I do the PUT it returns something like this:

{"_value" :"XXXXXXid from the original ListXXXXXX"}
Oscar Triscon Community Champion Apr 27, 2017

You're probably correct, I was writing off memory.

So the request goes through, you get an idList back, but it's not the new list's id?

I'm having a hard time reproducing your problem, so I'll tell you what differs between your code and the way I do it, perhaps you can try:

1. I pass the key and token in the query string instead of the payload.

2. I use "https://trello.com" not "http://trello.com" (pretty sure you're getting a redirect there).

But if your request is going through, then I'm not sure how this would help. Perhaps check if you have permission to move cards on that board? You should get a 401 though if you didn't.

Sorry, I can't think of anything else.

 

 

 

Oscar Triscon Community Champion Apr 27, 2017

Update: I'm almost sure I found the problem.

Change your URL scheme from http:// to https:// and it'll work.

The Trello API  treats POSTing and PUTing to http as GET.

Oh my god, you are right!

Thank you so much, I almost give it up ^-^'

You rocks!

Oscar Triscon Community Champion Apr 28, 2017

Never give up! :-)

Suggest an answer

Log in or Sign up to answer
Atlassian Community Anniversary

Happy Anniversary, Atlassian Community!

This community is celebrating its one-year anniversary and Atlassian co-founder Mike Cannon-Brookes has all the feels.

Read more
Community showcase
Bridget Sauer
Published Feb 02, 2018 in Trello

Atlassian User Groups: Trello edition

You’re invited to our first ever Trello User Groups   Good news for current and aspiring Trello enthusiasts! We’re launching Trello User Groups so that you can network, share ideas, solve ...

1,738 views 14 14
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you