123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- import copy
- import fastapi
- import fastapi.staticfiles as fastapiStaticfiles
- import linebot
- import linebot.models as linebotModels
- from linebot.models import (
- MessageEvent, TextMessage, TextSendMessage,
- SourceUser, SourceGroup, SourceRoom,
- TemplateSendMessage, ConfirmTemplate, MessageAction,
- ButtonsTemplate, ImageCarouselTemplate, ImageCarouselColumn, URIAction,
- PostbackAction, DatetimePickerAction,
- CameraAction, CameraRollAction, LocationAction,
- CarouselTemplate, CarouselColumn, PostbackEvent,
- StickerMessage, StickerSendMessage, LocationMessage, LocationSendMessage,
- ImageMessage, VideoMessage, AudioMessage, FileMessage,
- UnfollowEvent, FollowEvent, JoinEvent, LeaveEvent, BeaconEvent,
- MemberJoinedEvent, MemberLeftEvent,
- FlexSendMessage, BubbleContainer, ImageComponent, BoxComponent,
- TextComponent, IconComponent, ButtonComponent, MessageTemplateAction,
- SeparatorComponent, QuickReply, QuickReplyButton,URITemplateAction,
- ImageSendMessage)
- #uvicorn main:app --host 0.0.0.0 --port 443 --ssl-keyfile=/etc/letsencrypt/live/cal.ptt.cx/privkey.pem --ssl-certfile=/etc/letsencrypt/live/cal.ptt.cx/fullchain.pem
- #uvicorn main:app --host 0.0.0.0 --port 443 --ssl-keyfile=/etc/letsencrypt/live/ptt.cx/privkey.pem --ssl-certfile=/etc/letsencrypt/live/ptt.cx/chain.pem
- #uvicorn main:app --host 0.0.0.0 --port 443 --key-file=/etc/letsencrypt/live/ptt.cx/privkey.pem --certfile=/etc/letsencrypt/live/ptt.cx/cert.pem
- # --keyfile=./key.pem --certfile=./cert.pem
- # --ssl-cert-reqs 1
- #
- # --ssl-ca-certs=/etc/letsencrypt/live/ptt.cx/fullchain.crt
- app = fastapi.FastAPI()
- app.mount(
- '/static', fastapiStaticfiles.StaticFiles(directory='static'), name='static')
- from linebot import (
- LineBotApi, WebhookHandler
- )
- from linebot.exceptions import (
- InvalidSignatureError
- )
- from linebot.models import (
- MessageEvent, TextMessage,ImageSendMessage, TextSendMessage,FlexSendMessage, TemplateSendMessage,CarouselTemplate,ConfirmTemplate,PostbackAction,MessageAction,CarouselColumn,URIAction
- )
- import json
- import codecs
- line_bot_api = LineBotApi('FvP2AkKj3FSuTjY8Jhwn23DPIb38yDZBliLrDjRA8j+UOQPku+kH2Bz2coDFl4gruRAiLuHuBbtRpILXlN54zJ+bWF5IwU86FClG47VZxCcDcAkhwqCqjYi/Ju7dBzlg963d9CV1KiiBwoiqvV6J7AdB04t89/1O/w1cDnyilFU=')
- handler = WebhookHandler('58a73d69c3ad6416e0b465e64c30526a')
- #line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
- #handler = WebhookHandler('YOUR_CHANNEL_SECRET')
- @app.get("/msg2/{item_id}")
- async def coffee_msg2(item_id):
- line_bot_api.push_message(item_id, TextSendMessage(text='Jared 測試....開啟下方完整券樣(密碼9888)至櫃台掃碼兌換。https://txp.rs/v/EvX69b4Xq9'))
- line_bot_api.push_message(item_id, ImageSendMessage('https://cal.ptt.cx:5443/static/images/finalcoupon.png', 'https://cal.ptt.cx:5443/static/images/finalcoupon.png') )
- print('send images')
- return {"code":"ok" }
- @app.get("/msg/{item_id}")
- async def coffee_msg(item_id):
- line_bot_api.push_message(item_id, TextSendMessage(text='點選下方連結,輸入密碼9888,可直接至全省City Cafe (Logo)門市兌換。https://txp.rs/v/EvX69b4Xq9'))
- line_bot_api.push_message(item_id, ImageSendMessage('https://cal.ptt.cx:5443/static/images/finalcoupon.png', 'https://cal.ptt.cx:5443/static/images/finalcoupon.png') )
- print('send images')
- return {"code":"ok" }
- @app.post('/callback')
- async def callback(request: fastapi.Request):
- signature = request.headers['X-Line-Signature']
- body = await request.body()
- handler.handle(body.decode('utf-8'), signature)
- return 'OK'
- @handler.add(FollowEvent)
- def handle_follow(event):
- print("in Follow")
- print(event.source.user_id)
- button_template_message =ButtonsTemplate(
- thumbnail_image_url="https://cal.ptt.cx:5443/static/images/coupon.png",
- title='Menu',
- text='填裝修問卷💖,送City Cafe 乙杯及裝修折抵券五萬元!請務必填寫真實資訊。🌻',
- image_size="cover",
- actions=[
- URITemplateAction(
- label='點我填問卷',
- uri='http://q.ptt.cx/a1/index-line.html?userid='+event.source.user_id
- ),
- ]
- )
-
- line_bot_api.reply_message(
- event.reply_token,
- TemplateSendMessage(
- alt_text="Follow Event",
- template=button_template_message
- )
- )
- @handler.add(linebotModels.MessageEvent, message=linebotModels.TextMessage)
- def message_text(event):
- if event.message.text == 'push':
- line_bot_api.push_message(
- event.source.user_id, [
- TextSendMessage(text='PUSH!'),
- ]
- )
- if event.message.text == '叫':
- line_bot_api.reply_message(
- event.reply_token, linebotModels.AudioSendMessage(
- original_content_url=f'{baseUrl}/static/audio/noot_noot.mp3', duration=1000))
- if event.message.text=='ok':
- line_bot_api.reply_message(
- event.reply_token,
- TextSendMessage(text='ChoozMo 的FastAPI LINE Bot'))
- if event.message.text=='btn':
- line_bot_api.reply_message(
- event.reply_token,
- TextSendMessage(
- text='Quick reply',
- quick_reply=QuickReply(
- items=[
- QuickReplyButton(
- action=PostbackAction(label="label1", data="data1")
- ),
- QuickReplyButton(
- action=MessageAction(label="label2", text="text2")
- ),
- QuickReplyButton(
- action=DatetimePickerAction(label="label3",
- data="data3",
- mode="date")
- ),
- QuickReplyButton(
- action=CameraAction(label="label4")
- ),
- QuickReplyButton(
- action=CameraRollAction(label="label5")
- ),
- QuickReplyButton(
- action=LocationAction(label="label6")
- ),
- ])))
- #if __name__ == "__main__":
- # app.run(host='0.0.0.0', port=443,ssl_context=('/etc/letsencrypt/live/ptt.cx/fullchain.pem', '/etc/letsencrypt/live/ptt.cx/privkey.pem'))
- # app.run(host='0.0.0.0', port=14404,ssl_context=('/tmp/cert.pem','/tmp/chain.pem' ))
|