用 Python 畅玩 Line bot - 05:MessageEvent

除了文字讯息以外, Line 还有很多种讯息型态可以传送,例如图片,音档,贴图......。
我们可以用上次的程式码,做一点修改,来让我们可以看看不同的讯息型态会分别传来怎样的资讯。

@handler.add(MessageEvent, message=TextMessage)def handle_message(event):    line_bot_api.reply_message(        event.reply_token,        TextSendMessage(text=event.message.text))

上次的程式码在接收到 MessageEvent 的时候,限制了只有接收到文字讯息才会继续执行后续的函式,而我们这次想要看看其他种类的讯息,所以可以先将 message=TextMessage给删除,并将回复讯息的部分删掉,增加print(event)来查看接收的资讯。

@handler.add(MessageEvent)def handle_message(event):    print(event)

再来我们就可以尝试看看传送各种类型的讯息了。

Image
{"message":     {    "contentProvider":         {        "type": "line"        },     "id": "14885593584822",    "type": "image"    },   "mode": "active",   "replyToken": "cc8568ac32484efa8a0d44e6d64a1f43",   "source":       {      "type": "user",       "userId": "Ub8c776653b3d290b3c3f9d1b9c852cb9"      },  "timestamp": 1633783269252,   "type": "message"}

可以看到跟 text message 相比,他多了一个 contentProvider 并且少了 text 的内容,这是因为他不是直接将整张图片传送给你,而是透过给你一组 id 去找到对应的图片。如果我们想要取得这张图片的资讯,可以使line_bot_api.get_message_content(event.message.id),此部分的应用会在后续再做介绍。

audio
{"message":     {    "contentProvider":         {        "type": "line"        },     "duration": 1617,     "id": "14885654988537",     "type": "audio"    }, "mode": "active", "replyToken": "7de6eb26c06041da9911d4bb186e4841", "source":     {    "type": "user",     "userId": "Ub8c776653b3d290b3c3f9d1b9c852cb9"    }, "timestamp": 1633784023730, "type": "message"}

跟 image message 相比,audio message 又多了一个 duration,代表该音讯的时间长度(ms),而 Line 传送时所使用的副档名是 m4a

video
{"message":     {    "contentProvider":         {        "type": "line"        },     "duration": 3247,     "id": "14885666798843",     "type": "video"    },"mode": "active", "replyToken": "7de6eb26c06041da9911d4bb186e4841", "source":  { "type": "user",  "userId": "Ub8c776653b3d290b3c3f9d1b9c852cb9" }, "timestamp": 1633784023730, "type": "message"}

video message 接收到的资讯格式是跟 audio message 格式一致的

file
{"message":     {    "fileName": "\u795e\u8e5f(1~5\u5377).docx",     "fileSize": 979763,     "id": "14885677207783",     "type": "file"    }, "mode": "active", "replyToken": "7de6eb26c06041da9911d4bb186e4841", "source":  { "type": "user",  "userId": "Ub8c776653b3d290b3c3f9d1b9c852cb9" }, "timestamp": 1633784023730, "type": "message"}

file message 比较特别的是,他是从 keep 上选取文件档或是音档所寄出的格式,你无法直接从电脑中拉一个 docx 档案到 line bot 去寄送,或是从传送档案的选项去找到 docx 档案去寄送,会发现找不到。不过这点确切原因是为什么暂时还不确定。
而他会给出的资讯是档案名称、大小以及对应的 id。

location
{"message":     {    "address": "你所分享的地址",     "id": "14885779817072",     "latitude": 24.985464,     "longitude": 121.427829,     "type": "location"    }, "mode": "active", "replyToken": "7de6eb26c06041da9911d4bb186e4841", "source":  { "type": "user",  "userId": "Ub8c776653b3d290b3c3f9d1b9c852cb9" }, "timestamp": 1633784023730, "type": "message"}

location message 可以取得使用者所传送的地址、经纬度资讯。

sticker
{"message":     {    "id": "14885788780170",    "keywords": ["Affirmative", "OK"],    "packageId": "1021884",    "stickerId": "949915",    "stickerResourceType": "STATIC",    "type": "sticker"    },"mode": "active", "replyToken": "7de6eb26c06041da9911d4bb186e4841", "source":  { "type": "user",  "userId": "Ub8c776653b3d290b3c3f9d1b9c852cb9" }, "timestamp": 1633784023730, "type": "message"}

sticker message 可以取得该贴图的各项 id、推荐贴图的关键字,贴图的类型(STATIC、POPUP_SOUND、ANIMATION、PER_STICKER_TEXT......)
如果要做贴图的回传,要注意的是只能够传送默认有的贴图,而不是有了 ID 后就可以任意的传送。
贴图列表可以参考这边。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章