回答編集履歴

2

Markdown崩れ修正

2022/03/13 01:55

投稿

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

1

MARKDOWN崩れ修正

2022/03/13 01:53

投稿

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