iT邦幫忙

5

[Python Linebot]教你如何使用Python成功串接Linebot(2020版)

Gary 2020-02-16 00:42:3236900 瀏覽
  • 分享至 

  • xImage
  •  

如今的Linebot已經相當成熟了!LINE官方也釋出很多教學檔。
今天來帶你快速使用Python來串接Linebot
可以讓你客製化LineBot的對話內容
讓使用者覺得更貼心、更好用!!!

Linebot

注意:以下操作方式皆會因為日後Line官方改版導致位置不同!請多留意

首先,先進去Line develpo官網
然後登入你的Line帳號
到以下此頁面後(一步一步慢慢來)



按Create後會出現隱私權之類的視窗,按同意就好了!
我們要關掉官方預設的歡迎語

!!!!!以下重要步驟!!!!!

這邊我們先建立一個config.ini的配置檔

[line-bot]
channel_access_token = 你的channel_access_token
channel_secret = 你的channel_secret


接著往下滑動後
點選issue後,會產生出一串屬於你的token

複製完請貼到config.ini裡面

config.ini

之後回到Line develop網頁 點選導覽列的Basice settings
一樣滑動到底部,會看見Channel secret
Channel secret

一樣貼到config.ini裡面
最後應該會長成這樣
config.ini

此時你的LineBot串接已經完成一半囉~

接下來我們要用Python製作客製化的對話
先建立一個app.py檔

註:app.py要跟上方config.ini放同一層資料夾唷

from __future__ import unicode_literals
import os
from flask import Flask, request, abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage

import configparser

import random

app = Flask(__name__)

# LINE 聊天機器人的基本資料
config = configparser.ConfigParser()
config.read('config.ini')

line_bot_api = LineBotApi(config.get('line-bot', 'channel_access_token'))
handler = WebhookHandler(config.get('line-bot', 'channel_secret'))


# 接收 LINE 的資訊
@app.route("/callback", methods=['POST'])
def callback():
    signature = request.headers['X-Line-Signature']

    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)
    
    try:
        print(body, signature)
        handler.handle(body, signature)
        
    except InvalidSignatureError:
        abort(400)

    return 'OK'

# 學你說話
@handler.add(MessageEvent, message=TextMessage)
def pretty_echo(event):
    
    if event.source.user_id != "Udeadbeefdeadbeefdeadbeefdeadbeef":
        
        # Phoebe 愛唱歌
        pretty_note = '♫♪♬'
        pretty_text = ''
        
        for i in event.message.text:
        
            pretty_text += i
            pretty_text += random.choice(pretty_note)
    
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text=pretty_text)
        )

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

我們要將製作好的app.py運行起來
可以在你的終端機下 python app.py
python app.py

Ngrok

ngrok 就是可以讓內網伺服器與外界溝通的一個服務。
也就是說
可以讓本地端對外開放server

假設你架設一個部落格,當中有許多動態動作(如新增、更新、刪除等)
這時候你可能會因為沒有固定IP而煩惱,又或者決得放到heroku很麻煩
這是就可以使用ngrok,暫時讓外部人連進你的部落格
p.s 面試挺有用的,可以短暫讓面試官看你的成品

需要詳細了解可以參考下方
ngrok 不求人:自己搭一個窮人版的 ngrok 服務

回歸正題

開啟你的cmd
將路徑改變成你的app.py的位置

輸入 ngrok http 5000
ngrokv

這時我們回到Line develop官網 ->Messaging API ->WebhookURL
WebhookURL

有時候Verify會失敗,請多按幾次,最後會顯示
webhook成功

出現此頁面表示你的Linebot與python檔成功串接了!!


尋找你的LineBot測試吧!!!
LineBot Python串接成功畫面
參考文獻: https://ithelp.ithome.com.tw/articles/10217767
參考文獻: https://yaoandy107.github.io/line-bot-tutorial/


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
singlegear
iT邦新手 5 級 ‧ 2021-05-10 01:48:06

不好意思 我想請問一下 在終端機打python app.py這個指令 卻出現下面這情況 我該如何解決https://ithelp.ithome.com.tw/upload/images/20210510/20137352EB1HCxrgFK.jpg

Gary iT邦新手 3 級 ‧ 2021-05-12 23:26:37 檢舉

你好~ 這看起來像是路徑上的錯誤
表示找不到app.py的檔案,所以請先確認好路徑位置
這裡提供給你以下解法

感謝回覆

我要留言

立即登入留言