Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

基于开放 API 封装 Wechaty 接口下的企业微信聊天机器人 #2

Closed
rickyyin98 opened this issue May 28, 2020 · 10 comments
Closed

Comments

@rickyyin98
Copy link
Contributor

rickyyin98 commented May 28, 2020

此次活动

开源软件供应链点亮计划

“开源软件供应链点亮计划-暑期2020”(以下简称 暑期2020)是由中科院软件所与 openEuler 社区共同举办的一项面向高校学生的暑期活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进国内优秀开源软件社区的蓬勃发展。
根据项目的难易程度和完成情况,参与者还可获取“开源软件供应链点亮计划-暑期2020”活动奖金和奖杯。
官网:https://isrc.iscas.ac.cn/summer2020 官方新闻:http://www.iscas.ac.cn/xshd2016/xshy2016/202004/t20200426_5563484.html

Wechaty

Wechaty 是一个开源聊天机器人框架SDK,具有高度封装、高可用的特性,支持NodeJs, Python, Go 和Java 等多语言版本。在过去的4年中,服务了数万名开发者,收获了 Github 的 8000 Star。同时配置了完整的DevOps体系并持续按照Apache 的方式管理技术社区。

基于开放 API 封装 Wechaty 接口下的企业微信聊天机器人

背景介绍

微信个人号可以制作大量的微信机器人,但是这些机器人并非使用微信官方的接口,因此有被封号的风险,2019年12月,企业微信发布3.0产品发布会,官方宣布可以和个人微信互通,用户无需下载企业微信即可通过个人微信和企业微信交流,并提供了300多个合规的官方API接口。这意味着大量的基于微信自动化的需求可以通过企业微信实现,这是一个革命性的变革。

需求介绍

企业需要将聊天记录储存并进行分析,但接口过于复杂,需要基于现有开放接口进行二次封装

企业微信作为微信的企业版,提供多种API来满足企业的不同需求。而企业微信提供的会话存档功能能满足企业消息做留存、进而通过分析大量的消息数据优化工作流程、追责和质检这一需求。
但是,企业微信的会话存档接口因为安全要求很高,所以有很多的加密,解析等工作,虽然一方面保证了安全性,但是却大大增加了开发的难度。

Wechaty是全球最大的开源聊天机器人框架,希望实现基于同一套应用层代码实现不同软件的聊天机器人

Wechaty 作为全球最大的聊天机器人开发者社区之一,提供了非常简单的接口实现,让开发者能够用6行代码就实现自己的一个聊天机器人,如果能把企业微信的会话存档接口封装到 Wechaty 里来,则可以大大简化企业内开发者的开发流程。
因为 Wechaty 是建立在 puppet 系统之上的,puppet 是 Wechaty 依赖的一层抽象层,它定义了底层各个 IM 接入方案需要实现的接口,也正是因为 puppet 抽象层的存在,让很多 Wechaty 开发者可以仅仅通过一个变量,就能够随意切换不同的底层 IM 接入。

项目难度

高(奖金:12000元)

