diff --git a/im-sdk/src/main/java/com/xuqm/im/sdk/XuqmImServerSdk.java b/im-sdk/src/main/java/com/xuqm/im/sdk/XuqmImServerSdk.java index e8c246c..dcaf70c 100644 --- a/im-sdk/src/main/java/com/xuqm/im/sdk/XuqmImServerSdk.java +++ b/im-sdk/src/main/java/com/xuqm/im/sdk/XuqmImServerSdk.java @@ -321,18 +321,51 @@ public final class XuqmImServerSdk { } public ImMessage parseMessageCallbackPayload(String body) { - WebhookCallbackEnvelope envelope = parseCallbackEnvelope(body); + return parseMessageCallbackPayload(parseCallbackEnvelope(body)); + } + + public ImMessage parseMessageCallbackPayload(WebhookCallbackEnvelope envelope) { if (!envelope.isMessageEvent() - || !(envelope.isEvent("message.sent") - || envelope.isEvent("message.edited") - || envelope.isEvent("message.revoked"))) { + || !(envelope.isMessageSentEvent() + || envelope.isMessageEditedEvent() + || envelope.isMessageRevokedEvent())) { throw new ImSdkException("Callback event is not a message event"); } return readPayload(envelope, ImMessage.class); } + public ImMessage parseMessageSentCallbackPayload(String body) { + return parseMessageSentCallbackPayload(parseCallbackEnvelope(body)); + } + + public ImMessage parseMessageSentCallbackPayload(WebhookCallbackEnvelope envelope) { + requireMessageEvent(envelope, "message.sent"); + return readPayload(envelope, ImMessage.class); + } + + public ImMessage parseMessageEditedCallbackPayload(String body) { + return parseMessageEditedCallbackPayload(parseCallbackEnvelope(body)); + } + + public ImMessage parseMessageEditedCallbackPayload(WebhookCallbackEnvelope envelope) { + requireMessageEvent(envelope, "message.edited"); + return readPayload(envelope, ImMessage.class); + } + + public ImMessage parseMessageRevokedCallbackPayload(String body) { + return parseMessageRevokedCallbackPayload(parseCallbackEnvelope(body)); + } + + public ImMessage parseMessageRevokedCallbackPayload(WebhookCallbackEnvelope envelope) { + requireMessageEvent(envelope, "message.revoked"); + return readPayload(envelope, ImMessage.class); + } + public MessageReadCallbackPayload parseMessageReadCallbackPayload(String body) { - WebhookCallbackEnvelope envelope = parseCallbackEnvelope(body); + return parseMessageReadCallbackPayload(parseCallbackEnvelope(body)); + } + + public MessageReadCallbackPayload parseMessageReadCallbackPayload(WebhookCallbackEnvelope envelope) { if (!envelope.isReadReceiptEvent()) { throw new ImSdkException("Callback event is not a message.read event"); } @@ -1240,6 +1273,12 @@ public final class XuqmImServerSdk { } } + private void requireMessageEvent(WebhookCallbackEnvelope envelope, String event) { + if (!envelope.isMessageEvent() || !envelope.isEvent(event)) { + throw new ImSdkException("Callback event is not a " + event + " event"); + } + } + private static String text(JsonNode node, String field) { JsonNode value = node == null ? null : node.get(field); return value == null || value.isNull() ? null : value.asText(); @@ -1718,6 +1757,18 @@ public final class XuqmImServerSdk { return isType("message"); } + public boolean isMessageSentEvent() { + return isEvent("message.sent"); + } + + public boolean isMessageEditedEvent() { + return isEvent("message.edited"); + } + + public boolean isMessageRevokedEvent() { + return isEvent("message.revoked"); + } + public boolean isReadReceiptEvent() { return isEvent("message.read"); }