First, I would keep your front end react UI separate from the backend chatbot. those things separate.
The basic architecture would be one of the following:
Option1: FrontEnd/React --> Lex (Via PostText/PostContent and PutSession) --> Lambda fulfillment function
Option2: FrontEnd/React --> APIGW/Lambda --> Lex (Via PostText/PostContent and PutSession) --> Lambda fulfillment function
Option 1 is the simplest way to build an MVP and get something out of the door, but the second option provides a contract and abstracts certain things away. This is very important, because you my find that constructing your bots in different ways may prove beneficial to your use case, but you don't want to be in the situation where you are constantly trying to update the front end to reflect that.
First, I would keep your front end react UI separate from the backend chatbot. those things separate.
The basic architecture would be one of the following:
Option1: FrontEnd/React --> Lex (Via PostText/PostContent and PutSession) --> Lambda fulfillment function
Option2: FrontEnd/React --> APIGW/Lambda --> Lex (Via PostText/PostContent and PutSession) --> Lambda fulfillment function
Option 1 is the simplest way to build an MVP and get something out of the door, but the second option provides a contract and abstracts certain things away. This is very important, because you my find that constructing your bots in different ways may prove beneficial to your use case, but you don't want to be in the situation where you are constantly trying to update the front end to reflect that.