I would like to use the Amazon Alexa voice service to create a voice interface for Salesforce. But I've run into problems.

I am reading here:


and I read:

"unfortunately when linking accounts Amazon's Alexa Skills page doesn't sends to the login page the redirect_uri parameter that is mandatory for successfull Salesforce OAuth process completion."

There might be a variable name conflict, since both SalesForce and Amazon use "redirect_uri" in the URLs they use as part of their Oauth process.

On the Amazon side, I believe I've done all I can to set this up.

I've gone to my Developer Portal:


(Obfuscated for security)

Under "Account Linking or Creation", under "Domain List", I whitelisted this domain:


If I take my iPhone and open the Alexa app, I can search for my skill, find it, and then I click "Enable".

Under "Authorization URL" I put:


(You might ask, why don't I go point straight to Salesforce? Well, I was hoping to harvest the Amazon user_id, so I went to my own server first. This was a failed idea.)

I've set this to "Implicit Grant".

When the user arrives on my server I harvest the Amazon user_id and then redirect to Salesforce:


And then in the Alexa app I see:

Not Found The requested URL /&redirect_uri=https://alexa.salesvoiceapp.com/auth-callback was not found on this server

I believe that Amazon is causing this error? Or is this a SalesForce error?

Do I have to specify a "redirect_uri" as part of the URL? When I created my Connected App I specified this as the callback URL:


Can I get SalesForce login to use that URL automatically, without me having to send it along as a parameter in the URL that I use to redirect users to SalesForce?


OK, completely updating this with code. Basically you need to add a header and transform the request, and the munge instance_url to the access token and add an expiry to the response. Note this uses their Auth Code flow.

Here's the endpoint I use for the token URI, using Node + Express:

app.post('/token',function (req, res) {

  var sr = sync_request('POST', 'https://login.salesforce.com/services/oauth2/token',
                      headers: {'Content-Type':'application/x-www-form-urlencoded','Accept':'application/json'},
                      body: 'grant_type='+req.body.grant_type+'&code='+req.body.code+'&refresh_token='+req.body.refresh_token+'&client_id='+req.body.client_id+'&client_secret='+req.body.client_secret+'&redirect_uri='+req.body.redirect_uri
  response = JSON.parse(sr.getBody('utf8'));

  response.access_token = response.access_token + " " + response.instance_url;
  response.expires_in = 5400; //in seconds, set this to be less than your setting under session management.


Then you can grab the token and instance url by splitting on the space.

I've done a write up on using it, including the Amazon setup side.


In my case, I was trying to do it with the UI that amazon provides under the skills(Account Linking). Everything was perfectly set up and I was not able link my skill to SF via the connected app. I noticed that I had to provide scopes as api and refresh_token. It worked fine after that and I was able to link my SF account to my alexa skill.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.