DAY11 - 第一个小范例 : LineBot 自动回话

前言

今天是铁人赛的第十一天,开始进入新的阶段啦
从这边开始会写一些我自学过程中写过的范例

Imgur

申请 Line Developer 帐号

要开始写Line Bot之前,先要有Line开发者帐号
请先到LINE Developers Console 建立一个开发者帐号
(注: 要创立开发者帐号之前...要先有Line的帐号)

如不知知道怎麽注册开发者帐号,请点选下面的图片连结
Imgur

建好开发者帐号後,就在管理页面上建立一个 provider
Imgur
在建立的类型选择 Create Messaging API channel
Imgur
之後就照着填资料,下面的图就是我建好的 (猪头可以换成自己喜欢的图..)
Imgur

保存LineBot 的重要资料

Line Bot的帐号建好之後,有两个资料要先保存

Channel secret
Imgur
Channel access token
Imgur
上面的两张图,红色框起来的部分,把文字复制下来,贴在记事本里保存
在本机开发Lien Bot时,会用到,存下来就不用去开网页查看。

补充: 最後记得要把这个LineBot 加到你的Line好友

LineBot 开发环境建置 (for Python)

以下都是在win10 64bit 家用版的环境下建置

下载Ngrok

这是一个可在本地端测试webhook 的必备工具

安装Python 虚拟环境的套件
pip install virtualenvwrapper-win

建立 Python 虚拟环境

mkvirtualenv mylinebot

建立 LineBot 开发专案

#注: 以下操作都需要在python的虚拟环境底下执行
#安装 Django & Line SDK
pip install Django==2.2.4
pip install line-bot-sdk==1.8.0
pip install yfinance

#建立 django 专案
django-admin starproject mybot
cd mybot

#建立 app 跟 资料库初始化
python manage.py startapp myapp
python manage.py makemigrations
python manage.py migrate

在这个范例里只会修改3只档案如下图所示:
Imgur

/settings.py 设定档内容太长,只列出要改的地方

#找到ALLOWED_HOSTS 把内容改成 ['*']
ALLOWED_HOSTS = ['*']

#档案最後面加入
LINE_CHANNEL_SECRET ='这边改成你申请的' 
LINE_CHANNEL_ACCESS_TOKEN ='这边改成你申请的'

/urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from myapp import views

urlpatterns = [
    url('^callback',views.callback),
    path('admin/', admin.site.urls),
]

/views.py

from django.conf import settings
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden
from django.views.decorators.csrf import csrf_exempt

from linebot import LineBotApi, WebhookParser
from linebot.exceptions import InvalidSignatureError, LineBotApiError
from linebot.models import MessageEvent, TextSendMessage
from module import func


line_bot_api = LineBotApi(settings.LINE_CHANNEL_ACCESS_TOKEN)
parser = WebhookParser(settings.LINE_CHANNEL_SECRET)



#传什麽讯息回覆相同讯息的范例
@csrf_exempt
def callback(request):
    if request.method == 'POST':
        signature = request.META['HTTP_X_LINE_SIGNATURE']
        body = request.body.decode('utf-8')

        try:
            events = parser.parse(body, signature)
        except InvalidSignatureError:
            return HttpResponseForbidden()
        except LineBotApiError:
            return HttpResponseBadRequest()

        for event in events:
            if isinstance(event, MessageEvent):
                line_bot_api.reply_message(event.reply_token,TextSendMessage(text=event.message.text))

        return HttpResponse()
    else:
        return HttpResponseBadRequest()

以上的程序码内容,只要复制贴上,基本上都可以正确地执行
这个是Line Bot最简单的Echo范例,也是Line官网上面的范例(又可称为公版程序)
Imgur
(注:Line官网的python范例是以另一个框架Flask为例,这边是用Django)

测试LineBot

python manage.py runserver

Imgur

打开 ngrok
Imgur

把 ngrok的网址 填到 LineBot 的管理页面上
补充: "每次" 打开ngrok 得到的网址都不一样,每次都要去LineBot的管理页面更换Webhook URL
Imgur

打开Line 传给讯息给Bot
Imgur

下载本篇的范例程序码 (使用git clone)

git clone https://[email protected]/smilehsu/mylinebot.git

以上就是铁人赛第11天的内容 :)


<<:  D13 - 用 Swift 和公开资讯,打造投资理财的 Apps { 加权指数K线图实作.1 }

>>:  全端入门Day23_後端程序撰写之多一点的Node.js

进击的软件工程师之路-软件战斗营 第十八周

学习进度 Android Studio (以下功能皆为自学) ChipGroup、Chip使用 Sw...

完赛心得

完赛不发个心得好像怪怪的。原本想整个系列补充完再发心得,但是没有赶稿压力下的产出超低落,果然是人性....

Day-30 最後一天啦!!!铁人赛心得

呼~来到最後一天了 这次参加比赛终於每一天都有写一些内容了 不像上次凯特琳到了第9天就失败了 >...

Day25 - 加入简单的动画

今天想偷个懒,先为App加入一点动画, 主要是从欢迎页到登入页的过度动画。 Navigation t...

安装 Debian 11 与呒虾米

前言 Debian 也在这几天释出第 11 版,开发代号 bullseye,是目前的稳定 (Stab...