Day 28 : 撰写LineBot,利用短短三天认识自动化机器人(中)

今天就来实际撰写LineBot罗~

我们要先下载必要套件,linebot-sdk以及flask。主要是用flask这种小型框架来做API串接:

pip install line-bot-sdk
pip install flask

再来建立一个app.py的档案,开始撰写程序,起手式先这样:

import os
from flask import Flask, request, abort
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import *

app = Flask(__name__)

line_bot_api = LineBotApi("")
handler = WebhookHandler("")

@ app.route("/callback", methods=['POST'])
def callback():
    # get X-Line-Signature header value
    signature = request.headers['X-Line-Signature']
    # get request body as text
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)
    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)
    return 'OK'

if __name__ == "__main__":
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

这个程序码的写法主要是flask框架的写法,前面先import套件并且设定程序进入点以及一些东西,再来我们在"/callback"这个子网页设定一些必要的东西,最後在5000port启动这个程序。

有看到WebhookHandler("")跟LineBotApi("")吗,这两个分别是放你频道的"身分证",Line要跟程序连结需要这两个东西才能知道要连到哪只Linebot,这个部分可以从昨天的网站找到:

  • Channel access token:(选取自己的机器人→Messaging API→Channel access token)

没有的话记得按一下issue

  • Channel secret:(选取自己的机器人→Basic settings→Channel secret)
    https://ithelp.ithome.com.tw/upload/images/20211011/20138060do7D2lKE67.png
    https://ithelp.ithome.com.tw/upload/images/20211011/20138060UYDqDJeXbS.png
    把它们分别打入LineBotApi跟WebhookHandler里面。
    https://ithelp.ithome.com.tw/upload/images/20211011/20138060vsqifAOwjj.png
    再来我们先在程序码中增加这个函式:
@ handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    if event.message.text =='a':
        msg = (TextSendMessage(text='这是测试'))
        line_bot_api.reply_message(event.reply_token, msg)

TextMessage就是文字讯息的意思,这个部分专门传送文字讯息,图片等等的也可以参照官方文件做出类似的效果,这边先只讲文字的部分。

event.message.text就是这个事件的文字讯息,也就是使用者的输入,如果使用者输入a,我就将TextSendMessage(要传出的值)设定为'这是测试'并且保存到msg这个变数,再用line_bot_api.reply_message将这个变数的值发出去。这部分稍微理解後我们就可以来实际测试了,我们要让我们的程序到一个公开的网址上运作所以我们需要ngrok。

ngrok

ngrok是一个可以让内部网路与外部沟通的一个工具,这个东西可以将你电脑中的port给予一个网址去做连线。要使用这个服务要先去官网下载他们的程序:
https://ithelp.ithome.com.tw/upload/images/20211011/20138060pqauz9TmNM.png
https://ithelp.ithome.com.tw/upload/images/20211011/20138060LysB5c3NCe.png
登入帐号後就下载,解压缩就好了。应该会得到一个ngrok.exe的档案,把它丢到你的程序资料夹中。

再来就要来开port了!看了一下程序码撰写的是5000port,所以ngrok需要开5000port,我们先到程序资料夹中开启cmd(在箭头处输入cmd)。
https://ithelp.ithome.com.tw/upload/images/20211011/2013806002D3j5CDqT.png
https://ithelp.ithome.com.tw/upload/images/20211011/20138060CmDqFW3GbV.png
在cmd中输入python app.py(代表用python启动我们撰写的程序)。
https://ithelp.ithome.com.tw/upload/images/20211011/201380604jRRmS5wfV.png
这样就代表程序正在5000port执行罗!再来我们打开ngrok,输入ngrok http 5000(代表使用5000port做ngrok服务)。
https://ithelp.ithome.com.tw/upload/images/20211011/20138060q1F2S7k8Jm.png
https://ithelp.ithome.com.tw/upload/images/20211011/2013806028AEd6eAJb.png
Forwarding後面的网址就是他帮你开的网址,把这网址丢到Webhook URL:(自己的机器人→Messaging API→Webhook URL),点击Edit就能设定了,记得网址要是**https:**开头,而且因为我们刚刚设定在/callback下做事,所以我们要在网址後面加上/callback,然後将Use webhook打开,按下Verify测试,如果有出现下图的Success字样就是没有问题了。
https://ithelp.ithome.com.tw/upload/images/20211011/20138060t81acD7P6d.jpg
往上滑有个QRCode,可以先扫加入好友。然後我们往下滑到Auto-reply messages,点进Edit,把Greeting message改成Disabled,Webhooks确定要为Enabled,以防万一先把Auto-response改成Disabled(理论上没什麽差)。
https://ithelp.ithome.com.tw/upload/images/20211011/20138060V3LVb4dwZk.png
就可以去跟机器人私聊,发现他真的会回你话了!
https://ithelp.ithome.com.tw/upload/images/20211011/20138060cFXWdNK08J.png
明天就继续LineBot的部分吧,把我有用到的功能全部打上来做纪录。


<<:  Day 29 - 这个游戏制作人疯了吧

>>:  [Day 26] 实作-节庆详情页面

EP14 - 调整架构 EC2 与负载平衡器

昨天我们很有胆试的将 VPC 砍掉重建, 为的就是将网段重新安排, 但是还没处理好的部分, 则是 G...

Day 08 - Transduce II

review 上一篇介绍了 transduce 基本概念後,就可以知道 transduce 就是对资...

列举子目录所有档案Python os.walk + filter

如何列举子目录所有档案 ? + 条件搜寻 ? os.walk() 的用法厘清,记录一下体会心得,以下...

Day20 Anonymous page 与 RMAP

前言 昨天讲完了TLB 以及MMU两个与实体记忆体分配有关系的机制之後,今天要讲一个比较少人谈论,在...

[DAY26]资料库的CRUD

我这里用一点点SQL码教学大家可以在自己的表格上尝试 进入QUERY TOOL 存入资料(INSER...