質問編集履歴

2

頂いたコメントをきっかけに進展があったためその内容の追記

2020/10/21 01:09

投稿

tatatace
tatatace

スコア2

test CHANGED
@@ -1 +1 @@
1
- GASを使用したLineBotを作成しています。doPost(e)とUrlFetchApp.fetch仕様についてからないことがありま
1
+ GASを使用したLineBotを作成しています。対話型処理の進捗を管理したい(ステータス管理?)のですが方法がわりません
test CHANGED
@@ -91,3 +91,55 @@
91
91
  お付き合い頂ける方がいらっしゃいましたらお力添えを頂ければ幸いです。
92
92
 
93
93
  よろしくお願いいたします。
94
+
95
+
96
+
97
+ ### 追記 : 2020/10/21時点進捗
98
+
99
+ ```
100
+
101
+ LINE BOT側が状態を維持しなければならないので、セッション(のようなもの)を管理しなければならないのだと思います。
102
+
103
+ 「LINEBOT セッション」などと検索すると関連する話題がヒットします。
104
+
105
+ そういったものを調べ、必要であれば質問内容を更新するか、引き続き有識者からの回答をお待ちください。
106
+
107
+ (当方で検証できる環境にはないので以上、コメントのみです)
108
+
109
+ ```
110
+
111
+ dodox86様より、以上のコメントを頂いたので、早速「LINEBOT セッション」で検索した結果、以下の有益な記事を発見することができました。
112
+
113
+ コメントありがとうございました。
114
+
115
+ ```
116
+
117
+ LINEBOTで会話のステータス(文脈)管理(セッション管理?)
118
+
119
+ https://qiita.com/shima-218/items/643406e5a8c0ed3b2176
120
+
121
+
122
+
123
+ ```
124
+
125
+ 記事内のコードにjavaが使用されていること、私にjavaの知識とプログラミング知識が欠如していることから、残念ながら記事内容の完璧な理解には及びませんでした。
126
+
127
+ 検索エンジンを駆使してらこの記事内の内容を解読した結果、どうやらHashMapクラス、連想配列というものを使用して、UserIdと処理の進行具合を紐づけることで"セッション(のようなもの)"を管理し、If式で進行度による処理分岐を行っているという暫定解釈になりました。
128
+
129
+
130
+
131
+ 連想配列の状態をLineBot側に維持させる方法はよくわかっていません。
132
+
133
+ ユーザが"水を注文"と送信したら連想配列に送信者のUserIdと水を注文しようとしているという進捗を保存し、"お水ですね。軟水にしますか?硬水にしますか?"とメッセージを送る処理をした後、いったんfunction doPost(e)を終了させて、ユーザから軟水か硬水かのレスポンスがあった時、改めてfunction doPost(e)が作動するわけですが、一回目のfunction doPost(e)処理で連想配列に情報を格納させた後、function doPost(e)を終了させた時点で連想配列の内容がクリアされてしまうように思います。これを維持させる方法を記事から読み解くことが現状できていません。
134
+
135
+
136
+
137
+ 連想配列はよくわからないので、スプレッドシートにUserIdと処理の進捗を保存するシートを作ってそこにIdと進捗を保存しておいて、ユーザのレスポンスがあったときにスプレッドシートの内容を読み取って処理を分岐するという妥協策を検討しています。
138
+
139
+ このLineBotは完成後50名前後の程度のユーザーが毎日利用する予定なのですが、このような処理でも問題ないでしょうか?セルに書き込んだり読み込んだりする処理は負荷が高く不安定になるという話を聞くのでこれでいいのか疑問です。
140
+
141
+
142
+
143
+ 連想配列を使った処理の勉強と妥協案の模索は平行して現在も続行しております。
144
+
145
+ この質問を見られた方で協力いただける方いらっしゃいましたらご助力いただければ幸いです。

1

軽微な書式改善

2020/10/21 01:09

投稿

tatatace
tatatace

スコア2

test CHANGED
File without changes
test CHANGED
@@ -74,7 +74,7 @@
74
74
 
75
75
 
76
76
 
77
- "お水ですね。軟水にしますか?硬水にしますか?"と尋ねた後、ユーザからレスポンスがあるまで入力待ちし、コードの進行を一旦止めて入力があった場合IF式で条件分岐→一定時間入力がなかった場合処理を終了する。といった構造にするのかなと勝手に想像しているのですが如何せん処理が複雑になりすぎる気がします。
77
+ "お水ですね。軟水にしますか?硬水にしますか?"と尋ねた後、ユーザからレスポンスがあるまで入力待ちし、コードの進行を一旦止めて入力があった場合IF式で条件分岐 一定時間入力がなかった場合処理を終了する。といった構造にするのかなと勝手に想像しているのですが如何せん処理が複雑になりすぎる気がします。
78
78
 
79
79
 
80
80