If you are using Amazon Lex V2, refer to the Amazon Lex V2 guide instead.
If you are using Amazon Lex V1, we recommend upgrading your bots to Amazon Lex V2. We are no longer adding new features to V1 and strongly recommend using V2 for all new bots.
Setting Complex Attributes
Session and request attributes are string-to-string maps of attributes and values. In many cases, you can use the string map to transfer attribute values between your client application and a bot. In some cases, however, you might need to transfer binary data or a complex structure that can't be easily converted to a string map. For example, the following JSON object represents an array of the three most populous cities in the United States:
{
"cities": [
{
"city": {
"name": "New York",
"state": "New York",
"pop": "8537673"
}
},
{
"city": {
"name": "Los Angeles",
"state": "California",
"pop": "3976322"
}
},
{
"city": {
"name": "Chicago",
"state": "Illinois",
"pop": "2704958"
}
}
]
}
This array of data doesn't translate well to a string-to-string map. In such a case, you can transform an object to a simple string so that you can send it to your bot with the PostContent and PostText operations.
For example, if you are using JavaScript, you can use the
JSON.stringify
operation to convert an object to
JSON, and the JSON.parse
operation to convert JSON text
to a JavaScript object:
// To convert an object to a string. var jsonString = JSON.stringify(
object
, null, 2); // To convert a string to an object. varobj
= JSON.parse(JSON string
);
To send session attributes with the PostContent
operation, you must base64 encode the attributes before you add them
to the request header, as shown in the following JavaScript
code:
var
encodedAttributes
= new Buffer(attributeString
).toString("base64");
You can send binary data to the PostContent
and
PostText
operations by first converting the data to
a base64-encoded string, and then sending the string as the value in
the session attributes:
"sessionAttributes" : {
"binaryData": "base64 encoded data
"
}