很荣幸能参加”暑期2021“活动,接触到开发支持电信运营商 5G Chatbot / RCS 的 Wechaty 接入 Puppet 模块这一开源项目,下面来和大家分享一下开发流程,希望能帮助更多的开发者快速上手这个项目。
一、准备工作
在开发之前,你需要准备以下工具:
整体步骤分为两步:
- 测通5G Chatbot的上下行接口
- 将5G Chatbot接入wechaty puppet中
二、测试5G Chatbot的接口
1.下行消息
接口申请:
在5G消息开发者社区申请开发接口,填写Chatbot信息并准备一个回调地址,可以是服务器的公网IP和端口号构成,也可以是提前申请好的域名。
获取token:
- 首先要实现
https://{notifyURL}/notifyPath
这个接口进行身份鉴权并将代码部署到服务器上,其中{notifyURL}
为申请Chatbot时所设置的回调地址。该接口的实现逻辑只需原样返回请求消息中的echoStr随机字符串和appId,如下面的这段验证示例所示,具体的实现不限语言。可参考 中国电信-中国联通 5G 消息业务平台行业客户接入接口技术规范 V1.0.4文档(以下简称“接口文档”)中第6.2 部分。
- 将以下代码导入 postman,修改 sipID、appID、appKey 和 senderPhone,点击 send 按钮即可获取到 token,可查看参考中国电信-中国联通 5G 消息业务平台行业客户接入接口技术规范 V1.0.4文档 中6.1部分。
{
"name": "get_token",
"event": [{
"listen": "prerequest",
"script": {
"exec": [
"\r",
"//////////skn环境测试 信息///////////////\r",
"pm.globals.set(\"sipID\", \"你的chatbot的sipID\");\r",
"pm.globals.set(\"appID\", \"你的chatbot的appID\"); \r",
"pm.globals.set(\"appKey\", \"你的chatbot的appKey\");\r",
"\r",
"pm.globals.set(\"senderPhone\", \"你的手机号码\");\r",
"\r",
"pm.globals.set(\"url\", \"maap.5g-msg.com:30001\");\r",
""
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
"var acquiretoken = JSON.parse(responseBody);\r",
"pm.globals.set(\"accessToken\",acquiretoken.accessToken);"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\"appId\":\"\",\"appKey\":\"\"}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "http:///bot/v1/sip:@botplatform.rcs.chinaunicom.cn/accessToken",
"protocol": "http",
"host": [
""
],
"path": [
"bot",
"v1",
"sip:@botplatform.rcs.chinaunicom.cn",
"accessToken"
]
},
"description": "获取token"
},
"response": []
}
下行消息:
获取 token 后,即可进行下行消息发送,即终端 APP 可收到 Chatbot 所发送的消息。需要实现 https://{serverRoot}/bot/{apiVersion}/{chatbotId}/messages
接口。具体的请求方法,参照中国电信-中国联通 5G 消息业务平台行业客户接入接口技术规范 V1.0.4文档 的 9.2部分。
终端接收到短信示例,如图:
2.上行消息
需要实现 http://{notifyURL}/messageNotification/{chatbotId}/messages
这个接口,具体的请求方法参照中国电信-中国联通 5G 消息业务平台行业客户接入接口技术规范 V1.0.4文档 中的 11.1 部分,实现该接口后,终端即可向Chatbot发送消息,如下图所示:
三、将5G Chatbot接入wechaty puppet中
- 将上述身份鉴权和上行消息的业务逻辑在start()函数中实现,可参考如下代码:
- 把Chatbot的消息结构转换为puppet的消息结构,重写messageRawPayloadParser函数
override async messageRawPayloadParser (smsPayload: any): Promise<MessagePayload> {
const payload: MessagePayload = {
fromId: smsPayload.senderAddress,
id: smsPayload.messageId,
text: smsPayload.messageList[0].contentText,
timestamp: Date.now(),
toId: smsPayload.destinationAddress[0],
type: MessageType.Text,
}
return payload
}
- 把chatbot要发送的消息连上puppet,将实现下行消息的逻辑在messageSend()函数中实现,可参考如下代码:
参考资料
《中国电信-中国联通 5G 消息业务平台行业客户接入接口技术规范 V1.0.4》:
- 项目仓库: https://github.com/wechaty/wechaty-puppet-walnut
- npm包:https://www.npmjs.com/package/wechaty-puppet-walnut
作者: zrn-fight