99.95% availability
Our APIs can be used for mission-critical systems.
25 million API calls daily
Our APIs define the industry's standards.
1 million active users
Millions of people trust us.
PROJECT DESCRIPTION:
The project involves creating an integration for the system PUZZEL for CLIENT1.The new integration aims to automate and streamline the process of updating personal data in the system to ensure accuracy and compliance with GDPR. Initially, the integration will focus on internal employees of organization Customer1 as a Proof Of Concept, with a plan to extend it to customers in the future. The solution should allow easy configuration for adding new customers without requiring additional development.
BACKGROUND AND PURPOSE:
Puzzel is a system CLIENT1 use for telephone exchange both internally and as a service for CLIENT1 customers. Currently, the data in system is manually updated without a defined process, leading to inaccuracies and non compliant to GDPR. The purpose of a new integration will be to get right personal data into CLIENT1 telephone exchange system (puzzel). The idea/goal with this solution is that CLIENT1 will offer this solution to its customers.

Business Process Flow
The Puzzel APIs are responsible for Post Get and Patch Requests/Response, validating the data and sending message to the service bus. Service bus topic is responsible of receiving the message and routing the message via service bus to the second function. This is where business logic to add the contacts to an internal table based on the input data will happen. A third function (timer triggered, configurable schedule) should then be responsible of fetching the data from the table, transform to XSLX format, and upload the file to blob storage / Puzzel FTP-server.
API Management/api/puzzel/v1/contact?customerKey={customerKey}
{
"records": [
{ "firstName": "John",
"lastName": "Doe",
"userId": "1",
"title": "Consultant",
"department": "567210",
"email": "jone.doe@some.com",
"phoneNumber": "07044553782",
"mobilePhoneNumber": "07334457822",
"endDate": "2022-05-30",
"alternativeContact": ""
}]}
The POST-function should:
1. Parse message
2. Validate all required fields, return an appropriate error message to the API- caller if required fields are missing
3. Fetch configuration file “puzzelConfig/config.json” from IPL Table Storage and get the record where the customerKey from config file is matching the customerKey from API URL. If the key is not found in config file, return appropriate error message.
4. If the “enabled” flag is set to false, the event should be skipped
5. Upload the message to blob storage, container “puzzel-files/Create”
6. Send message to service bus topic, using the following format.
Response
200OK
400 Bad Request
API Management/puzzel/v1/contact/{userId}?customerKey={customerKey}
{ "firstName": "John",
"lastName": "Doe",
"userId": "1",
"title": "Consultant",
"department": "567210",
"email": "jone.doe@some.com",
"phoneNumber": "07044553782",
"mobilePhoneNumber": "07334457822",
"endDate": "2022-05-30",
"alternativeContact": ""
The PATCH-function should:
1. Parse message
2. Validate all required fields, return an appropriate error message to the API- caller if required fields are missing
3. Fetch configuration file “puzzelconfig/config.json” from IPL Table Storage and get the record where the customerKey from config file is matching the customerKey from API URL. If the key is not found in config file, return appropriate error message
1. User the userId from the API-URL to search in the “contactsTableName” from the config file. If the userId is not found, return an error message saying that user must exist to be updated
2. Upload the message to blob storage, container “puzzel-files/Update”
3. Send message to service bus topic, using the following format.
Response
200OK
404 Not Found {
"errorCode": 404,
"errorMessage": "No user found with User ID {userId}. User must exist to be updated"
}
API Management/puzzel/v1/contact/{userId}?customerKey={customerKey}
{
"alternativeContact": "",
"department": "543210",
"email": "anders.andersson@se.com",
"endDate": "2024-06-30",
"firstName": "Anders",
"lastName": "Andersson",
"mobilePhoneNumber": "0701112233",
"phoneNumber": "0701112233",
"title": "Manager",
"userId": "12345"
}
The GET-function should:
1. Parse message
2. Validate all required fields, return an appropriate error message to the API-caller if required fields are missing
3. Fetch configuration file “puzzelconfig/config.json” from IPL Table Storage and get the record where the customerKey from config file is matching the customerKey from API URL. If the key is not found in config file, return appropriate error message
4. User the userId from the API-URL to search in the “contactsTableName” from the config file. If the userId is not found, return an error message saying that user was not found
5. Return the user data.
Response
200OK
404 Not Found {
"errorCode": 404,
"errorMessage": "No user found with User ID {userId}"
}
Trust is our priority
"Contoso APIs drive our digital transformation. They are highly reliable and blazingly fast."
CTO at Fabrikam



