{"id":997,"date":"2024-11-18T17:37:27","date_gmt":"2024-11-18T08:37:27","guid":{"rendered":"https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/?p=997"},"modified":"2024-11-18T17:37:27","modified_gmt":"2024-11-18T08:37:27","slug":"%e5%b0%8f%e3%83%8d%e3%82%bf%e6%96%99%e7%90%86%e9%83%a8bot%e3%83%bbgas","status":"publish","type":"post","link":"https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/?p=997","title":{"rendered":"[\u5c0f\u30cd\u30bf]\u6599\u7406\u90e8BOT\u30fbGAS"},"content":{"rendered":"<p>\u5f13\u4ef2\u7814\u7a76\u5ba4\u3067\u306f\u6599\u7406\u90e8\u3078\u306e\u51fa\u6b20\u306b\u3064\u3044\u3066\u3001\u81ea\u4f5cBOT\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u6280\u8853\u30b9\u30bf\u30c3\u30af\u3068\u3057\u3066\u306fGAS + Slack API\u3092\u4f7f\u3063\u3066\u307e\u3059\u3002<br \/>\n\u6bce\u9031\u6708\u66dc9\u6642\u306b\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u81ea\u52d5\u7684\u306b\u9001\u3089\u308c\u3066\u304d\u307e\u3059\u3002<\/p>\n<p>GAS\u306fGoogle\u7cfb\u30b5\u30fc\u30d3\u30b9\u306b\u975e\u5e38\u306b\u76f8\u6027\u304c\u3044\u3044\u306e\u3067\u3001\u81ea\u5206\u306fGmail\u3092GAS\u3067\u76e3\u8996\u3055\u305b\u3066<br \/>\nChatGPT\u306b\u30e1\u30fc\u30eb\u672c\u6587\u3092\u5206\u6790\u3057\u3066\u3082\u3089\u3063\u3066\u3001\u4e88\u5b9a\u3092Google\u30ab\u30ec\u30f3\u30c0\u30fc\u306b\u81ea\u52d5\u767b\u9332\u3055\u305b\u3066\u3044\u307e\u3059\u3002<br \/>\n(\u5c31\u6d3b\u306a\u3069\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u7ba1\u7406\u304c\u5927\u5909\u306a\u3068\u304d\u306b\u4f7f\u3044\u305f\u304b\u3063\u305f\u3002)<br \/>\n*\u8208\u5473\u304c\u3042\u308c\u3070\u4e95\u53e3\u307e\u3067\u3002<\/p>\n<p>M2 \u4e95\u53e3<\/p>\n<p><img loading=\"lazy\" class=\"alignleft  wp-image-999\" src=\"http:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/wp-content\/uploads\/2024\/11\/c321def3fa68c3a257d5c0c032be6ff9-1-300x128.png\" alt=\"\" width=\"539\" height=\"230\" srcset=\"https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/wp-content\/uploads\/2024\/11\/c321def3fa68c3a257d5c0c032be6ff9-1-300x128.png 300w, https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/wp-content\/uploads\/2024\/11\/c321def3fa68c3a257d5c0c032be6ff9-1-1024x438.png 1024w, https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/wp-content\/uploads\/2024\/11\/c321def3fa68c3a257d5c0c032be6ff9-1-768x329.png 768w, https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/wp-content\/uploads\/2024\/11\/c321def3fa68c3a257d5c0c032be6ff9-1.png 1135w\" sizes=\"(max-width: 539px) 100vw, 539px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092GAS\u306b\u8cbc\u308a\u4ed8\u3051\u3066Slack API\u304b\u3089\u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97\u3059\u308b\u3068\u9001\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<div>\n<div>const SLACK_BOT_TOKEN = &#8216;xoxb-197************&#8217;; \/\/ \u53d6\u5f97\u3057\u305fBot Token\u306b\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044<\/div>\n<div>const CHANNEL_ID = &#8216;C***************&#8217;; \/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1\u3057\u305f\u3044\u30c1\u30e3\u30f3\u30cd\u30eb\u306eID\u306b\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044<\/div>\n<div>function sendSurveyMessages() {<\/div>\n<div>\u00a0 sendCookClubMessage();<\/div>\n<div>\u00a0 sendDrinkClubMessage();<\/div>\n<div>}<\/div>\n<div>function sendCookClubMessage() {<\/div>\n<div>\u00a0 const cookClubPayload = {<\/div>\n<div>\u00a0 \u00a0 channel: CHANNEL_ID,<\/div>\n<div>\u00a0 \u00a0 text: &#8216;\u6599\u7406\u90e8\u30a2\u30f3\u30b1\u30fc\u30c8&#8217;, \/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u4ee3\u66ff\u30c6\u30ad\u30b9\u30c8<\/div>\n<div>\u00a0 \u00a0 blocks: [<\/div>\n<div>\u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;header&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;plain_text&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: &#8220;&#x1f373; \u4eca\u9031\u306e\u6599\u7406\u90e8\u53c2\u52a0\u30a2\u30f3\u30b1\u30fc\u30c8&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;emoji&#8221;: true<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 }<\/div>\n<div>\u00a0 \u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;divider&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;section&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;mrkdwn&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: &#8220;*\u4eca\u9031\u306e\u6599\u7406\u90e8\u306b\u53c2\u52a0\u5e0c\u671b\u306e\u65b9\u306f\u706b\u66dc\u663c\u307e\u3067\u306b\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u304a\u9858\u3044\u3057\u307e\u3059\u3002* (\u8907\u6570\u53ef\u30fb5\u3064\u306e\u5185\u3001\u4e00\u756a\u591a\u3044\u65e5\u3067\u5b9f\u65bd)&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 }<\/div>\n<div>\u00a0 \u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;section&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;fields&#8221;: [<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;mrkdwn&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: &#8220;1&#xfe0f;&#x20e3; \u706b\u66dc \u591c (17:30\uff5e)&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;mrkdwn&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: &#8220;2&#xfe0f;&#x20e3; \u6c34\u66dc \u663c (12:00\uff5e)&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;mrkdwn&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: &#8220;3&#xfe0f;&#x20e3; \u6c34\u66dc \u591c (17:30\uff5e)&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;mrkdwn&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: &#8220;4&#xfe0f;&#x20e3; \u6728\u66dc \u663c (12:00\uff5e)&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;mrkdwn&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: &#8220;5&#xfe0f;&#x20e3; \u6728\u66dc \u591c (17:30\uff5e)&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 ]<\/div>\n<div>\u00a0 \u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;context&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;elements&#8221;: [<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;mrkdwn&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: &#8220;\u53c2\u52a0\u5e0c\u671b\u306e\u65b9\u306f\u5bfe\u5fdc\u3059\u308b\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\uff01&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 ]<\/div>\n<div>\u00a0 \u00a0 \u00a0 }<\/div>\n<div>\u00a0 \u00a0 ]<\/div>\n<div>\u00a0 };<\/div>\n<div>\u00a0 const options = {<\/div>\n<div>\u00a0 \u00a0 method: &#8216;post&#8217;,<\/div>\n<div>\u00a0 \u00a0 contentType: &#8216;application\/json&#8217;,<\/div>\n<div>\u00a0 \u00a0 headers: {<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8216;Authorization&#8217;: `Bearer ${SLACK_BOT_TOKEN}`<\/div>\n<div>\u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 payload: JSON.stringify(cookClubPayload)<\/div>\n<div>\u00a0 };<\/div>\n<div>\u00a0 try {<\/div>\n<div>\u00a0 \u00a0 const response = UrlFetchApp.fetch(&#8216;https:\/\/slack.com\/api\/chat.postMessage&#8217;, options);<\/div>\n<div>\u00a0 \u00a0 const responseData = JSON.parse(response.getContentText());<\/div>\n<div>\u00a0 \u00a0 if (!responseData.ok) {<\/div>\n<div>\u00a0 \u00a0 \u00a0 Logger.log(&#8216;Error posting Cook Club message: &#8216; + responseData.error);<\/div>\n<div>\u00a0 \u00a0 \u00a0 return;<\/div>\n<div>\u00a0 \u00a0 }<\/div>\n<div>\u00a0 \u00a0 const ts = responseData.ts; \/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7<\/div>\n<div>\u00a0 \u00a0 const channel = responseData.channel; \/\/ \u30c1\u30e3\u30f3\u30cd\u30ebID<\/div>\n<div>\u00a0 \u00a0 \/\/ \u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8ffd\u52a0\uff08one \uff5e five\uff09<\/div>\n<div>\u00a0 \u00a0 const cookEmojis = [&#8216;one&#8217;, &#8216;two&#8217;, &#8216;three&#8217;, &#8216;four&#8217;, &#8216;five&#8217;];<\/div>\n<div>\u00a0 \u00a0 addReactions(channel, ts, cookEmojis);<\/div>\n<div>\u00a0 } catch (error) {<\/div>\n<div>\u00a0 \u00a0 Logger.log(&#8216;Error posting Cook Club message: &#8216; + error.message);<\/div>\n<div>\u00a0 }<\/div>\n<div>}<\/div>\n<div>function sendDrinkClubMessage() {<\/div>\n<div>\u00a0 const drinkClubPayload = {<\/div>\n<div>\u00a0 \u00a0 channel: CHANNEL_ID,<\/div>\n<div>\u00a0 \u00a0 text: &#8216;\u304a\u9152\u90e8\u30a2\u30f3\u30b1\u30fc\u30c8&#8217;, \/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u4ee3\u66ff\u30c6\u30ad\u30b9\u30c8<\/div>\n<div>\u00a0 \u00a0 blocks: [<\/div>\n<div>\u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;header&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;plain_text&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: &#8220;&#x1f37a; \u4eca\u9031\u306e\u304a\u9152\u90e8\u53c2\u52a0\u30a2\u30f3\u30b1\u30fc\u30c8&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;emoji&#8221;: true<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 }<\/div>\n<div>\u00a0 \u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;divider&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;section&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;mrkdwn&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: &#8220;*\u4eca\u9031\u306e\u304a\u9152\u90e8\u306b\u3082\u53c2\u52a0\u5e0c\u671b\u306e\u65b9\u306f\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u304a\u9858\u3044\u3057\u307e\u3059\u3002* \u6599\u7406\u4ed8\u304d\u30fb\u5c45\u9152\u5c4b\u306e\u53ef\u80fd\u6027\u3082\u6709\u308a\\n6&#xfe0f;&#x20e3; \u91d1\u66dc \u591c (17:30\uff5e) \\n7&#xfe0f;&#x20e3; \u91d1\u66dc\u4ee5\u5916\u306e\u591c\u306a\u3089\u53c2\u52a0\u5e0c\u671b&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 }<\/div>\n<div>\u00a0 \u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;context&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8220;elements&#8221;: [<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;type&#8221;: &#8220;mrkdwn&#8221;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;text&#8221;: &#8220;\u53c2\u52a0\u5e0c\u671b\u306e\u65b9\u306f\u5bfe\u5fdc\u3059\u308b\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\uff01&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 ]<\/div>\n<div>\u00a0 \u00a0 \u00a0 }<\/div>\n<div>\u00a0 \u00a0 ]<\/div>\n<div>\u00a0 };<\/div>\n<div>\u00a0 const options = {<\/div>\n<div>\u00a0 \u00a0 method: &#8216;post&#8217;,<\/div>\n<div>\u00a0 \u00a0 contentType: &#8216;application\/json&#8217;,<\/div>\n<div>\u00a0 \u00a0 headers: {<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8216;Authorization&#8217;: `Bearer ${SLACK_BOT_TOKEN}`<\/div>\n<div>\u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 payload: JSON.stringify(drinkClubPayload)<\/div>\n<div>\u00a0 };<\/div>\n<div>\u00a0 try {<\/div>\n<div>\u00a0 \u00a0 const response = UrlFetchApp.fetch(&#8216;https:\/\/slack.com\/api\/chat.postMessage&#8217;, options);<\/div>\n<div>\u00a0 \u00a0 const responseData = JSON.parse(response.getContentText());<\/div>\n<div>\u00a0 \u00a0 if (!responseData.ok) {<\/div>\n<div>\u00a0 \u00a0 \u00a0 Logger.log(&#8216;Error posting Drink Club message: &#8216; + responseData.error);<\/div>\n<div>\u00a0 \u00a0 \u00a0 return;<\/div>\n<div>\u00a0 \u00a0 }<\/div>\n<div>\u00a0 \u00a0 const ts = responseData.ts; \/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7<\/div>\n<div>\u00a0 \u00a0 const channel = responseData.channel; \/\/ \u30c1\u30e3\u30f3\u30cd\u30ebID<\/div>\n<div>\u00a0 \u00a0 \/\/ \u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8ffd\u52a0\uff08six\uff09<\/div>\n<div>\u00a0 \u00a0 const drinkEmojis = [&#8216;six&#8217;, &#8216;seven&#8217;];<\/div>\n<div>\u00a0 \u00a0 addReactions(channel, ts, drinkEmojis);<\/div>\n<div>\u00a0 } catch (error) {<\/div>\n<div>\u00a0 \u00a0 Logger.log(&#8216;Error posting Drink Club message: &#8216; + error.message);<\/div>\n<div>\u00a0 }<\/div>\n<div>}<\/div>\n<div>function addReactions(channel, ts, emojis) {<\/div>\n<div>\u00a0 emojis.forEach(function(emoji) {<\/div>\n<div>\u00a0 \u00a0 const reactionPayload = {<\/div>\n<div>\u00a0 \u00a0 \u00a0 name: emoji,<\/div>\n<div>\u00a0 \u00a0 \u00a0 channel: channel,<\/div>\n<div>\u00a0 \u00a0 \u00a0 timestamp: ts<\/div>\n<div>\u00a0 \u00a0 };<\/div>\n<div>\u00a0 \u00a0 const options = {<\/div>\n<div>\u00a0 \u00a0 \u00a0 method: &#8216;post&#8217;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 contentType: &#8216;application\/json&#8217;,<\/div>\n<div>\u00a0 \u00a0 \u00a0 headers: {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 &#8216;Authorization&#8217;: `Bearer ${SLACK_BOT_TOKEN}`<\/div>\n<div>\u00a0 \u00a0 \u00a0 },<\/div>\n<div>\u00a0 \u00a0 \u00a0 payload: JSON.stringify(reactionPayload)<\/div>\n<div>\u00a0 \u00a0 };<\/div>\n<div>\u00a0 \u00a0 try {<\/div>\n<div>\u00a0 \u00a0 \u00a0 const response = UrlFetchApp.fetch(&#8216;https:\/\/slack.com\/api\/reactions.add&#8217;, options);<\/div>\n<div>\u00a0 \u00a0 \u00a0 const responseData = JSON.parse(response.getContentText());<\/div>\n<div>\u00a0 \u00a0 \u00a0 if (!responseData.ok) {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 Logger.log(`Error adding reaction :${emoji}: &#8211; ${responseData.error}`);<\/div>\n<div>\u00a0 \u00a0 \u00a0 } else {<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 Logger.log(`Added reaction :${emoji}:`);<\/div>\n<div>\u00a0 \u00a0 \u00a0 }<\/div>\n<div>\u00a0 \u00a0 } catch (error) {<\/div>\n<div>\u00a0 \u00a0 \u00a0 Logger.log(`Error adding reaction :${emoji}: &#8211; ${error.message}`);<\/div>\n<div>\u00a0 \u00a0 }<\/div>\n<div>\u00a0 \u00a0 \/\/ Slack\u306e\u30ec\u30fc\u30c8\u5236\u9650\u3092\u907f\u3051\u308b\u305f\u3081\u306b\u5c11\u3057\u5f85\u3064\uff080.5\u79d2\uff09<\/div>\n<div>\u00a0 \u00a0 Utilities.sleep(500);<\/div>\n<div>\u00a0 });<\/div>\n<div>}<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5f13\u4ef2\u7814\u7a76\u5ba4\u3067\u306f\u6599\u7406\u90e8\u3078\u306e\u51fa\u6b20\u306b\u3064\u3044\u3066\u3001\u81ea\u4f5cBOT\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\u3002 \u6280\u8853\u30b9\u30bf\u30c3\u30af\u3068\u3057\u3066\u306fGAS + Slack API\u3092\u4f7f\u3063\u3066\u307e\u3059\u3002 \u6bce\u9031\u6708\u66dc9\u6642\u306b\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u81ea\u52d5\u7684\u306b\u9001\u3089\u308c\u3066\u304d\u307e\u3059\u3002 GAS\u306fGoogle [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"_links":{"self":[{"href":"https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/index.php?rest_route=\/wp\/v2\/posts\/997"}],"collection":[{"href":"https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=997"}],"version-history":[{"count":8,"href":"https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/index.php?rest_route=\/wp\/v2\/posts\/997\/revisions"}],"predecessor-version":[{"id":1009,"href":"https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/index.php?rest_route=\/wp\/v2\/posts\/997\/revisions\/1009"}],"wp:attachment":[{"href":"https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=997"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=997"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yumilab.ei.st.gunma-u.ac.jp\/diary\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=997"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}