China Mobile · AsyncAPI Specification

China Mobile OneNET event and callback surface

Version 1.0.0

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 Spec View on GitHub TelecommunicationsChinaMobile 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 Specification

Raw ↑
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.