【Day 12】Rich Menu 主选单

我们拿 YouBike 微笑单车 官方帐号为例。
红色框框我们都会称作为「主选单」,很多官方帐号都有(基本上应该是标配了吧~)

所以我们也不例外,来试试看自己写一个主选单吧~!

主选单 Rich Menu

也是废话不多说,先送上官网传送门

官网部分对 Rich Menu 主选单的解释:

客制一个表单(或主选单)显示在您的 Line 官方帐後聊天室版面。更多讯息请看Using rich menus

rich_menu.py

主选单建议在另一个 python 档去撰写执行,因为他并不是一个需要一直 call request 的东西。

步骤一

只要 import 两个东西

import requests
import json

接着我们要使用好几天以前的东西 token,我们需要 Channel access token (long-lived)

import requests
import json

LINE_CHANNEL_ACCESS_TOKEN = 'UmN0XsFJwcHP8lL7cPrvu30LXwqhMfni5+cTHdjrHKfOGW3DdgNh04ZmflN74CzwyhcRqiDCSzbnGDXhKxRwzXeYmO/1ELsnZFZnKJneME5cWq+hmbUjCongPvcsaSVOI1Ml6KfKoHybjIGM67pFXQdB04t89/1O/w1cDnyilFU='

token = LINE_CHANNEL_ACCESS_TOKEN

Authorization_token = "Bearer " + LINE_CHANNEL_ACCESS_TOKEN

headers = {"Authorization":Authorization_token, "Content-Type":"application/json"}

body = {
    "size": {"width": 2500, "height": 1686},
    "selected": "false",
    "name": "Menu",
    "chatBarText": "更多资讯",
    "areas":[
        {
          "bounds": {"x": 113, "y": 45, "width": 1036, "height": 762},
          "action": {"type": "message", "text": "身体资讯"}
        },
        {
          "bounds": {"x": 1321, "y": 45, "width": 1036, "height": 762},
          "action": {"type": "message", "text": "营养素"}
        },
        {
          "bounds": {"x": 113, "y": 910, "width": 1036, "height": 762},
          "action": {"type": "message", "text": "吃"}
        },
        {
          "bounds": {"x": 1321, "y": 910, "width": 1036, "height": 762},
          "action": {"type": "message", "text": "运动gogo"}
        }
    ]
  }

req = requests.request('POST', 'https://api.line.me/v2/bot/richmenu',
                       headers=headers,data=json.dumps(body).encode('utf-8'))

print(req.text)

我们此时 print 出来的值为:

D:\anaconda3\python.exe F:/AI/Line_Chatbot/django_chatbot/django_chatbot/rich_menu.py
{"richMenuId":"richmenu-一串数字"}

richmenu-一串数字
这是我们的 rich menu 的 ID,要记住!!

得到我们要的 ID 以後,上面 body 部分就不是重点,也只需要执行这一次。(注解掉注解掉)

步骤二

from linebot import (
    LineBotApi, WebhookHandler
)

line_bot_api = LineBotApi(token)
rich_menu_id = "Rich Menu ID" # 设定成我们的 Rich Menu ID

path = "path of your image" # 主选单的照片路径

with open(path, 'rb') as f:
    line_bot_api.set_rich_menu_image(rich_menu_id, "image/png", f)

要注意,图片也只要设定一次就好,要不然会出现 error

步骤三

req = requests.request('POST', 'https://api.line.me/v2/bot/user/all/richmenu/'+rich_menu_id,
                       headers=headers)
print(req.text)

rich_menu_list = line_bot_api.get_rich_menu_list()

把他家进我们的 chatbot 里
print()出来的结果会是空的~是正常的。

跑完这一区以後,就可以执行了专案了!

可以看到主选单跑出来罗~~(洒花

小结

我们重新看一下程序码

import requests
import json

# ====================================================
'''
这区不能删掉
'''

token = 'mxJdY40QwXP/pQR6Vilr8J7fBdsLD9E6whHFlUL0Z+XC5BtQtRI1ZKBg/PTpnTYSINtaFnMEcwu7ZKnHjrFnI4mcRnHMr3bwpq9xuBruXPnQRktRkwtTZESrRieAmVW0Rn/NxuQfWNTaKwhxSfgXqgdB04t89/1O/w1cDnyilFU='

headers = {"Authorization":"Bearer mxJdY40QwXP/pQR6Vilr8J7fBdsLD9E6whHFlUL0Z+XC5BtQtRI1ZKBg/PTpnTYSINtaFnMEcwu7ZKnHjrFnI4mcRnHMr3bwpq9xuBruXPnQRktRkwtTZESrRieAmVW0Rn/NxuQfWNTaKwhxSfgXqgdB04t89/1O/w1cDnyilFU=" , "Content-Type":"application/json"}

# ====================================================
'''
Step 1 : 设定一次就可以注解掉了
'''

body = {
    "size": {"width": 2500, "height": 1686},
    "selected": "false",
    "name": "Menu",
    "chatBarText": "更多资讯",
    "areas":[
        {
          "bounds": {"x": 113, "y": 45, "width": 1036, "height": 762},
          "action": {"type": "message", "text": "身体资讯"}
        },
        {
          "bounds": {"x": 1321, "y": 45, "width": 1036, "height": 762},
          "action": {"type": "message", "text": "营养素"}
        },
        {
          "bounds": {"x": 113, "y": 910, "width": 1036, "height": 762},
          "action": {"type": "message", "text": "吃"}
        },
        {
          "bounds": {"x": 1321, "y": 910, "width": 1036, "height": 762},
          "action": {"type": "message", "text": "运动gogo"}
        }
    ]
  }

req = requests.request('POST', 'https://api.line.me/v2/bot/richmenu',
                       headers=headers,data=json.dumps(body).encode('utf-8'))

print(req.text)
# 在这里要记起 rich_menu_id


# ====================================================
'''
Step 2 : import 要的东西
这段也不能删掉
'''
from linebot import (
    LineBotApi, WebhookHandler
)

line_bot_api = LineBotApi(token)
rich_menu_id = 'rich_menu_id'

# ====================================================

"""
设定照片,只能直行过一次
"""
path = r'F:\AI\Line_Chatbot\NutritionBot\menu.jpg'

with open(path, 'rb') as f:
    line_bot_api.set_rich_menu_image(rich_menu_id, "image/png", f)
    
# ====================================================


req = requests.request('POST', 'https://api.line.me/v2/bot/user/all/richmenu/'+rich_menu_id,
                       headers=headers)
print(req.text)

rich_menu_list = line_bot_api.get_rich_menu_list()


# ====================================================
"""
上面要重新设定的话要把 ID 删掉重来
"""

# line_bot_api.delete_rich_menu(rich_menu_id)

<<:  Day 27. Hashicorp Vault: Install Vault on Kubernetes

>>:  .NET Core第24天_LinkTagHelper的使用

linebot 结合网路爬虫

linebot 结合网路爬虫 讲解完网路爬虫的实际应用後,接下来将他跟 Line chatbot 进...

Day 9 python函式

今天我们要介绍的是python的函式,所谓的函式就是指当我们需要做到重复的动作时可以使用函式来简化程...

Day 07 : MLOps 的挑战与技术要求

在 Day 06 引用与介绍 3 个 MLOps 相关定义,如果 MLOps 是一种工程文化与实践,...

Stream Processing (1-1) - Transmitting Event Streams

Transmitting Event Streams 最後一个章节是 串流处理 (stream pr...

[Day30] -- 完赛

这次的铁人赛进入了最後一天,感谢夥伴们彼此的扶持,也感谢没有放弃的自己。这次的DRF系列文章希望能帮...