Skip to main content
Older versions of Internet Explorer will not support certain site features. Chrome, Safari, Firefox, and Edge will provide the best experience.
Spok

Spok Mobile Client-Initiated Message Flow Diagrams

Spok Mobile Client-Initiated Message Flow

The following diagram shows how a message flows through the Care Connect Suite from a Spok Mobile client sender to a Spok Mobile client recipient. It shows which services and components are used, how they interact with each other, and where the message waits for one service before moving on to the next.

Right-click on the diagram for options to see an expanded view.

SM_4.4_Client-Initiated-Message-Flow.png

 

Spok Mobile Client-Initiated Message Data Flow

The following diagram and descriptions provide details about how message data flows through the Care Connect Suite from a Spok Mobile client to another Spok Mobile client. It depicts the objects sent between CCS components, which database tables are accessed, and the specific database fields that are written to and read from. This diagram may be useful for troubleshooting issues, because if you know which fields have already been updated, you can determine where the data stopped in the flow. 

Right-click on the diagram for options to see an expanded view.

SM_4.4_Client-Initiated-Message-Data-Flow.png

Data Requests at Each Step

1. Interact with Client

2. Process message SM Client

2.1 Search for Contact

Contact {
    ContactId: {CONTACT_ID}
    Department: {DEPARTMENT_NAME}
    FirstName: {FIRST_NAME}
    LastName: {LAST_NAME}
    Group: ""
    Id: {CONTACT_CENTER_USER_ID}
    IsPageable: true|false
    IsSecure: true|false
    PicturePath: {PICTURE_PATH_URL}
    PublisherId: ""
    ReassignId: "0"
    ReassignName: ""
    Roles: ""
    StatusDescription: "In/On Pager"
    StatusFunction: "Available"
    Title: ""
    Type: "Person"|"Department"|"OnCallGroup"|"Team"|"OnCallRole"
}

    2.2 Store MessageAttachments – Optional

Store attachments in [AmcomAmcPremiseCore].[dbo].[AmcHostMessageAttachment] table if presented.

    2.3 Store MessageAssets – Optional

Store the link between attachments and assets in [AmcomAmcPremiseCore].[dbo].[MessageAsset] table.

    2.4 Send message to Contact Center

AddMessageRequest {
    AssetIds: []
    ConversationId: {CONVERSATION_ID}
    From: null
    Priority: {PRIORITY}
    Text: {MESSAGE_TEXT}
    To {
        Recipients: [{CONTACT_CENTER_USER_ID}],
        SiteId: {SITE_ID}
    }
}

3. Send Message to SM Server

<?xml version="1.0" encoding="UTF-8"?>
<amcomMessage>
    <header>
        <origin>{SYSTEM_NAME}</origin>
    </header>
    <newMessage>
        <from>
            <id>-{SENDER_ID}</id>
            <name>{SENDER_NAME}</name>
        </from>
        <conversationId>
            <trackingId>{MESSAGE_ID}</trackingId>
            <systemId>{SYSTEM_NAME}</systemId>
            <deviceId>{VENDOR_DEVICE_ID}</deviceId>
            <id>{CONVERSATION_ID}</id>
            <siteId>{SITE_ID}</siteId>
        </conversationId>
        <messageControls>
            <messageType>{MESSAGE_TYPE}</messageType>
            <priority>{PRIORITY}</priority>
            <dateTime>{DATE_TIME}</dateTime>
            <beepCode>2</beepCode>
            <messageVersion>1</messageVersion>
            <timeoutDevice>120</timeoutDevice>
            <timeoutUser>300</timeoutUser>
            <deviceType>{DEVICE_TYPE}</deviceType>
            <deviceBrand />
            <deviceOS>{DEVICE_OS}</deviceOS>
            <devicePort>{DEVICE_PORT}</devicePort>
            <deviceCarrier />
            <encryptionType>0</encryptionType>
        </messageControls>
        <recipient>
            <outputGateway>{GATEWAY}</outputGateway>
            <destination>{TELEPHINE_NUMBER}</destination>
        </recipient>
        <messageBody>
            <textMessage>{MESSAGE_TEXT}</textMessage>
            <responseChoices />
        </messageBody>
    </newMessage>
</amcomMessage>

4. Process message SM Server

4.1 Store Accepted

<?xml version="1.0" encoding="utf-16" standalone="no"?>
<amcomMessage>
    <header>
        <origin>{SYSTEM_NAME}</origin>
    </header>
    <messageNotification>
        <originator>
            <source>{TELEPHONE_NUMBER}</source>
        </originator>
        <conversationId>
            <trackingId>{MESSAGE_ID}</trackingId>
            <systemId>{SYSTEM_NAME}</systemId>
        </conversationId>
        <status>
            <dateTime>{DATE_TIME}</dateTime>
            <statusText>ACCEPTED</statusText>
        </status>
    </messageNotification>
</amcomMessage>

    4.2 Store Message

Store the message in [AmcomAmcPremiseCore].[dbo].[AmcHostMessages] table with Status QUEUED.

    4.3 Store Queued