导师联系方式

  • 高原:句子互动CTO、前亚马逊工程师(gaoyuan@juzi.bot
  • 李佳芮:句子互动CEO、专注微信生态近10年(rui@juzi.bot

项目产出目标

核心目标

企业微信会话存档 puppet

  • 接入企业微信会话存档接口读取消息
  • 定时读取消息,并在读取消息之后触发消息事件
  • 实现 puppet 上各个类型的消息接口
  • 设计配置参数
  • 企业微信会话存档 puppet 的使用文档

项目技术栈

  • 了解 javascript 语言
  • 有 typescript 语言的使用经验优先
  • 熟练使用 Github 的优先
  • 如果你的学习能力超强,可以无视上面的技术要求

相关资料

Link to #3 (Wechaty 社区暑期2020项目单)

@rickyyin98 rickyyin98 changed the title [任务]基于开放 API 封装 Wechaty 接口下的企业微信聊天机器人 基于开放 API 封装 Wechaty 接口下的企业微信聊天机器人 May 29, 2020
@Sapio-S
Copy link

Sapio-S commented Jul 19, 2020

[基于开放 API 封装 Wechaty 接口下的企业微信聊天机器人] 进度报告

日期:07-19

本周完成的成果

没有正式的代码产出。
配置了基本的工作环境。在阅读wechaty的几个puppet的源码后,我感到自己对于wechaty中使用的技术栈不是很了解,因此本周主要在学习node.js和typescript的相关内容,并且使用较为熟悉的语言(python)进一步探究企业微信API的交互方式。

本周遇到的困难和需要配合的地方

遇到的困难:主要还是对于运用的技术不太熟悉,需要学习掌握新的语言和技术,挑战较大,部分概念一时难以厘清或运用。
需要配合的地方:在整理出问题清单后需要及时和导师沟通,解决问题。

下周的开发计划和预计成果

1:与导师沟通,明确开发方向,彻底理解wechaty的工作机制。
2:配置一个简单的puppet,运行ding-dong-bot(尽可能使contact-bot得以运行)。

其他需要说明和同步的事项

由于学校的一个暑期课程,我前两周几乎没能在项目上投入时间,基本上是本周后期才开始正式工作,耽误了很多进度,抱歉。

@huan
Copy link
Member

huan commented Jul 19, 2020

Hello @Sapio-S ,

It's great to know you have start reading the source code of the Wechaty Puppet, and please feel free to ask questions by submitting GitHub issues and in our WeChat room, I believe our mentors and other SoC developers will be able to give you a hand when you need any help!

@Sapio-S
Copy link

Sapio-S commented Jul 26, 2020

[基于开放 API 封装 Wechaty 接口下的企业微信聊天机器人] 进度报告

日期:07-26

本周完成的成果

理解wechaty [puppet的具体机制。
掌握了企业微信的加密解密,可以通过node与企业微信进行消息的传递,但是还没有完全应用到puppet上。
(目前的测试功能为:bot接收到消息,解析消息并在控制台打印,同时加密回复“hi”。可以达到预期的效果)

本周遇到的困难和需要配合的地方

由于微信验证不能使用本地的IP,我折腾了好久才在 @纪华裕 的帮助下完成了内网穿透……感谢!
没太明白puppet如何对接wechaty的接口,可能需要寻求导师的辅导。

下周的开发计划和预计成果

在puppet上完成start, stop, message, contact这四项相关的内容,运行startup examples里面的ding-dong-bot & contact-bot。

其他需要说明和同步的事项

代码将在接入puppet后进行更新。目前的测试版本直接与企业微信交互,与WeChaty的逻辑无太大关联,因此尚未上传。

@Sapio-S
Copy link

Sapio-S commented Aug 2, 2020

[基于开放 API 封装 Wechaty 接口下的企业微信聊天机器人] 进度报告

日期:08-02

本周完成的成果

重新理解项目要求。
熟悉ffi和企业微信windows环境SDK的内容,完成了信息拉取的demo。demo的大致逻辑为:在c++中获取信息及解密,通过ffi将信息转移至node,由node打印到控制台。输出示例如下(进行了简单的打码处理)。

{"msgid":"108500000","action":"send","from":"","tolist":["hxx","kxxxPxxHxxTxxLxxx","QxLxxSxx","mxxxx","fxxxxxx"],"roomid":"wrxxx","msgtime":15961000,"msgtype":"text","text":{"content":"【未知消息类型】"}}

本周遇到的困难和需要配合的地方

ffi全是坑……太可怕了。哪怕跟着教程安装仍然会有很多奇怪的bug……

下周的开发计划和预计成果

正式开始企业puppet的开发,完成不同消息格式的信息拉取。

其他需要说明和同步的事项

  • 代码将在接入puppet后进行更新。目前的测试版本直接与企业微信交互,与WeChaty的逻辑无关,因此尚未上传。
  • c++部分的代码依赖于openssl(解密)和rapidJson(抽取json信息)两个库,需要提前在环境变量中配置。(本来用了JsonCpp的,但是在编译成为dll文件供ffi使用时出现了麻烦的bug,因此换成了RapidJson。)
  • 由于部分代码的限制,运行环境为x64,需要将node、ffi、ref等全部更改为x64并且重新使用node-gyp编译。
  • 需要将c++目录下的全部dll复制到node项目对应的文件夹下。
  • 几个卡了我很久的、比较少见的ffi安装bug有:
    1)没有binding.cc这个文件,需要自己建一个空文件;
    2)node和npm需要降级,否则安装ffi/ref会报很多很多的错;
    3)ffi的example(factorial.c)在本地Visual Studio编译前需要更改宏结构,否则会报“Error: Dynamic Symbol Retrieval Error: Win32 error 127”。

