除了文字讯息以外, 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)
,此部分的应用会在后续再做介绍。
{"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。
{"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 后就可以任意的传送。
贴图列表可以参考这边。