Create Message

创建 Application Portal 上的普通提示消息与告警消息。

操作权限

用户无需登录 Application Portal。

约束条件

  • 关联的应用已被组织购买

  • 若此条消息是关于资产的告警消息,则该资产或资产的父节点需带有 auth_unit:true 的标签

请求格式

POST https://{apigw-address}/app-portal-service/v2.2/message/produce

请求参数(Body)

名称

必需/可选

数据类型

描述

messages

必需

MessageProduceDTO结构体

产生的消息。

MessageProduceDTO结构体

名称

必需/可选

数据类型

描述

messageId

必需

String

告警消息ID。

type

必需

Integer

消息类型,0:普通消息,1:告警消息。

orgId

必需

String

组织ID。

accessKey

必需

String

应用的服务账号,应用以 accessKey 进行鉴权以获得其被授权访问的数据。如何获取accessKey信息>>

body

可选

I18nString

多语言显示的消息信息。必须至少指定 defaulten_US 的内容。结构见 国际化名称结构体>>

color

可选

Integer

消息严重级别颜色标识。

ring

可选

Integer

消息的声音类型。

tags

可选

Map

多语言显示的消息的标签。只展示前三个。必须至少指定 defaulten_US 的内容。结构见 国际化名称结构体>>

produceTime

必需

String

message produce time, format: “yyyy-MM-dd HH:mm:ss” 告警消息生成时间,以UTC时间表示。

zoneOffset

必需

String

时区,如”+08:00”。

linkedAppId

可选

String

