End of support notice: On September 15, 2025, AWS will discontinue support for Amazon Lex V1. After September 15, 2025, you will no longer be able to access the Amazon Lex V1 console or Amazon Lex V1 resources. If you are using Amazon Lex V2, refer to the Amazon Lex V2 guide instead. .
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
"
}