OneNET pushes events to application servers over plain HTTP(S) POST. Two distinct outbound surfaces are documented anonymously: the platform-wide 数据推送 (HTTP data push) service, which delivers rule-engine-filtered device lifecycle, thing-model and scene-linkage messages, and the Voice Call Service call-status callbacks delivered to the notify_url supplied on each call request. Every channel, message field, type, enumeration and example below was transcribed from the first-party OneNET reference (see externalDocs on each channel). China Mobile publishes no AsyncAPI of its own; this document is an API Evangelist derivation so the event surface is machine-readable. Nothing here is invented.
View SpecView on GitHubTelecommunicationsChinaMobile Network OperatorNetwork APIsCAMARAGSMA Open GatewayIoT5GBroadbandQuality on DemandNumber AuthenticationSatelliteAsyncAPIWebhooksEvents
Channels
httpDataPush
Rule-engine output delivered to a verified push instance. Supported message sources are device lifecycle, device thing-model data and scene-linkage trigger logs.
pushInstanceValidation
Before a push instance goes live, OneNET issues an HTTP GET to the registered address as ?msg=xxx&nonce=xxx&signature=xxx. The receiver verifies signature and must echo msg back verbatim, otherwise the instance stays in 验证失败 (validation failed) and no messages are delivered.
voiceNotifyStatus
clickToDialStatus
Messages
✉
PushEnvelope
OneNET HTTP push message
✉
ValidationChallenge
Push instance validation challenge
✉
VoiceNotifyStatusEvent
语音通知状态呼叫通知
✉
ClickToDialStatusEvent
点击拨号状态呼叫通知
Servers
https
applicationServer
The subscriber's own HTTPS endpoint. OneNET is the client: the push address is registered on the console as a push instance (maximum 10 per user) and must accept both GET (for the one-time address-validation handshake) and POST (for message delivery).
asyncapi: 3.0.0
info:
title: China Mobile OneNET event and callback surface
version: '1.0.0'
description: >-
OneNET pushes events to application servers over plain HTTP(S) POST. Two distinct
outbound surfaces are documented anonymously: the platform-wide 数据推送 (HTTP data
push) service, which delivers rule-engine-filtered device lifecycle, thing-model and
scene-linkage messages, and the Voice Call Service call-status callbacks delivered to
the notify_url supplied on each call request.
Every channel, message field, type, enumeration and example below was transcribed from
the first-party OneNET reference (see externalDocs on each channel). China Mobile
publishes no AsyncAPI of its own; this document is an API Evangelist derivation so the
event surface is machine-readable. Nothing here is invented.
externalDocs:
url: https://open.iot.10086.cn/doc/iot_platform/book/application-develop/push/http_push.html
contact:
name: OneNET Service (中移物联网)
email: iot_service@cmiot.chinamobile.com
x-provenance:
generated: '2026-07-25'
method: derived
source: https://open.iot.10086.cn/doc/iot_platform/book/application-develop/push/http_push.html
defaultContentType: application/json
servers:
applicationServer:
host: 'your-application-server.example.com'
protocol: https
description: >-
The subscriber's own HTTPS endpoint. OneNET is the client: the push address is
registered on the console as a push instance (maximum 10 per user) and must accept
both GET (for the one-time address-validation handshake) and POST (for message
delivery).
channels:
httpDataPush:
address: '/'
title: 数据推送 — OneNET HTTP data push
description: >-
Rule-engine output delivered to a verified push instance. Supported message sources
are device lifecycle, device thing-model data and scene-linkage trigger logs.
servers:
- $ref: '#/servers/applicationServer'
messages:
pushEnvelope:
$ref: '#/components/messages/PushEnvelope'
externalDocs:
url: https://open.iot.10086.cn/doc/iot_platform/book/application-develop/push/http_push.html
pushInstanceValidation:
address: '/'
title: 实例验证 — push instance validation handshake
description: >-
Before a push instance goes live, OneNET issues an HTTP GET to the registered
address as ?msg=xxx&nonce=xxx&signature=xxx. The receiver verifies signature and
must echo msg back verbatim, otherwise the instance stays in 验证失败 (validation
failed) and no messages are delivered.
servers:
- $ref: '#/servers/applicationServer'
messages:
validationChallenge:
$ref: '#/components/messages/ValidationChallenge'
externalDocs:
url: https://open.iot.10086.cn/doc/iot_platform/book/application-develop/push/http_push.html
voiceNotifyStatus:
address: '{notify_url}'
title: 语音通知状态呼叫通知 — voice notification call-status callback
parameters:
notify_url:
description: The notify_url supplied on the voiceNotify request, or the URL
configured on the OneNET console when the field is omitted.
servers:
- $ref: '#/servers/applicationServer'
messages:
voiceNotifyStatusEvent:
$ref: '#/components/messages/VoiceNotifyStatusEvent'
externalDocs:
url: https://open.iot.10086.cn/doc/iot_platform/book/vcs/vcs_api/notify-status.html
clickToDialStatus:
address: '{notify_url}'
title: 点击拨号状态呼叫通知 — click-to-dial call-status callback
parameters:
notify_url:
description: The notify_url supplied on the dialNotify request, or the URL
configured on the OneNET console when the field is omitted.
servers:
- $ref: '#/servers/applicationServer'
messages:
clickToDialStatusEvent:
$ref: '#/components/messages/ClickToDialStatusEvent'
externalDocs:
url: https://open.iot.10086.cn/doc/iot_platform/book/vcs/vcs_api/ctd-status.html
operations:
receiveHttpDataPush:
action: receive
channel:
$ref: '#/channels/httpDataPush'
summary: Receive rule-engine filtered device and business messages from OneNET.
bindings:
http:
method: POST
receivePushInstanceValidation:
action: receive
channel:
$ref: '#/channels/pushInstanceValidation'
summary: Answer the OneNET push-instance address validation challenge.
bindings:
http:
method: GET
receiveVoiceNotifyStatus:
action: receive
channel:
$ref: '#/channels/voiceNotifyStatus'
summary: Receive voice-notification call-status events.
bindings:
http:
method: POST
receiveClickToDialStatus:
action: receive
channel:
$ref: '#/channels/clickToDialStatus'
summary: Receive click-to-dial call-status events.
bindings:
http:
method: POST
components:
messages:
PushEnvelope:
name: PushEnvelope
title: OneNET HTTP push message
contentType: application/json
payload:
$ref: '#/components/schemas/PushEnvelope'
examples:
- name: documented
payload:
msg: xxxxxxxx
nonce: abcdefgh
signature: message signature
time: 1591340648197
id: '3799902'
bindings:
http:
headers:
type: object
ValidationChallenge:
name: ValidationChallenge
title: Push instance validation challenge
payload:
$ref: '#/components/schemas/ValidationChallenge'
VoiceNotifyStatusEvent:
name: VoiceNotifyStatusEvent
title: 语音通知状态呼叫通知
contentType: application/json
payload:
$ref: '#/components/schemas/VoiceNotifyStatusEvent'
examples:
- name: documented
payload:
user_id: 1234
call_id: CS123
caller: '8613912345672'
callee: '8613912345673'
status: Disconnected
reason: HangUp
ClickToDialStatusEvent:
name: ClickToDialStatusEvent
title: 点击拨号状态呼叫通知
contentType: application/json
payload:
$ref: '#/components/schemas/ClickToDialStatusEvent'
examples:
- name: documented
payload:
user_id: 1234
call_id: CS123
caller: '8613912345672'
callee: '8613912345673'
status: Disconnected
reason: HangUp
schemas:
PushEnvelope:
type: object
required: [msg, nonce, signature, time, id]
properties:
msg:
type: string
description: >-
Rule-engine filtered content — device lifecycle, device thing-model data or
scene-linkage trigger log — as a JSON string. When the push instance is set to
安全模式 (secure mode) this value is AES-CBC/PKCS7 encrypted with the 16-byte
key generated by the platform.
nonce:
type: string
description: Random string used in signature computation.
signature:
type: string
description: >-
Message signature used to verify the pushing client. Computed as
base64(md5(token + nonce + msg)) with the token registered on the push
instance.
time:
type: integer
format: int64
description: Push timestamp in milliseconds.
id:
type: string
description: Message id.
ValidationChallenge:
type: object
required: [msg, nonce, signature]
properties:
msg:
type: string
description: Random string generated by the platform during validation; must be
echoed back verbatim in the response body.
nonce:
type: string
signature:
type: string
VoiceNotifyStatusEvent:
type: object
required: [user_id, call_id, caller, callee, status]
properties:
user_id:
type: integer
format: int64
call_id:
type: string
maxLength: 64
caller:
type: string
maxLength: 64
callee:
type: string
maxLength: 64
status:
type: string
enum: [CallingCallee, Connected, Disconnected, CollectResult]
reason:
type: string
description: Required when status=Disconnected.
enum: [HangUp, CalleeBusy, CalleeNoAnswer, CalleeFailure, Other, CalleeEmpty,
CalleeUnregistere, CalleeReject, CalleenotReach]
operation_result:
type: string
maxLength: 64
description: Digit-collection result; present when status=CollectResult.
call_duration:
type: string
description: Call duration in seconds; required when status=Disconnected.
ClickToDialStatusEvent:
type: object
required: [user_id, call_id, caller, callee, status]
properties:
user_id:
type: integer
format: int64
call_id:
type: string
maxLength: 64
caller:
type: string
maxLength: 64
callee:
type: string
maxLength: 64
status:
type: string
enum: [CallingCaller, CallingCallee, Connected, Disconnected]
report_date:
type: string
maxLength: 16
description: Status report time, format YYYYmmDDHHMMSS.
reason:
type: string
description: Required when status=Disconnected.
enum: [HangUp, CallerBusy, CallerNoAnswer, CallerFailure, CallerAbandon,
CalleeBusy, CalleeNoAnswer, CalleeFailure, Other]
call_duration:
type: string
caller_call_duration:
type: string
description: Present when status=Disconnected and the caller is not a China
Mobile number.
securitySchemes:
signedPayload:
type: httpApiKey
name: signature
in: query
description: >-
OneNET does not authenticate itself with a bearer credential. Instead the receiver
verifies the signature field against the token it registered on the push instance
(base64(md5(token + nonce + msg))). VCS call-status callbacks additionally carry
the OneNET signed Authorization header.