<?xml version="1.0" encoding="utf-16" standalone="no"?>
<amcomMessage>
    <header>
        <origin>{SYSTEM_NAME}</origin>
    </header>
    <messageNotification>
        <originator>
            <source>{TELEPHONE_NUMBER}</source>
        </originator>
        <conversationId>
            <trackingId>{MESSAGE_ID}</trackingId>
            <systemId>{SYSTEM_NAME}</systemId>
        </conversationId>
        <status>
            <dateTime>{DATE_TIME}</dateTime>
            <statusText>QUEUED</statusText>
        </status>
    </messageNotification>
</amcomMessage>

    4.4 Send Push Notification to SM Hosted

Envelope {
    MessageType: "Amcom.Message.New",
    From {
        Id: "NotificationService",
        TypeId: "Amcom.Amc.Notification",
        SystemId: "Amcom.Amc.Server.Core"
    },
    To {
        Id: {NOTIFICATION_ADDRESS},
        TypeId: "Amcom.Amc.Notification",
        SystemId: "Amcom.Amc.MessageBroker.Service"
    },
    Content: NotificationRequest {
        NotificationAddress: {NOTIFICATION_ADDRESS},
                        GatewayType: GCM,
        CallbackUri: {ENTERPRISE_URL},
        CallbackData: {MESSAGE_UNIQUE_ID},
        Payload: PushPayload {
            ClientMessagingUrls: [{ENTERPRISE_URL}],
            MessageCount = {NUMBER_OF_MESSAGES},
            Priority = {PRIORITY},
            CoreVersion = {ENTERPRISE_VERSION}
        }    
    }
}

    4.5 Store Enroute

<?xml version="1.0" encoding="utf-16" standalone="no"?>
<amcomMessage>
    <header>
        <origin>{SYSTEM_NAME}</origin>
    </header>
    <messageNotification>
        <originator>
            <source>{TELEPHONE_NUMBER}</source>
        </originator>
        <conversationId>
            <trackingId>{MESSAGE_ID}</trackingId>
            <systemId>{SYSTEM_NAME}</systemId>
        </conversationId>
        <status>
            <dateTime>{DATE_TIME}</dateTime>
            <statusText>ENROUTE</statusText>
        </status>
    </messageNotification>
</amcomMessage>

5. Process Push Notification SM Hosted

5.1 Store Push Notification

Store the Notification in [AmcomAmcPremiseCore].[dbo].[Notifications] table on Hosted.

    5.2 Queue Push Notification

Queue the notification by inserting a record in [Core].[dbo].[MessageQueue].

    5.3 Send Push Notification

Android Payload:

{
    "collapse_key": "AMC",
    "registration_ids": ["{NOTIFICATION_ADDRESS}"],
    "data": {
        "message": "{\"ClientMessagingUrls\":[\"{ENTERPRISE_URL}\"],\"CoreVersion\":\"{ENTERPRISE_VERSION}\",\"MessageCount\":{NUMBER_OF_MESSAGES},\"Priority\":{PRIORITY}}",
        "time": {DATE_TIME}
    },
    "time_to_live": 259200 
}

Apple Payload:

Notification {
    DeviceToken: {NOTIFICATION_ADDRESS},
    Expiration: null,
    Payload: {"aps":{"content-available":1,"sound":""},"DeviceRequestType":"GetMessages"},
    Tag: null
}

    5.4 Get Message(s)

Request:

{ENTERPRISE_URL}/ClientMessaging/V2/GetMessages
Data: {vendorId: {VENDOR_DEVICE_ID}}

Response:

AmcGetMessagesResponse {
    ResponseType: "GetMessages",
    ResponseCode: 0,
    ResponseDescription: "Success"
    Messages: 
    [
        AmcMessage {
            UniqueId: {UNIQUE_ID},
            Date: {DATE_TIME},
            Text: {MESSAGE_TEXT},
            Status: 0,
            SiteId: {SITE_ID},
            ConversationId: {CONVERSATION_ID},
            CallbackNumber: {CALLBACK_NUMBER},
            Priority: {PRIORITY},
            MessageType: {MESSAGE_TYPE},
            Assets: [AmcAsset{}]
            From {
                Id: {FROM_ID},
                Name: {FROM_NAME},
                ContactId: {CONTACT_ID}
            }
        }
    ]
}

    5.5 Update Status to Delivered

UPDATE [AmcomAmcPremiseCore].[dbo].[AmcHostMessages] SET [Status] = "DELIVERED" WHERE [UniqueId] = {UNIQUE_ID}

    5.6 Store Delivered

<?xml version="1.0" encoding="utf-16" standalone="no"?>
<amcomMessage>
    <header>
        <origin>{SYSTEM_NAME}</origin>
    </header>
    <messageNotification>
        <originator>
            <source>{TELEPHONE_NUMBER}</source>
        </originator>
        <conversationId>
            <trackingId>{MESSAGE_ID}</trackingId>
            <systemId>{SYSTEM_NAME}</systemId>
        </conversationId>
        <status>
            <dateTime>{DATE_TIME}</dateTime>
            <statusText>DELIVERED</statusText>
        </status>
    </messageNotification>
</amcomMessage>