Event driven and chained Taobao Message Channel(TMC) for NodeJS
核心包以事件作为驱动,通过注册TOPIC回调处理函数,实现了TMC产品服务的消息消费处理能力,同时通过Proxy代理,以TOPIC作为键值,平序注册消息消费处理函数,序图如下:
npm i tmc.js
import Tmc from 'tmc.js';
new Tmc('your_app_key', 'your_app_secret')
.on('taobao_trade_TradeChanged', msg => console.info(msg))
.taobao_trade_TradeClose(msg => console.info(msg))
.connect();new Tmc(appKey: string, appSecret: BinaryLike, groupName?: string | ConsumerOptions, options?: ConsumerOptions)
| 参数 | 类型 | 说明 |
|---|---|---|
| appKey | string |
应用ID |
| appSecret | BinaryLike |
应用密钥 |
| groupName | string | ConsumerOptions |
消息分组(可选,默认default) |
| options | ConsumerOptions |
消费端配置参数(可选) |
| options.pullRequestInterval | number |
定时发送pullRequest请求时间间隔(默认5000毫秒) |
| options.onErrorReconnection | number |
当消费端出现错误,重试连接间隔(默认15000毫秒) |
| options.onCloseReconnection | number |
当消费端断开连接,重试连接间隔(默认3000毫秒) |
| options.autoParseContentJson | boolean |
自动解析推送消息$.content.content字段为对象(默认true) |
| options.autoReplyConfirmation | boolean |
以推送的$.content.id字段自动Confirm消息(默认true) |
| options.autoGroupedEmitting | boolean |
以/^(([^_]+)_[^_]+)_.+/规则切分$.content.topic主题,开关消费端多维监听功能(默认true) |
tmc.on(topic: string, listener: (this: Tmc, message: Message) => void) => Tmc
注册 topic 消息通知处理函数,默认已内置 消息 说明。
自v0.3.6起,默认开启消费端多维监听功能,topic字符串也可以是BU及BU_G单位,例如:
.on('taobao', console.info)
.on('alibaba_einvoice', console.info)tmc[<topic>](fn: (this: Tmc, message: Message) => void) => Tmc
直接以 topic 为键值,注册消息通知处理函数。
自v0.3.6起,默认开启消费端多维监听功能,topic字符串也可以是BU及BU_G单位,例如:
.taobao(console.info)
.alibaba_einvoice(console.info)tmc.reconnect(ms: number) => Tmc
当消费端 onerror/onclose 事件发生时,延迟 ms 毫秒自动重新建立连接。
tmc.connect(address?: string) => Tmc
消费端发起建立连接 onopen 事件,address 默认为 ws://mc.api.taobao.com/。
tmc.send(msg: Message, options?: { mask?: true, binary?: true }, cb?: (err: Error) => void) => void
自v0.3.4起,当自动应答确认消息无法满足需求的时候,比如消息处理失败,需要Publisher再次重推消息,在实例初始化时置options.autoReplyConfirmation=false,则在消息处理函数内,可以通过 this.send() 函数回复确认或者失败消息。例如:
new Tmc('your_app_key', 'your_app_secret', { autoReplyConfirmation: false })
.taobao_trade_TradeDelayConfirmPay(function needDoubleRetriesThenConfirm(msg) {
if (msg instanceof Message && msg.content?.retried === 0) {
this.send(
new Message(MessageType.SENDACK, MessageKind.Failed)
.with(MessageFields.ID, msg.content?.id)
.with(MessageFields.MSG, 'Something went wrong, please retries this ID.')
);
}
})
.connect();也可以使用此方法发送To淘宝消息。在>=v0.3.4 && <v0.3.7版本期间,需要自主对$.content.content数据做JSON字符串化(特别注意: 原生JSON对BigInt类型无法处理)。自v0.3.7起,可直接对$.content.content以原生object类型描述,SDK会将此对象转化成JSON字符串。例如:
/** @see https://open.taobao.com/tmc.htm?docId=732&docType=9 */
.send(
new Message(MessageType.SEND, MessageKind.Data)
.with(MessageFields.TOPIC, 'taobao_fuwu_ElectronicInvoice')
.with(MessageFields.CONTENT, {
id: 12345678901234567n, // 支持 BigInt 类型
tid: 12345678901234567n,
oid: 12345678901234567n,
invoice_file: 12345678901234567n,
e_invoice_no: '12342243435466',
invoice_time: '2015-04-10 10:33:49', // 时区 +08:00
invoice_no: '123456',
invoice_code: '123456',
amount: '100.00',
})
// >=v0.3.4 && <v0.3.7 写法
// .with(MessageFields.CONTENT, '{"tid":12345678901234567,"amount":"100.00"}')
)可选设置的 NODE_DEBUG=< label > 环境变量
| label | 说明 |
|---|---|
tmc:onping |
开启 onping 时的日志 |
tmc:onopen |
开启 onopen 时的日志 |
tmc:onpull |
开启 onpull 时的日志 |
tmc:onerror |
开启 onerror 时的日志 |
tmc:onclose |
开启 onclose 时的日志 |
tmc:onmessage* |
开启全部 onmessage 时的日志(即From淘宝消息) |
tmc:onmessage:connect |
开启消费端发起连接 connect 时的日志 |
tmc:onmessage:connectack |
开启消费端回复连接 connectack 时的日志 |
tmc:onmessage:send |
开启消费端接收到(即From淘宝) send 的消息时的日志 |
tmc:onmessage:sendack |
当消费端收到(From淘宝)消息,消费端消息处理失败,需要服务端重发,须回复SENDACK(3)及FLAG字典值时的日志 |
tmc:onmessage:send:confirm |
开启消费端回复接收到的(即From淘宝消息),发送自动确认 send:confirm 时的日志 |
共计 103+ 类别,603+ 消息数
| 类别 | 消息数 |
|---|---|
| 淘宝交易 | 25 |
| 淘宝退款 | 15 |
| 淘宝商品 | 13 |
| 淘宝分销 | 27 |
| 淘宝点点 | 12 |
| 淘宝火车票 | 6 |
| 平台消息 | 9 |
| 交易全链路 | 3 |
| 淘宝机票 | 16 |
| 导购平台 | 21 |
| 淘宝汽车票 | 4 |
| 服务市场 | 9 |
| 天猫服务 | 36 |
| 天猫美妆 | 2 |
| 聚石塔 | 9 |
| 淘宝物流 | 4 |
| 阿里通信 | 20 |
| 天猫魔盒 | 2 |
| 营销平台 | 1 |
| OpenIM消息 | 1 |
| 网上法庭 | 8 |
| 电子发票 | 21 |
| 航旅度假交易 | 11 |
| YunOS YoC | 2 |
| 淘宝直播API | 4 |
| 阿里物联 | 2 |
| 全球购跨境物流 | 1 |
| 零售plus | 8 |
| 客户运营平台API | 20 |
| AE-交易 | 10 |
| 五道口配送 | 6 |
| 百川 | 2 |
| 闲鱼 | 29 |
| 闲鱼回收商消息 | 8 |
| 零售通POS开放平台消息 | 4 |
| DPAAS | 6 |
| AliGenius | 1 |
| 智慧门店下行消息 | 2 |
| 渠道中心API | 4 |
| 五道口订单 | 22 |
| 信息平台-采购 | 3 |
| 1688服务市场 | 1 |
| 酒店商品消息api | 9 |
| 新零售终端下行消息 | 1 |
| 新零售终端上行消息 | 4 |
| 欢行开放平台 | 1 |
| 阿里发票 | 5 |
| 大麦票单状态 | 1 |
| 五道口营销 | 4 |
| 酒店签约中心消息 | 3 |
| 蜂鸟物流 | 6 |
| 商旅API | 3 |
| 阿里健康-O2O中台 | 2 |
| 业务平台新零售-消息上行 | 2 |
| 大麦第三方票务供应商接入 | 10 |
| TVOS应用审核平台 | 1 |
| Gifting送礼 | 1 |
| 五道口商品 | 2 |
| HOMEAI | 2 |
| HOMEAI消息对接 | 5 |
| 飞猪商家平台 | 1 |
| 零售通_公共 | 8 |
| 大麦麦座开放平台消息 | 2 |
| 酒店标准库基础信息变更消息 | 3 |
| 菜鸟发货工作台 | 1 |
| IOT-智能制造 | 2 |
| 智能制造API | 1 |
| ICBU-交易 | 1 |
| IoT售后解决方案 | 1 |
| OpenMall-API | 5 |
| 闲鱼已验货 | 9 |
| 阿里健康三方机构 | 2 |
| 聚石塔监控告警 | 2 |
| 大资产拍卖Top端拍品消息 | 6 |
| AE-任务平台消息 | 1 |
| 天猫汽车 | 5 |
| 阿信消息通知前台类目 | 6 |
| 自动驾驶API | 3 |
| MMC五盘货项目 | 5 |
| 银泰开放平台消息 | 3 |
| 阿里智付 | 1 |
| ICBU-小满 | 1 |
| 代发管理 | 2 |
| 蚂蚁采购 | 1 |
| 飞猪机票 | 2 |
| 阿里健康&一树-电商中台对接 | 2 |
| 阿里健康-疫苗 | 2 |
| 酒店交易消息API | 1 |
| 智能应用 | 1 |
| 内容开放 | 3 |
| 闲鱼电商Saas | 9 |
| 货源服务消息 | 2 |
| 本地生活联盟平台-卡券消息API | 2 |
| 本地生活联盟平台-卡券包采购单消息API | 2 |
| 以旧换新-订单域 | 3 |
| 本地生活联盟平台-霸王餐消息推送API | 2 |
| 闲鱼循环商店-消息前台 | 2 |
| 闲鱼房源-前台 | 1 |
| 绘蛙消息 | 3 |
| 公益三小时公共 | 1 |
| 采购宝API | 7 |
| 闪购交易 | 13 |
| 闲鱼奢品寄卖 | 1 |
It used the github release page for the Changelog here.