I want to invoke my Lex bot from my lambda function, by passing an input (utterance) to my bot.
Here is my Python code:
import boto3
import json
def lambda_handler(event, context):
print(event)
# Create a new Amazon Lex runtime client
client = boto3.client('lex-runtime')
# Send the user's input to the bot
response = client.post_text(
botName='BotName',
botAlias='BotAlias',
userId='UserID',
inputText=event['input']
)
# Return the bot's response to the caller
return {
'output': response['message']
}
I get the following error:
"errorMessage": "Could not connect to the endpoint URL: "https://runtime.lex.af-south-1.amazonaws.com/bot/BotName/alias/BotAlias/user/UserID/text"",
"errorType": "EndpointConnectionError",
My lambda function has the following permissions:
AmazonLexFullAccess
AmazonLexRunBotsOnly
My Lex bot has the basic Amazon Lex permissions.
2
Answers
So it turns out that I was using 'lex-runtime' instead of 'lexv2-runtime'. The parameters also have to change.
The corrected code is as follows:
check botName, botAlias, or region in the boto3 client initialization or possible IAM permissions. It is clear that it is EndpointConnectionError. So check and see if there is any missing string values in your URL as well.