【喂饭教程】本地知识库Dify如何接入企业微信(方法1-作为应用接入)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


说明

写博客小白(第一篇),仅记录自己踩得坑,欢迎大家指出问题或交流:


提示:以下是本篇文章正文内容,按照本博客可以独立完成dify接入企业微信(可耐心看完),下面案例可供参考

1、所需解决问题

希望将本地构建的知识库,接入至企业微信中。

1.1 能否用自己创建的企业微信(未绑定真实企业)进行接入

答案是:可以的

1.2 能否用企业微信(绑定真实企业)进行接入

答案是:可以的,主要区别是需要用到企业备案的域名

1.3 是否一定需要购买云服务器才能接入企业微信

答案是:不是必须项

2、查阅过哪些帖子

  1. 基于AppFlow部署,可以接入企业微信,但是dify非本地化部署,需要用到云服务器资源,参考帖子如AppFlow:无代码部署Dify并集成到企业微信
  2. 基于chatgpt-on-wechat,可以接入企业微信,但是没有dify接入的方法,有看到将dify api转化为 openai api的方式进行接入,参考帖子如chat-gpt接入企业微信
  3. 于dify-on-wechat,找到的参考信息主要是用于接入个人微信,比如【LLMOps】手摸手教你把 Dify 接入微信生态,可能有封号风险(仅个人观点)
  4. 基于langbot接入企业微信,参考帖子如Moonshot+知识库,一键接入企业微信,打造智能助理langbot官方文档,最终参考这个帖子将基于langbot将本地部署的dify接入至企业微信(但是也踩了一些坑,卡了好久)

3、接入效果【可先看效果,是不是你想要的!!!】

在企业微信中,可以像与某个用户一样和自建的“三根草的AI助手”进行聊天、询问,它结合本地知识库进行回答。
在这里插入图片描述

4、具体步骤

假设你有一台内网服务器(如10.200.15.201服务器),ubuntu系统,想将该ubuntu系统中部署的dify知识库接入企业微信

4.1 注册企业微信,并在企微中创建应用

4.1.1 注册自己企业的企业微信(具备管理员权限)

企业微信后台,选择“立即注册”,填入基本信息完成注册(基本无坑,也不会影响自己原来加入的公司正式企微)
在这里插入图片描述
在这里插入图片描述

4.1.2 创建应用

在这里插入图片描述
依次选择logo、填入“应用名称”、“选择部门”,即完成“创建应用”
在这里插入图片描述

4.1.3 获取企微和应用信息

4.1.3.1 获取企业ID

企业ID存入至临时txt文件中备用
、

4.1.3.2 打开通讯录同步 ,并获取通讯录secret

在这里插入图片描述
通讯录secret,可在企业微信消息中查看,存入至临时txt文件中备用
在这里插入图片描述

4.1.3.3 获取应用Secret

在这里插入图片描述

4.1.3.4 获取应用token和EncodingAESKey

在这里插入图片描述
在这里插入图片描述
其中,第1、2、3步获得token和EncodingAESKey,存入至临时txt文件中备用;
第4步非常关键,很多人都会在这里卡注,参考我这边的方案一定能成功(已经验证过)。如果是非正式企业(刚刚自己注册的),需要将内网IP映射一个公网IP(需要借助一些内网透传的方法,内网透传------局域网IP映射到公网),如果是正式企业,直接找公司运维部门或者信息化部门直接申请公网IP以及对应的二级域名。
举个例子:
1)非正式企业用户
部署langbot的服务器(内网IP:10.200.15.201),需要内网透传获得公网IP(公网IP:218.10.21.78),这里应该填入:
http://218.10.21.78:2291/callback/command
在这里插入图片描述
2)正式企业用户
部署langbot的服务器(内网IP:10.200.15.201),需要内网透传获得公网IP(公网IP:218.10.21.78),申请到的公司二级域名(http://ai.company_name.cn)这里应该填入:http://ai.company_name.cn/callback/command
在这里插入图片描述

4.1.3.5 设置企业可信IP

填入对应的公网IP,不是域名,比如:218.10.21.78
在这里插入图片描述

4.1.3.6 暂存txt文档信息基本情况

包含企业id,通讯录secret,应用secret,token,encodingAESKey
在这里插入图片描述

4.2 本地化部署langBot

在本地服务器,执行如下命令

sudo curl -fsSL -o /usr/local/bin/langbot-wecom https://pan.thelazy.top/f/VjHg/langbot-wecom.sh && sudo chmod +x /usr/local/bin/langbot-wecom && sudo bash /usr/local/bin/langbot-wecom

然后,依次选择"y"、“1”、“2”、“y”,则完成langBot部署及配置

4.3 本地化部署dify,并构建聊天应用

在本地服务器(与langbot部署同一个服务器即可),按照官方文档部署(基本无坑),可参考帖子本都部署Dify

git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up -d

运行结果如下:
在这里插入图片描述

4.4 将langbot与企业微信打通

利用暂时txt文档中保存的信息,依次输入企业ID、通讯录secret、应用secret、Token、EncodingAESkey,注意如果提示api不通,大概率是以上五个信息没有填对,特别是Token、EncodingAESkey容易误更新,重新填写即可。
在这里插入图片描述
至此,在聊天窗口中与我们构建的应用聊天,比如输入“你好”,一定时间后返回“请求失败”,则说明企业微信与langbot是打通的,langbot能收到企业微信的请求,只是langbot与本地dify未打通,所以只能回答“请求失败”这种类似消息,下面我们来配置langbot与本地化部署的dify。

4.5 将langbot与本地部署dify打通【重点!!!】

4.5.1 langbot填入dify相关信息

在这里插入图片描述
关于dify api key和dify base url均可在dify应用中查询获取。
1)获取dify api key
在这里插入图片描述
在这里插入图片描述
2)获取dify base url
在这里插入图片描述
至此,langbot接入dify配置完成,但是是无法使用的,需要在langbot webui中修改相关配置

