{"id":9398,"date":"2016-12-03T01:00:10","date_gmt":"2016-12-02T16:00:10","guid":{"rendered":"http:\/\/www.skyarch.net\/blog\/?p=9398"},"modified":"2025-09-08T13:59:57","modified_gmt":"2025-09-08T04:59:57","slug":"%e3%80%90aws-reinvent-2016%e3%80%91-amazon-echo-dot%e3%81%a7%e3%83%96%e3%83%ad%e3%82%b0%e6%8a%95%e7%a8%bf%e6%95%b0%e3%82%92%e8%aa%ad%e3%81%bf%e4%b8%8a%e3%81%92%e3%82%8bcustom-skill%e3%81%ae%e4%bd%9c","status":"publish","type":"post","link":"https:\/\/www.skyarch.net\/blog\/%e3%80%90aws-reinvent-2016%e3%80%91-amazon-echo-dot%e3%81%a7%e3%83%96%e3%83%ad%e3%82%b0%e6%8a%95%e7%a8%bf%e6%95%b0%e3%82%92%e8%aa%ad%e3%81%bf%e4%b8%8a%e3%81%92%e3%82%8bcustom-skill%e3%81%ae%e4%bd%9c\/","title":{"rendered":"\u3010AWS re:Invent 2016\u3011 Amazon Echo Dot\u3067\u30d6\u30ed\u30b0\u6295\u7a3f\u6570\u3092\u8aad\u307f\u4e0a\u3052\u308bcustom skill\u306e\u4f5c\u6210 \u2462 Lambda function\u4f5c\u6210\u7de8"},"content":{"rendered":"<p>Amazon Echo Dot\u306b\u3066\u5f0a\u793e\u30d6\u30ed\u30b0\u306e\u6295\u7a3f\u6570\u3092\u53d6\u5f97\u3059\u308bAmazon Echo(dot)\u7528\u306ecustom skill\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<ol start=\"0\">\n<li><a href='https:\/\/www.skyarch.net\/blog\/?p=8981'>\u958b\u5c01\u306e\u7fa9<\/a><\/li>\n<li><a href='http:\/\/www.skyarch.net\/blog\/?p=9047'>Amazon Echo Dot\u521d\u671f\u8a2d\u5b9a\u7de8<\/a>  <\/li>\n<li><a href='https:\/\/www.skyarch.net\/blog\/?p=9210'>Amazon DeveloperConsole\u3092\u6709\u52b9\u5316<\/a>  <\/li>\n<li>Lambda function\u4f5c\u6210 &lt;- \u4eca\u56de\u306f\u3053\u3061\u3089<\/li>\n<li><a href='https:\/\/www.skyarch.net\/blog\/?p=9410'>Amazon DeveloperConsole\u3088\u308aAlexa Skill\u3092\u767b\u9332<\/a><\/li>\n<\/ol>\n<p><strong>\u203bAmazon Echo\u3084Amazon Tap, Echo dot\u306f\u65e5\u672c\u306e\u6280\u9069\u3092\u901a\u3063\u3066\u3044\u307e\u305b\u3093\u306e\u3067\u3001\u65e5\u672c\u56fd\u5185\u3067\u306e\u5229\u7528\u306f\u884c\u306a\u3048\u307e\u305b\u3093\u3001\u3054\u6ce8\u610f\u4e0b\u3055\u3044<\/strong><\/p>\n<p>\u4eca\u56de\u306e\u8a18\u4e8b\u3067\u306f\u3001custom skill\u4f5c\u6210\u4f8b\u3068\u3057\u3066\u5f0a\u793e\u30d6\u30ed\u30b0\u8a18\u4e8b\u306e\u6295\u7a3f\u6570\u3092\u53d6\u5f97 -&gt; \u767a\u8a71\u3092\u884c\u3044\u307e\u3059\u3002<br \/>\nAmazon\u306e\u63d0\u4f9b\u3057\u3066\u3044\u308b\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u3092\u30d9\u30fc\u30b9\u3068\u3057\u305f\u3001\u308f\u304b\u308a\u3084\u3059\u3044\u52d5\u4f5c\u6982\u8981\u89e3\u8aac\u306b\u3064\u304d\u307e\u3057\u3066\u6700\u4e0b\u6bb5\u306b\u8a18\u8f09\u306e\u30ea\u30f3\u30af\u5148\u3092\u53c2\u8003\u306b\u3055\u305b\u3066\u9802\u304d\u307e\u3057\u305f\u3002<\/p>\n<h2>\u5bfe\u8c61\u3068\u3057\u3066\u5229\u7528\u51fa\u6765\u308b\u30d6\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0<\/h2>\n<p>WordPress\u306bJSON API plugin\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u3067\u3001Core\uff08get\u7cfb\u306e\u6a5f\u80fd\uff09\u304c\u6709\u52b9\u5316\u3055\u308c\u3066\u3044\u308b\u3082\u306e<br \/>\n\uff08\u4f55\u3089\u304b\u306eJson\u3092\u8fd4\u3057\u3066\u304f\u308c\u308bAPI\u3067\u3042\u308c\u3070\u6bd4\u8f03\u7684\u7c21\u5358\u306a\u4fee\u6b63\u3067\u5bfe\u5fdc\u51fa\u6765\u308b\u3068\u601d\u3044\u307e\u3059\uff09<\/p>\n<p>\u203b\u4f5c\u6210\u3092\u9032\u3081\u308b\u4e0a\u3067\u8b66\u544a\u304c\u51fa\u307e\u3059\u304c\u3001\u30ea\u30fc\u30b8\u30e7\u30f3\u3092eu-west1 \u3082\u3057\u304f\u306f us-east1(\u30d0\u30fc\u30b8\u30cb\u30a2\u5317\u90e8) \u306b\u3066\u5b9f\u65bd\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<h1>\u65b0\u898fLambda function\u306e\u4f5c\u6210<\/h1>\n<h2>Select blueprint<\/h2>\n<p>AWS\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u5f8c\u3001Lambda\u3092\u9078\u629e\u3057\u3066\u4e0b\u3055\u3044\u3002<br \/>\nblueprint\u3068\u3057\u3066 \u300calexa-skills-kit-color-expert-python\u300d\u3092\u9078\u629e\u3057\u307e\u3059\u304c\u3001\u6570\u304c\u591a\u3044\u305f\u3081 Filter \u306b \u300calexa\u300d\u3068\u5165\u529b\u3059\u308b\u3068\u9078\u629e\u304c\u697d\u3067\u3059\u3002<\/p>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/01.create_new_function.png\" alt=\"01-create_new_function\" width=\"1442\" height=\"712\" class=\"aligncenter size-full wp-image-9408\" srcset=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/01.create_new_function.png 1442w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/01.create_new_function-300x148.png 300w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/01.create_new_function-768x379.png 768w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/01.create_new_function-1024x506.png 1024w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/01.create_new_function-728x359.png 728w\" sizes=\"auto, (max-width: 1442px) 100vw, 1442px\" \/>\n<h2>Configure triggers<\/h2>\n<p>Alexa Skills Kit \u3092\u9078\u629e\u3057\u307e\u3059\u3002<\/p>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/02.config_triggers.png\" alt=\"02-config_triggers\" width=\"1319\" height=\"657\" class=\"aligncenter size-full wp-image-9400\" srcset=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/02.config_triggers.png 1319w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/02.config_triggers-300x149.png 300w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/02.config_triggers-768x383.png 768w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/02.config_triggers-1024x510.png 1024w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/02.config_triggers-728x363.png 728w\" sizes=\"auto, (max-width: 1319px) 100vw, 1319px\" \/>\n<p>\u3053\u3053\u3067\u9078\u629e\u5f8c\u3001\u4e0b\u8a18\u306e\u3088\u3046\u306a\u753b\u9762\u3068\u306a\u308b\u5834\u5408\u306f\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u518d\u8a2d\u5b9a\u3057\u521d\u3081\u304b\u3089\u5b9f\u884c\u3057\u3066\u4e0b\u3055\u3044\u3002<\/p>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/02.config_triggers_warn.png\" alt=\"02-config_triggers_warn\" width=\"1215\" height=\"591\" class=\"aligncenter size-full wp-image-9401\" srcset=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/02.config_triggers_warn.png 1215w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/02.config_triggers_warn-300x146.png 300w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/02.config_triggers_warn-768x374.png 768w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/02.config_triggers_warn-1024x498.png 1024w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/02.config_triggers_warn-728x354.png 728w\" sizes=\"auto, (max-width: 1215px) 100vw, 1215px\" \/>\n<h2>Configure function<\/h2>\n<p>\u3053\u3061\u3089\u3067\u30b3\u30fc\u30c9\u3068\u52d5\u4f5c\u8a2d\u5b9a\u3092\u884c\u3044\u307e\u3059\u3001\u30b3\u30fc\u30c9\u306f\u4e0b\u6bb5\u306b\u8a18\u8f09\u3057\u3066\u304a\u308a\u307e\u3059\u3002<\/p>\n<h3>\u5165\u529b\u9805\u76ee<\/h3>\n<ul>\n<li>Name, Description : \u4efb\u610f\u306e\u540d\u524d\u3092\u5165\u529b<\/li>\n<li>Lambda function code : \u6700\u4e0b\u6bb5\u306b\u8a18\u8f09\u306e\u30b3\u30fc\u30c9\u3092\u5165\u529b<\/li>\n<li>Lambda funtcion handler role : \u65e2\u306b\u5b58\u5728\u3059\u308b lambda_basic_execution \u3092\u6307\u5b9a\u3057\u307e\u3059<br \/>\n\u4e0b\u8a18\u306b\u8a18\u8f09\u3057\u3066\u304a\u308a\u307e\u3059\u304c\u3001\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u300cCreate a custom role\u300d\u3092\u9078\u629e\u3059\u308b\u3068IAM\u7ba1\u7406\u753b\u9762\u304c\u958b\u304d\u3001\u4f5c\u6210\u3092\u534a\u81ea\u52d5\u3067\u884c\u3048\u307e\u3059\u3002<\/li>\n<li>Timeout : API\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u8fd4\u5374\u3055\u308c\u308b\u6642\u9593\u306b\u4f59\u88d5\u3092\u6301\u3063\u305f\u79d2\u6570\u3092\u9078\u629e\u3057\u307e\u3059\u3001\u3053\u3061\u3089\u3067\u306f10\u79d2\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ul>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/03.config_function-_create_iam.png\" alt=\"03-config_function-_create_iam\" width=\"1334\" height=\"1605\" class=\"aligncenter size-full wp-image-9411\" srcset=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/03.config_function-_create_iam.png 1334w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/03.config_function-_create_iam-249x300.png 249w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/03.config_function-_create_iam-768x924.png 768w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/03.config_function-_create_iam-851x1024.png 851w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/03.config_function-_create_iam-728x876.png 728w\" sizes=\"auto, (max-width: 1334px) 100vw, 1334px\" \/>\n<h3>IAM\u30ed\u30fc\u30eb\u306e\u534a\u81ea\u52d5\u751f\u6210<\/h3>\n<p>Create a custom role \u3092\u9078\u629e\u5f8c\u3001\u81ea\u52d5\u3067\u958b\u304b\u308c\u305fIAM\u7ba1\u7406\u753b\u9762\u306b\u3066\u8a31\u53ef\u3092\u62bc\u3059\u3068Role\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002<\/p>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/10.create_iam_policy.png\" alt=\"10-create_iam_policy\" width=\"825\" height=\"486\" class=\"aligncenter size-full wp-image-9416\" srcset=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/10.create_iam_policy.png 825w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/10.create_iam_policy-300x177.png 300w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/10.create_iam_policy-768x452.png 768w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/10.create_iam_policy-728x429.png 728w\" sizes=\"auto, (max-width: 825px) 100vw, 825px\" \/>\n<h1>Lambda\u30b3\u30fc\u30c9<\/h1>\n<p>\u307b\u307cblueprint\u3067\u3059\u304c\u3001\u8ffd\u52a0\u30fb\u5909\u66f4\u30fb\u524a\u9664\u3057\u305f\u90e8\u5206\u306f\u4e0b\u8a18\u3068\u306a\u308a\u307e\u3059\u3002<br \/>\n\u30ed\u30b8\u30c3\u30af\u306b\u3064\u3044\u3066\u306f\u3001\u5916\u90e8URL\u3092\u53e9\u304d\u53d6\u5f97\u3057\u305fJSON\u3092\u30d1\u30fc\u30b9\u3057\u3066\u3044\u308b\u306e\u307f\u3067\u3059\u3002<\/p>\n<ul>\n<li>\u524a\u9664<br \/>\n\u3082\u3068\u3082\u3068\u6301\u3063\u3066\u3044\u308b\u30b5\u30f3\u30d7\u30eb\u3068\u3057\u3066\u306e\u6a5f\u80fd\u3001\u95a2\u6570\u90e8\u5206\u3092\u524a\u9664<\/li>\n<li>\u5909\u66f4<br \/>\non_intent \u4e2d\u306e intent_name \u3092\u5909\u66f4<\/li>\n<li>\u8ffd\u52a0<br \/>\n\u5148\u982d\u90e8\u5206 DATE \/ URL\u3092\u8ffd\u52a0<br \/>\nget_blog_count() \u95a2\u6570\u3092\u8ffd\u52a0<\/li>\n<\/ul>\n<h2>\u30b3\u30fc\u30c9\u5168\u4f53<\/h2>\n<p>\u203bURI\u90e8\u5206\u3092\u81ea\u8eab\u306eWordpress+JSON API\u5c0e\u5165\u6e08\u307f\u306eWeb\u30b5\u30a4\u30c8\u7b49\u306b\u5909\u66f4\u3057\u306a\u3051\u308c\u3070\u52d5\u4f5c\u3057\u307e\u305b\u3093\u3002<\/p>\n<p><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n&amp;quot;&amp;quot;&amp;quot;\nreturn BlogCount from WordPress (using JSON API plugin)&lt;\/p&gt;\n&lt;p&gt;Based on &lt;a href=&quot;http:\/\/amzn.to\/1LzFrj6&quot;&gt;http:\/\/amzn.to\/1LzFrj6&lt;\/a&gt;\n&amp;quot;&amp;quot;&amp;quot;&lt;\/p&gt;\n&lt;p&gt;from &lt;strong&gt;future&lt;\/strong&gt; import print_function\nfrom urllib2 import urlopen\nimport json\nimport time&lt;\/p&gt;\n&lt;p&gt;DATE = time.strftime(&amp;quot;%Y%m%d&amp;quot;)\nURI  = '&lt;a href=&quot;https:\/\/URL_OF_YOUR_BLOG\/?json=get_date_posts&amp;amp;amp;date&quot;&gt;https:\/\/URL_OF_YOUR_BLOG\/?json=get_date_posts&amp;amp;date&lt;\/a&gt;=' + DATE&lt;\/p&gt;\n&lt;h1&gt;--------------- Helpers that build all of the responses ----------------------&lt;\/h1&gt;\n&lt;p&gt;def build_speechlet_response(title, output, reprompt_text, should_end_session):\nreturn {\n'outputSpeech': {\n'type': 'PlainText',\n'text': output\n},\n'card': {\n'type': 'Simple',\n'title': &amp;quot;SessionSpeechlet - &amp;quot; + title,\n'content': &amp;quot;SessionSpeechlet - &amp;quot; + output\n},\n'reprompt': {\n'outputSpeech': {\n'type': 'PlainText',\n'text': reprompt_text\n}\n},\n'shouldEndSession': should_end_session\n}&lt;\/p&gt;\n&lt;p&gt;def build_response(session_attributes, speechlet_response):\nreturn {\n'version': '1.0',\n'sessionAttributes': session_attributes,\n'response': speechlet_response\n}&lt;\/p&gt;\n&lt;h1&gt;--------------- Functions that control the skill's behavior ------------------&lt;\/h1&gt;\n&lt;p&gt;def get_welcome_response():\n&amp;quot;&amp;quot;&amp;quot; If we wanted to initialize the session to have some attributes we could\nadd those here\n&amp;quot;&amp;quot;&amp;quot;&lt;\/p&gt;\n&lt;pre&gt;&lt;code&gt;session_attributes = {}\ncard_title = &amp;quot;Blog articles counter&amp;quot;\nspeech_output = &amp;quot;Please tell me How many blog posted?&amp;quot;\n\n# If the user either does not reply to the welcome message or says something\n# that is not understood, they will be prompted again with this text.\nreprompt_text = &amp;quot;Please tell me How many blog posted?&amp;quot;\n\nshould_end_session = False\nreturn build_response(session_attributes, build_speechlet_response(\n    card_title, speech_output, reprompt_text, should_end_session))&lt;\/code&gt;&lt;\/pre&gt;\n&lt;p&gt;def handle_session_end_request():\ncard_title = &amp;quot;Session Ended&amp;quot;\nspeech_output = &amp;quot;Thank you for trying Blog articles counter!&amp;quot;&lt;\/p&gt;\n&lt;pre&gt;&lt;code&gt;# Setting this to true ends the session and exits the skill.\nshould_end_session = True\nreturn build_response({}, build_speechlet_response(\n    card_title, speech_output, None, should_end_session))&lt;\/code&gt;&lt;\/pre&gt;\n&lt;p&gt;def get_blog_count():\ncard_title = &amp;quot;Blog articles counter&amp;quot;\nsession_attributes = {}&lt;\/p&gt;\n&lt;pre&gt;&lt;code&gt;result = json.load(urlopen(URI))\nspeech_output = str(result&#x5B;&amp;quot;count_total&amp;quot;]) + &amp;quot;Blog posts Today&amp;quot;\n\nshould_end_session = True\nreturn build_response({}, build_speechlet_response(\n    card_title, speech_output, None, should_end_session))&lt;\/code&gt;&lt;\/pre&gt;\n&lt;h1&gt;--------------- Events ------------------&lt;\/h1&gt;\n&lt;p&gt;def on_session_started(session_started_request, session):\n&amp;quot;&amp;quot;&amp;quot; Called when the session starts &amp;quot;&amp;quot;&amp;quot;&lt;\/p&gt;\n&lt;pre&gt;&lt;code&gt;print(&amp;quot;on_session_started requestId=&amp;quot; + session_started_request&#x5B;'requestId']\n      + &amp;quot;, sessionId=&amp;quot; + session&#x5B;'sessionId'])&lt;\/code&gt;&lt;\/pre&gt;\n&lt;p&gt;def on_launch(launch_request, session):\n&amp;quot;&amp;quot;&amp;quot; Called when the user launches the skill without specifying what they\nwant\n&amp;quot;&amp;quot;&amp;quot;&lt;\/p&gt;\n&lt;pre&gt;&lt;code&gt;print(&amp;quot;on_launch requestId=&amp;quot; + launch_request&#x5B;'requestId'] +\n      &amp;quot;, sessionId=&amp;quot; + session&#x5B;'sessionId'])&lt;\/code&gt;&lt;\/pre&gt;\n&lt;p&gt;def on_intent(intent_request, session):\n&amp;quot;&amp;quot;&amp;quot; Called when the user specifies an intent for this skill &amp;quot;&amp;quot;&amp;quot;&lt;\/p&gt;\n&lt;pre&gt;&lt;code&gt;print(&amp;quot;on_intent requestId=&amp;quot; + intent_request&#x5B;'requestId'] +\n      &amp;quot;, sessionId=&amp;quot; + session&#x5B;'sessionId'])\n\nintent = intent_request&#x5B;'intent']\nintent_name = intent_request&#x5B;'intent']&#x5B;'name']\n\n# Dispatch to your skill's intent handlers\nif intent_name == &amp;quot;HowManyBlogsIntent&amp;quot;:\n    return get_blog_count()\nelse:\n    raise ValueError(&amp;quot;Invalid intent&amp;quot;)&lt;\/code&gt;&lt;\/pre&gt;\n&lt;p&gt;def on_session_ended(session_ended_request, session):\n&amp;quot;&amp;quot;&amp;quot; Called when the user ends the session.&lt;\/p&gt;\n&lt;pre&gt;&lt;code&gt;Is not called when the skill returns should_end_session=true\n&amp;quot;&amp;quot;&amp;quot;\nprint(&amp;quot;on_session_ended requestId=&amp;quot; + session_ended_request&#x5B;'requestId'] +\n      &amp;quot;, sessionId=&amp;quot; + session&#x5B;'sessionId'])\n# add cleanup logic here&lt;\/code&gt;&lt;\/pre&gt;\n&lt;h1&gt;--------------- Main handler ------------------&lt;\/h1&gt;\n&lt;p&gt;def lambda_handler(event, context):\n&amp;quot;&amp;quot;&amp;quot; Route the incoming request based on type (LaunchRequest, IntentRequest,\netc.) The JSON body of the request is provided in the event parameter.\n&amp;quot;&amp;quot;&amp;quot;\nprint(&amp;quot;event.session.application.applicationId=&amp;quot; +\nevent&#x5B;'session']&#x5B;'application']&#x5B;'applicationId'])&lt;\/p&gt;\n&lt;pre&gt;&lt;code&gt;&amp;quot;&amp;quot;&amp;quot;\nUncomment this if statement and populate with your skill's application ID to\nprevent someone else from configuring a skill that sends requests to this\nfunction.\n&amp;quot;&amp;quot;&amp;quot;\n# if (event&#x5B;'session']&#x5B;'application']&#x5B;'applicationId'] !=\n#         &amp;quot;amzn1.echo-sdk-ams.app.&#x5B;unique-value-here]&amp;quot;):\n#     raise ValueError(&amp;quot;Invalid Application ID&amp;quot;)\n\nif event&#x5B;'session']&#x5B;'new']:\n    on_session_started({'requestId': event&#x5B;'request']&#x5B;'requestId']},\n                       event&#x5B;'session'])\n\nif event&#x5B;'request']&#x5B;'type'] == &amp;quot;LaunchRequest&amp;quot;:\n    return on_launch(event&#x5B;'request'], event&#x5B;'session'])\nelif event&#x5B;'request']&#x5B;'type'] == &amp;quot;IntentRequest&amp;quot;:\n    return on_intent(event&#x5B;'request'], event&#x5B;'session'])\nelif event&#x5B;'request']&#x5B;'type'] == &amp;quot;SessionEndedRequest&amp;quot;:\n    return on_session_ended(event&#x5B;'request'], event&#x5B;'session'])&lt;\/code&gt;&lt;\/pre&gt;\n&lt;p&gt;<\/pre>\n<\/p>\n<h2>\u30c6\u30b9\u30c8<\/h2>\n<p>\u767b\u9332\u3057\u305fLambda function\u304c\u9069\u5207\u306b\u52d5\u4f5c\u3059\u308b\u304b\u30c6\u30b9\u30c8\u3057\u307e\u3059\u3002<\/p>\n<h3>\u4f5c\u6210\u3057\u305fLambda function\u3092\u9078\u629e<\/h3>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/20.test_lambda.png\" alt=\"20-test_lambda\" width=\"1895\" height=\"445\" class=\"aligncenter size-full wp-image-9418\" srcset=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/20.test_lambda.png 1895w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/20.test_lambda-300x70.png 300w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/20.test_lambda-768x180.png 768w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/20.test_lambda-1024x240.png 1024w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/20.test_lambda-728x171.png 728w\" sizes=\"auto, (max-width: 1895px) 100vw, 1895px\" \/>\n<h3>Configure test event \u30a4\u30d9\u30f3\u30c8\u6307\u5b9aWindow\u3092\u958b\u304f<\/h3>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/21.configure_test.png\" alt=\"21-configure_test\" width=\"959\" height=\"528\" class=\"aligncenter size-full wp-image-9419\" srcset=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/21.configure_test.png 959w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/21.configure_test-300x165.png 300w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/21.configure_test-768x423.png 768w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/21.configure_test-728x401.png 728w\" sizes=\"auto, (max-width: 959px) 100vw, 959px\" \/>\n<h3>\u767a\u884c\u3059\u308b\u30a4\u30d9\u30f3\u30c8\u3092\u5165\u529b<\/h3>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/22.configure_test.png\" alt=\"22-configure_test\" width=\"1423\" height=\"939\" class=\"aligncenter size-full wp-image-9420\" srcset=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/22.configure_test.png 1423w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/22.configure_test-300x198.png 300w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/22.configure_test-768x507.png 768w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/22.configure_test-1024x676.png 1024w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/22.configure_test-728x480.png 728w\" sizes=\"auto, (max-width: 1423px) 100vw, 1423px\" \/>\n<p>intent name \u3092 HowManyBlogsIntent \u3068\u3057\u3066 Lambda function\u3092\u547c\u3073\u51fa\u3057\u7d50\u679c\u3092\u53d6\u5f97\u30fb\u8868\u793a\u3059\u308b\u305f\u3081\u306e\u7269\u3067\u3059\u3002<\/p>\n<pre>\n{\n  \"session\": {\n    \"new\": false,\n    \"sessionId\": \"amzn1.echo-api.session.[unique-value-here]\",\n    \"attributes\": {},\n    \"user\": {\n      \"userId\": \"amzn1.ask.account.[unique-value-here]\"\n    },\n    \"application\": {\n      \"applicationId\": \"amzn1.ask.skill.[unique-value-here]\"\n    }\n  },\n  \"version\": \"1.0\",\n  \"request\": {\n    \"locale\": \"en-US\",\n    \"timestamp\": \"2016-10-27T21:06:28Z\",\n    \"type\": \"IntentRequest\",\n    \"requestId\": \"amzn1.echo-api.request.[unique-value-here]\",\n    \"intent\": {\n      \"name\": \"HowManyBlogsIntent\"\n    }\n  },\n  \"context\": {\n    \"AudioPlayer\": {\n      \"playerActivity\": \"IDLE\"\n    },\n    \"System\": {\n      \"device\": {\n        \"supportedInterfaces\": {\n          \"AudioPlayer\": {}\n        }\n      },\n      \"application\": {\n        \"applicationId\": \"amzn1.ask.skill.[unique-value-here]\"\n      },\n      \"user\": {\n        \"userId\": \"amzn1.ask.account.[unique-value-here]\"\n      }\n    }\n  }\n}\n<\/pre>\n<h2>\u7d50\u679c\u78ba\u8a8d<\/h2>\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u4e0b\u6bb5\u306eExecution result\u306bresponse\u3068\u3057\u3066outputSpeech\u306b \u300cXX Blog posts Today\u300d\u3068\u8868\u793a\u3055\u308c\u308c\u3070\u30c6\u30b9\u30c8OK\u3067\u3059\uff01<\/p>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/23.configure_test.png\" alt=\"23-configure_test\" width=\"948\" height=\"479\" class=\"aligncenter size-full wp-image-9421\" srcset=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/23.configure_test.png 948w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/23.configure_test-300x152.png 300w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/23.configure_test-768x388.png 768w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2016\/12\/23.configure_test-728x368.png 728w\" sizes=\"auto, (max-width: 948px) 100vw, 948px\" \/>\n<p>\u203b\u3053\u3061\u3089\u306e\u5185\u5bb9\u3092Amazon echo (dot)\u304c\u558b\u308a\u307e\u3059<\/p>\n<p>\u6b21\u56de\u306f\u3044\u3088\u3044\u3088Alexa Skill\u3092\u767b\u9332\u3057\u3001Amazon echo (dot)\u3092\u558b\u3089\u305b\u307e\u3057\u3087\u3046\uff01<\/p>\n<h1>\u3053\u306e\u9023\u8f09\u3092\u901a\u3058\u3066\u51fa\u6765\u4e0a\u304c\u308b\u3082\u306e<\/h1>\n<p>\u5358\u72ec\u3067\u52d5\u4f5c\u3057\u307e\u3059\u304c\u3001\u81ea\u5206\u306e\u767a\u97f3\u306e\u82f1\u8a9e\u30925\u56de\u306b1\u5ea6\u7a0b\u3057\u304b\u805e\u304d\u53d6\u3063\u3066\u304f\u308c\u306a\u3044\u305f\u3081\uff08\u60b2\uff09\u3001PC\u306b\u3066\u558b\u3089\u305b\u3066\u304a\u308a\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/youtu.be\/iSXYMKfEv9c\" target=\"_blank\">\u53c2\u8003\u52d5\u753b<\/a><\/p>\n<p>PC - \u300cAlexa, ask blog get count\u300d<br \/>\nAmazon Echo Dot - \u300c16 Blog posts Today\u300d<\/p>\n<p>\u3053\u306e\u9593\u306b\u81ea\u5206\u306e\u4f5c\u6210\u3057\u305fLambda funtcion\u3092\u901a\u3063\u3066\u3044\u308b\u3068\u8003\u3048\u308b\u3068\u611f\u6fc0\u30e2\u30ce\u3067\u3059\u306d!<\/p>\n<h2>\u52d5\u4f5c\u6982\u8981\u89e3\u8aac\u3067\u53c2\u8003\u306b\u3055\u305b\u3066\u9802\u3044\u305f\u30da\u30fc\u30b8<\/h2>\n<ul>\n<li>Alexa\u30b9\u30ad\u30eb\u3068Lambda\u30d5\u30a1\u30f3\u30af\u30b7\u30e7\u30f3\u306f\u3069\u306e\u3088\u3046\u306b\u9023\u643a\u3057\u3066\u3044\u308b\u304b<br \/>\n<a href='http:\/\/blog.algolab.jp\/post\/2016\/09\/28\/alexa-color-expert\/'><a href=\"http:\/\/blog.algolab.jp\/post\/2016\/09\/28\/alexa-color-expert\/\">http:\/\/blog.algolab.jp\/post\/2016\/09\/28\/alexa-color-expert\/<\/a><\/a><\/li>\n<li>AWS Lambda\u3092\u4f7f\u3063\u3066Amazon Echo\u306b\u6a5f\u80fd\u8ffd\u52a0\u3057\u3066\u307f\u305f<br \/>\n<a href='http:\/\/dev.classmethod.jp\/etc\/alexa-skill-with-lambda-sample\/'><a href=\"http:\/\/dev.classmethod.jp\/etc\/alexa-skill-with-lambda-sample\/\">http:\/\/dev.classmethod.jp\/etc\/alexa-skill-with-lambda-sample\/<\/a><\/a><\/li>\n<\/ul>\n<h2>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/h2>\n<ul>\n<li>Creating an AWS Lambda Function for a Custom Skill<br \/>\n<a href='https:\/\/developer.amazon.com\/public\/solutions\/alexa\/alexa-skills-kit\/docs\/developing-an-alexa-skill-as-a-lambda-function'><a href=\"https:\/\/developer.amazon.com\/public\/solutions\/alexa\/alexa-skills-kit\/docs\/developing-an-alexa-skill-as-a-lambda-function\">https:\/\/developer.amazon.com\/public\/solutions\/alexa\/alexa-skills-kit\/docs\/developing-an-alexa-skill-as-a-lambda-function<\/a><\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Amazon Echo Dot\u306b\u3066\u5f0a\u793e\u30d6\u30ed\u30b0\u306e\u6295\u7a3f\u6570\u3092\u53d6\u5f97\u3059\u308bAmazon Echo(dot)\u7528\u306ecustom skill\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 \u958b\u5c01\u306e\u7fa9 Amazon Echo Dot\u521d\u671f\u8a2d\u5b9a\u7de8 Amazon Develope&#8230;<\/p>\n","protected":false},"author":2,"featured_media":9424,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"ja","_original_post":"9398","footnotes":""},"categories":[184,115,9],"tags":[],"class_list":{"0":"post-9398","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-aws-reinvent-2016","8":"category-iot","9":"category-dev","10":"ja"},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/posts\/9398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/comments?post=9398"}],"version-history":[{"count":14,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/posts\/9398\/revisions"}],"predecessor-version":[{"id":29310,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/posts\/9398\/revisions\/29310"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/media\/9424"}],"wp:attachment":[{"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/media?parent=9398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/categories?post=9398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/tags?post=9398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}