当前位置:首页 > 经验 >

钉钉签到和打卡的区别(钉钉打卡离开工作位置会被发现吗)

来源:原点资讯(m.360kss.com)时间:2022-11-03 20:16:38作者:YD166手机阅读>>

今天小编为大家带来的是社区作者杨成功的文章,看看他开发的这款有意思的打卡小工具。

大家好,我是杨成功。

我司使用钉钉考勤打卡,人事要求的比较严格,两次未打卡记缺勤一天。但我们组醉心于工作,老是上下班忘记打卡,每月的工资被扣到肉疼。

开始的时候我们都设置了一个打卡闹铃,下班后准时提醒,但有的时候加班,加完班回家又忘记打卡了。还有的时候迷之自信的以为自己打卡了,第二天看考勤记录发现没打卡。

为了彻底解决这个问题,守住我们的钱袋子,我开发了一款打卡提醒工具,让全组连续三个月全勤!

下面介绍一下,这个小工具是如何实现的。

小工具实现思路

首先思考一下:闹铃提醒为什么不能百分之百有用?

  1. 机械的提醒

闹铃提醒很机械,每天一个点固定提醒,时间久了人就会免疫。就像起床闹铃用久了,慢慢的那个声音对你不起作用了,此时不得不换个铃声才行。

  1. 不能重复提醒

闹铃只会在固定时间提醒一次,没有办法判断是否打卡,更不会智能地发现你没有打卡,再提醒一次。

既然闹铃做不到,那我们就用程序来实现吧。按照上述两个原因,我们要实现的提醒工具必须包含两个功能:

  1. 检测用户是否打卡,未打卡则提醒,已打卡不提醒。
  2. 对未打卡用户循环检测,重复提醒,直到打卡为止。

如果能实现这两个功能,那么忘记打卡的问题多半也就解决了。

打卡数据需要从钉钉获取,并且钉钉有推送功能。因此我们的方案是:利用 Node.js 钉钉 API 来实现打卡状态检测和精准的提醒推送。

认识钉钉 API

钉钉是企业版的即时通讯软件。与微信最大的区别是,它提供了开放能力,可以用 API 来实现创建群组,发送消息等功能,这意味使着用钉钉可以实现高度定制的通讯能力。

我们这里用到的钉钉 API 主要有以下几个:

  • 获取凭证
  • 获取用户 ID
  • 检查打卡状态
  • 群内消息推送
  • @某人推送

在使用钉钉 API 之前,首先要确认有公司级别的钉钉账号(使用过钉钉打卡功能一般就有公司账号),后面的步骤都是在这个账号下实现。

申请开放平台应用

钉钉开发第一步,先去钉钉开放平台申请一个应用,拿到 appKey 和 appSecret。

钉钉开放平台地址:https://open.dingtalk.com/developer

进入平台后,点击“开发者后台”,如下图:

钉钉签到和打卡的区别,钉钉打卡离开工作位置会被发现吗(1)

开发者后台就是管理自己开发的钉钉应用的地方,进入后选择“应用开发->企业内部开发”,如下图:

钉钉签到和打卡的区别,钉钉打卡离开工作位置会被发现吗(2)

进入这个页面可能提示暂无权限,这是因为开发企业钉钉应用需要开发者权限,这个权限需要管理员在后台添加。

管理员加开发者权限方式:
进入 OA 管理后台,选择设置-权限管理-管理组-添加开发者权限下的对应权限。

进入之后,选择【创建应用 -> H5 微应用】,根据提示创建应用。创建之后在【应用信息】中可以看到两个关键字段:

  • AppKey
  • AppSecret

钉钉签到和打卡的区别,钉钉打卡离开工作位置会被发现吗(3)

这两个字段非常重要,获取接口调用凭证时需要将它们作为参数传递。AppKey 是企业内部应用的唯一身份标识,AppSecret 是对应的调用密钥。

搭建服务端应用

钉钉 API 需要在服务端调用。也就是说,我们需要搭建一个服务端应用来请求钉钉 API。

切记不可以在客户端直接调用钉钉 API,因为 AppKey 和 AppSecret 都是保密的,绝不可以直接暴露在客户端。

