使用 Line Messaging Api 取得 User Profile

今天我们要帮验证码小帮手加上取得 User Profile 的功能,这样能更进一步客制化讯息或纪录。

流程构思

目的是取得 User Profile 中显示名称的部分,并且:

  1. 新增资料在 users sheet 时,将显示名称一并写入
  2. 回应验证码的时候多加上针对使用者问好的讯息

所以可以简单修改流程如下:

  1. 在检查认证码有效,绑定身份的同时取得使用者名称,并回写到 users sheet 中
  2. 使用者已认证且同意条款後,若输入讯息为获取验证码时,再次取得使用者名称回写到 users sheet 中(因显示名称是可以修改的)
  3. 在回应验证码讯息加上针对使用者问好的讯息

Line Messaging Api

以往我们要取得使用者的 profile, email, openid 等资讯,必须要经由 Line Login Api,或是 LIFF APP 才能取得。但如果只是要取得 1. 使用者名称 2. 显示图片 3. 状态讯息 4. 使用语言 这四项资讯的其中一项的话,就可以使用 Line Messaging Api 简单取得 (还是有限制条件,使用者必须 1. 有加 Line Bot 好友 2. 不是只使用PC版的 Line)

文件

Get profile

Reponse Example:
{
"displayName":"LINE taro",
"userId":"U4af4980629...",
"language":"en",
"pictureUrl":"https://obs.line-apps.com/...",
"statusMessage":"Hello, LINE!"
}

新增 getUserLineProfile

在 replyMessage.gs 新增一个 function getUserLineProfile 如下:

function getUserLineProfile(userId) {
  var response = UrlFetchApp.fetch(`https://api.line.me/v2/bot/profile/${userId}`, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN
    },
    'method': 'get'
  });
  return JSON.parse(response);
}

修改 tagVerificationCode.gs

修改 tagVerificationCode 如下:

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()]]);
      // 新增以下两行取得 userName
      var userProfile = getUserLineProfile(userId);
      var userName = userProfile.displayName??"";
      // upsertUserInfo 多增加 'name': userName
      upsertUserInfo(userId, {'name': userName, 'is_verifed': true});
      return true;
    }
  }
  return false;
}

修改 getValidationCodeMessage

修改回应验证码的 Message Object,加上针对使用者问好的回应

function getValidationCodeMessage(userId) {
  var validationCode = ReadMailAndInsertToGoogleSheet.app(userId);
  var userProfile = getUserLineProfile(userId);
  var userName = userProfile.displayName??"";
  upsertUserInfo(userId, {'name': userName});
  return [
    {
      'type': 'text',
      'text': `${userName}您好,以下是验证码:`
    },
    {
      'type': 'text',
      'text': validationCode
    }
  ];
}

修改完了记得储存,然後要管理部署建立新版本发布,接着就可以在验证码小帮手测试结果罗!

测试结果

接着在验证码小帮手点击获取验证码,检查看看有没有正确取得显示名称并问好
get user profile result

以上~铁人赛到现在也过了 2/3 了,明天开始就要进入开发 LIFF APP 的部分罗!


<<:  [第六天]从0开始的UnityAR手机游戏开发-如何汇入Unity Package到Unity和Unity使用Vuforia插件的基本设置

>>:  我们的基因体时代-AI, Data和生物资讯 Day20-注释基因资讯的BED档案格式和bedtools

Day 5 - 手机连线和New Project

Day 5 - 手机连线和New Project 如果是要连手机跑程序的人,这边就要注意了,手机打开...

[深入浅出MQTT]: v3.1.1与v5 的差异

[深入浅出MQTT]: v3.1.1与v5 的差异 MQTT v3.1.1 与 v5 完全相容,且提...

#16 数据上的各种距离(1)

讲到大数据就免不了提及一些演算法,但在我们开始介绍演算法之前,先介绍在数据中各种距离代表得含义 闵可...

30天学会 Python-Day24: 影像处理

OpenCV 用於处里影像的套件,除了图片外还能处理影片 读取影像 用 cv2.imread() 可...

用资料结构看 evernote - 修改前 - DAY 10

前言 介绍完了资料结构的基本,就用来实际解决一下,自己在记事方面的结构调整。 今天会先整理出自己平常...