2分钟将LMU(GPT)接入到企业微信
本方案依赖第三方云服务器,你也可以基于接口其中的NodeJS代码在自己本地服务器的部署。
接入条件
接入具体方法如下:
第一步
点击打开LMU AI 开放平台,点击 “免费开始”,如下图:

2. 注册登录后,如下图获取 AppId
和 API 密钥
。
- 第一步点击左侧 “应用”
- 第二步点击 “+” 号
- 第三步选择 “API”,此时可以获得下面对 AppId
- 第四部选择 “API密钥”,选择“新建密钥” 并且复制出来。

3. 将获得的 API密钥
和 AppId
准备好后面用。
第二步
- 进入企业微信管理后台-“我的企业”页面底部,记录这里的企业ID为:
WXWORK_CORPID

2. 进入应用管理页面,点击【创建应用】, 填写应用信息后点击【创建应用】,如果已经有现成的应用,可以跳过此步骤。


3. 点击刚刚创建好的应用,进入应用详情页面。记录这里的 AgentId
和 Secret
(需要点击获取按钮,在企业微信聊天窗口里面获取),分别为WXWORK_AGENTID
和 WXWORK_CORPSECRET
。


4. 设置企业微信信息接受

点击【设置API】进入API接收消息页面,点一下两个【随机获取】按钮,它会自动生成一个Token和EncodingAESKey
,我们分别记为WXWORK_TOKEN
和 WXWORK_AESKEY
。
⚠️ 注意: 不要关掉这个页面,Laf服务器侧配置完毕后我们再来填写顶部的这个URL
第三步

输入应用名称,选择最低配置Lite
服务器

3. 点击【开发】进行开发配置。

如下图,点击 +
号,搜索 xml2js
和@wecom/crypto
并添加。

4. 点击【函数列表】的 +
号,创建一个云函数 chatgpt
(不可改名),如图取消所有请求方法,填写下面的代码并发布。

import cloud from '@lafjs/cloud'
export async function sendGptMessage(message) {
// console.log('send gpt message', message)
const res = await cloud.fetch({
url: 'https://ai.fulitimes.com/api/openapi/chat/chat',
method: 'POST',
headers: {
apikey: process.env.FASTGPT_APIKEY
},
data: {
"modelId": process.env.FASTGPT_MODEL_ID,
"isStream": false,
"prompts": [
{
"obj": "Human",
"value": message
},
]
},
timeout: 60000 // 设置请求超时时间为60s
})
// console.log('send gpt message result', res?.data)
return res.data?.data
}
5. 点击【函数列表】的 +
号,创建一个云函数 wxwork
(不可改名),如图取消所有请求方法,填写下面的代码并发布。

import cloud from '@lafjs/cloud'
export async function getToken() {
const cache = cloud.shared.get('access-token')
if (cache && cache.expires >= Date.now()) return cache.token;
// console.log('start to get token of', process.env.WXWORK_CORPID)
const res = await cloud.fetch({
url: 'https://qyapi.weixin.qq.com/cgi-bin/gettoken',
method: 'get',
timeout: 60000, // 设置请求超时时间为60s
params: {
corpid: process.env.WXWORK_CORPID,
corpsecret: process.env.WXWORK_CORPSECRET,
}
})
const token = res.data.access_token
cloud.shared.set('access-token', { token, expires: Date.now() + res.data.expires_in * 1000 })
return token
}
export async function sendMessage(message, user) {
// console.log('send messagge', user, message)
const res = await cloud.fetch({
url: 'https://qyapi.weixin.qq.com/cgi-bin/message/send',
method: 'POST',
timeout: 60000, // 设置请求超时时间为60s
params: {
access_token: await getToken()
},
data: {
"touser": user,
"msgtype": "text",
"agentid": process.env.WXWORK_AGENTID,
"text": {
"content": message
},
"safe": 0,
"enable_id_trans": 0,
"enable_duplicate_check": 0,
"duplicate_check_interval": 1800
}
})
// console.log('send message result', res.data)
}
6. 点击【函数列表】的 +
号,创建一个云函数 wxwork-gpt-api
(名字可以自定义),保留POST
和 GET
,填写下面的代码并发布。

import cloud from '@lafjs/cloud'
import { decrypt, getSignature } from '@wecom/crypto';
import { sendMessage } from '@/wxwork'
import { sendGptMessage } from '@/chatgpt'
import xml2js from 'xml2js';
export default async function (ctx: FunctionContext) {
const { query } = ctx;
const { msg_signature, timestamp, nonce, echostr } = query;
const token = process.env.WXWORK_TOKEN;
const key = process.env.WXWORK_AESKEY;
console.log('start to invoke wxwork-gpt-api')
// 签名验证专用
if (ctx.method === 'GET') {
const signature = getSignature(token, timestamp, nonce, echostr);
if (signature !== msg_signature) {
return { message: '签名验证失败', code: 401 }
}
const { message } = decrypt(key, echostr);
return message
}
console.log("ctx.params:", ctx)
const payload = ctx.body.xml;
const encrypt = payload.encrypt[0];
const signature = getSignature(token, timestamp, nonce, encrypt);
if (signature !== msg_signature) {
return { message: '签名验证失败', code: 401 }
}
//ctx.response.sendStatus(200);
const { message } = decrypt(key, encrypt);
const {
xml
} = await xml2js.parseStringPromise(message)
// 由于GPT API耗时较久,这里提前返回,防止企业微信超时重试,后续再手动调用发消息接口
ctx.response.sendStatus(200);
await asyncSendMessage(xml)
return { message: true, code: 0 }
}
async function asyncSendMessage(xml) {
if (xml.MsgType[0] !== 'text') return;
// sendMessage('请稍等...', xml.FromUserName[0])
try {
const result = await sendGptMessage(xml.Content[0])
await sendMessage(result, xml.FromUserName[0])
}
catch (e) {
console.log(e, e.config)
sendMessage('接口请求失败,请联系管理员查看错误信息', xml.FromUserName[0])
}
}
7. 复制 wxwork-gpt-api
(可能是你自定义的函数名称)这个云函数的调用地址,将它填写到企业微信管理后台【API接收消息】页面中的URL中,并保存上述信息。


8. 点击左下角设置,选择环境变量,将刚刚收集的
SERVER_SECRET=""
WXWORK_TOKEN=""
WXWORK_AESKEY=""
WXWORK_CORPID=""
WXWORK_AGENTID=""
WXWORK_CORPSECRET=""
FASTGPT_APIKEY=""
FASTGPT_MODEL_ID=""
填入,并点击更新按钮。

9. 将服务器IP添加到企业微信的白名单中。

这是截止本文发布,laf的白名单:
112.124.8.17;112.124.9.194;112.124.9.83;114.55.177.246;114.55.179.67;120.26.161.248;120.26.163.28;120.27.246.172;47.97.22.68;47.97.5.237
你也可以通过下面方式获取Laf 的最新 IP 池
- Windows 可在 CMD 中执行
nslookup laf.run
- Mac 可在终端中执行
nslookup laf.run
结束
以上是基于Laf云服务器的 NodeJs 框架实现的,你也可以参考上面NodeJs代码或者LMU的接口文档,在自己的服务器上实现接入。
到此就完成了所有的配置,就可以在企业微信中和GPT或者你的知识库对话了。
