回答編集履歴

4

誤字修正

2023/01/25 05:41

投稿

penguin520
penguin520

スコア345

test CHANGED
@@ -99,7 +99,7 @@
99
99
  }
100
100
  ```
101
101
  進捗:実装完了
102
- indexOf だとうまくいかず(こんにちわって言ってるのに倍返ししてくる)。リファレンスをみると、indexOfは、何目に同じ文字が来ているかを探すもののようなので、mach()を使ったらうまくいきました。
102
+ indexOf だとうまくいかず(こんにちわって言ってるのに倍返ししてくる)。リファレンスをみると、indexOfは、何文字目に同じ文字が来ているかを探すもののようなので、mach()を使ったらうまくいきました。
103
103
  他、この回答のコメント欄にメッセージ差し上げます。
104
104
  ```GAS
105
105
  function doPost(e) {

3

完成しました。

2023/01/25 05:35

投稿

penguin520
penguin520

スコア345

test CHANGED
@@ -98,3 +98,51 @@
98
98
  return ContentService.createTextOutput(JSON.stringify({ 'content': 'post ok' })).setMimeType(ContentService.MimeType.JSON);
99
99
  }
100
100
  ```
101
+ 進捗:実装完了
102
+ indexOf だとうまくいかず(こんにちわって言ってるのに倍返ししてくる)。リファレンスをみると、indexOfは、何行目に同じ文字が来ているかを探すもののようなので、mach()を使ったらうまくいきました。
103
+ 他、この回答のコメント欄にメッセージ差し上げます。
104
+ ```GAS
105
+ function doPost(e) {
106
+ let replyToken = JSON.parse(e.postData.contents).events[0].replyToken; //replyToken取得
107
+ let replytext = JSON.parse(e.postData.contents).events[0].message.text;//送信されたメッセージを取得
108
+ if (typeof replyToken === 'undefined') {
109
+ return;
110
+ }
111
+
112
+ let url = 'https://api.line.me/v2/bot/message/reply';
113
+ let channelToken = '';//チャンネルトークンとかそのへん。
114
+
115
+ let sh = SpreadsheetApp.openById("").getSheetByName("シート1"); //変数shにスプレッドシートの場所を保存(本来letではなくconstにすべき)
116
+
117
+ let lastRow = sh.getLastRow(); //データーの最終行を取得
118
+ let list = sh.getRange(1, 1, lastRow, 2).getValues(); //データーを2次元配列で格納
119
+
120
+ for (let index = 0; index < list.length; index++) {
121
+ if (replytext.match(list[index][0])) {
122
+ replytext = list[index][1];
123
+ }
124
+
125
+ }
126
+
127
+
128
+ var messages = [{
129
+ 'type': 'text',
130
+ 'text': replytext,
131
+ }];
132
+
133
+ UrlFetchApp.fetch(url, {
134
+ 'headers': {
135
+ 'Content-Type': 'application/json; charset=UTF-8',
136
+ 'Authorization': 'Bearer ' + channelToken,
137
+ },
138
+ 'method': 'post',
139
+ 'payload': JSON.stringify({
140
+ 'replyToken': replyToken,
141
+ 'messages': messages,
142
+ }),
143
+ });
144
+ return ContentService.createTextOutput(JSON.stringify({ 'content': 'post ok' })).setMimeType(ContentService.MimeType.JSON);
145
+ }
146
+ ```
147
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-25/6a710a80-ad1a-408a-ba14-e790e9e8907a.jpeg)
148
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-25/7512a73e-86ed-49a6-bbe7-2ec4b86f4d90.jpeg)

2

進捗追記

2023/01/25 05:19

投稿

penguin520
penguin520

スコア345

test CHANGED
@@ -52,3 +52,49 @@
52
52
  replytext
53
53
  ```
54
54
  に、送信された文字列が落ちてきていることが確認できたため。 replytext の文章を、いまからスプレッドシートを比較して、それに応じて返答が変わるようにしていきます。