我们使用 Node.js 的 Express 框架来搭建一个简单的服务端应用,在这个应用上与钉钉 API 交互。搭建好的 Express 目录结构如下:

|-- app.js // 入口文件
|-- catch // 缓存目录
|-- Router // 路由目录
| |-- ding.js // 钉钉路由
|-- utils // 工具目录
| |-- token.js // token相关

app.js 是入口文件,也是应用核心逻辑,代码简单书写如下:

const express = require('express'); const app = express(); const bodyParser = require('body-parser'); const cors = require('cors'); app.use(bodyParser.json()); app.use(cors()); // 路由配置 app.use('/ding', require('./router/ding')); // 捕获404 app.use((req, res, next) => { res.status(404).send('Not Found'); }); // 捕获异常 app.use((err, req, res, next) => { console.error(err); res.status(err.status || 500).send(err.inner || err.stack); }); app.listen(8080, () => { console.log(`listen to http://localhost:8080`); });

另一个 router/ding.js 文件是 Express 标准的路由文件,在这里编写钉钉 API 的相关逻辑,代码基础结构如下:

// router/ding.js var express = require('express'); var router = express.Router(); router.get('/', (req, res, next) => { res.send('钉钉API'); }); module.exports = router;

现在将应用运行起来:

$ node app.js

然后访问 http://localhost:8080/ding,浏览器页面显示出 “钉钉 API” 几个字,表示运行成功。

对接钉钉应用

一个简单的服务端应用搭建好之后,就可以准备接入钉钉 API 了。

接入步骤参考开发文档,文档地址:https://open.dingtalk.com/document/org/application-types

1. 获取 API 调用凭证

钉钉 API 需要验证权限才可以调用。验证权限的方式是,根据上一步拿到的 AppKey 和 AppSecret 获取一个 access_token,这个 access_token 就是钉钉 API 的调用凭证。

后续在调用其他 API 时,只要携带 access_token 即可验证权限。

钉钉 API 分为新版和旧版两个版本,为了兼容性我们使用旧版。旧版 API 的 URL 根路径是https://oapi.dingtalk.com,下文用 baseURL 这个变量替代。

根据文档,获取 access_token 的接口是 ${baseURL}/gettoken。在 utils/ding.js 文件中定义一个获取 token 的方法,使用 GET 请求获取 access_token,代码如下:

const fetchToken = async () => { try { let params = { appkey: 'xxx', appsecret: 'xxx', }; let url = `${baseURL}/gettoken`; let result = await axios.get(url, { params }); if (result.data.errcode != 0) { throw result.data; } else { return result.data; } } catch (error) { console.log(error); } };

上述代码写好之后,就可以调用 fetchToken 函数获取 access_token 了。

获取到 access_token 之后需要持久化的存储起来供后续使用。在浏览器端,我们可以保存在 localStorage 中,而在 Node.js 端,最简单的方法是直接保存在文件中。

写一个将 access_token 保存为文件,并且可读取的类,代码如下:

var fs = require('fs'); var path = require('path'); var catch_dir = path.resolve(__dirname, '../', 'catch'); class DingToken { get() { let res = fs.readFileSync(`${catch_dir}/ding_token.json`); return res.toString() || null; } set(token) { fs.writeFileSync(`${catch_dir}/ding_token.json`, token); } }

写好之后,现在我们获取 access_token 并存储:

var res = await fetchToken(); if (res) { new DingToken().set(res.access_token); }

在下面的接口调用时,就可以通过 new DingToken().get() 来获取到 access_token 了。

2. 查找组员 ID

有了 access_token 之后,第一个调用的钉钉 API 是获取员工的 userid。userid 是员工在钉钉中的唯一标识。

有了 userid 之后,我们才可以获取组员对应的打卡状态。最简单的方法是通过手机号获取员工的 userid,手机号可以直接在钉钉上查到。

根据手机号查询用户文档:https://open.dingtalk.com/document/orgapp-server/query-users-by-phone-number

接口调用代码如下:

