How to upload a file from Salesforce Apex to IBM Watson - salesforce

I am trying to upload a sample document from Salesforce Apex class to IBM Watson. I am trying with the following snippet but am getting this error
"23:13:17:000 USER_DEBUG "error" : "Request timed out, please try again."
Somehow it is getting timed out.
Blob fileBlob = Blob.valueOf('This is a sample pdf file');
IBMDiscoveryV1 discovery = new IBMDiscoveryV1('2017-11-07');
IBMDiscoveryV1Models.AddDocumentOptionsBuilder builder = new IBMDiscoveryV1Models.AddDocumentOptionsBuilder(
'<<EnvironmentId>>',
'<<CollectionId>>');
IBMWatsonFile.FileBuilder fileBuilder = new IBMWatsonFile.FileBuilder();
fileBuilder.name('Sample.pdf');
fileBuilder.body(fileBlob);
IBMWatsonFile file = fileBuilder.build();
builder.file(file);
IBMDiscoveryV1Models.AddDocumentOptions options = builder.build();
IBMDiscoveryV1Models.DocumentAccepted docAccepted = discovery.addDocument(options);

There was a problem with the IBM Watson Salesforce SDK and that's why you were getting a timeout. The issue was fixed in this pull request and released in v1.4.0.
The problem was that we were sending the wrong mime-type (APPLICATION_OCTET_STREAM) and we were not sending the filename in the multi-part request.

If you see this error persistently please file an issue on the SDK's GitHub repo.
https://github.com/watson-developer-cloud/salesforce-sdk/issues

Related

Upload data in omnichannel inventory by using headless commerce Upload API

I am trying to upload data into omnichannel inventory in OMS and configured with SFCC as well.
Using headless commerce 'Upload API (/commerce/oci/availability-records/uploads)' sometime data uploaded into inventory successfully. But sometime file uploaded but its batch failed with no error description. I am using same format or data for upload.
According to the docs you need to do a POST call to:
Request Body:
{
"recordId":"0a87539d-f3dd-47bc-0000-9c752e39dbe0",
"onHand":100,
"sku":"5274203315",
"effectiveDate":"2023-02-15T15:52:36.551Z",
"safetyStockCount":0,
"locationId":"sunrise_warehouse"
}
API response
In call no error description. so I am stuck due to inventory block. Any help will be appreciated.

"status code 403" Error while creating file using Mule 4 google drive connector

