{"id":1119,"date":"2021-10-30T08:42:06","date_gmt":"2021-10-30T08:42:06","guid":{"rendered":"https:\/\/salarydistribution.com\/machine-learning\/2021\/10\/30\/build-conversational-experiences-for-retail-order-management-using-amazon-lex\/"},"modified":"2021-10-30T08:42:06","modified_gmt":"2021-10-30T08:42:06","slug":"build-conversational-experiences-for-retail-order-management-using-amazon-lex","status":"publish","type":"post","link":"https:\/\/salarydistribution.com\/machine-learning\/2021\/10\/30\/build-conversational-experiences-for-retail-order-management-using-amazon-lex\/","title":{"rendered":"Build conversational experiences for retail order management using Amazon Lex"},"content":{"rendered":"<div id=\"\">\n<p>Retailers want to stay engaged with their customers as they move seamlessly between digital channels and physical storefronts. By delivering personalized and consistent experiences across a range of retail touchpoints, companies can drive brand loyalty. Customers contact retailers\u2019 customer support for reasons such as checking order status, updating shipping preferences, redeeming loyalty points, managing refunds, and finding a physical store. Product recommendations during these interactions are important towards optimizing operations and increasing conversions. Contextual and customized conversations help build relationships with customers and drive repeat business, reduce churn, and increase customer lifetime value.<\/p>\n<p>In this post, we review how you can use a pre-built solution with Amazon Lex to deliver rich customer service experiences for order management, such as getting order status, tracking a package, and canceling or modifying an order.<\/p>\n<h2><strong>Solution overview<\/strong><\/h2>\n<p>Amazon Lex provides the advanced deep learning functionalities of automatic speech recognition (ASR) for converting speech to text, and natural language understanding (NLU) to recognize the intent of the text, to enable you to build applications with highly engaging user experiences and lifelike conversational interactions. Amazon Lex for retail offers pre-built solutions that help you enhance brand loyalty on an omnichannel customer journey. The pre-built bots are configured with intents, sample utterances, and slot types for retail order management use cases and are integrated with <a href=\"https:\/\/aws.amazon.com\/connect\/\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Connect<\/a> contact flows.<\/p>\n<p>Let us review a few sample conversations as we cover the different components of the order status pre-built solution:<\/p>\n<p>In the following sample conversation, the caller wants to check the order status. The agent gathers and validates the order ID. Using this information, the agent looks up the order status and updates the caller.<\/p>\n<blockquote>\n<p>Agent: Thank you for calling Acme. How can I help you today?<\/p>\n<p>Caller: I want to check my order status<\/p>\n<p>Agent: Sure, I can help you with that. Please say or enter the 13-digit order number.<\/p>\n<p>Caller: 1234 56789 1234<\/p>\n<p>Agent: To confirm, I have your order number as 1234 56789 1234. Is that correct?<\/p>\n<p>Caller: Yes<\/p>\n<p>Agent: Ok. Give me a moment. Your order has been shipped. Do you want to know the delivery details?<\/p>\n<p>Caller: Yes<\/p>\n<p>Agent: Sure. Give me a moment. Your package has arrived at the final distribution facility, and it will be delivered on 11\/20\/2021. Caller: Thank you.<\/p>\n<\/blockquote>\n<p>In the following sample conversation, the caller wants to reschedule the order delivery. The agent captures the order ID and verifies the status of the order to determine eligibility for rescheduling. Next, the agent reschedules the delivery to the requested date.<\/p>\n<blockquote>\n<p>Agent: Thank you for calling Acme. How can I help you today?<\/p>\n<p>Caller: I want to reschedule my delivery<\/p>\n<p>Agent: Sure. I can help with that. Please say or enter the 13-digit order number.<\/p>\n<p>Caller: 1234 56789 1234<\/p>\n<p>Agent: I have your order number as 1234 56789 1234. Is that correct?<\/p>\n<p>Caller: Yes<\/p>\n<p>Agent: Got it. Your order is still being processed, so it can be rescheduled. Can you tell me the date you want the order delivered on?<\/p>\n<p>Caller: November 20<sup>th<\/sup><\/p>\n<p>Agent: November 20, 2021. For verification, can I have the zip code of your billing address?<\/p>\n<p>Caller: 12345<\/p>\n<p>Agent: Thank you. Your delivery has been rescheduled. We will deliver your order on the new scheduled date of Nov 20<sup>th<\/sup> 2021. Anything else I can help you with?<\/p>\n<\/blockquote>\n<p>The <code>RetailOrderManagementBot<\/code>\u00a0contains intents for common order management activities such as getting order status, tracking a package, canceling or modifying an order, returning an item, and rescheduling the delivery. It includes the following intents:<\/p>\n<ul>\n<li><strong>GetOrderStatus<\/strong> \u2013 This intent captures the order ID and provides the current status of the order.<\/li>\n<li><strong>TrackPackage<\/strong> \u2013 This intent captures the order ID and provides the current status of the shipping status.<\/li>\n<li><strong>CancelOrder<\/strong> \u2013 This intent captures the order ID and helps with canceling the order.<\/li>\n<li><strong>ReturnItem<\/strong> \u2013 This intent captures the order ID and helps with initiating a return of an item, after verifying the order ID.<\/li>\n<li><strong>RescheduleDelivery<\/strong> \u2013 This intent captures the order ID and helps with rescheduling the delivery.<\/li>\n<li><strong>EndConversation<\/strong>\u00a0\u2013 This intent ends the conversation based on user input such as \u201cthanks, I am done\u201d.<\/li>\n<li><strong>Fallback\u00a0<\/strong>\u2013 This intent is invoked when the input does not match any of the configured intents.<\/li>\n<\/ul>\n<p>The bot definition includes a complete dialog along with the prompts to manage the conversation. Each bot also integrates with an <a href=\"https:\/\/aws.amazon.com\/lambda\/\" target=\"_blank\" rel=\"noopener noreferrer\">AWS Lambda<\/a> function that contains code to simulate business logic execution. Integration with <a href=\"https:\/\/aws.amazon.com\/kendra\/\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Kendra<\/a> provides the ability to answer natural language questions during the conversation.<\/p>\n<h2><strong>Solution architecture<\/strong><\/h2>\n<p>Let\u2019s review the overall architecture for the solution (see the following diagram).<\/p>\n<ul>\n<li>We use <a href=\"https:\/\/aws.amazon.com\/lex\/\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Lex<\/a> bot to authenticate the caller, perform transactions (for example, \u201creschedule delivery\u201d) or provide the caller with the requested information (for example, \u201cget order status\u201d).<\/li>\n<li>We use <a href=\"https:\/\/aws.amazon.com\/lambda\/\" target=\"_blank\" rel=\"noopener noreferrer\">AWS Lambda<\/a> to simulate access to backend systems and to run the business logic required for completing transactions. For the purpose of this blog post, the data used is stored in a DynamoDB table.<\/li>\n<li>To answer any user questions, we configure <a href=\"https:\/\/aws.amazon.com\/lambda\/\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Kendra<\/a> search index so the bot can look up the information and provide a response.<\/li>\n<li>You can deploy the conversational experience on a <a href=\"https:\/\/docs.aws.amazon.com\/connect\/latest\/adminguide\/amazon-connect-instances.html\" target=\"_blank\" rel=\"noopener noreferrer\">Connect instance<\/a> or integrate it with your website.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image001.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-30124\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image001.png\" alt=\"\" width=\"1858\" height=\"1218\"><\/a><\/p>\n<p>We include a template that creates an AWS CloudFormation stack for you containing AWS resources, as well as the required AWS Identity and Access Management (IAM) roles. With these resources in place, you can use the pre-built solution for retail order management on the <a href=\"https:\/\/aws.amazon.com\/connect\/\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Connect <\/a>channel.<\/p>\n<h2><strong>Prerequisites<\/strong><\/h2>\n<p>You should have the following pre-requisites before we deploy the solution<\/p>\n<ul>\n<li>An <a href=\"https:\/\/signin.aws.amazon.com\/signin?redirect_uri=https%3A%2F%2Fportal.aws.amazon.com%2Fbilling%2Fsignup%2Fresume&amp;client_id=signup\" target=\"_blank\" rel=\"noopener noreferrer\">AWS account<\/a><\/li>\n<li>Access to the following AWS services\n<ul>\n<li>Amazon Lex to create bots<\/li>\n<li>Lambda for the business logic functions<\/li>\n<li>DynamoDB to create the tables<\/li>\n<li>IAM with access to create policies and roles<\/li>\n<li>AWS CloudFormation to run the stack<\/li>\n<\/ul>\n<\/li>\n<li>IAM access and secret key credentials<\/li>\n<li>Optionally, an existing <a href=\"https:\/\/aws.amazon.com\/connect\/\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Connect<\/a> instance (if you plan to deploy on Amazon Connect)<\/li>\n<\/ul>\n<h3><strong>Deploy the pre-built solution<\/strong><\/h3>\n<p>To deploy this solution, complete the following steps:<\/p>\n<ol>\n<li>Choose <strong>Launch Stack<\/strong> to launch an AWS CloudFormation stack in the Region of your choice:<br \/><a href=\"https:\/\/console.aws.amazon.com\/cloudformation\/home?#\/stacks\/quickcreate?templateURL=https:\/\/lex-usecases-templates.s3.amazonaws.com\/RetailOrderManagement.yaml&amp;stackName=retail-order-stack\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-16174 size-full\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/09\/22\/LaunchStack.jpg\" alt=\"\" width=\"144\" height=\"27\"><\/a><\/li>\n<li>For <strong>Stack name<\/strong>, enter a name for your stack. This post uses the name retail-order-stack, as shown in the following screenshot.<br \/><a href=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image003.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-30125\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image003.png\" alt=\"\" width=\"1036\" height=\"558\"><\/a><\/li>\n<li>Next, in the <strong>Parameters<\/strong> section, enter values for the Amazon Lex bots, DynamoDB table, and Amazon Connect contact flow.<br \/><a href=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image004.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-30126\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image004.png\" alt=\"\" width=\"1852\" height=\"1154\"><\/a><\/li>\n<li>Review the IAM resource creation and click on <strong>Create Stack<\/strong>. After a few minutes, your stack should be complete. The core resources are listed below:\n<ul>\n<li>Amazon Lex bot: <code>RetailOrderManagementBot<\/code><\/li>\n<li>Lambda functions: <code>RetailOrderManagementBusinessLogic<\/code><\/li>\n<li>DynamoDB: <code>retail_order_table<\/code><\/li>\n<li>Amazon Connect contact flow: <code>RetailOrderManagementContactFlow<\/code><\/li>\n<li>IAM roles: <code>LexRole<\/code>, <code>LexImportRole<\/code>, <code>LambdaRole<\/code>, <code>ConnectRole<\/code><\/li>\n<\/ul>\n<\/li>\n<li>If you provided a Connect ARN during stack creation, navigate to the <a href=\"https:\/\/aws.amazon.com\/connect\/\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Connect<\/a> dashboard and choose <strong>Phone numbers<\/strong> on the <strong>Routing<\/strong> menu in the navigation pane.<br \/><a href=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image005.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-30127\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image005.jpg\" alt=\"\" width=\"800\" height=\"466\"><\/a><\/li>\n<li>Next, associate a phone number with the retail order management contact flow. Once the phone number is associated, the solution is ready to be tested.<br \/><a href=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image006.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-30128\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image006.png\" alt=\"\" width=\"1602\" height=\"998\"><\/a><\/li>\n<\/ol>\n<h2><strong>Test the solution<\/strong><\/h2>\n<p>You can use <a href=\"https:\/\/lex-usecases-templates.s3.amazonaws.com\/RetailOrderManagement_customer_data.html\" target=\"_blank\" rel=\"noopener noreferrer\">sample data<\/a> to test the bot. If you used an Amazon Connect instance for deployment, you can call the Amazon Connect phone number and interact with the bot. You can also test the solution directly on the <a href=\"https:\/\/console.aws.amazon.com\/lexv2\/home\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Lex V2 console<\/a> using voice or text. As you engage with the bot you can see the DynamoDB table get updated based on the conversation. After you try out the pre-built conversation flows, you can customize the bot, add more intents as required, and integrate with additional backend systems.<\/p>\n<h2><strong>Retail order management: Key Capabilities<\/strong><\/h2>\n<p>Let\u2019s review some of the features offered by the pre-built solution to provide a seamless customer experience to the caller.<\/p>\n<h3><strong>Persisting information across requests<\/strong><\/h3>\n<p>Information collected at the beginning of the customer service call may be useful later again in the conversation. For example, a caller may start off with order status and follow up with a request to expedite shipping. The pre-built bots persist the order number using session attributes so that the order number can be reused later in the call to update delivery. The agent can then confirm the order number (\u201cI have your order number as 1234567891234. Can I use this for your reschedule request?\u201d) for the update.<\/p>\n<p>The following code is for persisting session attributes:<\/p>\n<div class=\"hide-language\">\n<pre><code class=\"lang-bash\">previous_intent = dialog.get_session_attribute(intent_request, 'previous_intent')\n\nif previous_intent == 'GetOrderStatus':\n  if order_number:\n      dialog.set_session_attribute(intent_request, 'order_number', order_number)\n      session_attributes = dialog.get_session_attributes(intent_request)\n\n  order_number_from_session = dialog.get_session_attribute(\n      intent_request, 'order_number')\n\n  if order_number_from_session: \n      dialog.set_slot('OrderNumber', order_number_from_session, intent)\n      order_number = order_number_from_session\n          \n  if order_number and not order_number_confirmation:\n      previous_slot_to_elicit = dialog.get_previous_slot_to_elicit(\n          intent_request)\n      if previous_slot_to_elicit == 'OrderNumberConfirmation':\n          if intent['confirmationState'] == 'Confirmed':\n              dialog.set_slot('OrderNumberConfirmation', 'yes', intent)\n              order_number_confirmation = 'yes'\n          elif intent['confirmationState'] == 'Denied':\n              dialog.set_slot('OrderNumberConfirmation', None, intent)\n              prompt = prompts.get('OrderNumber1')\n              return dialog.elicit_slot(\n                  'OrderNumber', active_contexts, \n                  session_attributes, intent,\n                  [{'contentType': 'PlainText', 'content': prompt}])\n          elif intent['confirmationState'] == 'None':\n              prompt = prompts.get(\n                  'OrderNumberConfirmation1', order_number=order_number)\n              return dialog.confirm_intent(\n                  active_contexts, session_attributes, intent, \n                  [{'contentType': 'SSML', 'content': prompt}],\n                  previous_dialog_action_type='ElicitSlot',\n                  previous_slot_to_elicit='OrderNumberConfirmation')\n      else:\n          prompt = prompts.get(\n              'OrderNumberConfirmation', order_number=order_number)\n          return dialog.confirm_intent(\n              active_contexts, session_attributes, intent, \n              [{'contentType': 'SSML', 'content': prompt}],\n              previous_dialog_action_type='ElicitSlot',\n              previous_slot_to_elicit='OrderNumberConfirmation')<\/code><\/pre>\n<\/p><\/div>\n<h3><strong>Resolving phrases<\/strong><\/h3>\n<p>In response to open-ended questions, customers may use phrases to provide an answer. For example, when applying for a refund, callers might provide various reasons (for example, \u201cproduct damaged\u201d, \u201cordered by mistake\u201d, \u201cwrong size\u201d) that have to be further interpreted before business logic can be executed. The wide range of possible reasons can make it challenging to interpret the exact reason for the return. The pre-built solution uses synonyms to map the input to a list of possible reasons. For the dialog strategy, the bot initially uses a basic prompt (\u201cPlease tell me the reason for the return) and then follows with a more a prescriptive prompt (\u201cSorry, I didn\u2019t follow that. Can you please share the reason for the return? You can say something like \u2018not needed, \u2018ordered by mistake, or \u2018product damaged\u201d).<\/p>\n<p>The following screenshot shows the slot definition and the associated dialog strategy:<br \/><a href=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image007.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-30129\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image007.png\" alt=\"\" width=\"1430\" height=\"998\"><\/a><\/p>\n<div class=\"hide-language\">\n<pre><code class=\"lang-bash\">if not order_return_reason and previous_slot_to_elicit == 'OrderReturnReason':\n  prompt = prompts.get('re_elicit_order_return_reason')\n  return dialog.elicit_slot(\n    'OrderReturnReason', active_context, session_attributes, intent,\n    [{'contentType': 'PlainText', 'content': prompt}]\n  )<\/code><\/pre>\n<\/p><\/div>\n<h3><strong>Ending conversations<\/strong><\/h3>\n<p>The pre-built solution offers an intent that can handle the ending of the conversation. After a query resolution, customers may want to end the conversation by saying something like \u201cThank you\u201d, \u201cI am done\u201d or \u201cBye\u201d. The intent recognizes these phrases and ends the call with the closing message \u201cThank you. Have a great day!\u201d<\/p>\n<h3><strong>Contact center flows<\/strong><\/h3>\n<p>You can deploy the pre-built solution as part of <a href=\"https:\/\/aws.amazon.com\/connect\/\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Connect<\/a> contact flows. When customers call into your contact center, the contact flow to which they are sent is the one assigned to the phone number that they called. The contact flow uses a Get customer input block to invoke <a href=\"https:\/\/aws.amazon.com\/lex\/\" target=\"_blank\" rel=\"noopener noreferrer\">the Amazon Lex<\/a> bot. The following diagram shows the contact flow.<\/p>\n<p><a href=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image008.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-30130\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/29\/Lex-Retail-image008.png\" alt=\"\" width=\"1904\" height=\"1066\"><\/a><\/p>\n<h2><strong>Cleanup<\/strong><\/h2>\n<p>To avoid incurring any charges in the future, delete all the resources created.<\/p>\n<ol>\n<li>Amazon Lex bots<\/li>\n<li>Lambda functions<\/li>\n<li>DynamoDB table<\/li>\n<li>Amazon Connect Contact flow<\/li>\n<li>IAM roles<\/li>\n<\/ol>\n<h2><strong>Conclusion<\/strong><\/h2>\n<p>In this post, we reviewed a solution for retail order management for common customer support activities such as retrieving order status, tracking a package, returning an item, and scheduling delivery. The pre-built solution provides a ready-to-deploy contact center configuration with Amazon Connect. You can easily extend the solution with additional conversation flows that are specific to your organization\u2019s needs. Amazon Lex for retail offers pre-built solutions that you can use to deliver a consistent brand experience, influence customer actions, and increase revenue. Try the pre-built\u00a0<a href=\"https:\/\/aws.amazon.com\/lex\/retail\/\" target=\"_blank\" rel=\"noopener noreferrer\">retail solution<\/a>\u00a0on Amazon Lex today!<\/p>\n<hr>\n<h3>About the Authors<\/h3>\n<p><strong><a href=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/12\/JP-Kommu.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-29239 alignleft\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/10\/12\/JP-Kommu.jpg\" alt=\"\" width=\"101\" height=\"123\"><\/a>Jaya Prakash Kommu<\/strong>\u00a0is a Technology Lead on the Smartbots.ai team. He manages a passionate team of AI engineers building next generation conversational AI interfaces. When not architecting bots, JP enjoys playing football.<\/p>\n<p><strong><a href=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/08\/17\/Sandeep-Srinivasan.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-27294 alignleft\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2021\/08\/17\/Sandeep-Srinivasan.jpg\" alt=\"\" width=\"100\" height=\"106\"><\/a>Sandeep Srinivasan<\/strong>\u00a0is a Product Manager on the Amazon Lex team. As a keen observer of human behavior, he is passionate about customer experience. He spends his waking hours at the intersection of people, technology, and the future.<\/p>\n<p>       <!-- '\"` -->\n      <\/div>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/aws.amazon.com\/blogs\/machine-learning\/build-conversational-experiences-for-retail-order-management-using-amazon-lex\/<\/p>\n","protected":false},"author":0,"featured_media":1120,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/posts\/1119"}],"collection":[{"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/comments?post=1119"}],"version-history":[{"count":0,"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/posts\/1119\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/media\/1120"}],"wp:attachment":[{"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/media?parent=1119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/categories?post=1119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/tags?post=1119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}