更新时间:2024-10-23 GMT+08:00
分享

下发设备消息

功能介绍

物联网平台可向设备下发消息,应用服务器可调用此接口向指定设备下发消息,以实现对设备的控制。应用将消息下发给平台后,平台返回应用响应结果,平台再将消息发送给设备。平台返回应用响应结果不一定是设备接收结果,建议用户应用通过订阅设备消息状态变更通知,订阅后平台会将设备接收结果推送给订阅的应用。

注意:

  • 此接口适用于MQTT设备消息下发,暂不支持其他协议接入的设备消息下发。

  • 此接口仅支持单个设备消息下发,如需多个设备消息下发,请参见 创建批量任务

调用方法

请参见如何调用API

URI

POST /v5/iot/{project_id}/devices/{device_id}/messages

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

参数说明:项目ID。获取方法请参见 获取项目ID

device_id

String

参数说明:下发消息的设备ID,用于唯一标识一个设备,在注册设备时由物联网平台分配获得。

取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

X-Auth-Token

String

参数说明:用户Token。通过调用IAM服务 获取IAM用户Token接口获取,接口返回的响应消息头中“X-Subject-Token”就是需要获取的用户Token。简要的获取方法样例请参见 Token认证

Instance-Id

String

参数说明:实例ID。物理多租下各实例的唯一标识,建议携带该参数,在使用专业版时必须携带该参数。您可以在IoTDA管理控制台界面,选择左侧导航栏“总览”页签查看当前实例的ID,具体获取方式请参考查看实例详情

表3 请求Body参数

参数

是否必选

参数类型

描述

message_id

String

参数说明:消息id,由用户生成(推荐使用UUID),同一个设备下唯一, 如果用户填写的id在设备下不唯一, 则接口返回错误。

取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。

name

String

参数说明:消息名称。

取值范围:长度不超过128,只允许中文、字母、数字、以及_?'#().,&%@!-等字符的组合。

message

Object

参数说明:消息内容,支持string和json格式。

properties

PropertiesDTO object

参数说明:消息下行到设备的属性参数。

encoding

String

参数说明:消息内容编码格式。默认值none。

取值范围

  • none

  • base64

payload_format

String

参数说明:有效负载格式,在消息内容编码格式为none时有效。默认值standard(平台封装的标准格式)。

取值范围

  • standard

  • raw:直接将消息内容作为有效负载下发。

topic

String

参数说明:消息下行到设备的自定义topic后缀, 可选, 仅适用于MQTT协议接入的设备。 用户只能填写在租户产品界面配置的topic, 否则会校验不通过。 平台给消息topic添加的前缀为$oc/devices/{device_id}/user/, 用户可以在前缀的基础上增加自定义部分, 如增加messageDown,则平台拼接前缀后完整的topic为 $oc/devices/{device_id}/user/messageDown,其中device_id以实际设备的网关id替代。 如果用户指定该topic,消息会通过该topic下行到设备,如果用户不指定, 则消息通过系统默认的topic下行到设备,系统默认的topic格式为: $oc/devices/{device_id}/sys/messages/down。此字段与topic_full_name字段只可填写一个。

topic_full_name

String

参数说明:消息下行到设备的完整topic名称, 可选。用户需要下发用户自定义的topic给设备时,可以使用该参数指定完整的topic名称,物联网平台不校验该topic是否在平台定义,直接透传给设备。设备需要提前订阅该topic。此字段与topic字段只可填写一个。

ttl

Integer

参数说明:下发消息在平台缓存的老化时间,时间单位是分钟,默认值1440;ttl参数数值必须是5的倍数,即以5分钟为粒度;指定为0时表示不缓存消息,默认最大缓存时间为1440分钟。

表4 PropertiesDTO

参数

是否必选

参数类型

描述

correlation_data

String

参数说明:MQTT 5.0版本请求和响应模式中的相关数据,可选。用户可以通过该参数配置MQTT协议请求和响应模式中的相关数据。

取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。

response_topic

String

参数说明:MQTT 5.0版本请求和响应模式中的响应主题,可选。用户可以通过该参数配置MQTT协议请求和响应模式中的响应主题。

取值范围:长度不超过128, 只允许字母、数字、以及_-?=$#+/等字符的组合。

user_properties

Array of UserPropDTO objects

参数说明:用户自定义属性,可选。用户可以通过该参数配置用户自定义属性。可以配置的最大自定义属性数量为20。

表5 UserPropDTO

参数

是否必选

参数类型

