除了文字對談,Line Bot 還可回應圖片、貼圖、影片、聲音、位置、影像圖、模板選單等,更多的詳細的說明可洽 Line Bot官網 查詢。
以前一篇文章的 Line Bot 為基礎,加入圖片、貼圖、影片回應功能,藉由修改「handle_message」函數,添加處理接收到圖片、貼圖、影片的程式碼,如程如下功能。
- 圖片指令,回傳家扶娃娃照片。
- 貼圖指令,隨機回傳Line的貼圖。
- 影片指令,回傳海賊王片段影片。
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import *
import os
import numpy as np
app = Flask(__name__)
token = os.environ.get("CHANNEL_ACCESS_TOKEN")
secret= os.environ.get("CHANNEL_SECRET")
line_bot_api = LineBotApi(token)
handler = WebhookHandler(secret)
totalid = {
1:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,21,100,101,102,103,104,105,106,107,108,109,110,111,
112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,
135,136,137,138,139,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,
419,420,421,422,423,424,425,426,427,428,429,430],
2:[18,19,20,22,23,24,258,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,48,141,
142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,
165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,501,502,503,504,505,506,507,508,
509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527],
3:[180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,
203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,
226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,
249,250,251,252,253,254,255,256,257,258,259],
4:[260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,
283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,
306,307,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,
622,623,624,625,626,627,628,629,630,631,632]
}
@app.route('/callback', methods=['POST'])
def callback():
signature = request.headers['X-Line-Signature']
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
try:
handler.handle(body, signature)
except InvalidSignatureError:
print("Invalid signature. Please check your channel access token/channel secret.")
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
msg = event.message.text
print(msg)
if msg == "文字":
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text))
elif msg == "貼圖":
packageid = np.random.randint(1, 5)
stkpkgid = totalid[packageid]
stickerid = stkpkgid[np.random.randint(len(stkpkgid))]
line_bot_api.reply_message(event.reply_token, StickerSendMessage(package_id=packageid, sticker_id=stickerid))
elif msg == "圖片":
line_bot_api.reply_message(event.reply_token,ImageSendMessage(original_content_url='https://image.peoplenews.tw/news/e48b8810-3b75-46dc-8e00-b64945335bef.jpg', preview_image_url='https://image.peoplenews.tw/news/e48b8810-3b75-46dc-8e00-b64945335bef.jpg'))
elif msg == "影片":
line_bot_api.reply_message(event.reply_token,VideoSendMessage(original_content_url='https://video.ftpe3-2.fna.fbcdn.net/v/t42.9040-2/87072388_196826851385614_8294431350157475840_n.mp4?_nc_cat=107&_nc_sid=985c63&efg=eyJybHIiOjQ4NCwicmxhIjoxMTE2LCJ2ZW5jb2RlX3RhZyI6InN2ZV9zZCJ9&_nc_ohc=Dno5wcM5hCoAX9wNCXP&rl=484&vabr=269&_nc_ht=video.ftpe3-2.fna&oh=970be2c547d63b58d9eeeddb50798c78&oe=5E6677B1', preview_image_url='https://scontent.ftpe3-2.fna.fbcdn.net/v/t15.5256-10/p200x200/82227458_520753612181601_8138286452606763008_n.jpg?_nc_cat=101&_nc_sid=f2c4d5&_nc_ohc=lsC6y4SY6jEAX91aBTf&_nc_ht=scontent.ftpe3-2.fna&_nc_tp=6&oh=2b331d81175b9e740ca02479e5e21db0&oe=5E926DE0'))
else:
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text))
app.run(host='0.0.0.0', port=8080)
執行畫面:

沒有留言:
張貼留言