Line-bot Webhook 创建与部署
Line-bot Webhook 创建与部署
前言
最近在研究LINE bot,通过搭建环境,编写webhook,终于实现bot与line 用户的对话。此过程并不是一帆风顺,期间遇到很多问题,咨询了很多朋友,在此表示感谢,特别感谢line-bot-sdk-python 的维护者。
line-bot 实现reply功能的关键在于Webhook
的编写。本文使用了flask框架来编写Webhook. 在此,就需要解决两个问题:
- 1. Webhook 是什么?
- 2. Webhook 怎么用?
1. 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
.(不懂没事,后面还会提到,本文的重点。)
2. Webhook 有什么作用?
最简洁的方式,莫过于图。
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 如下:
然后,你就可以和我的bot进行对话了。
搭建步骤
本部分是在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
貼到下方的程式碼
|
|
https://{你的網址}/callback
https://python-ine-bot.herokuapp.com/callback
```
我的源码已上传至github,请查看line-bot-flaskr。
部署成功后,会在Heroku 中看到以下内容:
注意事项
1.填入 webhook url
后不需要进行verify.
我使用 line-bot-sdk-python當我按下 VERIFY,出现了如图所示所示错误,不影响bot的使用。原因是点击verify时,会返回一个虚拟的reply_token,所以failed。
本人的webhook url
:
关于这个问题的详细解释,请查看我提交的issue.
2.部署过程中,请创建一个独立的Python运行环境,并保证是在虚拟环境下进行的。
虚拟环境有个标志(env),如下图:
3. 多用 Heroku logs --tail
查看日志,从日志中你就可以找到大多数错误的原因。
总结
本文的重点是在构造webhook url
.
主要步骤如下:
- 申请一个messaging api 的账号;
- 书写callback函数,并部署到Heroku;
(代码可直接download我的github源码,执行过程请参照 Deploying-Flask-To-Heroku ) - 进行bot与好友对话,进行测试。
部署花了我很长时间,需要对git很熟悉,一步一步的来。
我的源码已上传至github,请查看line-bot-flaskr。
链接
Github issue
参考网址
- 两个教学视频:
- line-bot-sdk-python
- Line Echo Bot on Django
(这篇文章很好,内部写了两种webhook的处理方式。) - line messaging-api
License
MIT license