小白如何从0到1上手 Puppet-Walnut
今天和大家分享从未接触过5G消息开发的小白如何从0到1的申请到5G消息的测试账号,以及如何使用Wechaty社区中的walnut puppet来实现5G消息的一些功能。
一、进入硬核桃5G开发者社区进行账号的注册
1. 点击网址链接进入硬核桃5G开发者社区,如下图所示,点击网页中的「免费注册」按钮

2. 如下图所示,输入账户名、密码、手机号进行相关注册

3. 如下图,输入手机短信验证码

4. 注册成功!如果怕忘记密码,可以再绑定一个邮箱~(绑定邮箱的操作此处忽略)

二、报名参加 “启航计划” 5G消息开发者大赛
在完成第一步的账号注册后,我们已经有了一个硬核桃5G开发者社区的账号
1. 登陆第一步注册的账号之后,点击「“启航计划”5G消息开发者大赛」进入活动界面

2. 点击下图中的「立即报名」

3. 如下图所示,填写参赛相关信息(如有邀请码请填写邀请码,没有可不填),填写完毕之后点击「提交」按钮

4. 报名成功!分享邀请码,邀请朋友参赛

三、申请试用硬核桃开发套件
在申请开发资源前,请先进行实名认证。如若之前已经通过认证,无需二次认证,可直接申请所需开发资源。
1. 实名认证
账号实名认证(个人)或者企业账号认证,两种方式二选一即可。
- 点击下图中的「前去认证」按钮对账户进行实名认证
 

- 如下图所示,填写相关资料进行账户实名认证
 

- 资料提交成功后,账户实名认证状态会如下图所示变为「待审核」
 

- 如果提交的资料没问题,等待30分钟之内,认证状态会变为「认证通过」
 

2. 企业账号认证
- 接下来我们继续申请企业账号认证,点击下图中的「前去认证」
 

- 如下图所示,填写相关资料进行企业账号认证
 

- 资料提交成功后,企业账号认证状态会如下图所示变为「待审核」
 

- 如果提交的资料没问题,等待30分钟之内,认证状态会变为「认证通过」
 

3. 开发资源申请
- 点击下图中的「开发者中心」按钮,选择下拉框中的「硬核桃开发套件」
 

- 点击下图中的「免费试用」按钮
 

- 点击「硬核桃开发套件」按钮回到下图中的界面,点击「提交」
 

- 如下图所示,填写相关资料后点击「提交」按钮(非必填信息可以空着)。参赛作品以电联接口账号信息为准。
 

- 显示账号信息提交成功!
 

- 此时配置状态如下图所示显示「未配置」
 

- 等待配置完成,配置完成后状态如下图所示显示「已配置」,此时点击「查看」,显示分配的 Chatbot资源信息。
 

四、硬核桃调测模拟终端
5G消息是短信的升级,请在安卓手机安装终端模拟器进行5G消息的测试。
1. APP下载
- 下载页面https://www.5g-msg.com/#/kaifataojian,页面内查找终端测试消息 APP,点击进行下载,如图:
 


2. APP安装
- 下载完成后,点击安装,替代系统默认短信权限,无需担心原有短信数据。由于安卓手机权限不一致的原因,若无法替代系统默认短信权限,可能导致终端模拟器无法正常使用,建议更换另一款安卓手机,重新安装。
 
3. APP登录
- 安装成功后,打开 APP,点击【右上角三竖点】,选【设置】,选【常规】,选【融合通信登录】,登录界面如图:
 

- 输入账号(申请 Chatbot 时的手机号码)信息,点击登录,成功后返回,可查看到【小程序服务】。
 
4. Chatbot查看
- 点击【小程序服务】,可在【小程序列表】中,输入Chatbot名称,搜索 Chatbot。点击 Chatbot,进入交互界面。完成首次交互后,也可在【消息列表】中,进行 Chatbot 的消息交互。
 

五、开始接入Wechaty社区的puppet-walnut
在完成第二步的硬核桃开发者套件申请试用后,我们已经有了从硬核桃5G开发者社区申请到的Chatbot的AppId、Chatbot的AppKey、Chatbot的sipId。上报填报chatbot的公网回调地址
1. 设置环境变量
- 
    
Windows
set WECHATY_LOG=verbose set WECHATY_PUPPET=wechaty-puppet-walnut set WECHATY_PUPPET_WALNUT_APPID=Chatbot的AppId set WECHATY_PUPPET_WALNUT_APPKEY=Chatbot的AppKey set WECHATY_PUPPET_WALNUT_SIPID=Chatbot的sipId - 
    
