飞书接入机器人NODE开发自动回复

这篇具有很好参考价值的文章主要介绍了飞书接入机器人NODE开发自动回复。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、创建飞书应用

1.登录飞书开放平台 进入开发者后台 创建自建应用

2.添加应用能力 选择机器人添加

飞书接入机器人NODE开发自动回复,飞书

3.添加事件订阅并根据权限开通权限  此处只添加获取消息事件

飞书接入机器人NODE开发自动回复,飞书

4.配置应用服务端地址(当事件触发 会触发设置的地址 并发送事件数据)开启Encrypt Key 实现回调数据加密 接收到数据后 通过开发文档 - 飞书开放平台 文档介绍 解密

飞书接入机器人NODE开发自动回复,飞书

 5.创建测试企业 测试人员 测试应用无压力不要审核

飞书接入机器人NODE开发自动回复,飞书

 二、搭建服务 接入 https 证书 创建api

const express = require('express')

const app = express()

const https = require('https');

// node接入证书
const options = {
	cert: fs.readFileSync('./ssl/xyz.pem'),
	key: fs.readFileSync('./ssl/xyz.key')
}
let server = https.createServer(options, app)

const bodyParser = require('body-parser')

app.use(bodyParser.urlencoded({
	extended: false
}))
app.use(bodyParser.json())

server.listen(8443, (err) => {
	if (!err) {
		console.log('服务器已启动 端口号8443:::')
		console.log('http://127.0.0.1:8443')
	}
})
app.all('*', function(req, res, next) {
	res.header('Access-Control-Allow-Origin', '*')
	res.header('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type')
	res.header('Access-Control-Allow-Methods', 'GET,POST,OPTIONS')
	next()
})

1.引入axios 调用飞书api接口做准备  npm i axios 并封装

// 封装axios
let tenantToken = ''
let tokenTimes = ''
const httpsAxios = async (url, data) => {
    if(!tenantToken || ((new Date().getTime() - tokenTimes ) / 1000) > 5400) {
        tokenTimes = new Date().getTime()
        tenantToken = await getTenantToken()
     }
    return new Promise((resolve, reject) => {
        axios({
            url,
            method: 'post',
            headers: { Authorization: `Bearer ${tenantToken}`, 'Content-Type': 'application/json; charset=utf-8' },
            data: data
        }).then(res=>{
            resolve(res)
        }).catch(err=>{
            reject(err)
        })
    })
}

2. 获取飞书的access_token 在调用api中 身份象征 

// 获取飞书 tenant_access_token 的方法
const getTenantToken = async () => {
    const Bool = await addFile()
    console.log(Bool)
    if(!Bool) {
        const url =
        'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal';
        const res = await axios.post(url, {
            app_id: obj.appID,
            app_secret: obj.EncryptKey
        });
        addFile(res.data)
        return res.data.tenant_access_token;
    } else {
        return Bool;
    }
}

2.1. addFile 存储 access_token 有效期为2小时 则设置为5400秒重新获取 , 没有用数据库 则使用文件json保存到本地目录下

const fs = require('fs');
const path = require('path');
// 存储数据access_token 到本地文件
const addFile = (data) => {
    const configFile = path.resolve(__dirname, './json/Info.json')
	let Obj = JSON.parse(fs.readFileSync(configFile, 'UTF-8').toString())
    return new Promise(re => {
        if(data) {
            Obj.tenant_access_token = data.tenant_access_token
            Obj.tenant_access_token_time = new Date().getTime()
            fs.writeFileSync(configFile, JSON.stringify(Obj))
            re(Obj.tenant_access_token)
        } else
        if (!Obj.tenant_access_token) {
            re(false)
        } else {
            let time = new Date().getTime()
            console.log((time - Obj.tenant_access_token_time ))
            // 一个小时三十分钟就重新获取
            if(((time - Obj.tenant_access_token_time ) / 1000) > 5400) {
                re(false)
            } else {
                re(Obj.tenant_access_token)
            }
        }
    })
}

3.事件订阅接收数据 接收数据 由于加密过的 需要AESCipher 解密 监听 im.message.receive_v1 获取用户发送的数据  如果你有gpt的话 可以接上webGpt

app.post('/gptTest', async (req, res) => {
    cipher = new AESCipher(obj.encrypt)
    let data = JSON.parse(cipher.decrypt(req.body.encrypt))
    console.log(data)
    //接收到的数据过期 10秒就不做处理
    if(new Date().getTime() - Number(data.header.create_time) > 10000) {
        res.send({
			data: {},
			message: 'err',
			code: 400
		})
        return
    }
	if (data.header.event_type == 'im.message.receive_v1') {
        let contents = JSON.parse(data.event.message.content)
        console.log(contents)
        console.log(data.event.sender.sender_id.open_id)
        let result = '测试'
        //GPT识别码
        if(contents.text.indexOf('GPT') != -1) {
            setMessages(data.event.sender.sender_id.open_id)
            result = await webGpt(contents.text.substring((contents.text.indexOf('GPT')+ 3)))
            console.log(result)
            if(!result) {
                result = '网络不稳定,请重试'
            }
        }
       
        const url = `https://open.feishu.cn/open-apis/im/v1/messages/${data.event.message.message_id}/reply`;
        // at功能
        // if (data.event.sender.sender_id.open_id) content = `<at user_id="${data.event.sender.sender_id.open_id}"></at> ${content}`;
        const getData = await httpsAxios(url, { content: JSON.stringify({ text: result }),"msg_type": "text"})
        res.send({
			data: {},
			message: 'success',
			code: 200
		})
    } else {
        res.send({
			data: {},
			message: 'err',
			code: 400
		})
    }
	// 	res.send({
	// 		challenge: req.body.challenge,
	// 		data: {},
	// 		message: 'err',
	// 		code: 500
	// 	})
})

 3.1  AESCipher 解密

