(下記は、質問のユースケースが「Line botとユーザーとのやりとりである」という前提です。
botから特定のユーザーに質問メッセージを送信
->メッセージを送られたユーザーがbotに対して当該質問に対する回答を送付する
というユースケースを想定しています)
ユーザーからbotに対してメッセージを送信したときはリプライトークンが付与されます。
このリプライトークンを使って、元のメッセージを送信したユーザーに対して、botからリプライを送ることができます。
しかし、botからユーザーへのリプライや、botからユーザーへのプッシュメッセージ自体には、前述のリプライトークンのようなメッセージの文脈を紐付けるものは存在しません。
このため、Line Messaging APIに用意された仕組みだけで「Aというメッセージを送信した結果、Bというメッセージが受信できた」といった使い方はできないようです。
(言い直すと、botからのメッセージAに対応する、ユーザからの回答Bを、Line Messaging APIに用意された仕組みだけで識別することはでききないように思われます)
したがって、下記のような対応になろうかと思います。
次のような構造のデータベースを用意しておく
ID | ユーザーID | 送信日時 | 受信日時 | 送信メッセージ | 回答メッセージ |
---|
| | | | | |
1.botからユーザーに対してメッセージを送信するとき、
データベースに、送信日時と送信先ユーザーID、ユーザーに送ったメッセージを記録する。
2.次にユーザーからメッセージが来たときに、データベースを調べる。
->当該ユーザーIDの一番直近の送信日時に該当するレコードの"受信日時"が空欄のときは、
自分(bot)が送信したメッセージに対応する応答であると判断する。
データベースに、受信日時とユーザーから受け取ったメッセージを記録する。
<具体例>
1.ユーザーが開始トリガーとなるキーワードをbotに送信
(開始トリガーキーワードが送られてきたときはデータベースに記録しない)
bot <-------「開始」--------- ユーザー
2.botはリプライトークンとユーザーIDを取得。
ユーザーに対して質問を送信
bot ----「今日は何時に起きた?」---> ユーザー
データベースに時刻とユーザIDと質問内容を記録
ID | ユーザーID | 送信日時 | 受信日時 | 送信メッセージ | 受信メッセージ |
---|
1 | U123456 | 18:00 | | 今日は何時に起きた? | |
3.ユーザーがbotに対して返信
bot <-------「6時だよ」--------- ユーザー
botはユーザーIDを取得
データベースから、該当するユーザーIDで、現在時刻に最も近い送信日時のレコードを探す。
->そのレコードの受信日時が空欄であれば、そのレコードの送信メッセージに対する回答であると判断し、
botに送られてきたメッセージテキストを、受信メッセージに記録する。
同時に受信日時も記録する。
ID | ユーザーID | 送信日時 | 受信日時 | 送信メッセージ | 受信メッセージ |
---|
1 | U123456 | 18:00 | 18:02 | 今日は何時に起きた? | 6時だよ |
このやり方を応用すれば、データベースから、「質問に対応する回答内容を振り分ける」ことができると思います。
一問一答ではなく会話を重ねていく場合、
たとえばデータベースに会話IDと継続回数カウンタを記録するカラムを追加しておき、
会話の都度、継続回数カウンタを1ずつ増やす、等のやり方が考えられます。