iT邦幫忙

第 11 屆 iThome 鐵人賽

1
Software Development

後端基礎PHP+Mysql & Laravel 30日養成計畫系列 第 35

Day 35 Laravel 實作 LINE Bot 小幫手筆記

  • 分享至 

  • xImage
  •  

前陣子和工作室的夥伴們一起參加了在台中Monospace舉辦的GDG 黑客松,度過了非常精實的兩天一夜(幾乎沒什麼睡都在趕工),不過收穫蠻多的,想在此分享一下我們這組的作品和參賽心得,順便複習一下學到的新東西。
當時在選定主題前,遇到一位有在研究聊天機器人的大大,問我們想不想跟他一起玩玩看,於是我們就決定要在這兩天內做出一隻能根據對話內容來自動查詢ptt二手手機拍賣文章的LINE Bot。
主要運用到的技術有:Line Bot SDK、Dialogfolw、爬蟲,但我這篇只介紹Line Bot的部份。

第一步:創立Channel

登入你的line帳號:https://developers.line.biz/zh-hant/
選擇Message API,看到這個畫面後,把該填的欄位填完。
https://ithelp.ithome.com.tw/upload/images/20200106/20120024Npt9x8adzD.png
填完就會看到你剛創見的Channel 了,點進剛剛建立的Channel。
https://ithelp.ithome.com.tw/upload/images/20200106/20120024xxMMAsLMCq.png
https://ithelp.ithome.com.tw/upload/images/20200106/20120024QhuclG12wU.png

Basic Setting這邊可以找到的Channel ID、Channel secret等等,Messaging API則可以看到Channel的QR Code、Channel access token和設定你的API URL(還沒有域名的可以先使用ngrok測試)。
https://ithelp.ithome.com.tw/upload/images/20200106/201200241AXjHAVLUt.png
然後就能開始寫程式了。

第二步:開始寫程式

cd進專案目錄下,安裝linebot sdk

$composer require linecorp/line-bot-sdk

安裝串接dialogFlow會用到的bcmath

$sudo apt-get install -y php7.3-bcmath 

在專案目錄下加入dialogFlow設定檔,然後記得去.env設定LINEBOT_TOKEN和LINEBOT_SECRET。

流程:

  1. 取得line的使用者id和訊息內容
  2. 根據訊息內容回覆對應的問題(此步驟需要串接dialogFlow進行意圖判斷)
  3. 根據使用者的回答儲存搜尋關鍵字:需要蒐集到買/賣手機、地點、手機型號/廠牌、價格區間
  4. 將上述蒐集到的五個關鍵字發送請求讓爬蟲爬取符合條件的手機拍賣文章
  5. 回傳爬到的文章給使用者

記錄request和response的log

由於測試linebot很難透過postman,要直接在line的聊天室做測試,紀錄request和response和查看錯誤訊息等,就要透過laravel的log功能。

清空log: 切進儲存log的資料夾,

echo "" > laravel-2019-12-24.log

接著把你想在log中看到的東西寫進去,例如:

       $text = $request->events[0]['message']['text'];
       Log::info($text);

踩過的各種坑

部署上gcp後踩的第一個坑:
clone完專案後,安裝composer時:

Problem 1
    - Installation request for linecorp/line-bot-sdk 4.0.1 -> satisfiable by linecorp/line-bot-sdk[4.0.1].
    - linecorp/line-bot-sdk 4.0.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.

安裝composer時,會到你專案底下的composer.json看這個專案需要安裝什麼套件,執行composer install就會一起幫你把這些套件都一併裝好。
而他在裝line-bot-sdk時需要php-curl,然而php-curl並不在composer的管轄範圍內,他是屬於php的套件,所以在composer install前要先自行安裝好。
Solution:
要先裝php-curl,且版本要和instance裝的一致。

若下這個指令

composer require php-http/curl-client

會報以下錯誤:

Problem 1
    - The requested PHP extension ext-http * is missing from your system.
      Install or enable PHP's http extension.

去laravel專案下的composer.json把這行刪掉就行了

"require": {
    "ext-http": "*"
}

上一篇
Day 34 Laravel Factory:填充假資料
下一篇
Day 36 Laravel Eloquent Relations
系列文
後端基礎PHP+Mysql & Laravel 30日養成計畫36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言