{"id":3094,"date":"2025-07-26T14:59:31","date_gmt":"2025-07-26T14:59:31","guid":{"rendered":"https:\/\/learnbydoing.dev\/?p=3094"},"modified":"2026-01-12T07:28:46","modified_gmt":"2026-01-12T07:28:46","slug":"how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok","status":"publish","type":"post","link":"https:\/\/learnbydoing.dev\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/","title":{"rendered":"How to Link Your Alexa Skill to a Local ROS 2 Server Using ngrok"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"3094\" class=\"elementor elementor-3094\" 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-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<h4 aria-level=\"1\"><b><span data-contrast=\"none\">\ud83d\udc49 How to Link Your Alexa Skill to a Local ROS 2 Server Using ngrok<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:480,&quot;335559739&quot;:0}\">\u00a0<\/span><\/h4><p><span data-contrast=\"auto\">In this tutorial, you\u2019ll learn how to connect the Alexa Skill you previously created to a local ROS 2 server using ngrok. This setup will allow your voice commands to travel from Amazon\u2019s cloud to your machine, where they can be interpreted and translated into robot actions. By the end of this guide, you\u2019ll have a fully functioning integration between Alexa and your robot\u2019s backend via a secure tunnel.<\/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<h4 aria-level=\"2\"><b><span data-contrast=\"none\">1. Install ngrok and Start a Tunnel<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:200,&quot;335559739&quot;:0}\">\u00a0<\/span><\/h4><p><span data-contrast=\"auto\">First, download and install ngrok from https:\/\/ngrok.com\/. You\u2019ll need to sign up for a free account and retrieve your auth token.<\/span>\u00a0<\/p><p><span data-contrast=\"auto\">Once installed, start a tunnel to the port your server is running on (usually 5000):<\/span>\u00a0<br \/><span data-contrast=\"auto\">`ngrok http 5000`<\/span>\u00a0<\/p><p><span data-contrast=\"auto\">ngrok will provide you with a public HTTPS URL (e.g., https:\/\/abc123.ngrok.io). This will forward requests directly to your local server.<\/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-ae8d9ad elementor-widget elementor-widget-image\" data-id=\"ae8d9ad\" 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=\"534\" src=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/04110f98-bc3f-4cd7-ac16-2765cf331c9b-1024x683.webp\" class=\"attachment-large size-large wp-image-3096\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/04110f98-bc3f-4cd7-ac16-2765cf331c9b-1024x683.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/04110f98-bc3f-4cd7-ac16-2765cf331c9b-300x200.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/04110f98-bc3f-4cd7-ac16-2765cf331c9b-768x512.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/04110f98-bc3f-4cd7-ac16-2765cf331c9b-18x12.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/04110f98-bc3f-4cd7-ac16-2765cf331c9b-1320x880.webp 1320w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/04110f98-bc3f-4cd7-ac16-2765cf331c9b-600x400.webp 600w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/04110f98-bc3f-4cd7-ac16-2765cf331c9b.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<h4 aria-level=\"2\"><b><span data-contrast=\"none\">2. Update the Alexa Skill Endpoint<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:200,&quot;335559739&quot;:0}\">\u00a0<\/span><\/h4><p><span data-contrast=\"auto\">Head to the Alexa Developer Console and open your skill.<\/span>\u00a0<\/p><p><span data-contrast=\"auto\">&#8211; Go to the &#8216;Endpoint&#8217; section<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8211; Replace the placeholder with the public URL provided by ngrok<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8211; Select the option: &#8216;My development endpoint is a sub-domain of a domain that has a valid certificate&#8217;<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8211; Save the changes<\/span>\u00a0<\/p><p><span data-contrast=\"auto\">Now Alexa will send requests to your local machine through the secure ngrok tunnel.<\/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-4b147dd elementor-widget elementor-widget-image\" data-id=\"4b147dd\" 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\/2c6ec55e-72d3-41e6-8ea7-af5ddf12dd68-1024x683.webp\" class=\"attachment-large size-large wp-image-3097\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/2c6ec55e-72d3-41e6-8ea7-af5ddf12dd68-1024x683.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/2c6ec55e-72d3-41e6-8ea7-af5ddf12dd68-300x200.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/2c6ec55e-72d3-41e6-8ea7-af5ddf12dd68-768x512.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/2c6ec55e-72d3-41e6-8ea7-af5ddf12dd68-18x12.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/2c6ec55e-72d3-41e6-8ea7-af5ddf12dd68-1320x880.webp 1320w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/2c6ec55e-72d3-41e6-8ea7-af5ddf12dd68-600x400.webp 600w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/2c6ec55e-72d3-41e6-8ea7-af5ddf12dd68.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\"><h4 aria-level=\"2\"><b><span data-contrast=\"none\">3. Launch the Local Flask 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><\/h4><p><span data-contrast=\"auto\">Make sure your Flask server is running on the port you specified with ngrok (e.g., port 5000).<\/span>\u00a0<\/p><p><span data-contrast=\"auto\">The server should be capable of parsing Alexa\u2019s JSON requests, identifying the intent, and triggering the appropriate ROS 2 action or log message.<\/span>\u00a0<\/p><p><span data-contrast=\"auto\">Start it with:<\/span>\u00a0<br \/><span data-contrast=\"auto\">`python3 alexa_server.py`<\/span>\u00a0<\/p><p><span data-contrast=\"auto\">Ensure ROS 2 and the robot nodes are also running, so the server can communicate with them.<\/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-95cbffe elementor-widget elementor-widget-image\" data-id=\"95cbffe\" 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\/c938fd76-299f-4122-9e0b-0fd5c9dac06d-1024x683.webp\" class=\"attachment-large size-large wp-image-3098\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/c938fd76-299f-4122-9e0b-0fd5c9dac06d-1024x683.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/c938fd76-299f-4122-9e0b-0fd5c9dac06d-300x200.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/c938fd76-299f-4122-9e0b-0fd5c9dac06d-768x512.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/c938fd76-299f-4122-9e0b-0fd5c9dac06d-18x12.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/c938fd76-299f-4122-9e0b-0fd5c9dac06d-1320x880.webp 1320w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/c938fd76-299f-4122-9e0b-0fd5c9dac06d-600x400.webp 600w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/c938fd76-299f-4122-9e0b-0fd5c9dac06d.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\"><h4><b><span data-contrast=\"none\">4. Test the Full Alexa\u2013ROS 2 Pipeline<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:200,&quot;335559739&quot;:0}\">\u00a0<\/span><\/h4><p><span data-contrast=\"auto\">Go to the &#8216;Test&#8217; tab in the Alexa Developer Console.<\/span>\u00a0<\/p><p><span data-contrast=\"auto\">&#8211; Enable testing (if not already enabled)<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8211; Say or type one of the invocation phrases like: &#8216;Alexa, activate the robot&#8217;<\/span>\u00a0<\/p><p><span data-contrast=\"auto\">You should see:<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8211; Alexa sends a request to ngrok<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8211; ngrok forwards it to your Flask server<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8211; The server parses the intent and sends a goal to the ROS 2 action server<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8211; The robot performs the action and the server responds to Alexa<\/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-b903318 elementor-widget elementor-widget-image\" data-id=\"b903318\" 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\/72b521a1-e3db-4d80-930c-4e11a6f5fa9f-1024x683.webp\" class=\"attachment-large size-large wp-image-3099\" alt=\"\" srcset=\"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/72b521a1-e3db-4d80-930c-4e11a6f5fa9f-1024x683.webp 1024w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/72b521a1-e3db-4d80-930c-4e11a6f5fa9f-300x200.webp 300w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/72b521a1-e3db-4d80-930c-4e11a6f5fa9f-768x512.webp 768w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/72b521a1-e3db-4d80-930c-4e11a6f5fa9f-18x12.webp 18w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/72b521a1-e3db-4d80-930c-4e11a6f5fa9f-1320x880.webp 1320w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/72b521a1-e3db-4d80-930c-4e11a6f5fa9f-600x400.webp 600w, https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/72b521a1-e3db-4d80-930c-4e11a6f5fa9f.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\"><h4 aria-level=\"2\"><b><span data-contrast=\"none\">5. Monitor the Requests and Debug<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:200,&quot;335559739&quot;:0}\">\u00a0<\/span><\/h4><p><span data-contrast=\"auto\">In the ngrok terminal, you can monitor all incoming requests and responses in real time. This is useful for checking if Alexa is communicating properly with your server.<\/span>\u00a0<\/p><p><span data-contrast=\"auto\">You can also print logs in your Flask app to show which intent was received and what ROS command was executed.<\/span>\u00a0<\/p><p><span data-contrast=\"auto\">Use print statements or proper logging inside your Python code to verify that everything is running smoothly.<\/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\"><h4 aria-level=\"2\"><b><span data-contrast=\"none\">6. Summary and Next Steps<\/span><\/b><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:200,&quot;335559739&quot;:0}\">\u00a0<\/span><\/h4><p><span data-contrast=\"auto\">You\u2019ve now connected a custom Alexa Skill to a local ROS 2 server via ngrok, tested end-to-end communication, and controlled your robot through voice commands.<\/span>\u00a0<\/p><p><span data-contrast=\"auto\">As a next step, you could:<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8211; Secure the ngrok tunnel with authentication<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8211; Move the server to a Raspberry Pi<\/span>\u00a0<br \/><span data-contrast=\"auto\">&#8211; Extend your Alexa Skill with more commands and robot functionality<\/span>\u00a0<\/p><p><span data-contrast=\"auto\">In the next tutorial, we\u2019ll show how to write the Python Flask server step by step and connect it to a ROS 2 action client.<\/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\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc49 How to Link Your Alexa Skill to a Local ROS 2 Server Using ngrok\u00a0 In this tutorial, you\u2019ll learn how to connect the Alexa Skill you previously created to a local ROS 2 server using ngrok. This setup will allow your voice commands to travel from Amazon\u2019s cloud to your machine, where they can [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":3095,"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-3094","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.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Link Your Alexa Skill to a Local ROS 2 Server Using ngrok - Learn by Doing!<\/title>\n<meta name=\"description\" content=\"Use ngrok to forward Alexa requests to your local ROS 2 server. Setup tunnel, configure endpoint, run Flask bridge.\" \/>\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-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/\" \/>\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=\"Use ngrok to forward Alexa requests to your local ROS 2 server. Setup tunnel, configure endpoint, run Flask bridge.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/learnbydoing.dev\/es\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/\" \/>\n<meta property=\"og:site_name\" content=\"Learn by Doing!\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-26T14:59:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-12T07:28:46+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-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/learnbydoing.dev\\\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"How to Link Your Alexa Skill to a Local ROS 2 Server Using ngrok\",\"datePublished\":\"2025-07-26T14:59:31+00:00\",\"dateModified\":\"2026-01-12T07:28:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/learnbydoing.dev\\\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\\\/\"},\"wordCount\":543,\"publisher\":{\"@id\":\"https:\\\/\\\/learnbydoing.dev\\\/es\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/learnbydoing.dev\\\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/learnbydoing.dev\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/df392009-70a0-45fe-a73d-f95c9340e57f.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-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\\\/\",\"url\":\"https:\\\/\\\/learnbydoing.dev\\\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\\\/\",\"name\":\"How to Link Your Alexa Skill to a Local ROS 2 Server Using ngrok - Learn by Doing!\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/learnbydoing.dev\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/learnbydoing.dev\\\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/learnbydoing.dev\\\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/learnbydoing.dev\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/df392009-70a0-45fe-a73d-f95c9340e57f.webp\",\"datePublished\":\"2025-07-26T14:59:31+00:00\",\"dateModified\":\"2026-01-12T07:28:46+00:00\",\"description\":\"Use ngrok to forward Alexa requests to your local ROS 2 server. Setup tunnel, configure endpoint, run Flask bridge.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/learnbydoing.dev\\\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/learnbydoing.dev\\\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/learnbydoing.dev\\\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\\\/#primaryimage\",\"url\":\"https:\\\/\\\/learnbydoing.dev\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/df392009-70a0-45fe-a73d-f95c9340e57f.webp\",\"contentUrl\":\"https:\\\/\\\/learnbydoing.dev\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/df392009-70a0-45fe-a73d-f95c9340e57f.webp\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/learnbydoing.dev\\\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/learnbydoing.dev\\\/es\\\/learn-by-doing-es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Link Your Alexa Skill to a Local ROS 2 Server Using ngrok\"}]},{\"@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 Link Your Alexa Skill to a Local ROS 2 Server Using ngrok - Learn by Doing!","description":"Use ngrok to forward Alexa requests to your local ROS 2 server. Setup tunnel, configure endpoint, run Flask bridge.","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-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/","og_locale":"es_ES","og_type":"article","og_title":"Installing ROS 2 Jazzy on Ubuntu 24.04: Step-by-Step Tutorial","og_description":"Use ngrok to forward Alexa requests to your local ROS 2 server. Setup tunnel, configure endpoint, run Flask bridge.","og_url":"https:\/\/learnbydoing.dev\/es\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/","og_site_name":"Learn by Doing!","article_published_time":"2025-07-26T14:59:31+00:00","article_modified_time":"2026-01-12T07:28:46+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-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/#article","isPartOf":{"@id":"https:\/\/learnbydoing.dev\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/"},"author":{"name":"","@id":""},"headline":"How to Link Your Alexa Skill to a Local ROS 2 Server Using ngrok","datePublished":"2025-07-26T14:59:31+00:00","dateModified":"2026-01-12T07:28:46+00:00","mainEntityOfPage":{"@id":"https:\/\/learnbydoing.dev\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/"},"wordCount":543,"publisher":{"@id":"https:\/\/learnbydoing.dev\/es\/#organization"},"image":{"@id":"https:\/\/learnbydoing.dev\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/#primaryimage"},"thumbnailUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/df392009-70a0-45fe-a73d-f95c9340e57f.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-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/","url":"https:\/\/learnbydoing.dev\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/","name":"How to Link Your Alexa Skill to a Local ROS 2 Server Using ngrok - Learn by Doing!","isPartOf":{"@id":"https:\/\/learnbydoing.dev\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/learnbydoing.dev\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/#primaryimage"},"image":{"@id":"https:\/\/learnbydoing.dev\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/#primaryimage"},"thumbnailUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/df392009-70a0-45fe-a73d-f95c9340e57f.webp","datePublished":"2025-07-26T14:59:31+00:00","dateModified":"2026-01-12T07:28:46+00:00","description":"Use ngrok to forward Alexa requests to your local ROS 2 server. Setup tunnel, configure endpoint, run Flask bridge.","breadcrumb":{"@id":"https:\/\/learnbydoing.dev\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/learnbydoing.dev\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/learnbydoing.dev\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/#primaryimage","url":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/df392009-70a0-45fe-a73d-f95c9340e57f.webp","contentUrl":"https:\/\/learnbydoing.dev\/wp-content\/uploads\/2025\/07\/df392009-70a0-45fe-a73d-f95c9340e57f.webp","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/learnbydoing.dev\/how-to-link-your-alexa-skill-to-a-local-ros-2-server-using-ngrok\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/learnbydoing.dev\/es\/learn-by-doing-es\/"},{"@type":"ListItem","position":2,"name":"How to Link Your Alexa Skill to a Local ROS 2 Server Using ngrok"}]},{"@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\/3094","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=3094"}],"version-history":[{"count":18,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts\/3094\/revisions"}],"predecessor-version":[{"id":5699,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/posts\/3094\/revisions\/5699"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/media\/3095"}],"wp:attachment":[{"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/media?parent=3094"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/categories?post=3094"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/learnbydoing.dev\/es\/wp-json\/wp\/v2\/tags?post=3094"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}