eljefedelrodeodeljefe
eljefedelrodeodeljefe

Reputation: 6791

How to run Alexa skill with the alexa-sdk on own server with Node.js without Lambda drop-in?

The Alexa skill docs will eventually allow you to send webhooks to https endpoints. However the SDK only documents lambda style alexa-sdk usage. How would one go about running Alexa applications on one's own server without anything abstracting Lambda? Is it possible to wrap the event and context objects?

Upvotes: 3

Views: 1445

Answers (2)

Dana
Dana

Reputation: 713

Here's a way to do this that requires only a small change to your Skill code:

  1. In your main index.js entry point, instead of:

    exports.handler = function (event, context) {
    

    use something like:

    exports.myAppName = function (funcEvent, res) {
    
  2. Below that, add the following workaround:

    var event = funcEvent.body
    
    // since not using Lambda, create dummy context with fail and succeed functions
    const context = {
      fail: () => {
        res.sendStatus(500);
      },
      succeed: data => {
        res.send(data);
      }
    };
    
  3. Install and use Google Cloud Functions Local Emulator on your laptop. When you start and deploy your function to the emulator, you will get back a Resource URL something like http://localhost:8010/my-project-id/us-central1/myAppName.

  4. Create a tunnel with ngrok. Then take the ngrok endpoint and put it in place of localhost:8010 in the Resource URL above. Your resulting fulfillment URL will be something like: https://b0xyz04e.ngrok.io/my-project-id/us-central1/myAppName

  5. Use the fulfillment URL (like above) under Configuration in the Alexa dev console, selecting https as the Service Endpoint Type.

Upvotes: 0

Josep Valls
Josep Valls

Reputation: 5560

You can already use your own endpoint. When you create a new skill, in the configuration tab, just choose HTTPS and provide your https endpoint. ASK will call your endpoint where you can run anything you want (tip, check ngrok.com to tunnel to your own dev machine). Regarding the event and context objects; your endpoint will receive the event object information. You don't need the context object for anything, that just lets you interact with Lambda-specific stuff (http://docs.aws.amazon.com/lambda/latest/dg/python-context-object.html). Just make sure that you comply with the (undocumented) timeouts by ASK and you are good to go.

Upvotes: 1

Related Questions