{"id":19175930,"url":"https://github.com/connectai-e/dingtalk-wenxin","last_synced_at":"2025-09-11T17:21:08.135Z","repository":{"id":172414705,"uuid":"647529479","full_name":"ConnectAI-E/Dingtalk-Wenxin","owner":"ConnectAI-E","description":"🍍  钉钉 × 文心一言 = 擅长中文超级伙伴","archived":false,"fork":false,"pushed_at":"2023-06-04T10:20:58.000Z","size":68,"stargazers_count":12,"open_issues_count":2,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-07T19:11:31.743Z","etag":null,"topics":["connect-ai","dingtalk","dingtalk-robot","go","golang","wenxinyiyan"],"latest_commit_sha":null,"homepage":"https://www.connectai-e.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ConnectAI-E.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-31T01:34:11.000Z","updated_at":"2024-04-30T06:32:34.000Z","dependencies_parsed_at":null,"dependency_job_id":"6265f0d2-82d3-4242-ab67-5552c63f58c1","html_url":"https://github.com/ConnectAI-E/Dingtalk-Wenxin","commit_stats":null,"previous_names":["connectai-e/dingtalk-wenxin"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ConnectAI-E/Dingtalk-Wenxin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ConnectAI-E%2FDingtalk-Wenxin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ConnectAI-E%2FDingtalk-Wenxin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ConnectAI-E%2FDingtalk-Wenxin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ConnectAI-E%2FDingtalk-Wenxin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ConnectAI-E","download_url":"https://codeload.github.com/ConnectAI-E/Dingtalk-Wenxin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ConnectAI-E%2FDingtalk-Wenxin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272582506,"owners_count":24959419,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-28T02:00:10.768Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["connect-ai","dingtalk","dingtalk-robot","go","golang","wenxinyiyan"],"created_at":"2024-11-09T10:26:27.938Z","updated_at":"2025-08-28T23:48:08.637Z","avatar_url":"https://github.com/ConnectAI-E.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 前言\n\n本项目可以助你将百度文心一言集成到钉钉群聊当中。\n\n## 功能介绍\n\n- 🚀 帮助菜单：通过发送 `帮助` 将看到帮助列表，[🖼 查看示例](#%E5%B8%AE%E5%8A%A9%E5%88%97%E8%A1%A8)\n- 🥷 私聊：支持与机器人单独私聊(无需艾特)，[🖼 查看示例](#%E4%B8%8E%E6%9C%BA%E5%99%A8%E4%BA%BA%E7%A7%81%E8%81%8A)\n- 💬 群聊：支持在群里艾特机器人进行对话\n- 🙋 单聊模式：每次对话都是一次新的对话，没有历史聊天上下文联系\n- 🗣 串聊模式：带上下文理解的对话模式\n- 🎨 图片生成：通过发送 `#图片`关键字开头的内容进行生成图片，[🖼 查看示例](#%E7%94%9F%E6%88%90%E5%9B%BE%E7%89%87)\n- 🎭 角色扮演：支持场景模式，通过 `#周报` 的方式触发内置prompt模板 [🖼 查看示例](#%E9%80%9A%E8%BF%87%E5%86%85%E7%BD%AEprompt%E8%81%8A%E5%A4%A9)\n- 🧑‍💻 频率限制：通过配置指定，自定义单个用户单日最大对话次数\n- 💵 余额查询：通过发送 `余额` 关键字查询当前key所剩额度，[🖼 查看示例](#%E6%9F%A5%E8%AF%A2%E4%BD%99%E9%A2%9D)\n- 🔗 自定义api域名：通过配置指定，解决国内服务器无法直接访问openai的问题\n- 🪜 添加代理：通过配置指定，通过给应用注入代理解决国内服务器无法访问的问题\n- 👐 默认模式：支持自定义默认的聊天模式，通过配置化指定\n- 📝 查询对话：通过发送`#查对话 username:xxx`查询xxx的对话历史，可在线预览，可下载到本地\n- 👹 白名单机制：通过配置指定，支持指定群组名称和用户名称作为白名单，从而实现可控范围与机器人对话\n- 💂‍♀️ 管理员机制：通过配置指定管理员，部分敏感操作，以及一些应用配置，管理员有权限进行操作\n- ㊙️ 敏感词过滤：通过配置指定敏感词，提问时触发，则不允许提问，回答的内容中触发，则以 🚫 代替\n- 🚇 stream模式：指定钉钉的stream模式，目前钉钉已全量开放该功能，项目也默认以此模式启动\n\n## 使用前提\n\n* 通过智能云创建应用，参考[文档](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/flfmc9do2)，创建应用之后，获取到应用秘钥对。\n* 在钉钉开发者后台创建应用，在应用的消息推送中选择stream模式。\n\n## 使用教程\n\n### 第一步，部署应用\n\n#### docker部署\n\n推荐你使用docker快速运行本项目。\n\n```\n第一种：基于环境变量运行\n# 运行项目\n$ docker run -itd --name chatgpt -p 8090:8090 \\\n  -v ./data:/app/data \\\n  -e LOG_LEVEL=\"info\" -e BAIDU_CLIENT_ID=换成你的ID -e BAIDU_CLIENT_SECRET=换成你的key \\\n  -e DEFAULT_MODE=\"单聊\" -e MAX_REQUEST=0 -e PORT=8090 -e CHAT_TYPE=\"0\" \\\n  -e ALLOW_GROUPS=a,b -e ALLOW_OUTGOING_GROUPS=a,b -e ALLOW_USERS=a,b -e DENY_USERS=a,b -e VIP_USERS=a,b -e ADMIN_USERS=a,b \\\n  -e SENSITIVE_WORDS=\"aa,bb\" -e RUN_MODE=\"stream\" \\\n  -e DINGTALK_CREDENTIALS=\"your_client_id1:secret1,your_client_id2:secret2\" \\\n  -e HELP=\"欢迎使用本工具\\n\\n你可以查看：[用户指南](https://github.com/ConnectAI-E/Dingtalk-Wenxin/blob/main/docs/userGuide.md)\\n\\n这是一个[开源项目](https://github.com/ConnectAI-E/Dingtalk-Wenxin/)\n  ，觉得不错你可以来波素质三连.\"  \\\n  --restart=always  dockerproxy.com/eryajf/dingtalk-wenxin:latest\n```\n\n\u003e 运行命令中映射的配置文件参考下边的[配置文件说明](#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%AF%B4%E6%98%8E)。\n\n- `📢 注意：`ALLOW_GROUPS,ALLOW_USERS,DENY_USERS,VIP_USERS,ADMIN_USERS 参数为数组，如果需要指定多个，可用英文逗号分割。outgoing机器人模式下这些参数无效。\n\n\n```\n第二种：基于配置文件挂载运行\n# 复制配置文件，根据自己实际情况，调整配置里的内容\n$ cp config.example.yml config.yml  # 其中 config.example.yml 从项目的根目录获取\n\n# 运行项目\n$ docker run -itd --name chatgpt -v `pwd`/config.yml:/app/config.yml --restart=always  dockerproxy.com/eryajf/dingtalk-wenxin:latest\n```\n\n其中配置文件参考下边的配置文件说明。\n\n```\n第三种：使用 docker compose 运行\n$ wget https://raw.githubusercontent.com/ConnectAI-E/Dingtalk-Wenxin/main/docker-compose.yml\n\n$ vim docker-compose.yml\n\n$ docker compose up -d\n```\n\n部署完成之后，就可以在群里艾特机器人进行体验了。\n\n#### 二进制部署\n\n\n如果你想通过命令行直接部署，可以直接下载release中的[压缩包](https://github.com/ConnectAI-E/Dingtalk-Wenxin/releases) ，请根据自己系统以及架构选择合适的压缩包，下载之后直接解压运行。\n\n下载之后，在本地解压，即可看到可执行程序，与配置文件：\n\n```sh\n$ tar xf dingtalk-wenxin-v0.0.4-darwin-arm64.tar.gz\n$ cd dingtalk-wenxin-v0.0.4-darwin-arm64\n$ cp config.example.yml  config.yml # 然后根据情况调整配置文件内容,宿主机如遇端口冲突,可通过调整config.yml中的port参数自定义服务端口\n$ ./dingtalk-wenxin  # 直接运行\n\n# 如果要守护在后台运行\n$ nohup ./dingtalk-wenxin \u0026\u003e run.log \u0026\n$ tail -f run.log\n```\n\n\n### 第二步，创建机器人\n\n#### 企业内部应用\n\n创建步骤参考文档：[企业内部开发机器人](https://open.dingtalk.com/document/robots/enterprise-created-chatbot)，或者根据如下步骤进行配置。\n\n1. 创建机器人。\n    \u003cdetails\u003e\n      \u003csummary\u003e🖼 点我查看示例图\u003c/summary\u003e\n      \u003cimg src=\"https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20221209_163616.png\"\u003e\n    \u003c/details\u003e\n\n   \u003e `📢 注意1：`可能现在创建机器人的时候名字为`chatgpt`会被钉钉限制，请用其他名字命名。\n   \u003e\n   \u003e `📢 注意2：`第四步骤点击创建应用的时候，务必选择使用旧版，从而创建旧版机器人，如果选择新版，则机器人的功能集成在了应用当中的消息推送模块儿。\n\n   步骤比较简单，这里就不赘述了。\n\n2. 配置机器人回调接口。\n    \u003cdetails\u003e\n      \u003csummary\u003e🖼 点我查看示例图\u003c/summary\u003e\n      \u003cimg src=\"https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20221209_163652.png\"\u003e\n    \u003c/details\u003e\n\n   创建完毕之后，点击机器人开发管理，然后配置将要部署的服务所在服务器的出口IP，以及将要给服务配置的域名。\n\n  \u003e `📢 注意：` 添加消息接收地址的时候，务必确保服务在正常运行且可通过回调地址访问，否则保存时将会失败。\n  \u003e\n  \u003e `📢 如果提示：` 消息接收地址校验失败（请确保公网可访问该地址，如无有效SSL证书，可选择禁用证书校验），那么可以先输入一个`https://`，然后就能看到`禁用https`的选项了，选择禁用，然后再把地址改成`http`就好了。\n\n3. 发布机器人。\n    \u003cdetails\u003e\n      \u003csummary\u003e🖼 点我查看示例图\u003c/summary\u003e\n      \u003cimg src=\"https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20221209_163709.png\"\u003e\n    \u003c/details\u003e\n\n   点击版本管理与发布，然后点击上线，这个时候就能在钉钉的群里中添加这个机器人了。\n\n4. 群聊添加机器人。\n    \u003cdetails\u003e\n      \u003csummary\u003e🖼 点我查看示例图\u003c/summary\u003e\n      \u003cimg src=\"https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20221209_163724.png\"\u003e\n    \u003c/details\u003e\n\n## 亮点特色\n\n### 与机器人私聊\n\n`2023-03-08`补充，我发现也可以不在群里艾特机器人聊天，还可点击机器人，然后点击发消息，通过与机器人直接对话进行聊天：\n\n\u003e 由 [@Raytow](https://github.com/Raytow) 同学发现，在机器人自动生成的测试群里无法直接私聊机器人，在其他群里单独添加这个机器人，然后再点击就可以跟它私聊了。\n\n\u003cdetails\u003e\n    \u003csummary\u003e🖼 点我查看示例图\u003c/summary\u003e\n    \u003cimg src=\"https://user-images.githubusercontent.com/33259379/223607306-2ac836a2-7ce5-4a12-a16e-bec40b22d8d6.png\"\u003e\n\u003c/details\u003e\n\n\n### 帮助列表\n\n\u003e 艾特机器人发送空内容或者帮助，会返回帮助列表。\n\n\u003cdetails\u003e\n    \u003csummary\u003e🖼 点我查看示例图\u003c/summary\u003e\n    \u003cimg src=\"https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230216_221253.png\"\u003e\n\u003c/details\u003e\n\n### 切换模式\n\n\u003e 发送指定关键字，可以切换不同的模式。\n\n\u003cdetails\u003e\n    \u003csummary\u003e🖼 点我查看示例图\u003c/summary\u003e\n    \u003cimg src=\"https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230215_184655.png\"\u003e\n\u003c/details\u003e\n\n\u003e 📢 注意：串聊模式下，群里每个人的聊天上下文是独立的。\n\u003e 📢 注意：默认对话模式为单聊，因此不必发送单聊即可进入单聊模式，而要进入串聊，则需要发送串聊关键字进行切换，当串聊内容超过最大限制的时候，你可以发送重置，然后再次进入串聊模式。\n\n\n### 日常问题\n\n\u003cdetails\u003e\n    \u003csummary\u003e🖼 点我查看示例图\u003c/summary\u003e\n    \u003cimg src=\"https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20221209_163739.png\"\u003e\n\u003c/details\u003e\n\n### 通过内置prompt聊天\n\n\u003e 发送模板两个字，会返回当前内置支持的prompt列表。\n\n\u003cdetails\u003e\n    \u003csummary\u003e🖼 点我查看示例图\u003c/summary\u003e\n    \u003cimg src=\"https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230323_152703.jpg\"\u003e\n\u003c/details\u003e\n\n\u003e 如果你发现有比较优秀的prompt，欢迎PR。注意：一些与钉钉使用场景不是很匹配的，就不要提交了。\n\n\n##  本地开发\n\n```sh\n# 获取项目\n$ git clone https://github.com/ConnectAI-E/Dingtalk-Wenxin.git\n\n# 进入项目目录\n$ cd dingtalk-wenxin\n\n# 复制配置文件，根据个人实际情况进行配置\n$ cp config.example.yml config.yml\n\n# 启动项目\n$ go run main.go\n```\n\n## 配置文件说明\n\n```yaml\n# 应用的日志级别，info or debug\nlog_level: \"info\"\n# 运行模式，http 或者 stream ，强烈建议你使用stream模式，通过此链接了解：https://open.dingtalk.com/document/isvapp/stream\nrun_mode: \"stream\"\n# 百度应用中的client_id\nbaidu_client_id: \"\"\n# 百度应用中的 client_secret\nbaidu_client_secret: \"\"\n# 指定默认的对话模式，可根据实际需求进行自定义，如果不设置，默认为单聊，即无上下文关联的对话模式\ndefault_mode: \"单聊\"\n# 单人单日请求次数上限，默认为0，即不限制\nmax_request: 0\n# 指定服务启动端口，默认为 8090，一般在二进制宿主机部署时，遇到端口冲突时使用，如果run_mode为stream模式，则可以忽略该配置项\nport: \"8090\"\n# 限定对话类型 0：不限 1：只能单聊 2：只能群聊\nchat_type: \"0\"\n# 哪些群组可以进行对话（仅在chat_type为0、2时有效），如果留空，则表示允许所有群组，如果要限制，则列表中写群ID（ConversationID）\n# 群ID，可在群组中 @机器人 群ID 来查看日志获取，例如日志会输出：[🙋 企业内部机器人 在『测试』群的ConversationID为: \"cidrabcdefgh1234567890AAAAA\"]，获取后可填写该参数并重启程序\nallow_groups: []\n# 哪些普通群（使用outgoing机器人）可以进行对话，如果留空，则表示允许所有群组，如果要限制，则列表中写群ID（ConversationID）\n# 群ID，可在群组中 @机器人 群ID 来查看日志获取，例如日志会输出：[🙋 outgoing机器人 在『测试』群的ConversationID为: \"cidrabcdefgh1234567890AAAAA\"]，获取后可填写该参数并重启程序\n# 如果不想支持outgoing机器人功能，这里可以随意设置一个内部群组，例如：cidrabcdefgh1234567890AAAAA；或随意一个字符串，例如：disabled\n# 建议该功能默认关闭：除非你必须要用到outgoing机器人\nallow_outgoing_groups: []\n# 以下 allow_users、deny_users、vip_users、admin_users 配置中填写的是用户的userid，outgoing机器人模式下不适用这些配置\n# 比如 [\"1301691029702722\",\"1301691029702733\"]，这个信息需要在钉钉管理后台的通讯录当中获取：https://oa.dingtalk.com/contacts.htm#/contacts\n# 哪些用户可以进行对话，如果留空，则表示允许所有用户，如果要限制，则列表中写用户的userid\nallow_users: []\n# 哪些用户不可以进行对话，如果留空，则表示允许所有用户（如allow_user有配置，需满足相应条件），如果要限制，则列表中写用户的userid，黑名单优先级高于白名单\ndeny_users: []\n# 哪些用户可以进行无限对话，如果留空，则表示只允许管理员（如max_request配置为0，则允许所有人）\n# 如果要针对指定VIP用户放开限制（如max_request配置不为0），则列表中写用户的userid\nvip_users: []\n# 指定哪些人为此系统的管理员，如果留空，则表示没有人是管理员，如果要限制，则列表中写用户的userid\nadmin_users: []\n# 敏感词，提问时触发，则不允许提问，回答的内容中触发，则以 🚫 代替\nsensitive_words: []\n# 帮助信息，放在配置文件，可供自定义\nhelp: \"这是自定义的帮助信息。\"\n\n# 钉钉应用鉴权凭据信息，支持多个应用。通过请求时候鉴权来识别是来自哪个机器人应用的消息\n# 设置credentials 之后，即具备了访问钉钉平台绝大部分 OpenAPI 的能力；例如上传图片到钉钉平台，提升图片体验，结合 Stream 模式简化服务部署\n# client_id 对应钉钉平台 AppKey/SuiteKey；client_secret 对应 AppSecret/SuiteSecret\ncredentials:\n  -\n    client_id: \"put-your-client-id-here\"\n    client_secret: \"put-your-client-secret-here\"\n```\n\n\n## 进群交流\n\n我创建了一个钉钉的交流群，欢迎进群交流。\n\n![](https://cdn.staticaly.com/gh/eryajf/tu/main/img/image_20230405_191425.jpg)\n\n\n## 赞赏\n\n如果觉得这个项目对你有帮助，你可以请作者[喝杯咖啡 ☕️](https://wiki.eryajf.net/reward/)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconnectai-e%2Fdingtalk-wenxin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconnectai-e%2Fdingtalk-wenxin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconnectai-e%2Fdingtalk-wenxin/lists"}