project,

2022-小白如何从0到1上手puppet-walnut

fabian fabian Follow Apr 22, 2022 · 6 mins read
2022-小白如何从0到1上手puppet-walnut

小白如何从0到1上手 Puppet-Walnut

今天和大家分享从未接触过5G消息开发的小白如何从0到1的申请到5G消息的测试账号,以及如何使用Wechaty社区中的walnut puppet来实现5G消息的一些功能。

一、进入硬核桃5G开发者社区进行账号的注册

1. 点击网址链接进入硬核桃5G开发者社区,如下图所示,点击网页中的「免费注册」按钮

img

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

img

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

img

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

img

二、报名参加 “启航计划” 5G消息开发者大赛

在完成第一步的账号注册后,我们已经有了一个硬核桃5G开发者社区的账号

1. 登陆第一步注册的账号之后,点击「“启航计划”5G消息开发者大赛」进入活动界面

img

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

img

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

img

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

img

三、申请试用硬核桃开发套件

在申请开发资源前,请先进行实名认证。如若之前已经通过认证,无需二次认证,可直接申请所需开发资源。

1. 实名认证

账号实名认证(个人)或者企业账号认证,两种方式二选一即可。

  • 点击下图中的「前去认证」按钮对账户进行实名认证

img

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

img

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

img

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

img

2. 企业账号认证

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

img

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

img

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

img

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

img

3. 开发资源申请

  • 点击下图中的「开发者中心」按钮,选择下拉框中的「硬核桃开发套件」

img

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

img

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

img

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

img

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

img

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

img

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

img

四、硬核桃调测模拟终端

5G消息是短信的升级,请在安卓手机安装终端模拟器进行5G消息的测试。

1. APP下载

img

img

2. APP安装

  • 下载完成后,点击安装,替代系统默认短信权限,无需担心原有短信数据。由于安卓手机权限不一致的原因,若无法替代系统默认短信权限,可能导致终端模拟器无法正常使用,建议更换另一款安卓手机,重新安装。

3. APP登录

  • 安装成功后,打开 APP,点击【右上角三竖点】,选【设置】,选【常规】,选【融合通信登录】,登录界面如图:

img

  • 输入账号(申请 Chatbot 时的手机号码)信息,点击登录,成功后返回,可查看到【小程序服务】。

4. Chatbot查看

  • 点击【小程序服务】,可在【小程序列表】中,输入Chatbot名称,搜索 Chatbot。点击 Chatbot,进入交互界面。完成首次交互后,也可在【消息列表】中,进行 Chatbot 的消息交互。

img

五、开始接入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. 安装依赖

  1. Node.js version 16+
  2. NPM version 7+
  3. TypeScript version 4.4+
npm install wechaty
npm install wechaty-puppet-walnut

3. 配置公网映射(开发环境)

将我们之前上报的公网回调地址映射到我们本地的3000端口即可。

这边推荐使用开源的frp工具

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.')

img

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

img

(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)

img

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 string Get 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() Contact or null  
    to() Contact or null  
    room() Room or null 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

Join Newsletter
Get the latest news right in your inbox. We never spam!
Written by fabian
a passionate learner