【Day 03】从零开始的 Line Chatbot-建立专案

今天要来正式建立 Chatbot 的 Python 专案!

登入资料

进入 Line Developers 直接登入自己的 Line 帐号。

如果是第一次建立开发者帐号,需要先填写一些基本资料(仅限第一次登入时才要)。

之後,建立一个 Provider
Provider 指的是提供服务的个人公司

建立 Messaging API channel

接着我们就要建立一个 Messaging API 的 channel。

继续填写资料~

基本设定

项目 画面
Channel icon(optional) Chatbot 的大头贴
Channel name Chatbot 名字
Channel description 启动时的同意权限画面(仅针对有建立 LIFF 的 Channel)
Privacy policy URL(optional) -
Terms of use URL(optional) -

这之後我们就可以在主页上看到我们建立好的 channel 了!!


在 Line Developers 上该建立的东西到这边基本上就几乎完成了,但是先不要把网页关掉

在建立 Python 专案时,还需要回来这个网页复制两个凭证。(等我们要用到的时候再回来)

Chatbot 专案

首先,我们要建置环境,安装以下之後会使用到的 Python 套件

$ pip install django
$ pip install line-bot-sdk
$ pip install requests

接着建立 Django 专案

#建立Django专案
$ django-admin startproject mylinebot .

#建立Django应用程序 程序名称 django_chatbot
$ python manage.py startapp django_chatbot

$ python manage.py migrate  

此时

  • mylinebot专案主程序
  • django_chatbot应用程序

新增凭证

我们可以回到 Line Developers,需要拿到以下两个凭证。

Basic Settings 里的 Channel Secret

Messaging API 里的 Channel access token,是 long-lived 的

之後开启专案,我们在 mylinebot/settings.py 里增加上面提到的两个凭证。

LINE_CHANNEL_ACCESS_TOKEN = 'Messaging API > Channel access token'

LINE_CHANNEL_SECRET = 'Basic settings > Channel secret'

直接把两个凭证复制上去(type: str)。

然後在同一个 settings.py 档里面的 INSTALLED_APPS 加上刚刚所建立的 Django 应用程序,如下:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    'django_chatbot.apps.DjangoChatbotConfig',    #新增APP名称
]

也就是在 django_chatbot/apps.py 里的 class

class DjangoChatbotConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'django_chatbot'

写一个最最最基本的 echo Chatbot

我们先来看另一个档案 django_chatbot/views.py,这个档案可以算是 Chatbot 的主程序(?)。
我们会把 Chatbot 接收讯息後要执行的内容写在 def callback(request): 里。

我们来试写一个最基本的 Chatbot,echo,Chatbot 会回传使用者输入的文字内容。
范例取自官方 documentation

from django.shortcuts import render

# Create your views here.

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

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

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()

虽然目前我们把 Chatbot 的主要功能都写出来的,可是到目前为止,还不能执行。

我们要把网址公开才可以让这个机器人连结到我们的 channel,这样机器人才可以回应我们写的主要功能。
明天会继续讲解如何公开网址连结 channel。

之後的几天都会慢慢把挖出来的坑给填起来!

Ref.


<<:  Day 17 建立Blog跟Post

>>:  【Day 03】第一个小程序

推荐! 开发的线上辅助工具

今天在分享几个方便好用的工具。 一个是 Android Asset Studio ,有9种图标的变形...

Android Studio初学笔记-Day1 -大纲介绍

这是我第一次参加这种撰写文章的比赛,参加这个比赛主要是让我能保持学习并透过写文章分享自己的学习历程,...

Day24 - 针对 Metasploitable 3 进行渗透测试(5) - 认识 Meterpreter

Meterpreter 功能 透过 Meterpreter 可以利用 Reverse Shell 控...

Day8 JSON档处理

今天的内容为介绍另一种档案格式—JSON档,是一位爬取网路资料时常会碰到的朋友~ 赶快趁现在好好的认...

[Day 30] 人脸表情辨识App成果发表与完赛感想

-1. Google store link 这七天做的app上架罗! 欢迎下载 https://pl...