与告警消息关联的应用的ID。(linkedAppId、linkedMenuCode、linkedStates三者构成跳转链接URL,如https://{app-service-address}/portal/60d110ff-f388-48f4-916b-9e637d4886af/alarmProcessing?state=site%253DeVKqg4zr,其中,{app-service-address}为能够展示全部告警的服务地址,“60d110ff-f388-48f4-916b-9e637d4886af”为 linkedAppId,“alarmProcessing”为 linkedMenuCode,“site%253DeVKqg4zr”为 linkedStates)。

linkedMenuCode

可选

String

与消息关联的应用内的菜单标识符。

linkedStates

可选

String

message linked states,与消息关联的URL state。

feature

可选

I18nString

多语言显示的用户自定义描述。必须至少指定 defaulten_US 的内容。结构见 国际化名称结构体>>

assetId

可选

String

与告警消息相关的资产的ID。若告警消息与资产无关,则可不提供。

authUnitId

必需

String

在EnOS平台的资产树中打了“auth_unit:true”标签的资产,可以是assetId,也可能是assetId的父节点,是同步到Application Portal中的资产ID,用于校验应用对此资产的权限。如一个光伏电站下有若干个光伏面板,每个光伏面板有各自的资产ID:assetId1、assetId2等。此光伏电站在EnOS平台的资产树被打了“auth_unit:true”的标签。当此光伏电站被成功同步到Application Portal后(authUnitId有效),如果某个组织拥有appId表示的应用,那么在Application Portal中对光伏面板这一资产可见的用户可以收到相应的告警消息。在此例中,assetId为某个光伏面板的ID,authUnitId为光伏电站ID。

callbackUrl

可选

String

为用户在消息弹窗中点击 ActionName 对应按钮后,Application Portal回调的完整URL(可支持URL Encode)。此回调为Get请求。例如https://{app-service-address}/callback?appId=accessKey&messageId=messagett0q22w1299或者https%3a%2f%2f%7bapp-service-address%7d%2fcallback%3fappId%3daccessKey%26messageId%3dmessagett0q22w1299+,其中{app-service-address}为能够接受并处理回调请求的服务器地址。

actionName

可选

I18nString

消息弹框中自定义按钮上的文字。建议中文两字符,英文三个字符,如“确认”和“ACK”。如不提供则不展示。必须至少指定 defaulten_US 的内容。结构见 国际化名称结构体>>

actionPermissionCode

可选

String

此参数为权限点唯一标识符,如果对此消息可见的用户具有此权限点,那么用户将在消息弹框中可以看到自定义按钮,如“确认”和“ACK”,否则将不显示。如果此参数不提供,那么默认所有对此消息可见的用户可以看到自定义按钮。

响应参数

名称

数据类型

描述

data

data结构体

null

示例

请求示例

url: https://{apigw-address}/app-portal-service/v2.2/message/produce

method: POST

requestBody:
{
  "messages": [
    {
      "zoneOffset": "+08:00",
      "linkedMenuCode": "menucode",
      "linkedAppId": "accessKey",
      "color": 1,
      "ring": 1,
      "messageId": "yunfan01",
      "produceTime": "24/7/2019 11:22:01",
      "body": {
        "default": "This is a test3335",
        "en_US": "This is a test3335",
        "zh_CN": "这是个测试233335"
      },
      "type": 1,
      "tags": [
        {
          "default": "Severe",
          "en_US": "Severe",
          "zh_CN": "严重"
        },
        {
          "default": "Performance Alarm",
          "en_US": "Performance Alarm",
          "zh_CN": "性能告警"
        },
        {
          "default": "Inverter",
          "en_US": "Inverter",
          "zh_CN": "逆变器"
        }
      ],
      "orgId": "yourOrgId",
      "authUnitId": "7Uq6uP77",
      "feature": {
        "default": "This is a feature test3343",
        "en_US": "This is a feature test3343",
        "zh_CN": "这是个特征测试1"
      },
      "assetId": "7Uq6uP77",
      "accessKey": "yourAccessKey",
      "state": 0,
      "linkedStates": "states",
      "callbackUrl":"https://{app-service-address}/app-portal/test/v1/callback?appId=accessKey&messageId=messagett0q22w1299",
      "actionName":
        {
         "en_US":"ACK",
         "zh_CN":"确认"
        }
    }
  ]
}

返回示例

{
  "code": 0,
  "message": "OK",
  "data": null
}

Java SDK 调用示例

public class AppPortalSdkTest{
    @Test
    public void createMessageTest() {
        MessageProduceRequest messageProduceRequest = new MessageProduceRequest();
        List<MessageProduceDTO> messages = new ArrayList<MessageProduceDTO>();
        MessageProduceDTO messageProduceDTO = new MessageProduceDTO();
        messageProduceDTO.setMessageId("message_id");
        messageProduceDTO.setAccessKey("your_access_key");
        messageProduceDTO.setOrgId("your_org_id");
        messageProduceDTO.setBody(new I18nString());
        messageProduceDTO.setProduceTime(DateTimeUtil.getDateTime());
        messageProduceDTO.setZoneOffset("+08:00");
        messageProduceDTO.setLinkedAppId("your_access_key");
        messageProduceDTO.setLinkedMenuCode("menu");
        messageProduceDTO.setLinkedStates("");
        messageProduceDTO.setAssetId("your_asset_id");
        messageProduceDTO.setAuthUnitId("your_asset_id");
        messageProduceDTO.setColor(1);
        messageProduceDTO.setRing(0);
        messageProduceDTO.setType(MessageType.ALARM.getValue());
        messageProduceDTO.setCallbackUrl("/");
        I18nString actionName=new I18nString();
        actionName.put("zh_CN","确认");
        actionName.put("en_US","ACK");
        messageProduceDTO.setActionName(actionName);
        messages.add(messageProduceDTO);
        messageProduceRequest.setMessages(messages);
        MessageProduceResponse messageProduceResponse = Poseidon.config(PConfig.init().appKey("your_access_key").appSecret("your_secret_key").debug())
                .url("https://{apigw-address}").getResponse(messageProduceRequest, MessageProduceResponse.class);
        System.out.println("request: " + JSONObject.toJSONString(messageProduceRequest));
        System.out.println("response: " + JSONObject.toJSONString(messageProduceResponse));
    }
}