Design Document For Symphonica API
Design Document For Symphonica API
Table of Contents
Authentication........................................................................................................................1
Authentication Header for all calls..........................................................................................2
Create Service Order (Bandwidth)...........................................................................................2
Symphonica Notification.........................................................................................................5
Creating Subscription Channel...........................................................................................................6
Event Name SERVICE-ORDER.STATE-CHANGED....................................................................................................6
Authentication
Post: https://login.symphonica.com/sso_rest/authentication/login
Username: lumos-lab-api@lumos.com
Password: Escambia12
https://login.symphonica.com/service-order-manager/api/service-orders/
Request
{
"externalId": "d9a87aea-0faf-4b65-81e0-86bd55bafcec",
"priority": "1",
"orderType": "PROVIDE",
"region": "1",
"category": "HSD",
"product": {
"id": "01t6t000001ZlLfAAK",
"source": "VOM",
"name": "Residential Broadband 200"
},
"relatedParty": [
{
"role": "CUSTOMER",
"id": "8018L000000MPwxQAG",
"source": "VOM",
"name": "Order 0000010"
}
],
"orderItems": [
{
"id": 0,
"action": "ADD",
"appointments": [],
"orderItemRelationships": [],
"service": {
"publicIdentifier": "8018L000000MPwxQAG_01t6t000001ZlLfAAK_HSD",
"serviceSpecification": {
"code": "RES_HSD",
"version": "1.0"
},
"description": "",
"places": [],
"characteristics": [
{
"name": "BANDWIDTH_PROFILE",
"value": "50Mbps", // Technical Product
"serviceSpecCharRelationships": [],
"characteristicRelationships": []
},
{
"name": "TECHNOLOGY",
"value": "FTTH"
}
],
"serviceRelationship": [],
"publicIdentifierserviceRelationship": []
}
}
],
"extraValues": [
{
"name": "NETWORK_ACCESS",
"value": "false"
}
]
}
{
"id": "6408ca7371127b6ac0e731a9",
"externalId": "d9a87aea-0faf-4b65-81e0-86bd55bafcec",
"priority": "1",
"category": "HSD",
"state": "INITIAL",
"orderDate": "2023-03-08T17:48:35.470Z",
"region": "TIDEWATER",
"source": "SYM-SOM",
"traceId": "ab4f4709fb305387",
"executionMode": "LAUNCHED",
"orderType": "PROVIDE",
"notes": [],
"orderItems": [
{
"id": "0",
"action": "ADD",
"state": "INITIAL",
"appointments": [],
"orderItemRelationships": [],
"errors": [],
"service": {
"description": "",
"serviceSpecification": {
"id": null,
"source": "SYM-CATALOG",
"name": null,
"code": "RES_HSD",
"version": "1.0"
},
"category": "CFS",
"characteristics": [
{
"name": "BANDWIDTH_PROFILE",
"value": "50Mbps"
},
{
"name": "TECHNOLOGY",
"value": "FTTH"
}
],
"publicIdentifier": "8018L000000MPwxQAG_01t6t000001ZlLfAAK_HSD"
}
}
],
"orderRelationships": [],
"relatedParty": [
{
"id": "8018L000000MPwxQAG",
"source": "VOM",
"name": "Order 0000010",
"role": "CUSTOMER"
}
],
"extraValues": [
{
"name": "NETWORK_ACCESS",
"value": "false"
}
],
"errors": [],
"executionTimeInMillis": null,
"product": {
"id": "01t6t000001ZlLfAAK",
"source": "VOM",
"name": "Residential Broadband 200"
},
"customerAccount": null,
"links": [
{
"rel": "self",
"href": "https://login.symphonica.com/service-order-manager/api/service-orders/6408ca7371127b6ac0e731a9"
}
]
}
Symphonica Notification
Symphonica will return notifications to subscribed channel.
POST https://login.symphonica.com/notification-service/api/subscriber
Event Name SERVICE-ORDER.STATE-CHANGED
Request Header:
X-Organization-Code: LUMOS-LAB
X-Authorization: <Token received from authentication call>
Request Body:
{
"subscriptionType": "HTTP",
"subscriptionKey": "b0c9330714ff3dc56a0919f640d585d70a468d6b64fa041507c74b8559f78553",
"subscriberCode": "LUMOS-LAB",
"serviceName": "service-order-manager",
"eventName": "SERVICE-ORDER.STATE-CHANGED",
"query": null,
"subscriptionInformation": {
"retries": 3,
"httpUri": "https://nslumoscomm111--dev05.sandbox.my.salesforce-sites.com/services/apexrest/SymphonicaNotification",
"timeoutInMs": 3000,
"retryIntervalInMs": 30000,
"httpMethod": "POST"
},
"createdAt": "2023-03-10T15:06+0000",
"eventOutputTransformation": null,
"links": []
}
Create Apex Rest class to receive notification message via Http Post. Store the response as
JSON.
Here’s an example:
/**
* Created by josephpoozhikunnel.
*/
@RestResource(UrlMapping = '/SymphonicaNotification/*')
global with sharing class SymphonicaNotification {
@HttpPost
global static String postMessage(){
insert message;
return 'Success';
}
{
"payload": {
"id": "640b49c55a152715d2e69d49",
"externalId": "d9a87aea-0faf-4b65-81e0-86bd55bafcec",
"priority": "1",
"category": "HSD",
"state": "IN_PROGRESS",
"orderDate": "2023-03-10T15:16:21.227Z",
"startDate": "2023-03-10T15:16:21.311Z",
"region": "TIDEWATER",
"source": "SYM-SOM",
"executionMode": "LAUNCHED",
"traceId": "17b92ffc7dafd2e0",
"orderType": "PROVIDE",
"notes": [],
"orderRelationships": [],
"errors": [],
"relatedParty": [{
"id": "8018L000000MPwxQAG",
"source": "VOM",
"name": "Order 0000010",
"role": "CUSTOMER"
}],
"extraValues": [{
"name": "NETWORK_ACCESS",
"value": "false"
}],
"product": {
"id": "01t6t000001ZlLfAAK",
"source": "VOM",
"name": "Residential Broadband 200"
},
"orderItems": [{
"id": "0",
"action": "ADD",
"state": "IN_PROGRESS",
"appointments": [],
"orderItemRelationships": [],
"errors": [],
"service": {
"description": "",
"serviceSpecification": {
"id": "638a69ae607a10776e9b7582",
"source": "SYM-CATALOG",
"name": "RES_HSD",
"code": "RES_HSD",
"version": "1.0"
},
"category": "CFS",
"characteristics": [{
"name": "BANDWIDTH_PROFILE",
"value": "50Mbps"
}, {
"name": "TECHNOLOGY",
"value": "FTTH"
}],
"publicIdentifier":
"8018L000000MPwxQAG_01t6t000001ZlLfAAK_HSD"
}
}],
"executionTimeInMillis": null
},
"eventTime": "2023-03-10T15:16:21.314+0000",
"eventType": "SERVICE-ORDER.STATE-CHANGED",
"serviceName": "service-order-manager"
}
"externalId": "d9a87aea-0faf-4b65-81e0-86bd55bafcec",
This Id corresponds to the ID sent in Creating Order in the previous Create Order call. It will be
regular salesforce order id sent earlier.
"state": "IN_PROGRESS",
This indicates the progress. If it’s failed then create a case for someone to take care of it. If its
success then continue in the orchestration step.
Here are the various states:
State Description
Initial: First status of the order when sent to the SOM.
Acknowledge: It is where an order has been received and the message and basic
validations have passed.
In Progress: It is when the delivery of the service has started.
Canceled: It is where an order "on the fly" has been successfully canceled.
Completed: It is where an order has a complete provision, and the service is
now active.
Rejected: Rejected status can happen for several reasons: The order did not pass the viability check.
There are invalid values within the Order Request from the northbound system.
The order does not comply with the business rules established by the operator.
Pending: It is when the order is in the waiting stage for some action/task to be completed before it can
move forward.
Held: It is used when an order cannot progress due to a problem.
Voice
"externalId": "{{$guid}}" d9a87aea-0faf-
4b65-81e0-
86bd55bafcecc
(Address Id from
VC4 will be on
Service Address
object)
"region": "{{REGION}}" Product
1
"id": "{{product_id}}" Product Salesforce Product Id
"characteristics": [
{
"name": "BANDWIDTH_PROFILE",
"value": "Fibertec_100Mbps",
"serviceSpecCharRelationships": [],
"characteristicRelationships": []
},
{
"name": "TECHNOLOGY",
"value": "FTTH"
}
],
Important note: All name value comes from EPC Product de-composition
Characteristics Bandwidth
"value": "Fibertec_100Mbps" value To be populated from EPC
Products
"name": "BANDWIDTH_PROFILE", name To be populated from EPC
Products
Characteristics Voice
"value": "3WC", value To be populated from EPC
Products
"name": "CALL_FEATURE", name
Request (This is only voice, to add broadband add as an item to order items)
{
"externalId": "d9a87aea-0faf-4b65-81e0-86bd55bafcec",
"priority": "1",
"orderType": "PROVIDE",
"region": "1",
"category": "HSD",
"product": {
"id": "01t6t000001ZlLfAAK",
"source": "VOM",
"name": "Residential Voice"
},
"relatedParty": [
{
"role": "CUSTOMER",
"id": "8018L000000MPwxQAG",
"source": "VOM",
"name": "Order 0000010"
}
],
"orderItems": [
{
"id": 0,
"action": "ADD",
"appointments": [],
"orderItemRelationships": [],
"service": {
"publicIdentifier": "8018L000000MPwxQAG_01t6t000001ZlLfAAK_VOICE_7865642044",
"serviceSpecification": {
"code": "RES_VOICE",
"version": "1.0"
},
"description": "",
"places": [
{
"name": "Main Office",
"role": "Default Delivery",
"address": {
"streetName": "Cabildo",
"streetType": "Avenue",
"streetNumber": "50",
"streetNumberSuffix": "",
"postCode": "",
"locality": "",
"city": "Richmond",
"stateOrProvince": "Virginia",
"country": "United States"
}
}
],
"characteristics": [
{
"name": "PORT",
"value": "1"
},
{
"name": "PROFILE",
"value": "BASIC"
},
{
"name": "PHONE_NUMBER",
"value": "7865642044"
},
{
"name": "CALL_FEATURE",
"value": "CAW",
"operation": "ADD",
"characteristicRelationships": []
},
{
"name": "CALL_FEATURE",
"value": "3WC",
"operation": "ADD",
"characteristicRelationships": [
{
"id": "1",
"name": "CALL_FEATURE_CUSTOM_VALUE",
"value": "5"
}
]
},
{
"name": "TECHNOLOGY",
"value": "FTTH"
}
],
"serviceRelationship": [],
"publicIdentifierserviceRelationship": []
}
}
],
"extraValues": [
{
"name": "NETWORK_ACCESS",
"value": "false"
},
{
"name": "SIP_PASSWORD",
"value": ""
}
]
}
Important:
"publicIdentifier": "8018L000000MPwxQAG_01t6t000001ZlLfAAK_VOICE_7865642044",
This public identifier will be the service key generated on all order items in order management
process.
Note: Characteristics will represent the different call features that will be available from EPC
technical product.
"characteristics": [
{
"name": "PORT",
"value": "1"
},
{
"name": "PROFILE",
"value": "BASIC"
},
{
"name": "PHONE_NUMBER",
"value": "7865642044"
},
{
"name": "CALL_FEATURE",
"value": "CAW",
"operation": "ADD",
"characteristicRelationships": []
},
{
"name": "CALL_FEATURE",
"value": "3WC",
"operation": "ADD",
"characteristicRelationships": [
{
"id": "1",
"name": "CALL_FEATURE_CUSTOM_VALUE",
"value": "5"
}
]
},
{
"id": "64230681fbf3945011549bcc",
"externalId": "d9a87aea-0faf-4b65-81e0-86bd55bafcec",
"priority": "1",
"category": "HSD",
"state": "INITIAL",
"orderDate": "2023-03-28T15:23:45.935Z",
"region": "1",
"source": "SYM-SOM",
"traceId": "92b988795ee642e5",
"executionMode": "LAUNCHED",
"orderType": "PROVIDE",
"notes": [],
"orderItems": [
{
"id": "0",
"action": "ADD",
"state": "INITIAL",
"appointments": [],
"orderItemRelationships": [],
"errors": [],
"service": {
"description": "",
"serviceSpecification": {
"id": null,
"source": "SYM-CATALOG",
"name": null,
"code": "RES_VOICE",
"version": "1.0"
},
"category": "CFS",
"places": [
{
"name": "Main Office",
"role": "Default Delivery",
"address": {
"streetName": "Cabildo",
"streetType": "Avenue",
"streetNumber": "50",
"streetNumberSuffix": "",
"streetNumberLastSuffix": null,
"streetSuffix": null,
"postCode": "",
"locality": "",
"city": "Richmond",
"stateOrProvince": "Virginia",
"country": "United States"
}
}
],
"characteristics": [
{
"name": "PORT",
"value": "1"
},
{
"name": "PROFILE",
"value": "BASIC"
},
{
"name": "PHONE_NUMBER",
"value": "7865642044"
},
{
"name": "CALL_FEATURE",
"value": "CAW",
"operation": "ADD"
},
{
"name": "CALL_FEATURE",
"value": "3WC",
"operation": "ADD",
"characteristicRelationships": [
{
"id": "1",
"name": "CALL_FEATURE_CUSTOM_VALUE",
"value": "5"
}
]
},
{
"name": "TECHNOLOGY",
"value": "FTTH"
}
],
"publicIdentifier": "8018L000000MPwxQAG_01t6t000001ZlLfAAK_VOICE_7865642044"
}
}
],
"orderRelationships": [],
"relatedParty": [
{
"id": "8018L000000MPwxQAG",
"source": "VOM",
"name": "Order 0000010",
"role": "CUSTOMER"
}
],
"extraValues": [
{
"name": "NETWORK_ACCESS",
"value": "false"
}
],
"errors": [],
"executionTimeInMillis": null,
"product": {
"id": "01t6t000001ZlLfAAK",
"source": "VOM",
"name": "Residential Voice"
},
"customerAccount": null,
"links": [
{
"rel": "self",
"href": "https://login.symphonica.com/service-order-manager/api/service-orders/64230681fbf3945011549bcc"
}
]
}
As per symphonica they do not receive any “real” feedback after a reboot request is done. The
field tech can see the reboot happening.
POST: https://login.symphonica.com/workflow-order-manager/api/workflow-orders
Request:
{
"externalId": "d9a87aea-0faf-4b65-81e0-86bd55bafcec",
"region": "1",
"category": "RES_PON_ACCESS",
"description": "ONT Reset",
"cfs": {
"publicIdentifier": "8018L000000MPwxQAG_01t6t000001ZlLfAAK_HSD",
"source": "SYM-INVENTORY"
},
"relatedParty": [
{
"role": "CUSTOMER",
"id": "8018L000000MPwxQAG", // Order id
"source": "VOM",
"name": "Order 0000010" // Actual order number
}
],
"workflowOrderSpec": {
"source": "SYM-WOM",
"code": "DUMMY.RES_PON_ACCESS.EQUIPMENT.Reset"
}
}
"publicIdentifier": "8018L000000MPwxQAG_01t6t000001ZlLfAAK_HSD" => This is the service ID sent in the previous call
and should be on the order items.
"code": "DUMMY.RES_PON_ACCESS.EQUIPMENT.Reset" => Important: Test environment will have the “Dummy” tag.
Remove it for production.
ONT Status
NOTE: Another call to get the ONT Status can be made to get the status. But no real status is obtained. If the reboot was received
successfully then a state is sent back with the call below. But this state does not indicate if the reboot was successful. This call
therefore is redundant and have no value. For the purpose of completeness the call es EACTLY the same as above with replace
Install ONT service request is called after the installation and Serial Number and RG Serial Number are entered or scanned by
the field services tech.
POST: https://login.symphonica.com/workflow-order-manager/api/service-orders
Request:
{
"externalId": "d9a87aea-0faf-4b65-81e0-86bd55bafcec",
"priority": "1",
"orderType": "PROVIDE",
"description": "ADD",
"region": "1",
"category": "PON_ACCESS",
"product": {
"id": "01t6t000001ZlLfAAK",
"source": "VOM",
"name": "Residential Broadband 200"
},
"relatedParty": [
{
"role": "CUSTOMER",
"id": "8018L000000MPwxQAG",
"source": "VOM",
"name": "Order 0000010"
}
],
"orderItems": [
{
"id": 0,
"action": "ADD",
"service": {
"publicIdentifier": "8018L000000MPwxQAG_01t6t000001ZlLfAAK_HSD",
"serviceSpecification": {
"code": "RES_PON_ACCESS",
"version": "1.0"
},
"characteristics": [
{
"name": "SERIAL_NUMBER",
"value": "4879789"
}, {
"name": "RG_SERIAL_NUMBER",
"value": "1234567"
}
]
}
}
],
"extraValues": [
{
"name": "NETWORK_ACCESS",
"value": "false"
}
]
}
Note the highlighted key terms. These are differences when it comes to the earlier request to make an order.
Important: "code": "RES_PON_ACCESS"
The request will be the same as the order (Create Service Order). This is just another order
type.
Only difference:
{
……
"orderType": "CEASE",
"description": "DELETE",
"region": “1",
…………. All the order items etc should be included.
}
Call Features
These features will need to be added for voice product.
"characteristics": [
{
"name": "CALL_FEATURE",
"value": "CAW",
"operation": "ADD",
"characteristicRelationships": []
},
{
"name": "CALL_FEATURE",
"value": "3WC",
"operation": "ADD",
"characteristicRelationships": [
{
"id": "1",
"name": "CALL_FEATURE_CUSTOM_VALUE",
"value": "5"
}
]
},
Call this after the RES PON Access is COMPLETE the tech will need to do this call to check if
the ports are correct. The system will have to compare if there is a difference between VC4 port
details and Symphonica port details.
Request
{
"externalId": "d9a87aea-0faf-4b65-81e0-86bd55bafcec",
"region": "1",
"category": "RES_PON_ACCESS",
"description": "ONT Satus",
"cfs": {
"publicIdentifier": "8018L000000MPwxQAG_01t6t000001ZlLfAAK_HSD",
"source": "SYM-INVENTORY"
},
"relatedParty": [
{
"role": "CUSTOMER",
"id": "8018L000000MPwxQAG",
"source": "VOM",
"name": "Order 0000010"
}
],
"workflowOrderSpec": {
"source": "SYM-WOM",
"code": "DUMMY.RES_PON_ACCESS.Status"
}
}
Note: There is ongoing work on updating the response as per Symponica on April 21st. The
response will provide the port.
The port information returned has to be compared with earlier provided port info from VC4. If
this is different. Then update the new port information using the next call. Need some
clarification since its work in progress with Symphonica.
Request
{
"externalId": "d9a87aea-0faf-4b65-81e0-86bd55bafcec",
"priority": "1",
"region": "1",
"category": "PON_ACCESS",
"orderType": "CHANGE_RESOURCE",
"source": "VOM",
"relatedParty": [
{
"role": "CUSTOMER",
"id": "8018L000000MPwxQAG",
"source": "VOM",
"name": "Order 0000010"
}
],
"orderItems": [
{
"id": 0,
"action": "MODIFY",
"service": {
"publicIdentifier": "8018L000000MPwxQAG_01t6t000001ZlLfAAK_HSD", // service id
"serviceSpecification": {
"code": "RES_PON_ACCESS",
"version": "1.0"
},
"characteristics": [
{
"name": "SERIAL_NUMBER", // ont serial in woli
"value": "AAAAAAAAA",
"operation": "MODIFY"
},
{
"name": "RG_SERIAL_NUMBER", // rg serial in woli
"value": "BBBBBBBB",
"operation": "MODIFY"
}.
{
"name": "RACK",
"value": "RRRRRRRRR",
"operation": "MODIFY"
}.
{
"name": "SLOT ",
"value": "STTTTTTTTTTT",
"operation": "MODIFY"
}.
{
"name": "PORT",
"value": "PPPPPPPPP",
"operation": "MODIFY"
}.
]
}
}
],
"extraValues": [
{
"name": "NETWORK_ACCESS",
"value": "false"
}
]
}
Response:
{
"id": "64465f6afbf394501197b805",
"externalId": "d9a87aea-0faf-4b65-81e0-86bd55bafcec",
"priority": "1",
"category": "PON_ACCESS",
"state": "INITIAL",
"orderDate": "2023-04-24T10:52:26.444Z",
"region": "1",
"source": "VOM",
"traceId": "657c509da0effdae",
"executionMode": "LAUNCHED",
"orderType": "CHANGE_RESOURCE",
"notes": [],
"orderItems": [
{
"id": "0",
"action": "MODIFY",
"state": "INITIAL",
"appointments": [],
"orderItemRelationships": [],
"errors": [],
"service": {
"serviceSpecification": {
"id": null,
"source": "SYM-CATALOG",
"name": null,
"code": "RES_PON_ACCESS",
"version": "1.0"
},
"category": "CFS",
"characteristics": [
{
"name": "SERIAL_NUMBER",
"value": "AAAAAAAAA",
"operation": "MODIFY"
},
{
"name": "RG_SERIAL_NUMBER",
"value": "BBBBBBBB",
"operation": "MODIFY"
}
],
"publicIdentifier": "8018L000000MPwxQAG_01t6t000001ZlLfAAK_HSD"
}
}
],
"orderRelationships": [],
"relatedParty": [
{
"id": "8018L000000MPwxQAG",
"source": "VOM",
"name": "Order 0000010",
"role": "CUSTOMER"
}
],
"extraValues": [
{
"name": "NETWORK_ACCESS",
"value": "false"
}
],
"errors": [],
"executionTimeInMillis": null,
"product": null,
"customerAccount": null,
"links": [
{
"rel": "self",
"href": "https://login.symphonica.com/service-order-manager/api/service-orders/64465f6afbf394501197b805"
}
]
}
The only important part of the response is the state. They system will have to wait for the
response from he subscribed call earlier to see the change in status.