From c4822ea380be5699d851edac13853d7783ce3d11 Mon Sep 17 00:00:00 2001 From: Jordan Prescott Date: Thu, 4 Jul 2024 13:53:27 +0000 Subject: [PATCH 01/13] GitBook: No commit message --- docs/SUMMARY.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 7d5a342..921fa07 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -9,21 +9,21 @@ * [⚙️ Create API Object](docs/getting-started/create-api-object.md) * [📦 Standard Methods](docs/methods/README.md) * [🔢 DNs](docs/methods/dns/README.md) - * [1️⃣ GET - Group DNs](docs/methods/dns/group-dns.md) - * [2️⃣ GET - Group DN Search](docs/methods/dns/group-dn-search.md) - * [3️⃣ GET - Group DN Details](docs/methods/dns/group-dn-details.md) - * [4️⃣ GET - Service Provider DNs](docs/methods/dns/service-provider-dns.md) - * [5️⃣ GET - Service Provider DN Search](docs/methods/dns/service-provider-dn-search.md) - * [6️⃣ GET - System DNs](docs/methods/dns/system-dns.md) - * [7️⃣ GET - System DN Summary](docs/methods/dns/system-dn-summary.md) - * [8️⃣ GET - System DN Utilisation](docs/methods/dns/system-dn-utilization.md) - * [1️⃣ POST - Group DNs](docs/methods/dns/group-dns-1.md) - * [2️⃣ POST - Group DNs Assign Bulk](docs/methods/dns/group-dns-assign-bulk.md) - * [3️⃣ POST - Group DNs Unassign Bulk](docs/methods/dns/group-dns-unassign-bulk.md) - * [4️⃣ POST - Service Provider DNs](docs/methods/dns/service-provider-dns-1.md) - * [1️⃣ PUT - Group DNs Activate](docs/methods/dns/group-dns-activate.md) - * [1️⃣ DELETE - Group DNs](docs/methods/dns/group-dns-2.md) - * [2️⃣ DELETE - Service Provider DNs](docs/methods/dns/service-provider-dns-2.md) + * [1️⃣ 1️⃣ GET - Group DNs](docs/methods/dns/group-dns.md) + * [2️⃣ 2️⃣ GET - Group DN Search](docs/methods/dns/group-dn-search.md) + * [3️⃣ 3️⃣ GET - Group DN Details](docs/methods/dns/group-dn-details.md) + * [4️⃣ 4️⃣ GET - Service Provider DNs](docs/methods/dns/service-provider-dns.md) + * [5️⃣ 5️⃣ GET - Service Provider DN Search](docs/methods/dns/service-provider-dn-search.md) + * [6️⃣ 6️⃣ GET - System DNs](docs/methods/dns/system-dns.md) + * [7️⃣ 7️⃣ GET - System DN Summary](docs/methods/dns/system-dn-summary.md) + * [8️⃣ 8️⃣ GET - System DN Utilisation](docs/methods/dns/system-dn-utilization.md) + * [1️⃣ 1️⃣ POST - Group DNs](docs/methods/dns/group-dns-1.md) + * [2️⃣ 2️⃣ POST - Group DNs Assign Bulk](docs/methods/dns/group-dns-assign-bulk.md) + * [3️⃣ 3️⃣ POST - Group DNs Unassign Bulk](docs/methods/dns/group-dns-unassign-bulk.md) + * [4️⃣ 4️⃣ POST - Service Provider DNs](docs/methods/dns/service-provider-dns-1.md) + * [1️⃣ 1️⃣ PUT - Group DNs Activate](docs/methods/dns/group-dns-activate.md) + * [1️⃣ 1️⃣ DELETE - Group DNs](docs/methods/dns/group-dns-2.md) + * [2️⃣ 2️⃣ DELETE - Service Provider DNs](docs/methods/dns/service-provider-dns-2.md) * [🔑 Password Generate](docs/methods/password-generate/README.md) * [🔓 GET - Password Generate](docs/methods/password-generate/password-generate.md) * [🔓 GET - Passwords Generate](docs/methods/password-generate/passwords-generate.md) @@ -35,7 +35,7 @@ * [💚 GET - User Registration](docs/methods/registration/user-registration.md) * [💚 GET - Bulk User Registration](docs/methods/registration/bulk-user-registration.md) * [🔢 Alternate Numbers](docs/methods/alternate-numbers/README.md) - * [1️⃣ GET - User Alternate Numbers](docs/methods/alternate-numbers/get-user-alternate-numbers.md) + * [1️⃣ 1️⃣ GET - User Alternate Numbers](docs/methods/alternate-numbers/get-user-alternate-numbers.md) * [📆 Schedules](docs/methods/schedules.md) * [🌊 Trunk Groups](docs/methods/trunk-groups/README.md) * [📞 GET - Group Trunk Groups Call Capacity](docs/methods/trunk-groups/get-group-trunk-groups-call-capacity.md) @@ -115,6 +115,6 @@ * [🆘 Troubleshooting & FAQ](troubleshooting-and-faq/README.md) * [🐛 Common Issues](troubleshooting-and-faq/common-issues.md) * [⁉️ Frequently Asked Questions](troubleshooting-and-faq/frequently-asked-questions/README.md) - * [1️⃣ Do You Need To Set Up Multiple Loggers For Multiple API Objects? No.](troubleshooting-and-faq/frequently-asked-questions/do-you-need-to-set-up-multiple-loggers-for-multiple-api-objects-no..md) + * [1️⃣ 1️⃣ Do You Need To Set Up Multiple Loggers For Multiple API Objects? No.](troubleshooting-and-faq/frequently-asked-questions/do-you-need-to-set-up-multiple-loggers-for-multiple-api-objects-no..md) * [🐛 Bugs and Issues](bugs-and-issues.md) * [🤙 Contact](contact.md) From 9a052d49075ab8c4b61a7e6fea0339b136f0995c Mon Sep 17 00:00:00 2001 From: Jordan Prescott Date: Tue, 9 Jul 2024 07:54:54 +0000 Subject: [PATCH 02/13] GitBook: No commit message From efa36d1a2f56f1403e0b4323e6c46fc86eaefb93 Mon Sep 17 00:00:00 2001 From: Jordan Prescott Date: Tue, 9 Jul 2024 09:44:23 +0000 Subject: [PATCH 03/13] GITBOOK-83: testing github flow --- docs/contact.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contact.md b/docs/contact.md index 390ebfe..61353db 100644 --- a/docs/contact.md +++ b/docs/contact.md @@ -6,4 +6,4 @@ We value your feedback and are here to help with any questions or issues you may *** -Thank you for reaching out to us. We will get back to you as soon as possible.​​ +Thank you for reaching out to us. We will get back to you as soon as possible! From fb48b249fa29412b04dcc39de80720f9608c18ee Mon Sep 17 00:00:00 2001 From: Jordan Prescott Date: Tue, 9 Jul 2024 09:46:50 +0000 Subject: [PATCH 04/13] GITBOOK-83: testing github flow From ff69c192eb0017d48524a6ba864a9bc75afa8932 Mon Sep 17 00:00:00 2001 From: Olivia Curtis <133100222+LivCurtis@users.noreply.github.com> Date: Wed, 10 Jul 2024 13:41:04 +0100 Subject: [PATCH 05/13] Eva builder methods docs2 (#63) --- .../docs/methods/devices/post-group_device.md | 100 ++++++++++++++++++ ...ice-providers-trunk-group-call-capacity.md | 46 ++++++++ 2 files changed, 146 insertions(+) create mode 100644 docs/docs/methods/devices/post-group_device.md create mode 100644 docs/docs/methods/trunk-groups/put-service-providers-trunk-group-call-capacity.md diff --git a/docs/docs/methods/devices/post-group_device.md b/docs/docs/methods/devices/post-group_device.md new file mode 100644 index 0000000..9d567b1 --- /dev/null +++ b/docs/docs/methods/devices/post-group_device.md @@ -0,0 +1,100 @@ +# 🗃️ POST - Group Device + +Adds a new device to a group. + +### Parameters + +* service\_provider\_id (str): Service provider ID where the device should be built. +* group\_id (str): Group ID where the device should be built +* device\_name (str): Name of the new device +* device\_type (str): Type of device. +* payload (dict, optional): Device configuration data. + +### Returns + +* Dict: Returns the device profile. + +### How To Use: + +```python +from odins_spear import api + +my_api= api.Api(base_url="https://base_url/api/vx", username="john.smith", password="ODIN_INSTANCE_1") +my_api.authenticate() + +payload = { + "deviceType": "Polycom Soundpoint IP 4000", + "deviceName": "my-new-device-name", + "deviceLevel": "Group", + "useCustomUserNamePassword": true, + "accessDeviceCredentials": { + "userName": "9871515000", + "password": "ym7#zIuA" + }, + "netAddress": "111.111.111.111", + "port": "2222", + "outboundProxyServerNetAddress": "222.222.222.222", + "stunServerNetAddress": "333.333.333.333", + "macAddress": "CBFB0EBBF325", + "serialNumber": "123456789", + "description": "description", + "physicalLocation": "usa", + "transportProtocol": "UDP", + "groupId": "grp.odin", + "serviceProviderId": "ent.odin", + "profile": "Intelligent Proxy Addressing", + "staticRegistrationCapable": "false", + "configType": "3 File Configuration", + "protocolChoice": [ + "SIP 2.0" + ], + "isIpAddressOptional": "true", + "useDomain": "true", + "isMobilityManagerDevice": "false", + "deviceConfigurationOption": "Device Management", + "staticLineOrdering": "false", + "deviceTypeLevel": "System", + "tags": [], + "relatedServices": [], + "protocol": "SIP 2.0", + "userName": "9871515000" +} + + +my_api.post.group_device( + "service_provider_id", + "group_id", + "device_name", + "device_type", + payload=payload +) +``` +{% endcode %} + +### Example Returned Data of Device (Formatted) + +```json +{ + { + "deviceType": "device_type", + "protocol": "SIP 2.0", + "numberOfPorts": { + "unlimited": "true" + }, + "numberOfAssignedPorts": 0, + "status": "Online", + "transportProtocol": "Unspecified", + "useCustomUserNamePassword": false, + "deviceName": "device_name", + "serviceProviderId": "service_provider_id", + "groupId": "group_id", + "macAddress": "", + "deviceLevel": "Group", + "accessDeviceCredentials": { + "userName": null + }, + "tags": [], + "relatedServices": [] +} +} +``` \ No newline at end of file diff --git a/docs/docs/methods/trunk-groups/put-service-providers-trunk-group-call-capacity.md b/docs/docs/methods/trunk-groups/put-service-providers-trunk-group-call-capacity.md new file mode 100644 index 0000000..0551b5e --- /dev/null +++ b/docs/docs/methods/trunk-groups/put-service-providers-trunk-group-call-capacity.md @@ -0,0 +1,46 @@ +--- +description: api.put.service_provider_trunk_group_call_capacity() +--- + +# 🚿 PUT - Service Provider Trunk Group Call Capacity + +Updates the max active calls and the bursting max active calls for the given service provider. + +### Parameters + +* service\_provider\_id (str): Service provider ID for which the max active calls needs to be updated +* updates (dict): The updates to be applied to the service provider's trunking call capacity + +### Returns + +* Dict: Returns the updated call capacity for the service provider + +### How To Use: + +{% code overflow="wrap" %} +```python +from odins_spear import api + +my_api= api.Api(base_url="https://base_url/api/vx", username="john.smith", password="ODIN_INSTANCE_1") +my_api.authenticate() + +my_api.put.service_provider_trunk_group_call_capacity( + my_service_provider_id = "ServiceProviderID", + updates = { + "maxActiveCalls": 30, + "burstingMaxActiveCalls": -1 + } +) +``` +{% endcode %} + +### Example Data Returned (Formatted) + +```json +{ + "serviceProviderId": "odin.mock.clone.ent1", + "maxActiveCalls": 10, + "burstingMaxActiveCalls": 10, + "numberOfBurstingBTLUs": 0 +} +``` From 7087a1541bacae54f618cc0fc199c7544e90c8a8 Mon Sep 17 00:00:00 2001 From: Olivia Curtis <133100222+LivCurtis@users.noreply.github.com> Date: Wed, 10 Jul 2024 13:47:13 +0100 Subject: [PATCH 06/13] Update SUMMARY.md --- docs/SUMMARY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 921fa07..c6ab8f7 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -81,6 +81,7 @@ * [📂 PUT - Group Device Type File](docs/methods/devices/group-device-type-file.md) * [🎐 PUT - Group Device Type Tag](docs/methods/devices/group-device-type-tag.md) * [🎐 PUT - Service Provider Device Type Tag](docs/methods/devices/service-provider-device-type-tag.md) + * [🗃️ POST - Group Device](docs/methods/devices/post-group_device.md) * [🍇 Hunt Groups](docs/methods/hunt-groups/README.md) * [🟢 PUT - Group Hunt Groups Status](docs/methods/hunt-groups/group-hunt-groups-status.md) * [🍏 PUT - Group Hunt Group](docs/methods/hunt-groups/group-hunt-group.md) From ae04a8c39141b6b764b152f72a80bdc05c5fc74a Mon Sep 17 00:00:00 2001 From: Jordan Prescott Date: Fri, 12 Jul 2024 13:32:06 +0000 Subject: [PATCH 07/13] GITBOOK-84: Updated group user call stats --- docs/.gitbook/assets/image (30).png | Bin 0 -> 45267 bytes docs/SUMMARY.md | 36 +++++++++--------- .../reporter/group-users-call-statistics.md | 3 +- 3 files changed, 20 insertions(+), 19 deletions(-) create mode 100644 docs/.gitbook/assets/image (30).png diff --git a/docs/.gitbook/assets/image (30).png b/docs/.gitbook/assets/image (30).png new file mode 100644 index 0000000000000000000000000000000000000000..31ab509434930ccd2f2e4c9dc811eae221c3e112 GIT binary patch literal 45267 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

Example output from feature

+

Output Example

### Parameters @@ -38,6 +38,7 @@ The script makes use of the following methods: ```python api.get.users() api.get.users_stats() +api.get.user_services() ``` ### How To Use: From 8fbbd2a1d7d059c45a1f47a70c21bfb4ec139184 Mon Sep 17 00:00:00 2001 From: Olivia Curtis <133100222+LivCurtis@users.noreply.github.com> Date: Mon, 15 Jul 2024 13:50:39 +0100 Subject: [PATCH 08/13] Eva builder methods docs (#67) --- docs/SUMMARY.md | 6 + .../call-processing-policies/README.md | 1 + .../put-user-call-processing-policy.md | 84 ++++++++++++ .../hunt-groups/post-group-hunt-group.md | 127 ++++++++++++++++++ .../trunk-groups/post-group-trunk-group.md | 118 ++++++++++++++++ .../put-group-trunk-groups-call-capacity.md | 54 ++++++++ .../trunk-groups/put-group_trunk_group.md | 100 ++++++++++++++ 7 files changed, 490 insertions(+) create mode 100644 docs/docs/methods/call-processing-policies/README.md create mode 100644 docs/docs/methods/call-processing-policies/put-user-call-processing-policy.md create mode 100644 docs/docs/methods/hunt-groups/post-group-hunt-group.md create mode 100644 docs/docs/methods/trunk-groups/post-group-trunk-group.md create mode 100644 docs/docs/methods/trunk-groups/put-group-trunk-groups-call-capacity.md create mode 100644 docs/docs/methods/trunk-groups/put-group_trunk_group.md diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index bc4747a..b8edcf0 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -43,6 +43,9 @@ * [🚰 GET - Group Trunk Groups](docs/methods/trunk-groups/get-group-trunk-groups.md) * [🚿 GET - Service Provider Trunk Group Call Capacity](docs/methods/trunk-groups/get-service-provider-trunk-group-call-capacity.md) * [📂 GET - Service Provider Call Capacity Report](docs/methods/trunk-groups/get-service-provider-call-capacity-report.md) + * [📞 PUT - Group Trunk Groups Call Capacity](docs/methods/trunk-groups/put-group-trunk--groups-call-capacity.md) + * [☎️ PUT - Group Trunk Group](docs/methods/trunk-groups/put-group-trunk--group.md) + * [🚿 POST - Group Trunk Groupy](docs/methods/trunk-groups/post-group-trunk--group.md) * [🤵 User](docs/methods/user/README.md) * [🆔 GET - User By ID](docs/methods/user/get-user-by-id.md) * [👯 GET - Users](docs/methods/user/get-users.md) @@ -67,6 +70,8 @@ * [🟢 PUT - User Call Center](docs/methods/call-centers/user-call-center.md) * [🙋‍♂️ PUT - User Call Center Agents Update](docs/methods/call-centers/user-call-center-agents-update.md) * [🛑 PUT - User Call Center Agent Sign Out](docs/methods/call-centers/user-call-center-agent-sign-out.md) + * [📞 Call Processing Policies](docs/methods/call-processing-policies/README.md) + * [🗃️ PUT - User Call Processing Policy](docs/methods/call-processing-policy.md) * [☎️ Devices](docs/methods/devices/README.md) * [📱 PUT - Group Devices](docs/methods/devices/group-devices.md) * [📞 PUT - Service Provider Device](docs/methods/devices/service-provider-device.md) @@ -86,6 +91,7 @@ * [🟢 PUT - Group Hunt Groups Status](docs/methods/hunt-groups/group-hunt-groups-status.md) * [🍏 PUT - Group Hunt Group](docs/methods/hunt-groups/group-hunt-group.md) * [💯 PUT - Group Hunt Group Weighted Call Distribution](docs/methods/hunt-groups/group-hunt-group-weighted-call-distribution.md) + * [🙋‍♂️ POST - Group Hunt Group](docs/methods/hunt-groups/post-group-hunt-group.md) * [🍒 Services](docs/methods/services/README.md) * [🧍 PUT - User Services](docs/methods/services/user-services.md) * [🛑 Do Not Disturb](docs/methods/do-not-disturb/README.md) diff --git a/docs/docs/methods/call-processing-policies/README.md b/docs/docs/methods/call-processing-policies/README.md new file mode 100644 index 0000000..fd98f37 --- /dev/null +++ b/docs/docs/methods/call-processing-policies/README.md @@ -0,0 +1 @@ +# 🗃️ Call Processing POlicies \ No newline at end of file diff --git a/docs/docs/methods/call-processing-policies/put-user-call-processing-policy.md b/docs/docs/methods/call-processing-policies/put-user-call-processing-policy.md new file mode 100644 index 0000000..950311d --- /dev/null +++ b/docs/docs/methods/call-processing-policies/put-user-call-processing-policy.md @@ -0,0 +1,84 @@ +--- +description: my_api.put.user_call_processing_policy() +--- + +# 🗃️ PUT - User Call Processing Policy + +Update the Call Processing Policies for a specified user. + +### Parameters + +* user\_id (str): The user ID of the user whose call processing policies need updating. +* updates (dict): Updates to apply to the specified user. + +### Returns + +* Dict: Returns the updated call processing policies. + +### How To Use: + +The below code will set the AA to deactivated. + +{% code overflow="wrap" %} +```python +from odins_spear import api + +my_api= api.Api(base_url="https://base_url/api/vx", username="john.smith", password="ODIN_INSTANCE_1") +my_api.authenticate() + +my_api.put.user_call_processing_policy( + "userID@domain.com", + updates = { + "clidPolicy": "Use DN", + "emergencyClidPolicy": "Use DN", + "allowAlternateNumbersForRedirectingIdentity": "true", + "useGroupName": "false" + } +) +``` +{% endcode %} + +### Example Data Returned (Formatted) + +```json +{ + "useUserCLIDSetting": False, + "useUserMediaSetting": False, + "useUserCallLimitsSetting": False, + "useUserDCLIDSetting": False, + "useUserTranslationRoutingSetting": False, + "useMaxSimultaneousCalls": True, + "maxSimultaneousCalls": 5, + "useMaxSimultaneousVideoCalls": True, + "maxSimultaneousVideoCalls": 5, + "useMaxCallTimeForAnsweredCalls": True, + "maxCallTimeForAnsweredCallsMinutes": 1440, + "useMaxCallTimeForUnansweredCalls": False, + "maxCallTimeForUnansweredCallsMinutes": 2, + "mediaPolicySelection": "No Restrictions", + "useMaxConcurrentRedirectedCalls": True, + "maxConcurrentRedirectedCalls": 5, + "useMaxFindMeFollowMeDepth": True, + "maxFindMeFollowMeDepth": 2, + "maxRedirectionDepth": 5, + "useMaxConcurrentFindMeFollowMeInvocations": True, + "maxConcurrentFindMeFollowMeInvocations": 2, + "clidPolicy": "Use DN", + "emergencyClidPolicy": "Use DN", + "allowAlternateNumbersForRedirectingIdentity": True, + "useGroupName": False, + "blockCallingNameForExternalCalls": False, + "enableDialableCallerID": False, + "allowConfigurableCLIDForRedirectingIdentity": True, + "allowDepartmentCLIDNameOverride": False, + "useUserPhoneListLookupSetting": False, + "enablePhoneListLookup": False, + "useMaxConcurrentTerminatingAlertingRequests": False, + "maxConcurrentTerminatingAlertingRequests": 10, + "includeRedirectionsInMaximumNumberOfConcurrentCalls": False, + "allowMobileDNForRedirectingIdentity": False, + "userId": "userID@domain.com" +} + +``` + diff --git a/docs/docs/methods/hunt-groups/post-group-hunt-group.md b/docs/docs/methods/hunt-groups/post-group-hunt-group.md new file mode 100644 index 0000000..f43e633 --- /dev/null +++ b/docs/docs/methods/hunt-groups/post-group-hunt-group.md @@ -0,0 +1,127 @@ +# 🙋‍♂️ POST - Group Hunt Group + +Builds a hunt group (HG) in the specified group. + +### Parameters + +* service\_provider\_id (str): The service provider ID in which the target group is built. +* group\_id (str): The group ID where the HG should be built. +* service\_user\_id (str): The service user ID for the new HG. This must include the domain of the user. +* clid\_first\_name (str): The Calling Line ID first name. +* clid\_last\_name (str): The Calling Line ID last name. +* extension (str): The extension number for the HG. This must be entered as a string. +* payload (dict, optional): HG configuration data. +* agents (list, optional): List of user IDs (str) that should be assigned to the new HG. The user(s) must already exist in the group. +* policy (str, optional): Regular, Circular, Simultaneous, Uniform, Weighted. Defaults to Regular. +* no\_answer\_number\_of\_rings (int, optional): Defaults to 5. +* forward\_timeout\_seconds (int, optional): Defaults to 0. + +### Returns + +* None: This method does not return any specific value. + +### How To Use: + +```python +from odins_spear import api + +my_api= api.Api(base_url="https://base_url/api/vx", username="john.smith", password="ODIN_INSTANCE_1") +my_api.authenticate() + +hunt_group_agents= [ + "hunt_group_user1@microv-works.com", + "hunt_group_user2@microv-works.com" +] + +my_api.post.group_hunt_group( + my_service_provider_id = "ServiceProviderID", + my_group_id = "GroupID", + service_user_id = "odin.mock.hg.2@microv-works.com", + clid_first_name = "odin", + clid_last_name = "mock.hg.2", + hunt_group_extension = "1234", + agents = hunt_group_agents, + policy = "Regular" +) +``` +### Example Returned Data of Hunt Group (Formatted) + +```json +{ + "serviceInstanceProfile": { + "name": "odin mock.hg.2", + "callingLineIdLastName": "mock.hg.2", + "callingLineIdFirstName": "odin", + "hiraganaLastName": "odin mock.hg.2", + "hiraganaFirstName": "Hunt Group", + "extension": "1234", + "language": "English", + "timeZone": "Europe/London", + "timeZoneDisplayName": "(GMT+01:00) Greenwich Mean Time", + "aliases": [] + }, + "policy": "Regular", + "huntAfterNoAnswer": False, + "noAnswerNumberOfRings": 5, + "forwardAfterTimeout": False, + "forwardTimeoutSeconds": 0, + "allowCallWaitingForAgents": False, + "useSystemHuntGroupCLIDSetting": False, + "includeHuntGroupNameInCLID": False, + "enableNotReachableForwarding": False, + "makeBusyWhenNotReachable": False, + "allowMembersToControlGroupBusy": False, + "enableGroupBusy": False, + "applyGroupBusyWhenTerminatingToAgent": False, + "serviceUserId": "odin.mock.hg.2@microv-works.com", + "resellerId": None, + "serviceProviderId": "ServiceProviderID", + "groupId": "GroupID", + "isEnterprise": True, + "agents": [ + { + "userId": "hunt_group_user1@microv-works.com", + "lastName": "1", + "firstName": "hunt_group_user", + "hiraganaLastName": "1", + "hiraganaFirstName": "hunt_group_user", + "weight": None, + "phoneNumber": None, + "extension": "111111", + "department": None, + "emailAddress": None, + "isPhoneNumberActivated": None, + "countryCode": None, + "nationalPrefix": None, + "departmentName": None, + "departmentType": None, + "parentDepartment": None, + "parentDepartmentType": None, + "groupId": "GroupID", + "groupName": "Group Name" + }, + { + "userId": "hunt_group_user2@microv-works.com", + "lastName": "2", + "firstName": "hunt_group_user", + "hiraganaLastName": "2", + "hiraganaFirstName": "hunt_group_user", + "weight": None, + "phoneNumber": None, + "extension": "222222", + "department": None, + "emailAddress": None, + "isPhoneNumberActivated": None, + "countryCode": None, + "nationalPrefix": None, + "departmentName": None, + "departmentType": None, + "parentDepartment": None, + "parentDepartmentType": None, + "groupId": "GroupID", + "groupName": "Group Name" + } + ] +} + +``` \ No newline at end of file diff --git a/docs/docs/methods/trunk-groups/post-group-trunk-group.md b/docs/docs/methods/trunk-groups/post-group-trunk-group.md new file mode 100644 index 0000000..1a2219b --- /dev/null +++ b/docs/docs/methods/trunk-groups/post-group-trunk-group.md @@ -0,0 +1,118 @@ +--- +description: api.post.group_trunk_group() +--- + +# 🚿 POST - Group Trunk Group + +Builds a Trunk Group (TG) in the specified group. Please note, several fields are set to have default values. Please see below. + +### Parameters + +* service\_provider\_id (str): Service provider ID for which the max active calls needs to be updated +* group\_id (str): The group ID where the HG should be built. +* trunk\_name (str): The name of the new TG. +* max\_active\_calls (str): The maximum active calls to be set on the TG. +* payload (dict, optional): Configuration for the TG. +* sip\_authentication\_username (str, optional): The SIP authentication username for the TG. This field is required if "requireAuthentication" in the payload is set to "true". +* sip\_authentication\_password (str, optional): The SIP authentication password for the TG. You can generate a password for this using get.sip_password_generator. This field is required if "requireAuthentication" in the payload is set to "true". + +### Returns + +* Dict: Returns the Trunk Group profile. + +### Default Fields + +* "capacityExceededTrapInitialCalls":0, +* "capacityExceededTrapOffsetCalls":0, +* "clidSourceForScreenedCallsPolicy":"Profile Name Profile Number", +* "continuousOptionsSendingIntervalSeconds":30, +* "failureOptionsSendingIntervalSeconds":10, +* "failureThresholdCounter":1, +* "invitationTimeout":6, +* "inviteFailureThresholdCounter":1, +* "inviteFailureThresholdWindowSeconds":30, +* "pilotUserCallOptimizationPolicy":"Optimize For User Services", +* "pilotUserCallingLineAssertedIdentityPolicy":"Unscreened Originating Calls", +* "pilotUserCallingLineIdentityForEmergencyCallsPolicy":"No Calls", +* "pilotUserCallingLineIdentityForExternalCallsPolicy":"No Calls", +* "pilotUserChargeNumberPolicy":"No Calls", +* "requireAuthentication":"false", +* "successThresholdCounter":1, +* "useSystemUserLookupPolicy":"true", +* "userLookupPolicy":"Basic" + + +### How To Use: + +{% code overflow="wrap" %} +```python +from odins_spear import api + +my_api= api.Api(base_url="https://base_url/api/vx", username="john.smith", password="ODIN_INSTANCE_1") +my_api.authenticate() + +my_api.put.group_trunk_group( + my_service_provider_id = "ServiceProviderID", + my_group_id = "GroupID", + my_trunk_group_name = "Odin Test Trunk" + max_active_calls = 2 +) +``` +{% endcode %} + +### Example Data Returned (Formatted) + +```json +{ + "maxActiveCalls": 2, + "enableBursting": False, + "capacityExceededTrapInitialCalls": 0, + "capacityExceededTrapOffsetCalls": 0, + "invitationTimeout": 6, + "requireAuthentication": False, + "allowTerminationToTrunkGroupIdentity": False, + "allowTerminationToDtgIdentity": False, + "includeTrunkGroupIdentity": False, + "includeDtgIdentity": False, + "includeTrunkGroupIdentityForNetworkCalls": False, + "includeOtgIdentityForNetworkCalls": False, + "enableNetworkAddressIdentity": False, + "allowUnscreenedCalls": False, + "allowUnscreenedEmergencyCalls": False, + "pilotUserCallingLineIdentityForExternalCallsPolicy": "No Calls", + "pilotUserChargeNumberPolicy": "No Calls", + "routeToPeeringDomain": False, + "prefixEnabled": False, + "statefulReroutingEnabled": False, + "sendContinuousOptionsMessage": False, + "continuousOptionsSendingIntervalSeconds": 30, + "failureOptionsSendingIntervalSeconds": 10, + "failureThresholdCounter": 1, + "successThresholdCounter": 1, + "inviteFailureThresholdCounter": 1, + "inviteFailureThresholdWindowSeconds": 30, + "trunkGroupState": "Available", + "pilotUserCallingLineAssertedIdentityPolicy": "Unscreened Originating Calls", + "useSystemCallingLineAssertedIdentityPolicy": False, + "totalActiveIncomingCalls": 0, + "totalActiveOutgoingCalls": 0, + "pilotUserCallOptimizationPolicy": "Optimize For User Services", + "clidSourceForScreenedCallsPolicy": "Profile Name Profile Number", + "useSystemCLIDSourceForScreenedCallsPolicy": False, + "userLookupPolicy": "Basic", + "useSystemUserLookupPolicy": True, + "pilotUserCallingLineIdentityForEmergencyCallsPolicy": "No Calls", + "implicitRegistrationSetSupportPolicy": "Disabled", + "useSystemImplicitRegistrationSetSupportPolicy": True, + "sipIdentityForPilotAndProxyTrunkModesPolicy": "User", + "useSystemSIPIdentityForPilotAndProxyTrunkModesPolicy": True, + "useSystemSupportConnectedIdentityPolicy": True, + "supportConnectedIdentityPolicy": "Disabled", + "useSystemOptionsMessageResponseStatusCodes": True, + "serviceProviderId": "ServiceProviderID", + "groupId": "GroupID", + "name": "Odin Test Trunk", + "users": [] +} + +``` diff --git a/docs/docs/methods/trunk-groups/put-group-trunk-groups-call-capacity.md b/docs/docs/methods/trunk-groups/put-group-trunk-groups-call-capacity.md new file mode 100644 index 0000000..1aa56c0 --- /dev/null +++ b/docs/docs/methods/trunk-groups/put-group-trunk-groups-call-capacity.md @@ -0,0 +1,54 @@ +--- +description: api.put.group_trunk_groups_call_capacity() +--- + +# 📞 PUT - Group Trunk Groups Call Capacity + +Updates the trunking call capacity in the specified group. +NOTE: The max available active calls cannot be changed here. Please see service_providers_trunk_group_call_capacity to update this. + +### Parameters + +* service\_provider\_id (str): Service provider ID where the target group is built +* group\_id (str): Group ID whose trunk group call capacity needs updating +* max_active_calls (int, optional): The max active calls for the group. +* bursting_max_active_calls (int, optional): The bursting max active calls for the group. +* number_of_bursting_btlus (int, optional): The number of Business Trunking License Units for bursting. + +### Returns + +* Dict: Returns the updated state of the trunk group call capacity. + +### How To Use: + +{% code overflow="wrap" %} +```python +from odins_spear import api + +my_api= api.Api(base_url="https://base_url/api/vx", username="john.smith", password="ODIN_INSTANCE_1") +my_api.authenticate() + +my_api.put.group_trunk_groups_call_capacity( + my_service_provider_id = "ServiceProviderID", + my_group_id = "GroupID", + max_active_calls = 5, + bursting_max_active_calls = -1, + number_of_bursting_btlus = 1 +) +``` +{% endcode %} + +### Example Data Returned (Formatted) + +```json +{ +"maxActiveCalls": 5, +"maxAvailableActiveCalls": 10, +"burstingMaxActiveCalls": -1, +"burstingMaxAvailableActiveCalls": -1, +"serviceProviderId": "ServiceProviderID", +"groupId": "GroupID", +"maxAvailableNumberOfBurstingBTLUs": 1, +"numberOfBurstingBTLUs": 1 +} +``` diff --git a/docs/docs/methods/trunk-groups/put-group_trunk_group.md b/docs/docs/methods/trunk-groups/put-group_trunk_group.md new file mode 100644 index 0000000..d2ad118 --- /dev/null +++ b/docs/docs/methods/trunk-groups/put-group_trunk_group.md @@ -0,0 +1,100 @@ +--- +description: api.put.group_trunk_group() +--- + +# ☎️ PUT - Group Trunk Group + +Updates trunk group (TG) information. + +### Parameters + +* service\_provider\_id (str): Service provider ID where the target group is built +* group\_id (str): Group ID whose trunk group call capacity needs updating +* trunk\_group\_name (str): The name of the trunk group that is being updated. +* updates (dict): Updates to be applied to the TG. + +### Returns + +* Dict: Returns the updated Trunk Group profile. + +### How To Use: + +{% code overflow="wrap" %} +```python +from odins_spear import api + +my_api= api.Api(base_url="https://base_url/api/vx", username="john.smith", password="ODIN_INSTANCE_1") +my_api.authenticate() + +my_api.put.group_trunk_group( + my_service_provider_id = "ServiceProviderID", + my_group_id = "GroupID", + my_trunk_group = "Odin Test Trunk + updates = { + "maxActiveCalls": 1, + "maxIncomingCalls": 0, + "maxOutgoingCalls": 0, + "enableBursting": false + } +) +``` +{% endcode %} + +### Example Data Returned (Formatted) + +```json +{ + "maxActiveCalls": 1, + "maxIncomingCalls": 0, + "maxOutgoingCalls": 0, + "enableBursting": False, + "capacityExceededTrapInitialCalls": 0, + "capacityExceededTrapOffsetCalls": 0, + "invitationTimeout": 6, + "requireAuthentication": False, + "allowTerminationToTrunkGroupIdentity": False, + "allowTerminationToDtgIdentity": False, + "includeTrunkGroupIdentity": False, + "includeDtgIdentity": False, + "includeTrunkGroupIdentityForNetworkCalls": False, + "includeOtgIdentityForNetworkCalls": False, + "enableNetworkAddressIdentity": False, + "allowUnscreenedCalls": False, + "allowUnscreenedEmergencyCalls": False, + "pilotUserCallingLineIdentityForExternalCallsPolicy": "No Calls", + "pilotUserChargeNumberPolicy": "No Calls", + "routeToPeeringDomain": False, + "prefixEnabled": False, + "statefulReroutingEnabled": False, + "sendContinuousOptionsMessage": False, + "continuousOptionsSendingIntervalSeconds": 30, + "failureOptionsSendingIntervalSeconds": 10, + "failureThresholdCounter": 1, + "successThresholdCounter": 1, + "inviteFailureThresholdCounter": 1, + "inviteFailureThresholdWindowSeconds": 30, + "trunkGroupState": "Available", + "pilotUserCallingLineAssertedIdentityPolicy": "Unscreened Originating Calls", + "useSystemCallingLineAssertedIdentityPolicy": True, + "totalActiveIncomingCalls": 0, + "totalActiveOutgoingCalls": 0, + "pilotUserCallOptimizationPolicy": "Optimize For User Services", + "clidSourceForScreenedCallsPolicy": "Profile Name Profile Number", + "useSystemCLIDSourceForScreenedCallsPolicy": True, + "userLookupPolicy": "Basic", + "useSystemUserLookupPolicy": True, + "pilotUserCallingLineIdentityForEmergencyCallsPolicy": "No Calls", + "implicitRegistrationSetSupportPolicy": "Disabled", + "useSystemImplicitRegistrationSetSupportPolicy": True, + "sipIdentityForPilotAndProxyTrunkModesPolicy": "User", + "useSystemSIPIdentityForPilotAndProxyTrunkModesPolicy": True, + "useSystemSupportConnectedIdentityPolicy": True, + "supportConnectedIdentityPolicy": "Disabled", + "useSystemOptionsMessageResponseStatusCodes": True, + "serviceProviderId": "ServiceProviderID", + "groupId": "GroupID", + "name": "Odin Test Trunk", + "users": [] +} + +``` From 4b8db49d8153ac5ad4276b45af6a6d05d0c39a20 Mon Sep 17 00:00:00 2001 From: Olivia Curtis <133100222+LivCurtis@users.noreply.github.com> Date: Mon, 15 Jul 2024 14:14:34 +0100 Subject: [PATCH 09/13] Eva builder methods docs 2 (#68) --- docs/SUMMARY.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index b8edcf0..1698cdf 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -43,9 +43,9 @@ * [🚰 GET - Group Trunk Groups](docs/methods/trunk-groups/get-group-trunk-groups.md) * [🚿 GET - Service Provider Trunk Group Call Capacity](docs/methods/trunk-groups/get-service-provider-trunk-group-call-capacity.md) * [📂 GET - Service Provider Call Capacity Report](docs/methods/trunk-groups/get-service-provider-call-capacity-report.md) - * [📞 PUT - Group Trunk Groups Call Capacity](docs/methods/trunk-groups/put-group-trunk--groups-call-capacity.md) - * [☎️ PUT - Group Trunk Group](docs/methods/trunk-groups/put-group-trunk--group.md) - * [🚿 POST - Group Trunk Groupy](docs/methods/trunk-groups/post-group-trunk--group.md) + * [📞 PUT - Group Trunk Groups Call Capacity](docs/methods/trunk-groups/put-group-trunk-groups-call-capacity.md) + * [☎️ PUT - Group Trunk Group](docs/methods/trunk-groups/put-group-trunk-group.md) + * [🚿 POST - Group Trunk Group](docs/methods/trunk-groups/post-group-trunk-group.md) * [🤵 User](docs/methods/user/README.md) * [🆔 GET - User By ID](docs/methods/user/get-user-by-id.md) * [👯 GET - Users](docs/methods/user/get-users.md) @@ -71,7 +71,7 @@ * [🙋‍♂️ PUT - User Call Center Agents Update](docs/methods/call-centers/user-call-center-agents-update.md) * [🛑 PUT - User Call Center Agent Sign Out](docs/methods/call-centers/user-call-center-agent-sign-out.md) * [📞 Call Processing Policies](docs/methods/call-processing-policies/README.md) - * [🗃️ PUT - User Call Processing Policy](docs/methods/call-processing-policy.md) + * [🗃️ PUT - User Call Processing Policy](docs/methods/put-user-call-processing-policy.md) * [☎️ Devices](docs/methods/devices/README.md) * [📱 PUT - Group Devices](docs/methods/devices/group-devices.md) * [📞 PUT - Service Provider Device](docs/methods/devices/service-provider-device.md) From 57a5d0ecb5ae3ac626ea422c6cbafe3b18a340e2 Mon Sep 17 00:00:00 2001 From: Olivia Curtis <133100222+LivCurtis@users.noreply.github.com> Date: Mon, 15 Jul 2024 14:30:45 +0100 Subject: [PATCH 10/13] Eva builder methods docs 3 (#69) --- docs/SUMMARY.md | 2 +- .../{put-group_trunk_group.md => put-group-trunk-group.md} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/docs/methods/trunk-groups/{put-group_trunk_group.md => put-group-trunk-group.md} (100%) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 1698cdf..0c7f31f 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -71,7 +71,7 @@ * [🙋‍♂️ PUT - User Call Center Agents Update](docs/methods/call-centers/user-call-center-agents-update.md) * [🛑 PUT - User Call Center Agent Sign Out](docs/methods/call-centers/user-call-center-agent-sign-out.md) * [📞 Call Processing Policies](docs/methods/call-processing-policies/README.md) - * [🗃️ PUT - User Call Processing Policy](docs/methods/put-user-call-processing-policy.md) + * [🗃️ PUT - User Call Processing Policy](docs/methods/call-processing-policies/put-user-call-processing-policy.md) * [☎️ Devices](docs/methods/devices/README.md) * [📱 PUT - Group Devices](docs/methods/devices/group-devices.md) * [📞 PUT - Service Provider Device](docs/methods/devices/service-provider-device.md) diff --git a/docs/docs/methods/trunk-groups/put-group_trunk_group.md b/docs/docs/methods/trunk-groups/put-group-trunk-group.md similarity index 100% rename from docs/docs/methods/trunk-groups/put-group_trunk_group.md rename to docs/docs/methods/trunk-groups/put-group-trunk-group.md From d076959b1c7e5c3c101dcc413ac58ca864ff75ca Mon Sep 17 00:00:00 2001 From: Olivia Curtis <133100222+LivCurtis@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:37:33 +0100 Subject: [PATCH 11/13] Update put-user-call-processing-policy.md Removed unnecessary line. --- .../call-processing-policies/put-user-call-processing-policy.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/docs/methods/call-processing-policies/put-user-call-processing-policy.md b/docs/docs/methods/call-processing-policies/put-user-call-processing-policy.md index 950311d..d5df3f8 100644 --- a/docs/docs/methods/call-processing-policies/put-user-call-processing-policy.md +++ b/docs/docs/methods/call-processing-policies/put-user-call-processing-policy.md @@ -17,8 +17,6 @@ Update the Call Processing Policies for a specified user. ### How To Use: -The below code will set the AA to deactivated. - {% code overflow="wrap" %} ```python from odins_spear import api From f89fe5b503da63874becf009dc556099b4adb018 Mon Sep 17 00:00:00 2001 From: Malkin0xb Date: Thu, 18 Jul 2024 15:27:03 +0100 Subject: [PATCH 12/13] Added Graphviz Troubleshooting to Docs --- .../graphviz-troubleshooting.md | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 docs/troubleshooting-and-faq/graphviz-troubleshooting.md diff --git a/docs/troubleshooting-and-faq/graphviz-troubleshooting.md b/docs/troubleshooting-and-faq/graphviz-troubleshooting.md new file mode 100644 index 0000000..6375857 --- /dev/null +++ b/docs/troubleshooting-and-faq/graphviz-troubleshooting.md @@ -0,0 +1,67 @@ +# Common Errors + +## failed to execute WindowsPath('dot') / AttributeError: 'NoneType' object has no attribute '_start_node' + +This is because the Graphviz install hasn't completed correctly, or you haven't added the executables to your systems PATH. + +The best way to get around this is to just re-install using windows package manager which will sort the installation out for you. +#### Steps: + +1. Press Windows Key + x +2. Click on the tab that says Terminal (Admin) or PowerShell(Admin) +3. Type or copy the following: + +```sh +winget install graphviz +``` + +4. Wait for the install to finish and the run the script again + +If you're still encountering errors, you can follow the steps below to add Graphviz to your PATH, or open an issue on our GitHub page: [New Issue](https://github.com/Jordan-Prescott/odins_spear/issues/new) + +# Adding Graphviz to PATH + +### Steps: + +1. In the Windows Search Bar, search for: Edit the system Environment Variables +2. Click on 'Environment Variables' +![[environmentvariables.png]] +3. Under the 'User Variables' tab, click on 'New' +4. Enter the following details: +![[uservariables.png]] + +After this, restart your computer to apply the changes and try your script again. + +If you're still encountering errors, you can follow the steps below to add Graphviz to your PATH, or open an issue on our GitHub page: [New Issue](https://github.com/Jordan-Prescott/odins_spear/issues/new) + +# Installing Graphviz on Linux/Mac + +Most Linux Distros have Graphviz supported in their package manager. + +Execute the commands below in terminal depending on your distro: + +Arch +```sh +sudo pacman -S graphviz +``` + +Debian/Ubuntu: +```sh +sudo apt install graphviz +``` + +Fedora: +```sh +sudo dnf install graphviz +``` + +MacOS (Needs homebrew): +```sh +brew install graphviz +``` + + +Otherwise there are RPM Packages available: + +[RPM resource graphviz (rpmfind.net)](https://rpmfind.net/linux/rpm2html/search.php?query=graphviz) + From ca24adbe347d8fcd8a2ecc265dc0a35ebb7e49bb Mon Sep 17 00:00:00 2001 From: Malkin0xb Date: Thu, 18 Jul 2024 15:28:32 +0100 Subject: [PATCH 13/13] Fixed typo --- docs/troubleshooting-and-faq/graphviz-troubleshooting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/troubleshooting-and-faq/graphviz-troubleshooting.md b/docs/troubleshooting-and-faq/graphviz-troubleshooting.md index 6375857..70829a9 100644 --- a/docs/troubleshooting-and-faq/graphviz-troubleshooting.md +++ b/docs/troubleshooting-and-faq/graphviz-troubleshooting.md @@ -32,7 +32,7 @@ If you're still encountering errors, you can follow the steps below to add Graph After this, restart your computer to apply the changes and try your script again. -If you're still encountering errors, you can follow the steps below to add Graphviz to your PATH, or open an issue on our GitHub page: [New Issue](https://github.com/Jordan-Prescott/odins_spear/issues/new) +If you're still encountering errors, open an issue on our GitHub page: [New Issue](https://github.com/Jordan-Prescott/odins_spear/issues/new) # Installing Graphviz on Linux/Mac