@Sapio-S
Copy link

Sapio-S commented Aug 10, 2020

[基于开放 API 封装 Wechaty 接口下的企业微信聊天机器人] 进度报告

日期:08-09

本周完成的成果

将上周完成的信息拉取功能拆分到了多个函数中,试图封装到puppet中进行调用。模仿了puppet mock的格式和接口,但是出现了大量奇怪的问题,仍然在debug中。

本周遇到的困难和需要配合的地方

对于node的运行环境和编译有一些疑问,报的错无法在网络上搜索到相似内容。可能需要适当咨询导师或寻求其他开发者的帮助。

下周的开发计划和预计成果

撰写中期报告,在中期报告提交前完成puppet拉取功能的封装。

其他需要说明和同步的事项

无。

@huan
Copy link
Member

huan commented Aug 10, 2020

Hi @Sapio-S, great to know that you are starting debugging the puppet related code!

If you have any questions about that, I'd like to suggest that you can ask questions on Stackoverflow with the wechaty tag.

See: https://stackoverflow.com/questions/tagged/wechaty

@Sapio-S
Copy link

Sapio-S commented Aug 16, 2020

[基于开放 API 封装 Wechaty 接口下的企业微信聊天机器人] 进度报告

日期:08-16

本周完成的成果

完成了puppet的demo。封装了puppet文本类消息的获取,以及企业微信媒体文件传输SDK接口的转化。
经导师建议,设定每秒钟拉取1-2次消息,以形成“即时拉取”。
完成了五次重复请求,无有效信息传递则报错的功能。

本周遇到的困难和需要配合的地方

在测试中无法拉取到想要的信息,只能拉取一些特定群聊的信息,无法拉取自己收发的消息(我应当是同意拉取了)。等待一段时间仍然无法拉取。对于测试功能产生了一定的影响,可能还需要进一步的研究。

下周的开发计划和预计成果

引入manager,对puppet内部功能解耦合;
完成企业微信“获取媒体文件”的功能封装;
改善数据存储方式,可能将引入缓存;
完成中期视频和blog的发送。

其他需要说明和同步的事项

未来可能需要对于即时拉取的消息进行查重(或者标记),以及更改传输结构,使得每次拉取可以达到SDK的上限(1000条消息),以满足大规模收发消息的需要。

@Sapio-S
Copy link

Sapio-S commented Sep 13, 2020

[基于开放 API 封装 Wechaty 接口下的企业微信聊天机器人] 进度报告

日期:09-14

本周完成的成果

对switch等消息类型进行了简单的封装;将拉取到的信息暂存在了文件中。
完成了图片的拉取。

本周遇到的困难和需要配合的地方

无。

下周的开发计划和预计成果

完成全部媒体文件的拉取,建立缓存。最好可以重构代码,完善功能。

其他需要说明和同步的事项

由于学校的暑期课程及上学期的期末考试,进度又一次落后,实在抱歉!会努力赶上的QAQ

@Sapio-S
Copy link

Sapio-S commented Sep 21, 2020

[基于开放 API 封装 Wechaty 接口下的企业微信聊天机器人] 进度报告

日期:09-21

本周完成的成果

完成了全部媒体文件及文本消息格式的拉取。(一些消息类型如“红包消息”由于没有对应的类型,因此目前存储的是描述文字)
其中,文本消息格式存储在txt中,媒体文件存储在文件夹中。
(媒体的拉取有测试,部分特殊文本消息暂无测试)

本周遇到的困难和需要配合的地方

和导师沟通,明确仍需完成的任务。

下周的开发计划和预计成果

封装Contact类;
调整消息存储的格式,或者linux系统下调试。

其他需要说明和同步的事项

无。

@huan huan added the summer2020 label Jan 4, 2021
@huan
Copy link
Member

huan commented Jan 10, 2021

@Sapio-S Thank you very much for joining the Wechaty open source project and finished Summer 2020 successfully!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants