昨天我们让 Reply Message
成功从 Read Mail
读取到验证码,今天要进一步让 Reply Message
能接收 Line Platform 送过来的 Webhook Event,并且,让 Line Bot 可以简单的回应验证码给使用者。
验证码小帮手
输入 获取验证码
Reply Message
Reply Message
接收到 Webhook Message Event,判断使用者输入的讯息为 获取验证码
Reply Message
执行 Read Mail
获取验证码Reply Message
利用 ReplyToken 回应验证码给使用者之前有提到,Line Platform 会发出 Webhook Event 到 Bot Server,而 Bot Server 接收到後就可以进行相对应的动作。而 Webhook Event 的类型有很多种,例如:加好友/封锁,加入/离开群组...等等。详细的文件可以阅读 Webhook Event Objects 文件。
这次我们要使用到的是 Message event,使用者发出特定关键字的讯息,Bot Server 接收到含有该关键字的 Message event 才回应验证码。Line的官方文件有很清楚的 Request & Reponse 范例,方便我们开发的时候预先对照格式处理资料。
至於让 Line Bot 回应讯息的方法有两种:reply / push
Reply Message
为 Web App那麽接下来的问题就是:要怎麽让 Reply Message
能够接收 Webhook Event?又要怎麽让 Reply Message
可以call Line Messaging Api 去回应讯息呢?
Reply Message
能够接收 Webhook Event 并进行处理Triggers let Apps Script run a function automatically when a certain event...
To use a simple trigger, simply create a function that uses one of these reserved function names:
...
doPost(e) runs when a program sends an HTTP POST request to a web app.
The e parameter in the function names above is an event object that is passed to the function. The object contains information about the context that caused the trigger to fire, but using it is optional.
也就是说,只要我们使用 doPost 作为 function 名称,那麽有 HTTP POST request 送到 Reply Message
时,就会执行 doPost 的内容。
p.s. 如果想要进一步了解 doPost(e) 其中 e: event object 的文件可以参考 Web Apps,我们接着也会把 Reply Message
部署成 Web Apps
Reply Message
可以call Line Messaging ApiConnect to public APIs
You can use the UrlFetch service to make API requests directly.
文件看完了,也大概知道该怎麽做了,那麽就着手进行修改 Reply Message
专案吧!
Reply Message
专案将 replyMessage.gs
修改如下
获取验证码
的 Message Eventconst CHANNEL_ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN';
function doPost(e) {
var requestContent = JSON.parse(e.postData.contents);
var event = requestContent.events[0];
if (event) {
var replyToken = event.replyToken;
var userId = event.source && event.source.userId;
var userMessage = event.message.text;
var replyMessage = [];
if (userMessage === '获取验证码') {
replyMessage = getValidationCodeMessage(userId);
} else {
replyMessage = getFailMessage();
}
doReplyMessage(replyMessage, replyToken);
}
return ContentService.createTextOutput('success');
}
function getValidationCodeMessage(userId) {
var validationCode = ReadMailAndInsertToGoogleSheet.app(userId);
return [{
'type': 'text',
'text': validationCode
}];
}
function getFailMessage() {
return [{
'type': 'text',
'text': '无效的输入'
}];
}
function doReplyMessage(replyMessage, replyToken) {
var payload = {
replyToken: replyToken,
messages: replyMessage
};
UrlFetchApp.fetch('https://api.line.me/v2/bot/message/reply', {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN
},
'method': 'post',
'payload': JSON.stringify(payload)
});
}
按下部署,选取类型为网页应用程序
输入说明,执行身份选择我,谁可以存取选择所有人
然後按下部署 (第一次可能会需要审查权限)
完成部署,将网页应用程序的网址复制保存,等下设置 Webhook URL 会使用到
那麽事不宜迟,马上将 webhook URL 设置成我们部署好的 Web App 网址吧!
进入 Line Developer Console ,选择验证码小帮手的 Messaging Api
找到 Webhook settings
Reply Message
的网页应用程序网址,更新完记得储存可以按下 verify 检验网址是否设置正确,如果出现下图的警告是正常的,因为我们使用 GAS 服务的关系
按下获取验证码,接着随便输入一些讯息
也可以看到 Google sheet 中有纪录了取得的 userId & 时间 (这边就不特地截图了)
以上~到今天终於让 Line Bot 成功回应验证码了,但是只有这样当然是远远不够的!首先谁都可以加入这个验证码小帮手,这点非常的不安全,我们需要额外加上身份验证的功能。另外我们的 Reply Message
也没有验证 HTTP POST request 是否真的是 Line 发送过来的。於是~本系列文章的第二阶段目标,就是要强化这个 side project 的安全性!
99购物节买到要剁手手了,明天继续加油罗~
>>: Day 9-假物件 (Fake) - 虚设常式 (Stub)-1 (核心技术-1)
VM环境安装及打包上环境 安装环境及套件 输入sudo apt update 更新apt 输入sud...
接续昨天的付款按钮,今天要把自己的订单内容和付款按钮结合 PayPal 订单内容 范例 这边提供一个...
力扣网站的说明 动态规划常常适用于有重叠子问题和最优子结构性质的问题,并且记录所有子问题的结果,因此...
啊..败给旅游燃烧殆尽症候群了,昨天晚上不小心睡着,忘记设闹钟,再醒来就已经过12点了QwQ ...
请问现在要开发有关fb的商业应用,是否都局限在粉丝团的上面,个人专页的资料商业应用有局限的吗? ...