Tweeting Using Logic Apps - Error "Media Type Unrecognized" When Sending Image With Tweets

This article examines an error when tweeting an image using a logic app. The imageData property is used to pass the image as a base64string. The data is sent to the Logic App using an HTTP trigger.

BackGround

 
This article examines the following error when tweeting images using Logic Apps and explains how to fix it.
  1. {  
  2.   "status": 400,  
  3.   "message""media type unrecognized.\r\nclientRequestId: 5c3cf7d0-c018-494d-bc74-f4d88edc040d\r\nserviceRequestId: 392220ba2115f611f7789f451003bdc4",  
  4.   "source""twitter-wi.azconn-wi.p.azurewebsites.net"  
  5. }  

Replicating The Error

 
The logic app to replicate this error is very simple. It looks like below.
 
 Tweeting Using Logic Apps: Error "media type unrecognized" when sending image with Tweets
 
The imageData property is used to pass the image as a base64string. The data is sent to the Logic App using an HTTP trigger and the  postTweet action posts the tweet to the defined Twitter connection.
 

Testing the Logic App

 
After testing the logic app through any REST Test tool, we get the following error in the Logic App run history.
 
Tweeting Using Logic Apps - Error "Media Type Unrecognized" When Sending Image With Tweets 
 
As the issue is now recognized, let us try to inspect and fix the issue.
 

Reconstructing the Logic App 

 

Let us look at the documentation of the Twitter Connector on the connectors page. At the Twitter Connector page, it says that to post a tweet, it has two parameters -

  1. tweetText which is a string
  2. Media which is binary

Once we look at this, the solution comes to us easily. The reason the logic app's action failed was that we were passing the base64 encoded string instead of a binary stream. So, we need to convert the base64 string into a binary and we should be good to go. So, I made the following changes to the logic app.

We need to parse the string in the imageData to binary using the base64ToBinary() function available in the logic app. The modified Logic App looks like the following.
 
Tweeting Using Logic Apps - Error "Media Type Unrecognized" When Sending Image With Tweets
 
Tweeting Using Logic Apps - Error "Media Type Unrecognized" When Sending Image With Tweets 
 
Let us peek at the code behind the PostTweet action. It is shown below.
  1. {  
  2.     "inputs": {  
  3.         "host": {  
  4.             "connection": {  
  5.                 "name""@parameters('$connections')['twitter']['connectionId']"  
  6.             }  
  7.         },  
  8.         "method""post",  
  9.         "body""@base64ToBinary(triggerBody()?['imageData'])",  
  10.         "path""/posttweet",  
  11.         "queries": {  
  12.             "tweetText""@triggerBody()?['tweetText']"  
  13.         },  
  14.         "authentication""@parameters('$authentication')"  
  15.     }  
  16. }  
We can see that the imageData is converted first into a binary stream and then sent to the Twitter API.
 

Retesting the Logic App

 
A successful run is shown below.
 
Tweeting Using Logic Apps - Error "Media Type Unrecognized" When Sending Image With Tweets 
 
Let us take a look at the Twitter handle to confirm if the image is posted correctly.
 
Tweeting Using Logic Apps - Error "Media Type Unrecognized" When Sending Image With Tweets

Conclusion

 
It is necessary to manage the content in the request and parse it into binary format while posting an image to Twitter using Logic App.