// 解密接收事件数据
const crypto = require("crypto");
class AESCipher {
    constructor(key) {
        const hash = crypto.createHash('sha256');
        hash.update(key);
        this.key = hash.digest();
    }
    decrypt(encrypt) {
        const encryptBuffer = Buffer.from(encrypt, 'base64');
        const decipher = crypto.createDecipheriv('aes-256-cbc', this.key, encryptBuffer.slice(0, 16));
        let decrypted = decipher.update(encryptBuffer.slice(16).toString('hex'), 'hex', 'utf8');
        decrypted += decipher.final('utf8');
        return decrypted;
    }
}

3.2 回复用户信息 调取api 开发文档 - 飞书开放平台https://open.feishu.cn/open-apis/im/v1/messages/${data.event.message.message_id}/reply

let url = `https://open.feishu.cn/open-apis/im/v1/messages/${data.event.message.message_id}/reply`
let result = ''
const getData = await httpsAxios(url, { content: JSON.stringify({ text: result }),"msg_type": "text"})

3.3 发送信息给用户 调用 api 开发文档 - 飞书开放平台

https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id文章来源地址https://www.toymoban.com/news/detail-524933.html

//receive_id 用户open_id
const setMessages = (receive_id) =>{
    httpsAxios('https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id', {
        "receive_id": receive_id,
        "msg_type": "text",
        "content": "{\"text\":\"等我C一下...\"}"
    }).then(res=>{
    }).catch(err=>{
    })
}

到了这里,关于飞书接入机器人NODE开发自动回复的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python+selenium+docker+飞书机器人部署自动预约程序

    笔者最近需要重复使用一个预约程序,就想实现自动化预约,本以为是一个简单的项目,但从编写到部署还是兜兜转转了好久,写文章记录一下,也分享一下遇到的问题方便读者更快的搭建 selenium是一个web模拟应用,可以模仿用户在浏览器中的行为 在一开始测试的时候,是在

    2023年04月19日
    浏览(43)
  • 如何用JS写一套钉钉的机器人自动回复,要求调用chatgpt

    请注意,本文由chatgpt 3.5完成,请自行验证该回答的严谨性。 为了用JS编写一套钉钉机器人自动回复,调用ChatGPT,可以按照以下步骤: 创建一个钉钉机器人:在钉钉开放平台上创建一个机器人,并获取机器人的Webhook地址和密钥。 安装必要的依赖:使用Node.js环境,在项目根目

    2024年02月02日
    浏览(30)
  • 飞书开发学习笔记(七)-添加机器人及发送webhook消息

    1.1 添加飞书机器人过程 在群的右上角点击折叠按键…选择 设置 群机器人中选择 添加机器人 选择自定义机器人,通过webhook发送消息 弹出的信息中有webhook地址,选择复制。 安全设置后续可以设置,比如将信任的IP地址加入IP白名单。 选择仅群主和添加者可以编辑移除机器人

    2024年02月05日
    浏览(32)
  • 【实测】记录用wxauto chatGPT 文心一言等来做微信粉丝群自动回复机器人(一)

            本人因粉丝群过多,导致群主回复各种技术问题不及时。所以便想着用微信自动回复功能,借着gpt等AI的牛逼回复,来给群内小伙伴的各种问题能更方便的提供建议。         首先,这种自动化框架 + gpt大模型接口,你几乎可以实现你想做的任何事。         比如,

    2024年01月19日
    浏览(57)
  • python 飞书 机器人

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/e4758957286342999266a4ed01e19d59.png

    2024年01月23日
    浏览(41)
  • java实现钉钉群机器人@机器人获取信息后,机器人回复(机器人接收消息)

    1.需求 鉴于需要使用钉钉群机器人回复,人们提出的问题,需要识别提出的问题中的,后端进行处理实现对应的业务逻辑 2.实现方式 用户@群机器人,附带提出的问题,后端接收消息后识别消息内容,读取到进行对应的业务逻辑操作后,机器人获取返回的信息后

    2024年02月14日
    浏览(39)
  • 飞书机器人webhook调用

    调用飞书机器人webhook进行打卡提醒

    2024年02月16日
    浏览(30)
  • php对接飞书机器人

    有同事接到对接飞书机器人任务,开发中遇到响应错误: 意思应该就是签名错误或者时间戳不在有效范围内等,官方文档解释: 时间戳是取的实时的,也确认过了没问题,那基本确认就是签名错误了。 按照文档尝试调试了一下还是一样的结果,如果把后台安全设置那个签名

    2024年02月07日
    浏览(29)
  • 飞书ChatGPT机器人 – 打造智能问答助手

    在飞书中创建chatGPT机器人并且对话,在下面操作步骤中,使用到了Git克隆项目,需提前安装好Git,克隆的项目是Go语言项目,所以需提前安装Go语言环境。 Git Go1.20 首次注册飞书,我们可以创建个人账号 进入后 我们创建一个飞书 企业自建项目 然后设置机器人名称和描述,下面

    2024年02月16日
    浏览(70)
  • 飞书机器人小助手@特定人

    文档接口: https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN 创建机器人小助手   消息推送测试 获取艾特人 open_id @特定人请求

    2024年02月16日
    浏览(91)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包