4.5.2 langbot webui中修改相关配置【踩坑最久的地方!!!】

1)进入langbot webui,在langbot填入dify相关信息后会弹出webui相关url信息,一般为http://218.10.21.78:5301(一般端口号为5301或者5300),首次进入先设置,然后登录
在这里插入图片描述
2)设置provider.json文件中相关信息
在这里插入图片描述3)provider.json需要修改的内容
a)请求运行器
修改为“dify-service-api”
在这里插入图片描述
b)大模型请求器
因为本地模型是利用ollama运行的,所以这里修改Ollama API,特别需要注意 API URL要设置为172.17.0.1(这是docker0 的ip),这是为其他,比如127.0.0.1等都不行(原因不详,求指教)
在这里插入图片描述
在这里插入图片描述
关于docker0 ip获取方法,ip addr show docker0
在这里插入图片描述
c)所使用的模型名称
填入ollama/deepseek-r1:32b
在这里插入图片描述
d)dify service api设置
在这里插入图片描述
在这里插入图片描述

4.5.3 langbot容器中修改本地大模型路径【踩坑最久的地方!!!】

a)从langbot容器中复制一份llm-models.json文件至宿主机,按样图编辑,增加本地ollama模型
在这里插入图片描述
b)docker cp 将修改后的llm-models.json复制至容器中
在这里插入图片描述
c)重启容器
在这里插入图片描述


总结

至此,基于langbot将本地知识库dify作为应用接入至企业微信,欢迎交流!

### 企业微信API概述 企业微信提供了丰富的API接口来满足不同场景下的需求,这些接口涵盖了从基础的消息发送到复杂的业务逻辑处理等多个方面[^3]。 ### 获取Access Token 为了调用大多数的企业微信API,首先需要获取`access_token`。这是访问其他API的基础凭证: ```python import requests def get_access_token(corp_id, corp_secret): url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corp_id}&corpsecret={corp_secret}" response = requests.get(url).json() if "errcode" in response and response["errcode"] != 0: raise Exception(f'Error getting access token: {response}') return response['access_token'] ``` ### 文件上传并发送至聊天会话 对于文件类型的媒体资源,在发送之前需先将其上传到企业微信服务器,并取得相应的media_id用于后续操作。下面是一个完整的例子展示如何实现这一过程: ```python from typing import Tuple class WebChartApi: def __init__(self, corpid: str, corpsecret: str): self.corp_id = corpid self.corp_secret = corpsecret def upload_media(self, type_: str, path_to_file: str) -> Tuple[str]: """Upload a media file to WeCom server.""" access_token = get_access_token(self.corp_id, self.corp_secret) files = {'file': open(path_to_file,'rb')} resp = requests.post( f'https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={access_token}&type={type_}', files=files ).json() if 'media_id' not in resp or resp.get('errcode') != 0: raise ValueError(f'Media upload failed with error code {resp.get("errcode")}: {resp}') return resp['media_id'] def send_message_with_media(self, webhook_key: str, media_id: str): """Send message containing uploaded media via bot's webhook URL""" payload = { "msgtype": "file", "file": {"media_id": media_id} } headers = {'Content-Type': 'application/json'} res = requests.post( f'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={webhook_key}', json=payload, headers=headers ) result = res.json() if result.get('errmsg') != 'ok': raise RuntimeError(f'Send message failed: {result}') # Example usage of the above class methods. if __name__ == '__main__': api_instance = WebChartApi('<CORP_ID>', '<CORP_SECRET>') media_identifier = api_instance.upload_media('file', '/path/to/file') api_instance.send_message_with_media('<WEBHOOK_KEY>', media_identifier) ``` 上述代码展示了如何创建一个简单的类`WebChartApi`来进行文件上传以及通过机器人发送消息的功能[^1][^2].
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值