Line Message APIでユーザーに選択肢を提示する方法

Lineを使ってユーザーにサービスの説明を行う際に、
ユーザーがより詳しく知りたいことを選択肢の中から選んでもらい、
それに対しての回答を返却する機能の実現方法を検討しました。(2024.8)

目次

方法1 知りたい選択肢の番号をメッセージで送ってもらう

実現方法)
Message APIでメッセージを送信する
https://developers.line.biz/ja/reference/messaging-api/#send-reply-message

curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-H 'X-Line-Retry-Key: xxxxxx-xxxx-xxxx-xxxxx-6b5d467c8398' \
-d '{
"to": "{UserId}",
"messages":[
{
"type":"text",
"text":"サービスについて詳しく知りたい内容を選んでください。\n1.料金プランについて\n2.推奨環境について\n3.ログインパスワード忘れについて\n4.利用規約について\n5.解約方法について"
}
]
}'

ユーザーのメッセージ送信時のWebhookから入力値(“text”=>”1”)を取得し、対応する説明内容を送信する
Parameters: {"destination"=>"xxxxxxxxxxxxxxxxxxxxx", "events"=>[{"type"=>"message", "message"=>{"type"=>"text", "id"=>"523289927983562913", "quoteToken"=>"[FILTERED]", "text"=>"1"}, "webhookEventId"=>"01J694T1DSRDQ8AZ58KZW5T3MA", "deliveryContext"=>{"isRedelivery"=>false}, "timestamp"=>1724736406730, "source"=>{"type"=>"user", "userId"=>"{UserId}"}, "replyToken"=>"[FILTERED]", "mode"=>"active"}], "task"=>{}}

curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-H 'X-Line-Retry-Key: xxxxxx-xxxx-xxxx-xxxxx-6b5d467c8404' \
-d '{
"to": "{UserId}",
"messages":[
{
"type":"text",
"text":"1.料金プランについて\n 料金プランにはxとyとzがあり、それぞれ・・・です\n 詳しくは下記からご確認ください\n https://www.google.com/"
}
]
}'

メリット)
・最大5,000文字まで自由にメッセージを送信可能

デメリット)
・自由入力で回答してもらうので、ユーザビリティが良いわけではない
・FAQを大量に管理する場合、サーバーが受け取ったユーザーメッセージ内容に対してどの回答を返却すれば良いかの管理が煩雑になりそう

方法2 クイックリプライ機能を利用する

実現方法)
Message APIでクイックリプライつきのメッセージを送信する
https://developers.line.biz/ja/docs/messaging-api/using-quick-reply/

curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-H 'X-Line-Retry-Key: xxxxxx-xxxx-xxxx-xxxxx-6b5d467c8400' \
-d '{
"to": "{UserId}",
"messages":[
{
"type":"text",
"text":"サービスについて詳しく知りたい内容を選んでください。",
"quickReply": {
"items": [
{
"type": "action",
"action": {
"type": "message",
"label": "料金プランについて",
"text": "料金プランについて(ID: 1)"
}
},
{
"type": "action",
"action": {
"type": "message",
"label": "推奨環境について",
"text": "推奨環境について(ID: 2)"
}
},
{
"type": "action",
"action": {
"type": "message",
"label": "ログインパスワード忘れについて",
"text": "ログインパスワード忘れについて(ID: 3)"
}
},
{
"type": "action",
"action": {
"type": "message",
"label": "利用規約について",
"text": "利用規約について(ID: 4)"
}
},
{
"type": "action",
"action": {
"type": "message",
"label": "解約方法について",
"text": "解約方法について(ID: 5)"
}
}
]
}
}
]
}'

ユーザーのメッセージ送信時のWebhookからユーザーの入力値(“text”=>”料金プランについて(ID: 1)”)を取得し、対応する説明内容を送信する

Parameters: {"destination"=>"xxxxxxxxxxxxxxxxxxxxx", "events"=>[{"type"=>"message", "message"=>{"type"=>"text", "id"=>"523291230198300707", "quoteToken"=>"[FILTERED]", "text"=>"料金プランについて(ID: 1)"}, "webhookEventId"=>"01J695HQPT3KGFP8J7FYNQ95SP", "deliveryContext"=>{"isRedelivery"=>false}, "timestamp"=>1724737183045, "source"=>{"type"=>"user", "userId"=>"{UserId}"}, "replyToken"=>"[FILTERED]", "mode"=>"active"}], "task"=>{}}

curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-H 'X-Line-Retry-Key: xxxxxx-xxxx-xxxx-xxxxx-6b5d467c8404' \
-d '{
"to": "{UserId}",
"messages":[
{
"type":"text",
"text":"1.料金プランについて\n 料金プランにはxとyとzがあり、それぞれ・・・です\n 詳しくは下記からご確認ください\n https://www.google.com/"
}
]
}'

