{"id":656,"date":"2017-08-31T10:22:37","date_gmt":"2017-08-31T01:22:37","guid":{"rendered":"https:\/\/www.amano-labo.jp\/pages\/?p=656"},"modified":"2017-08-31T10:22:37","modified_gmt":"2017-08-31T01:22:37","slug":"bot%e3%81%8c%e7%a0%94%e7%a9%b6%e5%ae%a4%e3%81%ae%e3%81%82%e3%82%8b%e5%85%ab%e7%8e%8b%e5%ad%90%e3%81%ae%e5%a4%a9%e6%b0%97%e3%82%92%e6%95%99%e3%81%88%e3%81%a6%e3%81%8f%e3%82%8c%e3%81%be%e3%81%99","status":"publish","type":"post","link":"https:\/\/www.amano-labo.jp\/pages\/blog\/656\/","title":{"rendered":"BOT\u304c\u7814\u7a76\u5ba4\u306e\u3042\u308b\u516b\u738b\u5b50\u306e\u5929\u6c17\u3092\u6559\u3048\u3066\u304f\u308c\u307e\u3059\uff08API.AI\u306b\u304a\u3051\u308b\u72ec\u81eaweb\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\uff08\u305d\u306e2\uff0e\u5916\u90e8\u30b5\u30fc\u30d3\u30b9\u9023\u643a\uff09"},"content":{"rendered":"<div class=\"amano- amano-entity-placement\" id=\"amano-365180446\"><div id=\"amano-102489684\"><a href=\"https:\/\/www.amano-labo.jp\/pages\/blog\/1941\/\" aria-label=\"amls2\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.amano-labo.jp\/pages\/wp-content\/uploads\/2020\/09\/amls2.png\" alt=\"\"  srcset=\"https:\/\/www.amano-labo.jp\/pages\/wp-content\/uploads\/2020\/09\/amls2.png 1000w, https:\/\/www.amano-labo.jp\/pages\/wp-content\/uploads\/2020\/09\/amls2-300x24.png 300w, https:\/\/www.amano-labo.jp\/pages\/wp-content\/uploads\/2020\/09\/amls2-768x61.png 768w, https:\/\/www.amano-labo.jp\/pages\/wp-content\/uploads\/2020\/09\/amls2-100x8.png 100w, https:\/\/www.amano-labo.jp\/pages\/wp-content\/uploads\/2020\/09\/amls2-150x12.png 150w, https:\/\/www.amano-labo.jp\/pages\/wp-content\/uploads\/2020\/09\/amls2-200x16.png 200w, https:\/\/www.amano-labo.jp\/pages\/wp-content\/uploads\/2020\/09\/amls2-450x36.png 450w, https:\/\/www.amano-labo.jp\/pages\/wp-content\/uploads\/2020\/09\/amls2-600x48.png 600w, https:\/\/www.amano-labo.jp\/pages\/wp-content\/uploads\/2020\/09\/amls2-900x72.png 900w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" width=\"1000\" height=\"80\"   \/><\/a><\/div><\/div><p>\u904b\u7528\u3057\u3066\u3044\u308b\u7814\u7a76\u5ba4BOT\u306b\u300c\u5929\u6c17\u300d\u3068\u5c0b\u306d\u308b\u3068\u516b\u738b\u5b50\u306e\u73fe\u5728\u306e\u5929\u6c17\u3092\u6559\u3048\u3066\u304f\u308c\u308b\u3088\u3046\u306b\u3057\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<p>\u7d50\u8ad6\u304b\u3089\u8a00\u3046\u3068\u3001<a href=\"https:\/\/www.amano-labo.jp\/pages\/blog\/626\/\">\u305d\u306e1<\/a>\u3067\u884c\u3063\u305f\u3088\u3046\u306aGoogle Apps Script\u3060\u3051\u3067\u306f\u5b9f\u73fe\u3067\u304d\u306a\u304b\u3063\u305f\u306e\u3067\u3044\u308f\u3070\u4e2d\u7d99\u5668\u3068\u306a\u308bnode.js\u3092\u4f7f\u3063\u305f\u30b5\u30fc\u30d3\u30b9\u3092\u631f\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059\u3002<\/p>\n<p>API.AI\u306eFulfillment\u306fPOST\u3067\u5916\u90e8\u30b5\u30fc\u30d3\u30b9\u3092\u547c\u3073\u51fa\u3057\u307e\u3059\u304c\u3001\u8abf\u3079\u305f\u9650\u308a\u3067\u306fGoogle Apps Script\u306edoPost\u306f\u3053\u308c\u3092\u6b63\u3057\u304f\u8fd4\u4fe1\u3067\u304d\u307e\u305b\u3093\u3002\u53d7\u4fe1\u306f\u3067\u304d\u308b\u306e\u3067\u3001\u305d\u306e1\u306e\u3088\u3046\u306a\u8fd4\u4fe1\u4e0d\u8981\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u5834\u5408\u306b\u306f\u554f\u984c\u304c\u306a\u304b\u3063\u305f\u3060\u3051\u3067\u3057\u305f\u3002\u307e\u305f\u3001callback\u3059\u308b\u3088\u3046\u306aAPI\u306a\u3089\u3070\u554f\u984c\u306b\u306a\u3089\u306a\u3044\u306e\u3067\u3059\u304c&#8230;\u3002<\/p>\n<p>\u3053\u306e\u554f\u984c\u3092\u56de\u907f\u3059\u308b\u305f\u3081\u3001\u5b9f\u8cea\u7684\u306bProxy\u3068\u306a\u308b\u3088\u3046\u306a\u5916\u90e8\u30b5\u30fc\u30d3\u30b9\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u306b\u3057\u307e\u3057\u305f\u3002\u3044\u308f\u3070POST\/GET\u3092\u5909\u63db\u3059\u308b\u3088\u3046\u306a\u3082\u306e\u3067\u3059\u3002\u4e16\u306e\u4e2d\u306b\u306f\u305d\u3046\u3044\u3063\u305fWeb\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308b\u3093\u3058\u3083\u306a\u3044\u304b\u3068\u601d\u3046\u306e\u3067\u3059\u304c\u3001\u73fe\u6642\u70b9\u3067\u306f\u898b\u3064\u3051\u3089\u308c\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.amano-labo.jp\/pages\/blog\/656\/#nodejs%E3%81%AB%E3%82%88%E3%82%8B%E4%B8%AD%E7%B6%99%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9\" >node.js\u306b\u3088\u308b\u4e2d\u7d99\u30b5\u30fc\u30d3\u30b9<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.amano-labo.jp\/pages\/blog\/656\/#GAS%E5%81%B4%E3%81%AE%E5%87%A6%E7%90%86\" >GAS\u5074\u306e\u51e6\u7406<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"nodejs%E3%81%AB%E3%82%88%E3%82%8B%E4%B8%AD%E7%B6%99%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9\"><\/span>node.js\u306b\u3088\u308b\u4e2d\u7d99\u30b5\u30fc\u30d3\u30b9<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>GAS\u5074\u3067\u306e\u51e6\u7406\u3092\u7c21\u6f54\u306b\u3059\u308b\u305f\u3081\u3001intentName\u3068resolvedQuery\u3060\u3051\u3092\u8ee2\u9001\u3057\u3066\u3044\u307e\u3059\u3002\u307e\u308b\u3054\u3068\u8ee2\u9001\u3057\u3066\u3057\u307e\u3046\u3068\u3044\u3046\u624b\u6bb5\u3082\u3042\u308b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true\">'use strict';\r\n\r\nconst express = require('express');\r\nconst bodyParser = require('body-parser');\r\nconst request = require('sync-request');\r\n\r\nconst gasUrl = '!!! google apps script\u3067\u516c\u958b\u3057\u305fURL !!!';\r\n\r\nconst restService = express();\r\nrestService.use(bodyParser.json());\r\n\r\nrestService.use('\/hook', function (req, res) {\r\n    try {\r\n        var path = gasUrl+'?intentName='+encodeURIComponent(requestBody.result.metadata.intentName)+'&amp;resolvedQuery='+encodeURIComponent(requestBody.result.resolvedQuery);\r\n        var response = request('GET', path);\r\n        var res2 = JSON.parse(response.getBody('utf8'));\r\n\r\n        return res.json({\r\n            speech: res2,\r\n            displayText: res2,\r\n            source: 'apiai-webhook-gas'\r\n        });\r\n    } catch (err) {\r\n        return res.status(400).json({\r\n            status: {\r\n                code: 400,\r\n                errorType: err.message\r\n            }\r\n       });\r\n    }\r\n});\r\n\r\nrestService.listen((3010), function () {\r\n    console.log(\"Server listening\");\r\n});\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"GAS%E5%81%B4%E3%81%AE%E5%87%A6%E7%90%86\"><\/span>GAS\u5074\u306e\u51e6\u7406<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u57fa\u672c\u7684\u306b<a href=\"https:\/\/www.amano-labo.jp\/pages\/blog\/626\/\">\u305d\u306e1<\/a>\u3068\u540c\u3058\u69cb\u9020\u3067\u3059\u3002\u3053\u3053\u3067\u306fOpenWeatherMap\u3092\u7528\u3044\u307e\u3057\u305f\u304c\u3001\u305d\u306e\u4ed6\u306eWeb\u30b5\u30fc\u30d3\u30b9\u3067\u3082\u540c\u3058\u3067\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u51e6\u7406\u3092\u5b9f\u88c5\u3057\u3001\u305d\u306e1\u306e\u30b3\u30fc\u30c9\u5185\u3067\u5206\u5c90\u3055\u305b\u307e\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true \">function getWeather() {\r\n  var weatherS = '';\r\n  try {\r\n    var url = \"http:\/\/api.openweathermap.org\/data\/2.5\/weather?q=Hachioji,jp&amp;units=metric&amp;appid=!!! \u53d6\u5f97\u3057\u305fAPI\u30ad\u30fc !!!\";\r\n    result = UrlFetchApp.fetch(url);\r\n    var retw = result.getContentText();\r\n    var retjson = JSON.parse(retw);\r\n    \r\n    for (var i in retjson.weather) {\r\n      \/\/ weatherS += retjson.weather[i].main + ' ';\r\n      if (i != 0) {\r\n        weatherS += ' \/ ';\r\n      }\r\n      weatherS += description[retjson.weather[i].id];\r\n    }\r\n    weatherS += \" \/ \u6c17\u6e29:\" + retjson.main.temp + \"\u5ea6\";\r\n    Logger.log(weatherS);\r\n  } catch (exm) {\r\n    Logger.log(exm);\r\n  }\r\n  \r\n  return weatherS;\r\n}<\/pre>\n<p>\u30b3\u30fc\u30c9\u306b\u306f\u8a18\u8f09\u3057\u3066\u3044\u307e\u305b\u3093\u304c\u3001<\/p>\n<pre class=\"lang:default decode:true \">var description = {};\r\n\r\ndescription[200] = '...';<\/pre>\n<p>\u306e\u3088\u3046\u306bID\u3068\u5929\u6c17\u8aac\u660e\u3092\u7f6e\u304d\u63db\u3048\u308b\u914d\u5217\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u904b\u7528\u3057\u3066\u3044\u308b\u7814\u7a76\u5ba4BOT\u306b\u300c\u5929\u6c17\u300d\u3068\u5c0b\u306d\u308b\u3068\u516b\u738b\u5b50\u306e\u73fe\u5728\u306e\u5929\u6c17\u3092\u6559\u3048\u3066\u304f\u308c\u308b\u3088\u3046\u306b\u3057\u3066\u307f\u307e\u3057\u305f\u3002 \u7d50\u8ad6\u304b\u3089\u8a00\u3046\u3068\u3001\u305d\u306e1\u3067\u884c\u3063\u305f\u3088\u3046\u306aGoogle Apps Script\u3060\u3051\u3067\u306f\u5b9f\u73fe\u3067\u304d\u306a\u304b\u3063\u305f\u306e\u3067\u3044\u308f\u3070\u4e2d\u7d99\u5668\u3068\u306a\u308bno <a class=\"more-link\" href=\"https:\/\/www.amano-labo.jp\/pages\/blog\/656\/\">\u7d9a\u304d\u3092\u8aad\u3080\u2026<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[6,2,4],"tags":[],"class_list":["post-656","post","type-post","status-publish","format-standard","hentry","category-software","category-blog","category-tips"],"_links":{"self":[{"href":"https:\/\/www.amano-labo.jp\/pages\/wp-json\/wp\/v2\/posts\/656","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.amano-labo.jp\/pages\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.amano-labo.jp\/pages\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.amano-labo.jp\/pages\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.amano-labo.jp\/pages\/wp-json\/wp\/v2\/comments?post=656"}],"version-history":[{"count":0,"href":"https:\/\/www.amano-labo.jp\/pages\/wp-json\/wp\/v2\/posts\/656\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.amano-labo.jp\/pages\/wp-json\/wp\/v2\/media?parent=656"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.amano-labo.jp\/pages\/wp-json\/wp\/v2\/categories?post=656"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.amano-labo.jp\/pages\/wp-json\/wp\/v2\/tags?post=656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}