描述

prop_key

String

参数说明:用户自定义属性键。

取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。

prop_value

String

参数说明:用户自定义属性值。

取值范围:长度不超过128,只允许中文、字母、数字、以及_? '#().,&%@!-等字符的组合。

响应参数

状态码: 201

表6 响应Body参数

参数

参数类型

描述

message_id

String

消息id,由用户生成(推荐使用UUID),同一个设备下唯一, 如果用户不填写,则由物联网平台生成。

result

MessageResult object

消息下发结果。Json格式。

表7 MessageResult

参数

参数类型

描述

status

String

消息状态, PENDING,DELIVERED,FAILED和TIMEOUT。如果设备不在线,则平台缓存消息,并且返回PENDING,等设备数据上报之后再下发;如果设备在线,则消息直接进行下发,下发成功后接口返回DELIVERED,失败返回FAILED;如果消息在平台默认时间内(1天)还没有下发给设备,则平台会将消息设置为超时,状态为TIMEOUT。另外应用可以订阅消息的执行结果,平台会将消息结果推送给订阅的应用。

created_time

String

消息的创建时间,"yyyyMMdd'T'HHmmss'Z'"格式的UTC字符串。

finished_time

String

消息结束时间, "yyyyMMdd'T'HHmmss'Z'"格式的UTC字符串,包含消息转换到DELIVERED,FAILED和TIMEOUT状态的时间。

请求示例

  • 创建消息,通过平台默认topic下发。

    POST https://{endpoint}/v5/iot/{project_id}/devices/{device_id}/messages
    
    {
      "message_id" : "99b32da9-cd17-4cdf-a286-f6e849cbc364",
      "name" : "messageName",
      "message" : "HelloWorld"
    }
  • 创建消息,通过平台自定义topic下发。

    POST https://{endpoint}/v5/iot/{project_id}/devices/{device_id}/messages
    
    {
      "message_id" : "99b32da9-cd17-4cdf-a286-f6e849cbc364",
      "name" : "messageName",
      "message" : "HelloWorld",
      "topic" : "testTopic"
    }
  • 创建消息,通过自定义topic下发。

    POST https://{endpoint}/v5/iot/{project_id}/devices/{device_id}/messages
    
    {
      "message_id" : "99b32da9-cd17-4cdf-a286-f6e849cbc364",
      "name" : "messageName",
      "message" : "HelloWorld",
      "topic_full_name" : "/test/customTopic/testTopic"
    }

响应示例

状态码: 201

Created

{
  "message_id" : "b1224afb-e9f0-4916-8220-b6bab568e888",
  "result" : {
    "status" : "PENDING",
    "created_time" : "20151212T121212Z",
    "finished_time" : "20151212T121213Z"
  }
}

SDK代码示例

