{"id":3502,"date":"2025-07-29T15:49:32","date_gmt":"2025-07-29T15:49:32","guid":{"rendered":"https:\/\/learnbydoing.dev\/?p=3502"},"modified":"2026-01-12T12:06:52","modified_gmt":"2026-01-12T12:06:52","slug":"how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python","status":"publish","type":"post","link":"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/","title":{"rendered":"How to Interface Your ROS 2 Robot with Alexa Using Flask and Python"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"3502\" class=\"elementor elementor-3502\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e28ab35 e-flex e-con-boxed e-con e-parent\" data-id=\"e28ab35\" data-element_type=\"container\" data-e-type=\"container\" id=\"content\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-62ab6e3 e-con-full e-flex e-con e-child\" data-id=\"62ab6e3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-62ab203 elementor-align-center elementor-widget elementor-widget-post-info\" data-id=\"62ab203\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"post-info.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-inline-items elementor-icon-list-items elementor-post-info\">\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-2c98363 elementor-inline-item\" itemprop=\"about\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-terms\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-post-info__terms-list\">\n\t\t\t\t<span class=\"elementor-post-info__terms-list-item\">Arduino<\/span>, <span class=\"elementor-post-info__terms-list-item\">Electronics<\/span>, <span class=\"elementor-post-info__terms-list-item\">Tutoriales<\/span>\t\t\t\t<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0650e10 e-con-full e-flex e-con e-child\" data-id=\"0650e10\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ac19582 elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"ac19582\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"75\" height=\"75\" viewbox=\"0 0 75 75\" fill=\"none\"><path d=\"M74.9999 75H13.1889V73.0002H71.5859L0.460938 1.87521L1.87515 0.460999L73.0001 71.586V13.1889H74.9999V75Z\" fill=\"white\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-47aa245d e-flex e-con-boxed e-con e-parent\" data-id=\"47aa245d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-44c8cf6 elementor-widget elementor-widget-image\" data-id=\"44c8cf6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238.webp\" class=\"attachment-large size-large wp-image-3503\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238-300x300.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238-150x150.webp 150w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238-768x768.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238-12x12.webp 12w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-261c3d8 elementor-widget elementor-widget-text-editor\" data-id=\"261c3d8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p aria-level=\"1\"><b><span data-contrast=\"none\">\ud83d\udc49 How to Interface Your ROS 2 Robot with Alexa Using Flask and Python<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:480,&quot;335559739&quot;:0}\">\u00a0<\/span><\/p><p><span data-contrast=\"auto\">In this hands-on lab, you\u2019ll learn how to create a Python web server that acts as a bridge between an Alexa Skill and your ROS 2 robot. By using Flask and the Alexa Skills Kit SDK, you will interpret voice commands sent from the Alexa cloud and turn them into ROS 2 actions. This guide completes the integration process started in previous tutorials, giving your robot real-time voice control capability.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e04c0ca elementor-widget elementor-widget-text-editor\" data-id=\"e04c0ca\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p aria-level=\"2\"><b><span data-contrast=\"none\">1. Set Up the Project Directory<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:200,&quot;335559739&quot;:0}\">\u00a0<\/span><\/p><p><span data-contrast=\"auto\">Create a new project folder and a Python file named `alexa_server.py`. Inside this file, we\u2019ll define the logic for receiving and handling Alexa requests.<\/span>\u00a0<br \/>\u00a0<br \/><span data-contrast=\"auto\">Install the necessary packages:<\/span>\u00a0<br \/><span data-contrast=\"auto\">`pip install flask flask-ask`<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-56deb19 elementor-widget elementor-widget-image\" data-id=\"56deb19\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/3ad3cac8-3de0-4e4a-b07e-c90df1e1a594-1024x683.webp\" class=\"attachment-large size-large wp-image-3504\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/3ad3cac8-3de0-4e4a-b07e-c90df1e1a594-1024x683.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/3ad3cac8-3de0-4e4a-b07e-c90df1e1a594-300x200.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/3ad3cac8-3de0-4e4a-b07e-c90df1e1a594-768x512.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/3ad3cac8-3de0-4e4a-b07e-c90df1e1a594-18x12.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/3ad3cac8-3de0-4e4a-b07e-c90df1e1a594.webp 1536w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7a888ec elementor-widget elementor-widget-text-editor\" data-id=\"7a888ec\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p aria-level=\"2\"><b><span data-contrast=\"none\">2. Import Required Libraries<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:200,&quot;335559739&quot;:0}\">\u00a0<\/span><\/p><p><span data-contrast=\"auto\">Begin your Python file by importing Flask, Flask-Ask, and ROS 2 libraries:<\/span>\u00a0<br \/>\u00a0<br \/><span data-contrast=\"auto\">&#8220;`python<\/span>\u00a0<br \/><span data-contrast=\"auto\">from flask import Flask<\/span>\u00a0<br \/><span data-contrast=\"auto\">from flask_ask import Ask, statement<\/span>\u00a0<br \/><span data-contrast=\"auto\">import rclpy<\/span>\u00a0<br \/><span data-contrast=\"auto\">from rclpy.node import Node<\/span>\u00a0<br \/><span data-contrast=\"auto\"># import your custom ROS 2 client interface<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8220;`<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5abae92 elementor-widget elementor-widget-image\" data-id=\"5abae92\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/58cdab12-b104-4420-a822-4ff70e82014f-1024x683.webp\" class=\"attachment-large size-large wp-image-3505\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/58cdab12-b104-4420-a822-4ff70e82014f-1024x683.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/58cdab12-b104-4420-a822-4ff70e82014f-300x200.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/58cdab12-b104-4420-a822-4ff70e82014f-768x512.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/58cdab12-b104-4420-a822-4ff70e82014f-18x12.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/58cdab12-b104-4420-a822-4ff70e82014f.webp 1536w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-16783b7 elementor-widget elementor-widget-text-editor\" data-id=\"16783b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li data-start=\"311\" data-end=\"367\"><p aria-level=\"2\"><b><span data-contrast=\"none\">3. Initialize Flask and ROS 2<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:200,&quot;335559739&quot;:0}\">\u00a0<\/span><\/p><p><span data-contrast=\"auto\">Set up the basic Flask app and initialize ROS 2 communication:<\/span>\u00a0<br \/>\u00a0<br \/><span data-contrast=\"auto\">&#8220;`python<\/span>\u00a0<br \/><span data-contrast=\"auto\">app = Flask(__name__)<\/span>\u00a0<br \/><span data-contrast=\"auto\">ask = Ask(app, &#8216;\/alexa&#8217;)<\/span>\u00a0<br \/>\u00a0<br \/><span data-contrast=\"auto\">rclpy.init()<\/span>\u00a0<br \/><span data-contrast=\"auto\"># Create your ROS 2 node and action client instance here<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8220;`<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-672edb2 elementor-widget elementor-widget-image\" data-id=\"672edb2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/95c729a5-a91a-46f1-9841-5383f2e9c29b-1024x683.webp\" class=\"attachment-large size-large wp-image-3506\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/95c729a5-a91a-46f1-9841-5383f2e9c29b-1024x683.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/95c729a5-a91a-46f1-9841-5383f2e9c29b-300x200.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/95c729a5-a91a-46f1-9841-5383f2e9c29b-768x512.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/95c729a5-a91a-46f1-9841-5383f2e9c29b-18x12.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/95c729a5-a91a-46f1-9841-5383f2e9c29b.webp 1536w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0887672 elementor-widget elementor-widget-text-editor\" data-id=\"0887672\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li data-start=\"711\" data-end=\"790\"><p aria-level=\"2\"><b><span data-contrast=\"none\">4. Define Request Handlers<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:200,&quot;335559739&quot;:0}\">\u00a0<\/span><\/p><p><span data-contrast=\"auto\">Alexa Skills interact with webhooks by sending specific request types (e.g., LaunchRequest, IntentRequest).<\/span>\u00a0<br \/>\u00a0<br \/><span data-contrast=\"auto\">Define a handler to respond when the skill is launched:<\/span>\u00a0<br \/>\u00a0<br \/><span data-contrast=\"auto\">&#8220;`python<\/span>\u00a0<br \/><span data-contrast=\"auto\">@ask.launch<\/span>\u00a0<br \/><span data-contrast=\"auto\">def launch_skill():<\/span>\u00a0<br \/><span data-contrast=\"auto\">\u00a0\u00a0\u00a0 return statement(&#8216;Hello! Your robot is ready.&#8217;)<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8220;`<\/span>\u00a0<br \/>\u00a0<br \/><span data-contrast=\"auto\">Now create one intent handler for each robot command:<\/span>\u00a0<br \/>\u00a0<br \/><span data-contrast=\"auto\">&#8220;`python<\/span>\u00a0<br \/><span data-contrast=\"auto\">@ask.intent(&#8216;WakeIntent&#8217;)<\/span>\u00a0<br \/><span data-contrast=\"auto\">def wake():<\/span>\u00a0<br \/><span data-contrast=\"auto\">\u00a0\u00a0\u00a0 # Send ROS 2 wake command here<\/span>\u00a0<br \/><span data-contrast=\"auto\">\u00a0\u00a0\u00a0 return statement(&#8216;Robot waking up.&#8217;)<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8220;`<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d91fffd elementor-widget elementor-widget-image\" data-id=\"d91fffd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/bc65bdfb-a89c-4b0e-9735-27fbb243049c-1024x683.webp\" class=\"attachment-large size-large wp-image-3507\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/bc65bdfb-a89c-4b0e-9735-27fbb243049c-1024x683.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/bc65bdfb-a89c-4b0e-9735-27fbb243049c-300x200.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/bc65bdfb-a89c-4b0e-9735-27fbb243049c-768x512.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/bc65bdfb-a89c-4b0e-9735-27fbb243049c-18x12.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/bc65bdfb-a89c-4b0e-9735-27fbb243049c.webp 1536w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ebab863 elementor-widget elementor-widget-text-editor\" data-id=\"ebab863\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li data-start=\"1128\" data-end=\"1196\"><p aria-level=\"2\"><b><span data-contrast=\"none\">5. Connect ROS 2 Logic to the Server<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:200,&quot;335559739&quot;:0}\">\u00a0<\/span><\/p><p><span data-contrast=\"auto\">Inside each intent function, integrate ROS 2 code to control the robot. This may include publishing messages, sending goals to an action server, or calling services.<\/span>\u00a0<br \/>\u00a0<br \/><span data-contrast=\"auto\">Make sure the ROS 2 node and executor are running in a separate thread if needed, so Flask remains responsive.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6ad065d elementor-widget elementor-widget-image\" data-id=\"6ad065d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/285950fb-7635-4603-8219-fccbd367cdd8-1024x683.webp\" class=\"attachment-large size-large wp-image-3100\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/285950fb-7635-4603-8219-fccbd367cdd8-1024x683.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/285950fb-7635-4603-8219-fccbd367cdd8-300x200.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/285950fb-7635-4603-8219-fccbd367cdd8-768x512.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/285950fb-7635-4603-8219-fccbd367cdd8-18x12.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/285950fb-7635-4603-8219-fccbd367cdd8-1320x880.webp 1320w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/285950fb-7635-4603-8219-fccbd367cdd8-600x400.webp 600w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/285950fb-7635-4603-8219-fccbd367cdd8.webp 1536w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-455a2f8 elementor-widget elementor-widget-text-editor\" data-id=\"455a2f8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li data-start=\"1128\" data-end=\"1196\"><p aria-level=\"2\"><b><span data-contrast=\"none\">6. Run and Test the Server<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:200,&quot;335559739&quot;:0}\">\u00a0<\/span><\/p><p><span data-contrast=\"auto\">Start the server by running:<\/span>\u00a0<br \/><span data-contrast=\"auto\">`python3 alexa_server.py`<\/span>\u00a0<br \/>\u00a0<br \/><span data-contrast=\"auto\">Ensure ngrok is running and forwarding requests to the correct port (usually 5000).<\/span>\u00a0<br \/>\u00a0<br \/><span data-contrast=\"auto\">You can now test the complete Alexa \u2192 ngrok \u2192 Flask \u2192 ROS 2 flow.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-70adb6f elementor-widget elementor-widget-text-editor\" data-id=\"70adb6f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li data-start=\"1128\" data-end=\"1196\"><p aria-level=\"2\"><b><span data-contrast=\"none\">7. Conclusion<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:200,&quot;335559739&quot;:0}\">\u00a0<\/span><\/p><p><span data-contrast=\"auto\">You\u2019ve now built a custom Python server that connects Alexa with your ROS 2 robot in real-time using voice. This closes the loop in the cloud-to-robot interaction pipeline.<\/span>\u00a0<br \/>\u00a0<br \/><span data-contrast=\"auto\">From here, you can expand the project by adding more intents, making the ROS 2 interface more robust, or deploying the system on an embedded platform.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-026039b elementor-widget elementor-widget-image\" data-id=\"026039b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/1d9c069a-0d3f-4954-84c5-c534626444d6-1024x683.webp\" class=\"attachment-large size-large wp-image-3101\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/1d9c069a-0d3f-4954-84c5-c534626444d6-1024x683.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/1d9c069a-0d3f-4954-84c5-c534626444d6-300x200.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/1d9c069a-0d3f-4954-84c5-c534626444d6-768x512.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/1d9c069a-0d3f-4954-84c5-c534626444d6-18x12.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/1d9c069a-0d3f-4954-84c5-c534626444d6-1320x880.webp 1320w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/1d9c069a-0d3f-4954-84c5-c534626444d6-600x400.webp 600w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/1d9c069a-0d3f-4954-84c5-c534626444d6.webp 1536w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2f5edbe e-flex e-con-boxed e-con e-parent\" data-id=\"2f5edbe\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0126e26 elementor-widget elementor-widget-code-highlight\" data-id=\"0126e26\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>console.log( 'Code is Poetry' );yubboiib<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc49 How to Interface Your ROS 2 Robot with Alexa Using Flask and Python\u00a0 In this hands-on lab, you\u2019ll learn how to create a Python web server that acts as a bridge between an Alexa Skill and your ROS 2 robot. By using Flask and the Alexa Skills Kit SDK, you will interpret voice commands [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":3503,"comment_status":"closed","ping_status":"open","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[68,69,43],"tags":[95,94,59,84,67,83,148,151,87,82,149,66,93,92,147,150,64],"class_list":["post-3502","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-electronics","category-tutorials","tag-adc","tag-analog","tag-arduino","tag-c","tag-complete","tag-cpp","tag-detection","tag-device","tag-guide","tag-ide","tag-intruder","tag-learn-by-doing","tag-resistance","tag-resistor","tag-rpi","tag-security","tag-tutorial"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Interface Your ROS 2 Robot with Alexa Using Flask and Python - Learn by Doing!<\/title>\n<meta name=\"description\" content=\"Learn to interface Alexa with your ROS 2 robot using Flask and Flask-Ask. Map voice intents to ROS 2 actions via ngrok and real-time control.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/learnbydoing.dev\/es\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Installing ROS 2 Jazzy on Ubuntu 24.04: Step-by-Step Tutorial\" \/>\n<meta property=\"og:description\" content=\"Learn to interface Alexa with your ROS 2 robot using Flask and Flask-Ask. Map voice intents to ROS 2 actions via ngrok and real-time control.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/learnbydoing.dev\/es\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Learn by Doing!\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-29T15:49:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-12T12:06:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/06\/Progetto-senza-titolo-14.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"How to Interface Your ROS 2 Robot with Alexa Using Flask and Python\",\"datePublished\":\"2025-07-29T15:49:32+00:00\",\"dateModified\":\"2026-01-12T12:06:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/\"},\"wordCount\":410,\"publisher\":{\"@id\":\"https:\/\/learnbydoing.dev\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238.webp\",\"keywords\":[\"adc\",\"analog\",\"Arduino\",\"c++\",\"complete\",\"cpp\",\"detection\",\"device\",\"Guide\",\"ide\",\"intruder\",\"learn by doing\",\"resistance\",\"resistor\",\"RPI\",\"security\",\"tutorial\"],\"articleSection\":[\"Arduino\",\"Electronics\",\"Tutorials\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/\",\"url\":\"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/\",\"name\":\"How to Interface Your ROS 2 Robot with Alexa Using Flask and Python - Learn by Doing!\",\"isPartOf\":{\"@id\":\"https:\/\/learnbydoing.dev\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238.webp\",\"datePublished\":\"2025-07-29T15:49:32+00:00\",\"dateModified\":\"2026-01-12T12:06:52+00:00\",\"description\":\"Learn to interface Alexa with your ROS 2 robot using Flask and Flask-Ask. Map voice intents to ROS 2 actions via ngrok and real-time control.\",\"breadcrumb\":{\"@id\":\"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#primaryimage\",\"url\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238.webp\",\"contentUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238.webp\",\"width\":1024,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/learnbydoing.dev\/es\/learn-by-doing-es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Interface Your ROS 2 Robot with Alexa Using Flask and Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/learnbydoing.dev\/es\/#website\",\"url\":\"https:\/\/learnbydoing.dev\/es\/\",\"name\":\"Learn by Doing!\",\"description\":\"Learn Robotics the fun way\",\"publisher\":{\"@id\":\"https:\/\/learnbydoing.dev\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/learnbydoing.dev\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/learnbydoing.dev\/es\/#organization\",\"name\":\"Learn by Doing!\",\"url\":\"https:\/\/learnbydoing.dev\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/learnbydoing.dev\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/06\/cropped-cropped-cropped-Progetto-senza-titolo-6-1.png\",\"contentUrl\":\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/06\/cropped-cropped-cropped-Progetto-senza-titolo-6-1.png\",\"width\":512,\"height\":512,\"caption\":\"Learn by Doing!\"},\"image\":{\"@id\":\"https:\/\/learnbydoing.dev\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/antonio-brandi-512166bb\/\"]},{\"@type\":\"Person\",\"@id\":\"\",\"url\":\"https:\/\/learnbydoing.dev\/es\/author\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Interface Your ROS 2 Robot with Alexa Using Flask and Python - Learn by Doing!","description":"Learn to interface Alexa with your ROS 2 robot using Flask and Flask-Ask. Map voice intents to ROS 2 actions via ngrok and real-time control.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/learnbydoing.dev\/es\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/","og_locale":"es_ES","og_type":"article","og_title":"Installing ROS 2 Jazzy on Ubuntu 24.04: Step-by-Step Tutorial","og_description":"Learn to interface Alexa with your ROS 2 robot using Flask and Flask-Ask. Map voice intents to ROS 2 actions via ngrok and real-time control.","og_url":"https:\/\/learnbydoing.dev\/es\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/","og_site_name":"Learn by Doing!","article_published_time":"2025-07-29T15:49:32+00:00","article_modified_time":"2026-01-12T12:06:52+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/06\/Progetto-senza-titolo-14.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"","Tiempo de lectura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#article","isPartOf":{"@id":"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/"},"author":{"name":"","@id":""},"headline":"How to Interface Your ROS 2 Robot with Alexa Using Flask and Python","datePublished":"2025-07-29T15:49:32+00:00","dateModified":"2026-01-12T12:06:52+00:00","mainEntityOfPage":{"@id":"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/"},"wordCount":410,"publisher":{"@id":"https:\/\/learnbydoing.dev\/es\/#organization"},"image":{"@id":"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#primaryimage"},"thumbnailUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238.webp","keywords":["adc","analog","Arduino","c++","complete","cpp","detection","device","Guide","ide","intruder","learn by doing","resistance","resistor","RPI","security","tutorial"],"articleSection":["Arduino","Electronics","Tutorials"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/","url":"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/","name":"How to Interface Your ROS 2 Robot with Alexa Using Flask and Python - Learn by Doing!","isPartOf":{"@id":"https:\/\/learnbydoing.dev\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#primaryimage"},"image":{"@id":"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#primaryimage"},"thumbnailUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238.webp","datePublished":"2025-07-29T15:49:32+00:00","dateModified":"2026-01-12T12:06:52+00:00","description":"Learn to interface Alexa with your ROS 2 robot using Flask and Flask-Ask. Map voice intents to ROS 2 actions via ngrok and real-time control.","breadcrumb":{"@id":"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#primaryimage","url":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238.webp","contentUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/cc8eca9d-a97e-47dc-89a8-c70ba1df6238.webp","width":1024,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/learnbydoing.dev\/how-to-interface-your-ros-2-robot-with-alexa-using-flask-and-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/learnbydoing.dev\/es\/learn-by-doing-es\/"},{"@type":"ListItem","position":2,"name":"How to Interface Your ROS 2 Robot with Alexa Using Flask and Python"}]},{"@type":"WebSite","@id":"https:\/\/learnbydoing.dev\/es\/#website","url":"https:\/\/learnbydoing.dev\/es\/","name":"Learn by Doing!","description":"Learn Robotics the fun way","publisher":{"@id":"https:\/\/learnbydoing.dev\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/learnbydoing.dev\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/learnbydoing.dev\/es\/#organization","name":"Learn by Doing!","url":"https:\/\/learnbydoing.dev\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/learnbydoing.dev\/es\/#\/schema\/logo\/image\/","url":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/06\/cropped-cropped-cropped-Progetto-senza-titolo-6-1.png","contentUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/06\/cropped-cropped-cropped-Progetto-senza-titolo-6-1.png","width":512,"height":512,"caption":"Learn by Doing!"},"image":{"@id":"https:\/\/learnbydoing.dev\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/antonio-brandi-512166bb\/"]},{"@type":"Person","@id":"","url":"https:\/\/learnbydoing.dev\/es\/author\/"}]}},"_links":{"self":[{"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts\/3502","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/comments?post=3502"}],"version-history":[{"count":9,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts\/3502\/revisions"}],"predecessor-version":[{"id":5702,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts\/3502\/revisions\/5702"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/media\/3503"}],"wp:attachment":[{"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/media?parent=3502"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/categories?post=3502"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/tags?post=3502"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}