回答編集履歴

2

Markdown崩れ修正

2022/03/13 01:55

投稿

退会済みユーザー
test CHANGED
@@ -45,8 +45,7 @@
45
45
  データベースに時刻とユーザIDと質問内容を記録
46
46
  |ID|ユーザーID|送信日時|受信日時|送信メッセージ|受信メッセージ|
47
47
  |:--|:--|:--|:--|:--|:--|
48
- |1|U123456|18:00||今日は何時に起きた?||
48
+ |1|U123456|18:00| |今日は何時に起きた?||
49
-
50
49
 
51
50
  3.ユーザーがbotに対して返信
52
51
  bot  <-------「6時だよ」--------- ユーザー

1

MARKDOWN崩れ修正

2022/03/13 01:53

投稿

退会済みユーザー
test CHANGED
@@ -1,131 +1,68 @@
1
1
  (下記は、質問のユースケースが「Line botとユーザーとのやりとりである」という前提です。
2
-
3
2
  botから特定のユーザーに質問メッセージを送信
4
-
5
3
  ->メッセージを送られたユーザーがbotに対して当該質問に対する回答を送付する
6
-
7
4
  というユースケースを想定しています)
8
5
 
9
6
 
10
-
11
-
12
-
13
7
  ユーザーからbotに対してメッセージを送信したときはリプライトークンが付与されます。
14
-
15
8
  このリプライトークンを使って、元のメッセージを送信したユーザーに対して、botからリプライを送ることができます。
16
9
 
17
-
18
-
19
10
  しかし、botからユーザーへのリプライや、botからユーザーへのプッシュメッセージ自体には、前述のリプライトークンのようなメッセージの文脈を紐付けるものは存在しません。
20
-
21
11
  このため、Line Messaging APIに用意された仕組みだけで「Aというメッセージを送信した結果、Bというメッセージが受信できた」といった使い方はできないようです。
22
-
23
12
  (言い直すと、botからのメッセージAに対応する、ユーザからの回答Bを、Line Messaging APIに用意された仕組みだけで識別することはでききないように思われます)
24
-
25
-
26
13
 
27
14
  したがって、下記のような対応になろうかと思います。
28
15
 
29
-
30
-
31
16
  ---
32
-
33
-
34
17
 
35
18
  次のような構造のデータベースを用意しておく
36
19
 
37
20
  |ID|ユーザーID|送信日時|受信日時|送信メッセージ|回答メッセージ|
38
-
39
- |:--|:--:|--:|
21
+ |:--|:--:|--:|--:|--:|--:|
40
-
41
- ||||
22
+ ||||||
42
-
43
23
 
44
24
 
45
25
  1.botからユーザーに対してメッセージを送信するとき、
46
-
47
26
  データベースに、送信日時と送信先ユーザーID、ユーザーに送ったメッセージを記録する。
48
27
 
49
28
 
50
-
51
-
52
-
53
29
  2.次にユーザーからメッセージが来たときに、データベースを調べる。
54
-
55
30
  ->当該ユーザーIDの一番直近の送信日時に該当するレコードの"受信日時"が空欄のときは、
56
-
57
31
  自分(bot)が送信したメッセージに対応する応答であると判断する。
58
-
59
32
  データベースに、受信日時とユーザーから受け取ったメッセージを記録する。
60
-
61
-
62
33
 
63
34
  ---
64
35
 
65
-
66
-
67
36
  <具体例>
68
-
69
37
  1.ユーザーが開始トリガーとなるキーワードをbotに送信
70
-
71
38
  (開始トリガーキーワードが送られてきたときはデータベースに記録しない)
72
-
73
39
  bot  <-------「開始」--------- ユーザー
74
40
 
75
-
76
-
77
41
  2.botはリプライトークンとユーザーIDを取得。
78
-
79
42
  ユーザーに対して質問を送信
80
-
81
43
  bot   ----「今日は何時に起きた?」---> ユーザー
82
44
 
83
-
84
-
85
45
  データベースに時刻とユーザIDと質問内容を記録
86
-
87
46
  |ID|ユーザーID|送信日時|受信日時|送信メッセージ|受信メッセージ|
88
-
89
47
  |:--|:--|:--|:--|:--|:--|
90
-
91
48
  |1|U123456|18:00||今日は何時に起きた?||
92
49
 
93
50
 
94
-
95
-
96
-
97
51
  3.ユーザーがbotに対して返信
98
-
99
52
  bot  <-------「6時だよ」--------- ユーザー
100
-
101
53
  botはユーザーIDを取得
102
-
103
54
  データベースから、該当するユーザーIDで、現在時刻に最も近い送信日時のレコードを探す。
104
-
105
55
  ->そのレコードの受信日時が空欄であれば、そのレコードの送信メッセージに対する回答であると判断し、
106
-
107
56
  botに送られてきたメッセージテキストを、受信メッセージに記録する。
108
-
109
57
  同時に受信日時も記録する。
110
-
111
58
  |ID|ユーザーID|送信日時|受信日時|送信メッセージ|受信メッセージ|
112
-
113
59
  |:--|:--|:--|:--|:--|:--|
114
-
115
60
  |1|U123456|18:00|**18:02**|今日は何時に起きた?|**6時だよ**|
116
-
117
-
118
61
 
119
62
  ---
120
63
 
121
-
122
-
123
64
  このやり方を応用すれば、データベースから、「質問に対応する回答内容を振り分ける」ことができると思います。
124
65
 
125
-
126
-
127
66
  一問一答ではなく会話を重ねていく場合、
128
-
129
67
  たとえばデータベースに会話IDと継続回数カウンタを記録するカラムを追加しておき、
130
-
131
68
  会話の都度、継続回数カウンタを1ずつ増やす、等のやり方が考えられます。