55
+
56
+ 追記:進捗
57
+ A列と同じ文言についてはB列の言葉で返答するように構築(ここまでは質問者さんも実装済み)
58
+ ```GAS
59
+ function doPost(e) {
60
+ let replyToken = JSON.parse(e.postData.contents).events[0].replyToken; //replyToken取得
61
+ let replytext = JSON.parse(e.postData.contents).events[0].message.text;//送信されたメッセージを取得
62
+ if (typeof replyToken === 'undefined') {
63
+ return;
64
+ }
65
+
66
+ let url = 'https://api.line.me/v2/bot/message/reply';
67
+ let channelToken = '';//チャンネルトークンとかそのへん。
68
+
69
+ let sh = SpreadsheetApp.openById("").getSheetByName("シート1"); //変数shにスプレッドシートの場所を保存(本来letではなくconstにすべき)
70
+
71
+ let lastRow = sh.getLastRow(); //データーの最終行を取得
72
+ let list = sh.getRange(1, 1, lastRow, 2).getValues(); //データーを2次元配列で格納
73
+
74
+ for (let index = 0; index < list.length; index++) {
75
+ if (replytext == list[index][0]) {
76
+ replytext = list[index][1];
77
+ }
78
+
79
+ }
80
+
81
+
82
+ var messages = [{
83
+ 'type': 'text',
84
+ 'text': replytext,
85
+ }];
86
+
87
+ UrlFetchApp.fetch(url, {
88
+ 'headers': {
89
+ 'Content-Type': 'application/json; charset=UTF-8',
90
+ 'Authorization': 'Bearer ' + channelToken,
91
+ },
92
+ 'method': 'post',
93
+ 'payload': JSON.stringify({
94
+ 'replyToken': replyToken,
95
+ 'messages': messages,
96
+ }),
97
+ });
98
+ return ContentService.createTextOutput(JSON.stringify({ 'content': 'post ok' })).setMimeType(ContentService.MimeType.JSON);
99
+ }
100
+ ```

1

実際に動くものを作りこんでいる進捗の報告

2023/01/25 04:47

投稿

penguin520
penguin520

スコア345

test CHANGED
@@ -13,3 +13,42 @@
13
13
  continue;
14
14
  ```
15
15
  では?
16
+
17
+ 追記:進捗
18
+ ご質問のコードでは、実行エラーになり。どの行で止まっているか判断つかないため。
19
+ https://first-contact.jp/blog/article/linebot/
20
+ こちらの情報を参考に1から作り直しています。
21
+ ```GAS
22
+ function doPost(e) {
23
+ var replyToken = JSON.parse(e.postData.contents).events[0].replyToken;
24
+ var replytext = JSON.parse(e.postData.contents).events[0].message.text;
25
+ if (typeof replyToken === 'undefined') {
26
+ return;
27
+ }
28
+
29
+ var url = 'https://api.line.me/v2/bot/message/reply';
30
+ var channelToken = '';
31
+
32
+ var messages = [{
33
+ 'type': 'text',
34
+ 'text': replytext,
35
+ }];
36
+
37
+ UrlFetchApp.fetch(url, {
38
+ 'headers': {
39
+ 'Content-Type': 'application/json; charset=UTF-8',
40
+ 'Authorization': 'Bearer ' + channelToken,
41
+ },
42
+ 'method': 'post',
43
+ 'payload': JSON.stringify({
44
+ 'replyToken': replyToken,
45
+ 'messages': messages,
46
+ }),
47
+ });
48
+ return ContentService.createTextOutput(JSON.stringify({ 'content': 'post ok' })).setMimeType(ContentService.MimeType.JSON);
49
+ ```
50
+ このコードで 変数
51
+ ```GAS
52
+ replytext
53
+ ```
54
+ に、送信された文字列が落ちてきていることが確認できたため。 replytext の文章を、いまからスプレッドシートを比較して、それに応じて返答が変わるようにしていきます。