AWS Lambda API Gateway HTTP proxy integration, don't enter the app.handle
wesleysima opened this issue · 4 comments
I am trying to use a lambda function as a webhook and my handler call is not working.
The same code works normally in inline cloud functions in the actions console.
Here is my code in lambda:
`exports.handler = async (event) => {
const { conversation, Image, Card, Simple, Suggestion, List } = require('@assistant/conversation');
const app = conversation({debug: true});
app.handle('start_conversation', conv => {
let message = 'A wondrous greeting, adventurer! Welcome to the mythical land of Gryffinberg! Based on your clothes, you are not from around these lands. It looks like you\'re on your way to an epic journey.';
if (conv.user.lastSeenTime) {
message = 'A wondrous greeting, adventurer! Welcome back to the mythical land of Gryffinberg!';
}
conv.add(message);
});
exports.fulfillment = app
};`
Here is my request json.
{
"requestJson": {
"handler": {
"name": "start_conversation"
},
"intent": {
"name": "actions.intent.MAIN",
"params": {},
"query": "Falar com o app teste-man"
},
"scene": {
"name": "actions.scene.START_CONVERSATION",
"slotFillingStatus": "UNSPECIFIED",
"slots": {},
"next": {
"name": "start"
}
},
"session": {
"id": "ABwppHGM0ZY2HN8IoKGqbffg3-EEHCMwFvLj0qPrSnJhk6LC68HXLEcm-Hg2iOxda6312YvzaEsI32dB9y0",
"params": {},
"typeOverrides": [],
"languageCode": ""
},
"user": {
"locale": "pt-BR",
"params": {},
"accountLinkingStatus": "ACCOUNT_LINKING_STATUS_UNSPECIFIED",
"verificationStatus": "VERIFIED",
"packageEntitlements": [],
"lastSeenTime": "2020-07-31T14:27:51Z"
},
"home": {
"params": {}
},
"device": {
"capabilities": [
"SPEECH",
"RICH_RESPONSE",
"LONG_FORM_AUDIO"
]
}
}
}
I also had problems at setting up the Lambda but with the right API Gateway config it works.
Do you recive any request on your Lambda?
I also had problems at setting up the Lambda but with the right API Gateway config it works.
Do you recive any request on your Lambda?
I get my request in lambda, I can see it in the logs, but it doesn't go into the app.handle.
I also had problems at setting up the Lambda but with the right API Gateway config it works.
Do you recive any request on your Lambda?I get my request in lambda, I can see it in the logs, but it doesn't go into the app.handle.
Try to use only this code and config your API Gateway for /fulfillment
const { conversation, Image, Card, Simple, Suggestion, List } = require('@assistant/conversation');
const app = conversation({debug: true});
app.handle('start_conversation', conv => {
let message = 'A wondrous greeting, adventurer! Welcome to the mythical land of Gryffinberg! Based on your clothes, you are not from around these lands. It looks like you\'re on your way to an epic journey.';
if (conv.user.lastSeenTime) {
message = 'A wondrous greeting, adventurer! Welcome back to the mythical land of Gryffinberg!';
}
conv.add(message);
});
exports.fulfillment = app
This is how we configured our action to use a lambda deployment (which we deploy with serverless):
ActionsOnGoogleFulfillment.yaml
handlers:
- name: hello
httpsEndpoint:
baseUrl: https://rhi77819jk0.execute-api.eu-central-1.amazonaws.com/dev/fulfillment/
endpointApiVersion: 2
handler.ts
import { conversation } from "@assistant/conversation"
import * as Handler from "./src/handler"
const app = conversation()
app.handle("hello", Handler.hello)
app.catch(Handler.errorLogger)
exports.intentHandler = app
serverless.yml
service: google-wdr5-assistant-sdk
provider:
name: aws
runtime: nodejs12.x
region: eu-central-1
stage: ${opt:stage, 'dev'}
timeout: 25
environment:
STAGE: ${self:provider.stage}
package:
exclude:
- "**"
include:
- "dist/bundle.js"
functions:
handler:
handler: dist/bundle.intentHandler
events:
- http:
path: fulfillment
method: post
Maybe this snippets help you somehow :-)