昨天我们使用了 Quick Reply 让使用者可直接跟我们回应的讯息互动,今天要使用 Template Message 做一个在互动上也蛮常见的功能 - 同意服务条款。
现在的验证码小帮手需要纪录使用者是否 1. 已认证 2. 已同意条款,而且之後也需要取得 User Profile 等资讯,势必要新增一张资料表纪录 User 资讯方便更新及检阅。
users
在原本的 auto-get-verification-code
试算表新增一张工作表 users
,并加入标题列如下:
目的是在原先的流程上加入同意条款的功能,时间点可以视情况选择在身份认证之前或之後,这次先选择在身份认证之後。所以流程大致如下:
users
sheet 写入 user_id
跟 is_verified
栏位handleMessageEvent
agree_terms
写入 1首先我们要新增对 users sheet 执行 query & upsert 的功能
加入 upsertUserInfo
& getUserRowIndex
getUserRowIndex
寻找 users sheet 里面是否已经有这个 userId,有的话回传列号,没有的话就在最後新增一列这个 userId 的资料并回传列号upsertUserInfo
则是根据输入的 userData object 执行对应 columnname 的资料更新function upsertUserInfo(userId, userData) {
Logger.log('start upsertUserInfo');
var fillableKeys = {
'name':1,
'email':2,
'is_verifed':3,
'agree_terms':4,
'updated_at':6
}
var sheet = ReadMailAndInsertToGoogleSheet.connectToSheet('users');
var userRowIndex = getUserRowIndex(sheet, userId);
var userRowRange = sheet.getRange(userRowIndex, 1, 1, 7);
var userRowData = userRowRange.getValues()[0];
Object.entries(userData).forEach(([key, value]) => {
if (fillableKeys[key] !== undefined) {
userRowData[fillableKeys[key]] = value;
}
});
userRowData[6] = new Date();
userRowRange.setValues([userRowData]);
}
function getUserRowIndex(userSheet, userId) {
var searchResult = ReadMailAndInsertToGoogleSheet.searchColumnValue(userSheet, 'user_id', userId);
if (searchResult !== -1) {
return searchResult+2;
}
// create new user row
var lastRow = userSheet.getLastRow();
var range = userSheet.getRange(++lastRow, 1, 1, 6);
range.setValues([[userId,,,,, new Date()]]);
return lastRow;
}
接着在 tagVerificationCode
里新增纪录 user 已经认证的功能
function tagVerificationCode(target, userId) {
var sheet = ReadMailAndInsertToGoogleSheet.connectToSheet('verification_code');
var searchResult = ReadMailAndInsertToGoogleSheet.searchColumnValue(sheet, 'code', target);
if (searchResult !== -1) {
var targetRowIndex = searchResult+2;
var userIdValue = sheet.getRange(targetRowIndex, 2, 1, 1).getValue();
if (userIdValue.length === 0) {
var targetRange = sheet.getRange((searchResult+2), 2, 1, 2);
targetRange.setValues([[userId, new Date()]]);
// 加入下面这行
upsertUserInfo(userId, {'is_verifed': true});
return true;
}
}
return false;
}
这样一来我们就可以在使用者认证时纪录资讯在 users sheet,并且可以用同样的方式纪录接下来的同意条款结果,明天继续完成用 Template Message 发送同意条款资讯,以及写入 users sheet!
7 强连通元件 对於一个无向图来说,如果我们把一个极大连通的子图找出来(极大在这边的定义是,无论再增...
根据前面作业做个检讨,决定新的题目需要有这些条件: 简单、明确,即使团队未参与ml研究的同仁,对於我...
前言 因工作需求碰到ODOO这套ERP,藉由铁人赛纪录所学与遇到的问题,若有错误也欢迎不吝指出。 O...
#初学程序语言的你为什麽需要有GitHub? #Git & Github区别在哪里?? Gi...
先备知识: 基本python能力 : 熟悉各基本型态,认识串列、字典、函式、class 了解深度学习...