Day 04 实现Linebot回复讯息功能

建立Chatbot程序

在专案资料夹内右键开启VS Code
https://ithelp.ithome.com.tw/upload/images/20210904/20140165OdSTUv5Mmj.png
左边工作区右键新增档案
https://ithelp.ithome.com.tw/upload/images/20210904/20140165wO9ieSpKxF.png
将档案命名为app.py
这时会提示要不要安装Python延伸模组
这边按安装
https://ithelp.ithome.com.tw/upload/images/20210904/20140165PSfzp4dGf4.jpg
安装後点击Select a Python Interpreter Python直译器选择前面安装的Python版本
https://ithelp.ithome.com.tw/upload/images/20210904/20140165YsTZJkzaAx.png

在line-bot-sdk-python 的Github有范例程序
https://github.com/line/line-bot-sdk-python
後面将用这个程序打造成群组团购机器人
回到app.py档案,将下方程序码复制至app.py

from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

app = Flask(__name__)

line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_CHANNEL_SECRET')


@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:
        print("Invalid signature. Please check your channel access token/channel secret.")
        abort(400)

    return 'OK'


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


if __name__ == "__main__":
    app.run()

这边就会用到前面提到的Channel secret、access token

Channel secret

进到LINE频道网页,在Basic settings网页往下滚会看到你的Channel secret!https://ithelp.ithome.com.tw/upload/images/20210904/20140165LXhu9U3JvA.jpg
这边把你程序内单引号里YOUR_CHANNEL_SECRET替换成你的Channel secret

handler = WebhookHandler('YOUR_CHANNEL_SECRET')

CHANNEL_ACCESS_TOKEN

在Messaging API滚到底会看到你的Channel access token!
https://ithelp.ithome.com.tw/upload/images/20210904/20140165lCoTuXyKLU.jpg
同样把你程序内单引号里YOUR_CHANNEL_ACCESS_TOKEN替换成你的CHANNEL_ACCESS_TOKEN

line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')

执行程序

接着点右上在终端机中执行Python
https://ithelp.ithome.com.tw/upload/images/20210904/20140165SUcAHbAO1l.jpg
正常执行画面长这样
https://ithelp.ithome.com.tw/upload/images/20210904/20140165MATRS3aEtw.png

透过ngrok连接内网与网际网路,进行本地测试

右下新增一个命令提示字元视窗
https://ithelp.ithome.com.tw/upload/images/20210904/20140165ypmyzJHPG3.png
在命令提示字元中输入

ngrok http 5000

这个指令让外部网路也能拜访这个内网位址 http://127.0.0.1:5000
https://ithelp.ithome.com.tw/upload/images/20210904/20140165J5rVfJuExP.png
这时他会给你两个位址,这边会用到下面那个https的位址
这个位址时效是2小时,2小时後要再打一次指令产生新的位址,时效也是2小时
Ctrl+Shift+C 复制它
https://ithelp.ithome.com.tw/upload/images/20210904/20140165La6nxs9lYZ.png
接着开启频道页面内的Messaging API,这边开启Use webhook
然後点击Edit并将刚才复制的位址贴上,并在後面加上/callback
按Update更新

你的位址/callback

https://ithelp.ithome.com.tw/upload/images/20210904/20140165RGWeOBd1iA.jpg
接着点击Verify,显示Success代表连接成功了
https://ithelp.ithome.com.tw/upload/images/20210904/20140165RjoklSkb9a.jpg

测试

程序预设是回复它接收到的讯息
先到python分页按Ctrl+C中断Python再点击右上重新执行一次
然後到你的Line发送讯息,有收到回复讯息代表成功了
https://ithelp.ithome.com.tw/upload/images/20210904/20140165odX3wtN5Sm.png
https://ithelp.ithome.com.tw/upload/images/20210904/201401651tYY4e5pRQ.jpg


<<:  资通安全管理法何处寻?

>>:  Day 1 新手挑战铁人赛的序言

Day 28 - 设籍有关涉及射击的射击游戏

Intro 这次是写了两个小游戏,并从里面学到一点 member function 的用法,还有字串...

第41篇-尝试建立 java 环境并运行 helloworld

尝试运行 java 环境 test@test:~$ sudo apt install openjdk...

从 JavaScript 角度学 Python(21) - Requests

前言 在 JavaScript 中 AJAX 是一个非常重要的基础功,毕竟现在很流行前後端分离,因此...

ASP.NET MVC 从入门到放弃 (Day6) -C#集合、IEnumerable ICollection IList介绍

接着来讲讲常用的集合写法.... Array(阵列): 是相同型别的集合 透过引索去取得元素 长度是...