SDK代码示例如下。

  • 创建消息,通过平台默认topic下发。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    package com.huaweicloud.sdk.test;
    
    import com.huaweicloud.sdk.core.auth.ICredential;
    import com.huaweicloud.sdk.core.auth.AbstractCredentials;
    import com.huaweicloud.sdk.core.auth.BasicCredentials;
    import com.huaweicloud.sdk.core.exception.ConnectionException;
    import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
    import com.huaweicloud.sdk.core.exception.ServiceResponseException;
    import com.huaweicloud.sdk.core.region.Region;
    import com.huaweicloud.sdk.iotda.v5.*;
    import com.huaweicloud.sdk.iotda.v5.model.*;
    
    
    public class CreateMessageSolution {
    
        public static void main(String[] args) {
            // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
            // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
            String ak = System.getenv("CLOUD_SDK_AK");
            String sk = System.getenv("CLOUD_SDK_SK");
            // ENDPOINT:请在控制台的"总览"界面的"平台接入地址"中查看“应用侧”的https接入地址。
            String iotdaEndpoint = "<YOUR ENDPOINT>";
            String projectId = "{project_id}";
    
            ICredential auth = new BasicCredentials()
                    .withProjectId(projectId)
                    // 标准版/企业版需要使用衍生算法,基础版请删除配置"withDerivedPredicate";
                    .withDerivedPredicate(AbstractCredentials.DEFAULT_DERIVED_PREDICATE) // Used in derivative ak/sk authentication scenarios
                    .withAk(ak)
                    .withSk(sk);
    
            IoTDAClient client = IoTDAClient.newBuilder()
                    .withCredential(auth)
                    // 标准版/企业版:需自行创建Region对象,基础版:请使用IoTDARegion的region对象,如"withRegion(IoTDARegion.CN_NORTH_4)"
                    .withRegion(new Region("cn-north-4", iotdaEndpoint))
                    .build();
            CreateMessageRequest request = new CreateMessageRequest();
            request.withDeviceId("{device_id}");
            DeviceMessageRequest body = new DeviceMessageRequest();
            body.withMessage("HelloWorld");
            body.withName("messageName");
            body.withMessageId("99b32da9-cd17-4cdf-a286-f6e849cbc364");
            request.withBody(body);
            try {
                CreateMessageResponse response = client.createMessage(request);
                System.out.println(response.toString());
            } catch (ConnectionException e) {
                e.printStackTrace();
            } catch (RequestTimeoutException e) {
                e.printStackTrace();
            } catch (ServiceResponseException e) {
                e.printStackTrace();
                System.out.println(e.getHttpStatusCode());
                System.out.println(e.getRequestId());
                System.out.println(e.getErrorCode());
                System.out.println(e.getErrorMsg());
            }
        }
    }
    
  • 创建消息,通过平台自定义topic下发。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    package com.huaweicloud.sdk.test;
    
    import com.huaweicloud.sdk.core.auth.ICredential;
    import com.huaweicloud.sdk.core.auth.AbstractCredentials;
    import com.huaweicloud.sdk.core.auth.BasicCredentials;
    import com.huaweicloud.sdk.core.exception.ConnectionException;
    import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
    import com.huaweicloud.sdk.core.exception.ServiceResponseException;
    import com.huaweicloud.sdk.core.region.Region;
    import com.huaweicloud.sdk.iotda.v5.*;
    import com.huaweicloud.sdk.iotda.v5.model.*;
    
    
    public class CreateMessageSolution {
    
        public static void main(String[] args) {
            // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
            // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
            String ak = System.getenv("CLOUD_SDK_AK");
            String sk = System.getenv("CLOUD_SDK_SK");
            // ENDPOINT:请在控制台的"总览"界面的"平台接入地址"中查看“应用侧”的https接入地址。
            String iotdaEndpoint = "<YOUR ENDPOINT>";
            String projectId = "{project_id}";
    
            ICredential auth = new BasicCredentials()
                    .withProjectId(projectId)
                    // 标准版/企业版需要使用衍生算法,基础版请删除配置"withDerivedPredicate";
                    .withDerivedPredicate(AbstractCredentials.DEFAULT_DERIVED_PREDICATE) // Used in derivative ak/sk authentication scenarios
                    .withAk(ak)
                    .withSk(sk);
    
            IoTDAClient client = IoTDAClient.newBuilder()
                    .withCredential(auth)
                    // 标准版/企业版:需自行创建Region对象,基础版:请使用IoTDARegion的region对象,如"withRegion(IoTDARegion.CN_NORTH_4)"
                    .withRegion(new Region("cn-north-4", iotdaEndpoint))
                    .build();
            CreateMessageRequest request = new CreateMessageRequest();
            request.withDeviceId("{device_id}");
            DeviceMessageRequest body = new DeviceMessageRequest();
            body.withTopic("testTopic");
            body.withMessage("HelloWorld");
            body.withName("messageName");
            body.withMessageId("99b32da9-cd17-4cdf-a286-f6e849cbc364");
            request.withBody(body);
            try {
                CreateMessageResponse response = client.createMessage(request);
                System.out.println(response.toString());
            } catch (ConnectionException e) {
                e.printStackTrace();
            } catch (RequestTimeoutException e) {
                e.printStackTrace();
            } catch (ServiceResponseException e) {
                e.printStackTrace();
                System.out.println(e.getHttpStatusCode());
                System.out.println(e.getRequestId());
                System.out.println(e.getErrorCode());
                System.out.println(e.getErrorMsg());
            }
        }
    }
    
  • 创建消息,通过自定义topic下发。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    package com.huaweicloud.sdk.test;
    
    import com.huaweicloud.sdk.core.auth.ICredential;
    import com.huaweicloud.sdk.core.auth.AbstractCredentials;
    import com.huaweicloud.sdk.core.auth.BasicCredentials;
    import com.huaweicloud.sdk.core.exception.ConnectionException;
    import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
    import com.huaweicloud.sdk.core.exception.ServiceResponseException;
    import com.huaweicloud.sdk.core.region.Region;
    import com.huaweicloud.sdk.iotda.v5.*;
    import com.huaweicloud.sdk.iotda.v5.model.*;
    
    
    public class CreateMessageSolution {
    
        public static void main(String[] args) {
            // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
            // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
            String ak = System.getenv("CLOUD_SDK_AK");
            String sk = System.getenv("CLOUD_SDK_SK");
            // ENDPOINT:请在控制台的"总览"界面的"平台接入地址"中查看“应用侧”的https接入地址。
            String iotdaEndpoint = "<YOUR ENDPOINT>";
            String projectId = "{project_id}";
    
            ICredential auth = new BasicCredentials()
                    .withProjectId(projectId)
                    // 标准版/企业版需要使用衍生算法,基础版请删除配置"withDerivedPredicate";
                    .withDerivedPredicate(AbstractCredentials.DEFAULT_DERIVED_PREDICATE) // Used in derivative ak/sk authentication scenarios
                    .withAk(ak)
                    .withSk(sk);
    
            IoTDAClient client = IoTDAClient.newBuilder()
                    .withCredential(auth)
                    // 标准版/企业版:需自行创建Region对象,基础版:请使用IoTDARegion的region对象,如"withRegion(IoTDARegion.CN_NORTH_4)"
                    .withRegion(new Region("cn-north-4", iotdaEndpoint))
                    .build();
            CreateMessageRequest request = new CreateMessageRequest();
            request.withDeviceId("{device_id}");
            DeviceMessageRequest body = new DeviceMessageRequest();
            body.withTopicFullName("/test/customTopic/testTopic");
            body.withMessage("HelloWorld");
            body.withName("messageName");
            body.withMessageId("99b32da9-cd17-4cdf-a286-f6e849cbc364");
            request.withBody(body);
            try {
                CreateMessageResponse response = client.createMessage(request);
                System.out.println(response.toString());
            } catch (ConnectionException e) {
                e.printStackTrace();
            } catch (RequestTimeoutException e) {
                e.printStackTrace();
            } catch (ServiceResponseException e) {
                e.printStackTrace();
                System.out.println(e.getHttpStatusCode());
                System.out.println(e.getRequestId());
                System.out.println(e.getErrorCode());
                System.out.println(e.getErrorMsg());
            }
        }
    }
    
  • 创建消息,通过平台默认topic下发。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    # coding: utf-8
    
    import os
    from huaweicloudsdkcore.auth.credentials import BasicCredentials
    from huaweicloudsdkcore.auth.credentials import DerivedCredentials
    from huaweicloudsdkcore.region.region import Region as coreRegion
    from huaweicloudsdkcore.exceptions import exceptions
    from huaweicloudsdkiotda.v5 import *
    
    if __name__ == "__main__":
        # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak = os.environ["CLOUD_SDK_AK"]
        sk = os.environ["CLOUD_SDK_SK"]
        // ENDPOINT请在控制台的"总览"界面的"平台接入地址"中查看应用侧的https接入地址
        iotdaEndpoint = "<YOUR ENDPOINT>";
        projectId = "{project_id}"
    
        credentials = BasicCredentials(ak, sk, projectId).with_derived_predicate(DerivedCredentials.get_default_derived_predicate())
    
        client = IoTDAClient.new_builder() \
            .with_credentials(credentials) \
            # 标准版/企业版:需要使用自行创建的Region对象,基础版:请选择IoTDAClient中的Region对象 如: .with_region(IoTDARegion.CN_NORTH_4)
            .with_region(coreRegion(id="cn-north-4", endpoint=endpoint)) \
            .build()
    
        try:
            request = CreateMessageRequest()
            request.device_id = "{device_id}"
            request.body = DeviceMessageRequest(
                message="HelloWorld",
                name="messageName",
                message_id="99b32da9-cd17-4cdf-a286-f6e849cbc364"
            )
            response = client.create_message(request)
            print(response)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
    
  • 创建消息,通过平台自定义topic下发。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    # coding: utf-8
    
    import os
    from huaweicloudsdkcore.auth.credentials import BasicCredentials
    from huaweicloudsdkcore.auth.credentials import DerivedCredentials
    from huaweicloudsdkcore.region.region import Region as coreRegion
    from huaweicloudsdkcore.exceptions import exceptions
    from huaweicloudsdkiotda.v5 import *
    
    if __name__ == "__main__":
        # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak = os.environ["CLOUD_SDK_AK"]
        sk = os.environ["CLOUD_SDK_SK"]
        // ENDPOINT请在控制台的"总览"界面的"平台接入地址"中查看应用侧的https接入地址
        iotdaEndpoint = "<YOUR ENDPOINT>";
        projectId = "{project_id}"
    
        credentials = BasicCredentials(ak, sk, projectId).with_derived_predicate(DerivedCredentials.get_default_derived_predicate())
    
        client = IoTDAClient.new_builder() \
            .with_credentials(credentials) \
            # 标准版/企业版:需要使用自行创建的Region对象,基础版:请选择IoTDAClient中的Region对象 如: .with_region(IoTDARegion.CN_NORTH_4)
            .with_region(coreRegion(id="cn-north-4", endpoint=endpoint)) \
            .build()
    
        try:
            request = CreateMessageRequest()
            request.device_id = "{device_id}"
            request.body = DeviceMessageRequest(
                topic="testTopic",
                message="HelloWorld",
                name="messageName",
                message_id="99b32da9-cd17-4cdf-a286-f6e849cbc364"
            )
            response = client.create_message(request)
            print(response)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
    
  • 创建消息,通过自定义topic下发。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    # coding: utf-8
    
    import os
    from huaweicloudsdkcore.auth.credentials import BasicCredentials
    from huaweicloudsdkcore.auth.credentials import DerivedCredentials
    from huaweicloudsdkcore.region.region import Region as coreRegion
    from huaweicloudsdkcore.exceptions import exceptions
    from huaweicloudsdkiotda.v5 import *
    
    if __name__ == "__main__":
        # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak = os.environ["CLOUD_SDK_AK"]
        sk = os.environ["CLOUD_SDK_SK"]
        // ENDPOINT请在控制台的"总览"界面的"平台接入地址"中查看应用侧的https接入地址
        iotdaEndpoint = "<YOUR ENDPOINT>";
        projectId = "{project_id}"
    
        credentials = BasicCredentials(ak, sk, projectId).with_derived_predicate(DerivedCredentials.get_default_derived_predicate())
    
        client = IoTDAClient.new_builder() \
            .with_credentials(credentials) \
            # 标准版/企业版:需要使用自行创建的Region对象,基础版:请选择IoTDAClient中的Region对象 如: .with_region(IoTDARegion.CN_NORTH_4)
            .with_region(coreRegion(id="cn-north-4", endpoint=endpoint)) \
            .build()
    
        try:
            request = CreateMessageRequest()
            request.device_id = "{device_id}"
            request.body = DeviceMessageRequest(
                topic_full_name="/test/customTopic/testTopic",
                message="HelloWorld",
                name="messageName",
                message_id="99b32da9-cd17-4cdf-a286-f6e849cbc364"
            )
            response = client.create_message(request)
            print(response)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
    
  • 创建消息,通过平台默认topic下发。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    package main
    
    import (
    	"fmt"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
        iotda "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iotda/v5"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iotda/v5/model"
        region "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/region"
        core_auth "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth"
    )
    
    func main() {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak := os.Getenv("CLOUD_SDK_AK")
        sk := os.Getenv("CLOUD_SDK_SK")
        // endpoint:请在控制台的"总览"界面的"平台接入地址"中查看"应用侧"的https接入地址
        endpoint := "<YOUR ENDPOINT>"
        projectId := "{project_id}"
    
        auth := basic.NewCredentialsBuilder().
            WithAk(ak).
            WithSk(sk).
            WithProjectId(projectId).
            // 企业版/标准版需要使用衍生算法,基础版请删除该配置"WithDerivedPredicate"
            WithDerivedPredicate(core_auth.GetDefaultDerivedPredicate()). // Used in derivative ak/sk authentication scenarios
            Build()
    
        client := iotda.NewIoTDAClient(
            iotda.IoTDAClientBuilder().
                // 标准版/企业版需要自行创建region,基础版使用IoTDARegion中的region对象
                WithRegion(region.NewRegion("cn-north-4", endpoint)).
                WithCredential(auth).
                Build())
    
        request := &model.CreateMessageRequest{}
    	request.DeviceId = "{device_id}"
    	var messageDeviceMessageRequest interface{} = "HelloWorld"
    	nameDeviceMessageRequest:= "messageName"
    	messageIdDeviceMessageRequest:= "99b32da9-cd17-4cdf-a286-f6e849cbc364"
    	request.Body = &model.DeviceMessageRequest{
    		Message: &messageDeviceMessageRequest,
    		Name: &nameDeviceMessageRequest,
    		MessageId: &messageIdDeviceMessageRequest,
    	}
    	response, err := client.CreateMessage(request)
    	if err == nil {
            fmt.Printf("%+v\n", response)
        } else {
            fmt.Println(err)
        }
    }
    
  • 创建消息,通过平台自定义topic下发。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    package main
    
    import (
    	"fmt"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
        iotda "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iotda/v5"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iotda/v5/model"
        region "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/region"
        core_auth "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth"
    )
    
    func main() {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak := os.Getenv("CLOUD_SDK_AK")
        sk := os.Getenv("CLOUD_SDK_SK")
        // endpoint:请在控制台的"总览"界面的"平台接入地址"中查看"应用侧"的https接入地址
        endpoint := "<YOUR ENDPOINT>"
        projectId := "{project_id}"
    
        auth := basic.NewCredentialsBuilder().
            WithAk(ak).
            WithSk(sk).
            WithProjectId(projectId).
            // 企业版/标准版需要使用衍生算法,基础版请删除该配置"WithDerivedPredicate"
            WithDerivedPredicate(core_auth.GetDefaultDerivedPredicate()). // Used in derivative ak/sk authentication scenarios
            Build()
    
        client := iotda.NewIoTDAClient(
            iotda.IoTDAClientBuilder().
                // 标准版/企业版需要自行创建region,基础版使用IoTDARegion中的region对象
                WithRegion(region.NewRegion("cn-north-4", endpoint)).
                WithCredential(auth).
                Build())
    
        request := &model.CreateMessageRequest{}
    	request.DeviceId = "{device_id}"
    	topicDeviceMessageRequest:= "testTopic"
    	var messageDeviceMessageRequest interface{} = "HelloWorld"
    	nameDeviceMessageRequest:= "messageName"
    	messageIdDeviceMessageRequest:= "99b32da9-cd17-4cdf-a286-f6e849cbc364"
    	request.Body = &model.DeviceMessageRequest{
    		Topic: &topicDeviceMessageRequest,
    		Message: &messageDeviceMessageRequest,
    		Name: &nameDeviceMessageRequest,
    		MessageId: &messageIdDeviceMessageRequest,
    	}
    	response, err := client.CreateMessage(request)
    	if err == nil {
            fmt.Printf("%+v\n", response)
        } else {
            fmt.Println(err)
        }
    }
    
  • 创建消息,通过自定义topic下发。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    package main
    
    import (
    	"fmt"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
        iotda "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iotda/v5"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iotda/v5/model"
        region "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/region"
        core_auth "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth"
    )
    
    func main() {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak := os.Getenv("CLOUD_SDK_AK")
        sk := os.Getenv("CLOUD_SDK_SK")
        // endpoint:请在控制台的"总览"界面的"平台接入地址"中查看"应用侧"的https接入地址
        endpoint := "<YOUR ENDPOINT>"
        projectId := "{project_id}"
    
        auth := basic.NewCredentialsBuilder().
            WithAk(ak).
            WithSk(sk).
            WithProjectId(projectId).
            // 企业版/标准版需要使用衍生算法,基础版请删除该配置"WithDerivedPredicate"
            WithDerivedPredicate(core_auth.GetDefaultDerivedPredicate()). // Used in derivative ak/sk authentication scenarios
            Build()
    
        client := iotda.NewIoTDAClient(
            iotda.IoTDAClientBuilder().
                // 标准版/企业版需要自行创建region,基础版使用IoTDARegion中的region对象
                WithRegion(region.NewRegion("cn-north-4", endpoint)).
                WithCredential(auth).
                Build())
    
        request := &model.CreateMessageRequest{}
    	request.DeviceId = "{device_id}"
    	topicFullNameDeviceMessageRequest:= "/test/customTopic/testTopic"
    	var messageDeviceMessageRequest interface{} = "HelloWorld"
    	nameDeviceMessageRequest:= "messageName"
    	messageIdDeviceMessageRequest:= "99b32da9-cd17-4cdf-a286-f6e849cbc364"
    	request.Body = &model.DeviceMessageRequest{
    		TopicFullName: &topicFullNameDeviceMessageRequest,
    		Message: &messageDeviceMessageRequest,
    		Name: &nameDeviceMessageRequest,
    		MessageId: &messageIdDeviceMessageRequest,
    	}
    	response, err := client.CreateMessage(request)
    	if err == nil {
            fmt.Printf("%+v\n", response)
        } else {
            fmt.Println(err)
        }
    }
    

更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

201

Created

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

500

Internal Server Error

错误码

请参见错误码

相关文档