最近在研究LINE bot,通过搭建环境,编写webhook,终于实现bot与line 用户的对话。此过程并不是一帆风顺,期间遇到很多问题,咨询了很多朋友,在此表示感谢,特别感谢line-bot-sdk-python 的维护者。
line-bot 实现reply功能的关键在于Webhook
的编写。本文使用了flask框架来编写Webhook. 在此,就需要解决两个问题:
- 1. Webhook 是什么?
- 2. Webhook 怎么用?
官网解释: Receive notifications in real-time when a user sends a message or friends your account. When an event, such as when a user adds your account or sends a message, is triggered, an HTTPS POST request is sent to the webhook URL that is configured on the Channel Console.
咋一看,似懂非懂。可参考github或者coding中钩子的思想。
意思是 当有好友添加你或者发消息给你时,会触发一个事件,然后 就会发送一个HTTPS POST请求到你的 webhook url
.(不懂没事,后面还会提到,本文的重点。)
最简洁的方式,莫过于图。
LINE bot的运作流程是这样的:
- 使用者传送消息到LINE bot账号;
- LINE bot收到消息会将消息post给Webhook URL;
- Webhook URL就是我们所说的web service,负责实际处理的消息。
从问题1和问题2,我们可知,我们需要填写一个webhook url
, 且必须是HTTPS协议。而这个 webhook rul
对应的就是我们编写webhook生成的。
这里,我是将项目部署在 Heroku,免费,且支持HTTPS. 不足的是,因为是国外的一个云服务器,反应略慢。
另外,你们也可尝试 ngrok
.
先看效果,再看值不值得学。
本文的目的在于webhook url
, 所以这里我做了一个很简单的line-bot,支持简单的自动应答功能。
可以体验下,添加我的bot为好友,QR code 如下:
本部分是在twtrubiks的基础上做些修改和补充,内容是繁体书写,不影响阅读。再次表示感谢作者的付出。
本人实践环境及所需工具。
- Windows server 2008 r2
- Heroku
- line-bot-sdk-python
- flask
- git
- python 3.6.1
- 请先到 https://business.line.me/zh-hant/ 这里登入自己原本的 line 账号,然后选择Messaging API
接下来你会看到 開始使用Messaging API 以及 開始使用Developer Trial
在这里我们选择 開始使用Messaging API
這兩個差別在哪裡呢? 可以到同一個頁面的下方觀看,基本上就只是方案不同而已
接著就是一些設定,點選 選擇公司/經營者
點選 新增公司/經營者
填寫一些資料
line bot 的 大頭貼 以及 名稱 設定
設定完後,請選擇 申請
以上設定應該不會有什麼問題
請選擇 開始使用 API
請選擇 確認
這些請注意, 選擇 允許 ,然後記得 儲存
點選 Line Developers
你會進入下面這個畫面,在這個畫面中,有兩個東西很重要,分別是
-
Channel Secret
-
Channel Access Token
Channel Secret
Channel Access Token
如果你看到的是空的,請點選 ISSUE 就會顯示了
請將你的 Channel Secret 以及 Channel Access Token
貼到下方的程式碼
line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_CHANNEL_SECRET')
更多内容可參考 line-bot-sdk-python
接下來因為 Line Bot 需要 SSL憑證 ( https ),所以我直接使用 Heroku
如果不知道什麼是 Heroku 以及它的使用方法
請參考我之前寫的 Deploying-Flask-To-Heroku
佈署
如上圖,我的網址是 https://python-ine-bot.herokuapp.com/
接著我們要加入 Webhook URL ,請點選 EDIT ,並且加入你自己的網址,網址格式
https://{你的網址}/callback
舉例,我的網址就是
https://python-ine-bot.herokuapp.com/callback
我的源码已上传至github,请查看line-bot-flaskr。
我使用 line-bot-sdk-python當我按下 VERIFY,出现了如图所示所示错误,不影响bot的使用。原因是点击verify时,会返回一个虚拟的reply_token,所以failed。
本人的webhook url
:
关于这个问题的详细解释,请查看我提交的issue.
本文的重点是在构造webhook url
.
主要步骤如下:
- 申请一个messaging api 的账号;
- 书写callback函数,并部署到Heroku; (代码可直接download我的github源码,执行过程请参照 Deploying-Flask-To-Heroku )
- 进行bot与好友对话,进行测试。
部署花了我很长时间,需要对git很熟悉,一步一步的来。
我的源码已上传至github,请查看line-bot-flaskr。
- 两个教学视频:
- line-bot-sdk-python
- Line Echo Bot on Django (这篇文章很好,内部写了两种webhook的处理方式。)
- line messaging-api
MIT license