メリット)
・ユーザーが自由入力せずタップで選択肢を選べる
・選択肢リストを表示する際に画面の縦幅をとらない
・ユーザーが選択するボタンとサーバーへ送るメッセージを別で設定できるので、FAQを大量に管理する場合も、サーバーが受け取ったユーザーメッセージ内容に対してどの回答を返却すれば良いかの管理が簡単

デメリット)
・クイックリプライの選択肢の数と文字数に制限がある。(選択肢は最大13個、文字数は一つ当たり20文字)
・選択肢が多かったり、選択肢の文字数が多い場合に見ずらい可能性がある
・クイックリプライの選択肢はユーザーがいずれかのボタンをタップした場合や、トークルーム内で、誰かが新しいメッセージを送信した場合に消えてしまう
・ユーザーが後から見返した際に元の選択肢が見えないのでどんなやり取りがあったかわかりずらい可能性がある

方法3 カルーセルテンプレートを利用する

実現方法)
Message APIでカルーセルつきのメッセージを送信する
https://developers.line.biz/ja/reference/messaging-api/#carousel

curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-H 'X-Line-Retry-Key: xxxxxx-xxxx-xxxx-xxxxx-6b5d467c8402' \
-d '{
"to": "{UserId}",
"messages":[
{
"type": "template",
"altText": "this is a carousel message",
"template": {
"type": "carousel",
"columns": [
{
"text": "1.料金プランについて",
"defaultAction": {
"type": "postback",
"label": "確認する",
"data": "料金プランについて(ID: 1)"
},
"actions": [
{
"type": "postback",
"label": "確認する",
"data": "料金プランについて(ID: 1)"
}
]
},
{
"text": "2.推奨環境について",
"defaultAction": {
"type": "postback",
"label": "確認する",
"data": "推奨環境について(ID: 2)"
},
"actions": [
{
"type": "postback",
"label": "確認する",
"data": "推奨環境について(ID: 2)"
}
]
},
{
"text": "3.ログインパスワード忘れについて",
"defaultAction": {
"type": "postback",
"label": "確認する",
"data": "ログインパスワード忘れについて(ID: 3)"
},
"actions": [
{
"type": "postback",
"label": "確認する",
"data": "ログインパスワード忘れについて(ID: 3)"
}
]
},
{
"text": "4.利用規約について",
"defaultAction": {
"type": "postback",
"label": "確認する",
"data": "利用規約について(ID: 4)"
},
"actions": [
{
"type": "postback",
"label": "確認する",
"data": "利用規約について(ID: 4)"
}
]
},
{
"text": "5.解約方法について",
"defaultAction": {
"type": "postback",
"label": "確認する",
"data": "解約方法について(ID: 5)"
},
"actions": [
{
"type": "postback",
"label": "確認する",
"data": "解約方法について(ID: 5)"
}
]
}
],
"imageAspectRatio": "rectangle",
"imageSize": "cover"
}
}
]
}'

ユーザーのメッセージ送信時のWebhookからユーザーの入力値(“data”=>”料金プランについて(ID: 1)”)を取得し、対応する説明内容を送信する

Parameters: {"destination"=>"xxxxxxxxxxxxxxxxxxxxx", "events"=>[{"type"=>"postback", "postback"=>{"data"=>"料金プランについて(ID: 1)"}, "webhookEventId"=>"01J696TB7M68K5WG3658T6KP4M", "deliveryContext"=>{"isRedelivery"=>false}, "timestamp"=>1724738513663, "source"=>{"type"=>"user", "userId"=>"{UserId}"}, "replyToken"=>"[FILTERED]", "mode"=>"active"}], "task"=>{}}

curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-H 'X-Line-Retry-Key: xxxxxx-xxxx-xxxx-xxxxx-6b5d467c8404' \
-d '{
"to": "{UserId}",
"messages":[
{
"type":"text",
"text":"1.料金プランについて\n 料金プランにはxとyとzがあり、それぞれ・・・です\n 詳しくは下記からご確認ください\n https://www.google.com/"
}
]
}'

メリット)
・ユーザーが自由入力せずタップで選択肢を選べる
・選択肢リストを表示する際に画面の縦幅をとらない
・ユーザーが選択するボタンとサーバーへ送るメッセージを別で設定できるので、FAQを大量に管理する場合も、サーバーが受け取ったユーザーメッセージ内容に対してどの回答を返却すれば良いかの管理が簡単
・選択肢が消えずに画面に残るので何度でも利用可能

デメリット)
・選択肢の文字数が少ない場合、見た目に違和感がある可能性がある
・選択肢の数と文字数に制限がある。(選択肢は最大10個、文字数は画像の有無やタイトルの有無によって変わるが60-120)

まとめ

Line Message APIでユーザーに選択肢を提示する方法を3つ紹介しました。
各選択肢の数や文字数など、実際の状況に応じて使い分けても良さそうに思いました。

また、あくまで調査時の情報ですので実際に利用される際は公式ドキュメントを参照ください。
https://developers.line.biz/ja/docs/messaging-api/

役に立ったらシェアしていただけると嬉しいです
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次