I have to upload images to google drive through mule integration. I'm facing trouble with <google-drive:file-content> connector. Can someone help me or direct me a tutorial relates to it?
This is the error message while I tried to connect to the google drive
Message : Request returned status code 403
Element : imageuploaderFlow/processors/4 #
imageuploader:imageuploader.xml:39 (Create media file)
Element DSL : <google-drive:create-media-file doc:name="Create media file" doc:id="hhhhhjhj" config-ref="Google_Drive_Connector_Config" contentType="application/octet-stream">
<google-drive:file-content><![CDATA[
#[payload.parts.image.content write "application/octet-stream"]
]]></google-drive:file-content>
</google-drive:create-media-file>
Error type : GOOGLE-DRIVE:CLIENT_ERROR
FlowStack : at imageuploaderFlow(imageuploaderFlow/processors/4 # imageuploader:imageuploader.xml:39 (Create media file))
Google Drive Connector Config
scopes: https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/drive.file
connector xml snippet
<google-drive:create-media-file doc:name="Create media file" doc:id="ac59e7fe-e615-fggh-9473-2we5cd73ecb7" config-ref="Google_Drive_Connector_Config" contentType="application/octet-stream">
<google-drive:file-content ><![CDATA[#[payload.parts.image.content write "application/octet-stream"]]]></google-drive:file-content>
</google-drive:create-media-file>
The version of the Google Drive connector is 1.0.1
Ensure that you have Enabled the Google Drive API in your project. Not enabling this also raises a 403 error. Also, mostly, Google API sends pretty clear message when you do something wrong. You can access the detailed HTTP response using error.errorMessage.payload and headers using error.errorMessage.attributes.headers

Google App engine standard environment /_ah/upload/ is failing with HTTP 503

Our production App engine standard environment Java 8 application is facing error when uploading files. This used to work until yesterday but started seeing HTTP 503 error in response to https://.appspot.com/_ah/upload/<upload_key>
Is there any service down specific to _ah/upload ??
Our file upload process.
String uploadUrl = com.google.appengine.api.blobstore.BlobstoreServiceFactory.getBlobstoreService().createUploadUrl(uploadCallBackUrl); // returns an upload url of the form https://.appspot.com/_ah/upload/AMmfu6aRaNw4HRDt9eS1d6crhKjxyEZ6aPCUrBE-0O8MftAY5BMzRw3kZkkCsqq5MJLDBfhWdZlVTKdfKuxBuD3QZDgZsRbUlx6QTD-B6MbJfTslohO7vcbBQet2I3kVUC4qAPwDSMHuI3lW6fvfbdehpz1pLYA88vlepiWgpHYEXtG8tqx5_MI/ALBNUaYAAAAAYEHvj10qLujApjnqp16MCEdnZecmQh1F/
File upload from browser to the url returned in step#1
I know we are using blobstore api, but this is legacy application which used to successfully upload files until yesterday.
Any help in this regard is highly appreciated.
Update Moments later the service is working normally again. This must be a blip internal to GCP.
Best thing to do is to check if Google set a deprecation date for usig Blobstore API and whether that date has been reached.

Migrating to firebase from channel api

I am trying to migrate from Channel API in GAE to firebase. To do this, first, I am trying to setup a local development environment. I cloned the sample app from GAE samples. (Link to sample)
When I ran this, I get the following error, when the web client is trying to authenticate with the firebase DB.The error is in the console.
Screenshot of the error
i.e token authentication failed.Clearly, this points to the fact that generated JWT is not correct.
To be sure, I have done the following:
Created a service account in Google cloud console.
Downloaded the JSON and pointed to this JSON in the environment variable "GOOGLE_APPLICATION_CREDENTIALS"
Put the code snipped from the firebase into WEB-INF/view/firebase_config.jspf file
The code to generate the token is as follows ( from FirebaseChannel.java )
public String createFirebaseToken(Game game, String userId) {
final AppIdentityService appIdentity = AppIdentityServiceFactory.getAppIdentityService();
final BaseEncoding base64 = BaseEncoding.base64();
String header = base64.encode("{\"typ\":\"JWT\",\"alg\":\"RS256\"}".getBytes());
// Construct the claim
String channelKey = game.getChannelKey(userId);
String clientEmail = appIdentity.getServiceAccountName();
System.out.println(clientEmail);
long epochTime = System.currentTimeMillis() / 1000;
long expire = epochTime + 60 * 60; // an hour from now
Map<String, Object> claims = new HashMap<String, Object>();
claims.put("iss", clientEmail);
claims.put("sub", clientEmail);
claims.put("aud", IDENTITY_ENDPOINT);
claims.put("uid", channelKey);
claims.put("iat", epochTime);
claims.put("exp", expire);
System.out.println(claims);
String payload = base64.encode(new Gson().toJson(claims).getBytes());
String toSign = String.format("%s.%s", header, payload);
AppIdentityService.SigningResult result =
appIdentity.signForApp(toSign.getBytes());
return String.format("%s.%s", toSign,
base64.encode(result.getSignature()));
}
Instead of Step #2, have also tried 'gcloud auth application-default login' and then running after unsetting the environment variable - resulting in the same issue
Appreciate any help in this regard.
After further research, I found out additional info which may help others facing the same issue. I did the following to be able to run the sample locally.
Its important to ensure that the service account in appengine has the permissions to access resources. Chose "Editor" as the role for permissions (other levels may also work, but I chose this) for the default appengine service account. This will ensure that you do not run into "Unauthorized" error.
My application was enabled for domain authentication and did not use Google authentication. The sample however has been created for Google authentication. I had to make changes to the sample code to send the userId as part of the URL and removed the code that referred to UserServiceFactory.
The console error did show up even now, but the application worked fine. This error probably can be ignored. In the deployed environment, however, this error does not show up.
I would appreciate if Google/Firebase engineers update this answer with official responses, or update the sample documentation appropriately as currently this information does not seem to be mentioned anywhere.

Error Uploading image to google cloud storage from Google app engine php app

I am trying to upload images to Google cloud storage using CKeditor4.3.3 image2 plugin from google engine app (php).
POst method return 303 status.
GET returns:
Request URL:http://temporary-blobstore-error.appspot.com/
Request Method:GET
Status Code:500 Internal Server Error
Request Headersview source
I get the following error displayed fromhttp://temporary-blobstore-error.appspot.com/:
Error: Server Error
The server encountered an error and could not complete your request.
Please retry your last submission.
If the problem persists, please contact the person responsible for the application you're using, or, if you are that person, report your problem and mention this error message and the query that caused it.
Following is the Request URL:
[http://v01.mysite.appspot.com/_ah/upload/?aa=ask&cat=2/AMmfu6aYRdoHF3NpG27hJRWyx-RH_Vo5r6NhzqyIK-3YRw7I3OHv_zq6SUYElQKg3phbtFu6GIG_MnltZjS03xNPSDKfA-dmsabvdvdmavdmavmvamdsvmdVMDVAMVmadva-e_rmabsmdvdmsdbmsdbmabdmasbdmasbdmsmdYR2MuM7rBb6dEttPzPYVylmw9/ALBNUaYAAAAAUy-nio2CLZdkumm87rKdUq9oOz1hVJgN/&CKEditor=content&CKEditorFuncNum=0&langCode=en][1]

Resources