let access_token = new DingToken().get(); let params = { access_token, }; axios .post( `${baseURL}/topapi/v2/user/getbymobile`, { mobile: 'xxx', // 用户手机号 }, { params }, ) .then((res) => { console.log(res); });

通过上面请求方法,逐个获取所有组员的 userid 并保存下来,我们在下一步使用。

3. 获取打卡状态

拿到组员的 userid 列表,我们就可以获取所有组员的打卡状态了。

钉钉获取打卡状态,需要在 H5 应用中申请权限。打开前面创建的应用,点击【权限管理 -> 考勤】,批量添加所有权限:

钉钉签到和打卡的区别,钉钉打卡离开工作位置会被发现吗(4)

首页 123下一页

栏目热文

钉钉怎么签到(钉钉上网课在哪里签到)

钉钉怎么签到(钉钉上网课在哪里签到)

估计现在开会或者培训的时候,还需要签到考勤,那种纸质形式是广泛被大家接受的。那么在一个单位里有没有比较简单的快速方式呢。...

2022-11-03 20:43:26查看全文 >>

钉钉签到怎么自己修改位置(钉钉签到怎样添加位置)

钉钉签到怎么自己修改位置(钉钉签到怎样添加位置)

其实我一开始使用钉钉也是惊呆了的,居然打卡还带定位的。 考勤打卡都是通过设置企业上下班时间、考勤地点等多种条件对员工进...

2022-11-03 20:34:17查看全文 >>

钉钉打卡后离开单位能发现吗(钉钉打卡以后离开公司能被发现吗)

钉钉打卡后离开单位能发现吗(钉钉打卡以后离开公司能被发现吗)

案情简介刘某在某营销策划公司工作。刘某主张其在2019年11月至2020年12月期间,在工作日及周六均存在加班的情况,累...

2022-11-03 20:11:36查看全文 >>

钉钉签到位置修改器(打卡改位置神器)

钉钉签到位置修改器(打卡改位置神器)

当我们使用钉钉签到的时候,是可以获取我们的真是定位地址的。但是当我们想要模糊定位的时候,该怎么去做呢?下文中介绍钉钉签到...

2022-11-03 19:56:39查看全文 >>

ios最新钉钉位置修改器(苹果怎么使用钉钉软件)

ios最新钉钉位置修改器(苹果怎么使用钉钉软件)

想了很久,小编的处女公众文应怎么发,最近小编的公司从实现钉钉打卡以来,惨无人道的考勤制度,迟到一分钟都要扣钱,小编就一直...

2022-11-03 20:07:27查看全文 >>

钉钉签到修改位置(钉钉签到位置能不能修改)

钉钉签到修改位置(钉钉签到位置能不能修改)

普及一点相关知识对于使用考勤软件的用户,和上班族,程序后台管理其实有防虚拟定位的检测,使用不当,很容易被发现.,我能明白...

2022-11-03 20:17:51查看全文 >>

笔记本电脑无线显示❌怎么回事(笔记本电脑不显示无线连接列表)

笔记本电脑无线显示❌怎么回事(笔记本电脑不显示无线连接列表)

电脑wifi突然变成红叉是的原因(以电脑Windows10系统为例):1、可能是电脑长时间开着但没有使用,从而出现短时间...

2022-11-03 20:43:07查看全文 >>

笔记本电脑靠什么上网(笔记本电脑自带网络吗)

笔记本电脑靠什么上网(笔记本电脑自带网络吗)

虽然手机是我们平时最常用的电子设备,但有些工作还是使用电脑效率更高,比如,编辑文档,查询下载资料,发送一些特殊文件等等。...

2022-11-03 20:15:13查看全文 >>

笔记本电脑怎么连接网络步骤(笔记本电脑咋连接网络)

笔记本电脑怎么连接网络步骤(笔记本电脑咋连接网络)

如今游戏制作水平越来越高,随便打开一个网络游戏,无论是玩法设计、还是场景刻画,还是地图设计,都是细节程度拉满,这多少让笔...

2022-11-03 20:29:44查看全文 >>

笔记本电脑咋连接网络(笔记本电脑怎么连接自己的网络)

笔记本电脑咋连接网络(笔记本电脑怎么连接自己的网络)

以太网其实就是我们平时说的网络,它是属于一种计算机局域网的技术,也就是我们平时电脑连接的宽带网络。想要依靠电脑获取互联网...

2022-11-03 20:05:55查看全文 >>

文档排行