質問編集履歴

2

プログラム内容の修正

2021/01/09 02:01

投稿

NKKSM
NKKSM

スコア0

test CHANGED
File without changes
test CHANGED
@@ -110,7 +110,7 @@
110
110
 
111
111
  function follow(e) {
112
112
 
113
- var spreadsheet = SpreadsheetApp.openById('1KYouLNOTvri4hmIUTerTQm5rfNCWp_8SzeJ5UljdczU'); //スプレッドシートの指定
113
+ var spreadsheet = SpreadsheetApp.openById('正しいSpreadsheetのIDを入力済み'); //スプレッドシートの指定
114
114
 
115
115
  var sheet = spreadsheet.getActiveSheet(); //シートを取得する
116
116
 
@@ -122,7 +122,7 @@
122
122
 
123
123
  function unFollow(e){
124
124
 
125
- var spreadsheet = SpreadsheetApp.openById('1KYouLNOTvri4hmIUTerTQm5rfNCWp_8SzeJ5UljdczU');
125
+ var spreadsheet = SpreadsheetApp.openById('正しいSpreadsheetのIDを入力済み');
126
126
 
127
127
  var sheet = spreadsheet.getActiveSheet();
128
128
 
@@ -212,7 +212,7 @@
212
212
 
213
213
  function push(message) {
214
214
 
215
- var spreadsheet = SpreadsheetApp.openById('SpreadsheetのIDを指定'); //スプレッドシートを取得
215
+ var spreadsheet = SpreadsheetApp.openById('正しいSpreadsheetのIDを入力済み'); //スプレッドシートを取得
216
216
 
217
217
  var sheet = spreadsheet.getActiveSheet(); //シートを取得
218
218
 

1

プログラム内容の追加

2021/01/09 02:01

投稿

NKKSM
NKKSM

スコア0

test CHANGED
File without changes
test CHANGED
@@ -26,14 +26,24 @@
26
26
 
27
27
  ```Python
28
28
 
29
- ```
30
-
31
29
  url = "https://script.google.com/macros/s/AKfycbx3zWRGcvUi0qs8vtiIbZ8e3ZTh2jghCfzt3cFfrawG1XHAcQ/exec?message=exit"
32
30
 
33
31
  result = requests.get(url)
34
32
 
35
33
  ```
36
34
 
35
+ Getリクエストを受け取った時のGAS側のコードは以下の通りです.
36
+
37
+ ```
38
+
39
+ function doGet(e) {
40
+
41
+ push(e.parameter.message)
42
+
43
+ }
44
+
45
+ ```
46
+
37
47
 
38
48
 
39
49
  ### 試したこと
@@ -57,3 +67,209 @@
57
67
 
58
68
 
59
69
  各モジュールを最新版にアップデート,PC自体の再起動なども行いましたが結果は変わりませんでした.
70
+
71
+ ###参考までにGAS側のプログラム
72
+
73
+ https://www.takeiho.com/line-bot-push
74
+
75
+ こちらのサイトを参考にさせていただきました.
76
+
77
+ ```
78
+
79
+ var channel_access_token = "{正しいアクセストークンを入力しています}"
80
+
81
+ // ボットにメッセージ送信/フォロー/アンフォローした時の処理
82
+
83
+ function doPost(e) {
84
+
85
+ var events = JSON.parse(e.postData.contents).events;
86
+
87
+ events.forEach(function(event) {
88
+
89
+ if(event.type == "message") {
90
+
91
+ reply(event);
92
+
93
+ } else if(event.type == "follow") {
94
+
95
+ follow(event);
96
+
97
+ } else if(event.type == "unfollow") {
98
+
99
+ unFollow(event);
100
+
101
+ }
102
+
103
+ });
104
+
105
+ }
106
+
107
+
108
+
109
+ /* 友達追加されたらユーザーIDを登録する */
110
+
111
+ function follow(e) {
112
+
113
+ var spreadsheet = SpreadsheetApp.openById('1KYouLNOTvri4hmIUTerTQm5rfNCWp_8SzeJ5UljdczU'); //スプレッドシートの指定
114
+
115
+ var sheet = spreadsheet.getActiveSheet(); //シートを取得する
116
+
117
+ sheet.appendRow([e.source.userId]); //ユーザーIDをシートに追加する
118
+
119
+ }
120
+
121
+ /* アンフォローされたら削除する */
122
+
123
+ function unFollow(e){
124
+
125
+ var spreadsheet = SpreadsheetApp.openById('1KYouLNOTvri4hmIUTerTQm5rfNCWp_8SzeJ5UljdczU');
126
+
127
+ var sheet = spreadsheet.getActiveSheet();
128
+
129
+ var result = findRow(sheet, e.source.userId, 1);
130
+
131
+ if(result > 0){
132
+
133
+ sheet.deleteRows(result);
134
+
135
+ }
136
+
137
+ }
138
+
139
+
140
+
141
+ function findRow(sheet,val,col){
142
+
143
+ var data = sheet.getDataRange().getValues();
144
+
145
+ for(var i=0; i < data.length; i++){
146
+
147
+ if(data[i][col-1] === val){
148
+
149
+ return i+1;
150
+
151
+ }
152
+
153
+ }
154
+
155
+ return 0;
156
+
157
+ }
158
+
159
+
160
+
161
+ // 入力されたメッセージをおうむ返し
162
+
163
+ function reply(e) {
164
+
165
+ //返信先のデータ及び返信メッセージの指定
166
+
167
+ var message = {
168
+
169
+ "replyToken" : e.replyToken,
170
+
171
+ "messages" : [
172
+
173
+ {
174
+
175
+ "type" : "text",
176
+
177
+ "text" : ((e.message.type=="text") ? e.message.text : "Text以外は返せません・・・")
178
+
179
+ }
180
+
181
+ ]
182
+
183
+ };
184
+
185
+
186
+
187
+ //情報を詰めて、エンドポイントを蹴飛ばす
188
+
189
+ var replyData = {
190
+
191
+ "method" : "post",
192
+
193
+ "headers" : {
194
+
195
+ "Content-Type" : "application/json",
196
+
197
+ "Authorization" : "Bearer " + channel_access_token
198
+
199
+ },
200
+
201
+ "payload" : JSON.stringify(message)
202
+
203
+ };
204
+
205
+ UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", replyData);
206
+
207
+ }
208
+
209
+
210
+
211
+ //スプレッドシートからユーザーを配列で取得してメッセージを送信
212
+
213
+ function push(message) {
214
+
215
+ var spreadsheet = SpreadsheetApp.openById('SpreadsheetのIDを指定'); //スプレッドシートを取得
216
+
217
+ var sheet = spreadsheet.getActiveSheet(); //シートを取得
218
+
219
+ var data = sheet.getDataRange().getValues(); //シートに記載されている値を全て取得
220
+
221
+ var userlist = []; //型を整えるためにuserlistを作成し値を詰める
222
+
223
+ for(var i=0; i < data.length; i++){
224
+
225
+ userlist.push(data[i][0]);
226
+
227
+ }
228
+
229
+ var postData = {
230
+
231
+ "to" : userlist, //ここに取得したユーザーIDの配列を指定する
232
+
233
+ "messages" : [
234
+
235
+ {
236
+
237
+ "type" : "text",
238
+
239
+ "text" : message
240
+
241
+ }
242
+
243
+ ]
244
+
245
+ };
246
+
247
+ var options_push = {
248
+
249
+ "method" : "post",
250
+
251
+ "headers" : {
252
+
253
+ "Content-Type" : "application/json",
254
+
255
+ "Authorization" : "Bearer " + channel_access_token
256
+
257
+ },
258
+
259
+ "payload" : JSON.stringify(postData)
260
+
261
+ };
262
+
263
+ UrlFetchApp.fetch("https://api.line.me/v2/bot/message/multicast", options_push);
264
+
265
+ }
266
+
267
+ //ボットの友達にPush通知する処理
268
+
269
+ function doGet(e) {
270
+
271
+ push(e.parameter.message)
272
+
273
+ }
274
+
275
+ ```