Linux & MacOs
export WECHATY_LOG=verbose export WECHATY_PUPPET=wechaty-puppet-walnut export WECHATY_PUPPET_WALNUT_APPID=Chatbot的AppId export WECHATY_PUPPET_WALNUT_APPKEY=Chatbot的AppKey export WECHATY_PUPPET_WALNUT_SIPID=Chatbot的sipId 
2. 安装依赖
- Node.js version 16+
 - NPM version 7+
 - TypeScript version 4.4+
 
npm install wechaty
npm install wechaty-puppet-walnut
3. 配置公网映射(开发环境)
将我们之前上报的公网回调地址映射到我们本地的3000端口即可。
这边推荐使用开源的frp工具
- Github repo: https://github.com/fatedier/frp
 - 教程👉 https://fabian4.site/blog/22217.html
 walnut中包含一个koa的服务 默认监听端口为3000(可在启动配置中更改)
4. 使用示例
(1). 创建实例
const bot = WechatyBuilder.build({
  puppet: new PuppetWalnut(),
})  // get a Wechaty instance
  .on('login', (user: any) => log.info(`User ${user} logged in`))
    // get the message chatbot received from users
  .on('message', async (message: Message) => {
    log.info(`Message: ${message}`)
  })
await bot.start()
const contact = await bot.Contact.find({ id: 'xxxxxxxxxxx' })
(2). 文本消息
await contact.say('This is a simple text message.')

(3). 图片消息
contact.say(FileBox.fromFile('C:\\Users\\Desktop\\1.png'))

(4). 富文本消息
const post = await bot.Post.builder()
  .add('This is a single rich card.')
  .add('This is the description of the rich card. It\'s the first field that will be truncated if it exceeds the maximum width or height of a card.')
  .add(FileBox.fromFile('C:\\Users\\Desktop\\1.png'))
  .type(PUPPET.types.Post.Unspecified)
  .build()
await contact.say(post)

6. 消息支持
最新支持情况请参考 https://github.com/wechaty/puppet-walnut#%E6%B6%88%E6%81%AF%E7%A7%8D%E7%B1%BB%E6%94%AF%E6%8C%81
| 消息类型 | 从属(根据接口返回) | api | 接收 | 发送 | 群聊 | 
|---|---|---|---|---|---|
| 文本 | text | 
      message.text | 
      ✅ | ✅ | ❌ | 
| 图片 | image | 
      message.toImage() | 
      ✅ | ✅ | ❌ | 
| 视频 | video | 
      message.toFilebox() | 
      ✅ | ❌ | ❌ | 
| 音频 | audio | 
      message.toFilebox() | 
      ✅ | ❌ | ❌ | 
| 位置 | location | 
      message.toLocation() | 
      ❌ | ❌ | ❌ | 
| 文件 | other | 
      message.toFilebox() | 
      ✅ | ❌ | ❌ | 
| 联系人 | other | 
      message.toContact() | 
      ✅ | ❌ | ❌ | 
| 富文本卡片 | post | 
      message.toPost() | 
      ❌ | ✅ | ❌ | 
7. Wechaty Api支持
最新支持情况请参考 https://github.com/wechaty/puppet-walnut#wechaty-api-%E6%94%AF%E6%8C%81
(1). Contact
- 
    
Properties
Name Type Description Support Details id stringGet Contact id. This function is depending on the Puppet Implementation, see puppet-compatible-table ✅ Phone number  - 
    
Instance Methods
Instance Methods Return type Support Details say(text Or Contact Or File) Promise✅ ⚠Contact not Support name() String✅ Phone number alias(newAlias) Promise✅ friend() Boolean or null✅ True type() ContactType.Unknown or ContactType.Personal or ContactType.Official✅ ContactType.Personal gender() ContactGender.Unknown or ContactGender.Male or ContactGender.Female✅ ContactGender.Unknown province() String or null❌ city() String or null❌ avatar() Promise✅ Default avatar sync() Promise✅ self() Boolean✅ Default avatar 👉 https://raw.githubusercontent.com/wechaty/puppet-walnut/main/docs/images/avatar.png
 - 
    
Static Methods
Static Methods Return Type Support Detail find(query) Promise <Contact \| null>✅ findAll(Query Arguements) Promise <Contact []>✅  
(2). Message
- 
    
Instance Methods
Instance methods Return type Support Detail talker() Contactornull✅ to() Contactornull✅ room() Roomornull✅ null text() string✅ say(text Or Contact Or File) Promise✅ ⚠Contact not Support type() MessageType✅ Message.Text self() boolean✅ mention() Promise❌ mentionSelf() Promise❌ forward(to) Promise✅ date() Date✅ age() Number✅ toFileBox() Promise✅ toContact() Promise✅ toUrlLink() Promise✅  - 
    
Static Method
Static Methods Return type Support Detail find() Promise✅ findAll() Promise✅  
Author: @fabian
				
  基于开放 API 封装 Wechaty 接口下的虚拟币行情机器人