0
votes

I've created a lex sms chatbot and published it to a Twilio SMS Channel. Within my java lambda fulfillment handleRequest function I receive 2 parameters: an Input object and a Context. Input has some type of system generated userId, but I need the phone number of the incoming sms message from Twilio.

I've configured Twilio to call Lex via webhook per these instructions:

http://docs.aws.amazon.com/lex/latest/dg/twilio-bot-association.html#twilio-bot-assoc-create-assoc

I'm using the system created webhook callback url between Lex and Twilio and would like to avoid writing my own Lex-Twilio go between with Gateway API and lambda if possible.

I think I'm missing a configuration in Twilio to send this to Lex maybe? I haven't setup any TwilML app or anything, just linked the SMS number to my webhook callback url for lex. Everything works fine except getting the incoming sms number.

UPDATE:
I exhausted all possibilities with my input object and context in my java lambda function. I guess there's no way to get at the payload from twilio in Java. I tried switching to an input stream handler but still only had the input format defined in the documentation here: http://docs.aws.amazon.com/lex/latest/dg/lambda-input-response-format.html
I had to bite the bullet and build my own gateway API and Node handler. It's just a layer that sits before lex and translates twilio into lex input format and vis versa on the response. It updates the userId with the incoming phone number.
This tutorial was very useful in doing this:
https://aws.amazon.com/blogs/ai/integrate-your-amazon-lex-bot-with-any-messaging-service/

It was a lot of work just to get one additional field, but It does provide me the flexibility to switch SMS providers in the future easier.

1
Not sure if this helps, but by comparison in Node, where "input object" is the lambda event structure... in the Lex examples, the event object contains a body-json which appears to be the original JSON request body from Twilio and has an inner attribute From. So Lex doesn't "know" the number but apparently passes it through. The rest of how it gets there is a little murky but I don't think it's possible to misconfigure Twilio not to send it -- it seems like what you need to do is get it to pass through to you. Maybe that gives you something to chase down.Michael - sqlbot
Thanks Michael. I just decided to create the layer between lex and twilio and gateway api. a lot of work for one extra field (incoming sms number)Mattbob

1 Answers

0
votes

I am not sure as what exactly stopped you from getting the user phone number in your lambda function. You can always get sender phone number from 'userId' field from the input event in your lambda function. You can refer to the documentation to get more information.