APIを使ったリッチメニュー切り替え挙動を調べる #LINE_API

はじめに

こんにちは、中村です。

本日Developers.IO CAFEでLINEボットでの注文機能がリリースされました。みなさまぜひご利用ください。
今回はリッチメニューAPIの挙動の確認です。トークの途中でリッチメニューを閉じたいというニーズがありそうです。APIを使いながら可能かどうか模索していきます。

トークの途中でリッチメニューを閉じる

チャネルについては適当に1つ作成し、アクセストークン(ロングターム)をメモしておいてください。
まずは、リッチメニューのリストを取得します。当たり前ですが、まだリッチメニューを設定していないので空かと思います。

$ curl -X GET https://api.line.me/v2/bot/richmenu/list -H 'Authorization: Bearer {channel access token}'
    
{"richmenus":[]}

それではリッチメニューを作成していきます。わかりやすいようにSample AとSample Bを用意しました。
画像は、

  • サイズ:2500x1686もしくは2500x843
  • フォーマット:JPEGまたはPNG
  • ファイルサイズ:1MBの制限があります。

リッチメニューを作成

$ curl -X POST https://api.line.me/v2/bot/richmenu \
    -H 'Authorization: Bearer {channel access token}' \
    -H 'Content-Type: application/json' \
    -d \
    '{
        "size": {
            "width": 2500,
            "height": 1686
        },
        "selected": true, //デフォルトで表示するかどうか
        "name": "Sample A",
        "chatBarText": "Sample Aです。", //メニューを表示・非表示を行うボタンへ表示するテキスト
        "areas": [
            {
                "bounds": {
                    "x": 0,
                    "y": 0,
                    "width": 2500,
                    "height": 1686
                },
                "action": {
                    "type": "message",
                    "text": "Sample A"
                }
            }
        ]
    }'

{"richMenuId":"richmenu-xxxxxxxxxxxxxxxxxxxxx"}

画像をアップロード

$ curl -X POST https://api.line.me/v2/bot/richmenu/richmenu-xxxxxxxxxxxxxxxxxxxxx/content \
    -H 'Authorization: Bearer {channel access token}' \
    -H 'Content-Type: image/jpeg' \
    -T image.jpg

{}

これで、リッチメニューと画像の紐付けが完了しました。ユーザーと紐づけることでチャネルに表示ができます。

ユーザーとリッチメニューを紐付け

$ curl -X POST https://api.line.me/v2/bot/user/xxxxxxxxxxxxxxxx/richmenu/richmenu-xxxxxxxxxxxxxxxxxxxxx \
    -H 'Authorization: Bearer {channel access token}'

{}

Sample Aの表示を確認できました!同じ要領で、Sample Bも作成します。

Sample Bを作成後、ユーザーとリッチメニューを紐付けを行うことで上書きができます。

selected属性を利用した設定

リッチメニューを作成するリクエストにselectedという属性があります。これは、デフォルトで表示するかどうかを制御しています。Sample Bのメニューのselectedをfalseにしてみました。しかし、表示されているママです。どうやらselectedでは制御できなさそうです。

リンクを解除・設定

ユーザーのリッチメニューを解除できます。削除した後に、リッチメニューを再度紐付けを行います。

$ curl -v -X DELETE https://api.line.me/v2/bot/user/xxxxxxxxxxxxxxxx/richmenu \
    -H 'Authorization: Bearer {channel access token}'

すると表示はされずにリッチメニューが紐付けられています。

これで、トークの途中でリッチメニューを閉じたいというニーズを満たせそうです。この機能を実装するためには、ユーザのリッチメニューのステータスを保持する必要があります。Dynamo DB等を利用して管理するのが良いでしょう。

まとめ

実際のニーズを考えてAPIで実装できるかどうか検討してみました。Developers.IO CAFEボットでも適用しよりよいUXにできればと思います。

チャットボット開発は弊社にご相談ください。

またAmazon Connectのキャンペーンを行なっております。こちらもご相談お待ちしております。