04-19-2020 11:37 PM
Hi,
We want to implement a hotline number, so that customers can call this number, and leave a miss call (without call charges). Upon receiving a miss call, we have to obtain the caller ID, and send account balance sms to that number, real time.
If we can obtain miss calls placed for this trigger, in real time, we can send SMS via a SMS gateway. What I don't know is how to allow customers to place miss calls on a UCCX trigger and obtain their caller IDs. Usually UCCX application starts processing a call by answering it.
Any help, or lead would be much appreciated.
Solved! Go to Solution.
04-20-2020 12:38 AM
Hi Sajith,
I think that one of the options is to use the External Call Control Profile (ECCP) on CUCM (UCCX is not necessary to be used in this scenario. Here is how it might work:
Here is a document that I've created that describes the general concept of using ECCP (for notification purposes): ECCP
04-22-2020 01:50 AM
Deny is one of the options.
Alternatively, you can send back a response to CUCM for every ECCP REST Call, which will instruct CUCM to reject the call (as one of the options available in CIXML Parameters)
Here is the response content to CUCM:
<?xml encoding="UTF-8" version="1.0"?> <Response> <Result> <Decision>Permit</Decision> <Obligations> <Obligation FulfillOn="Permit" obligationId="continue.simple"> <AttributeAssignment AttributeId="Policy:continue.simple"> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string"> <cixml version="1.0> <reject></reject> </cixml> </AttributeValue> </AttributeAssignment> </Obligation> </Obligations> </Result> </Response>
04-20-2020 12:38 AM
Hi Sajith,
I think that one of the options is to use the External Call Control Profile (ECCP) on CUCM (UCCX is not necessary to be used in this scenario. Here is how it might work:
Here is a document that I've created that describes the general concept of using ECCP (for notification purposes): ECCP
04-20-2020 04:27 AM
Thanks for the great response. Let me check this and let you know.
04-20-2020 07:22 AM
@marek that's a very interesting solution, but I want to clarify. Does the web request provide the ANI of the caller? I didn't see those kind of details in the request on the website.
As for another solution, specially if someone is calling from an office phone or phone which doesn't support SMS. You could setup a simple script to ask the caller to enter their SMS enabled phone number then confirm it. This way you know for a fact that the number is correct. You could additionally confirm that the phone number they entered is actually in your system.
david
04-20-2020 08:29 AM
@david.maciashere is what you get from ECCP (body of the request). The numbers that you see are only test numbers but in real life, they will contain customer numbers. I've marked all the available fields in red.
<?xml version="1.0" encoding="UTF-8"?> <Request xmlns="urn:oasis:names:tc:xacml:2.0:context:schema:os"> <Subject SubjectCategory="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"> <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:role-id" DataType="http://www.w3.org/2001/XMLSchema#string" Issuer="requestor"> <AttributeValue>CISCO:UC:UCMPolicy</AttributeValue> </Attribute> <Attribute AttributeId="urn:Cisco:uc:1.0:callingnumber" DataType="http://www.w3.org/2001/XMLSchema#string"> <AttributeValue>1080</AttributeValue> </Attribute> <Attribute AttributeId="urn:Cisco:uc:1.0:callednumber" DataType="http://www.w3.org/2001/XMLSchema#string"> <AttributeValue>123</AttributeValue> </Attribute> <Attribute AttributeId="urn:Cisco:uc:1.0:transformedcgpn" DataType="http://www.w3.org/2001/XMLSchema#string"> <AttributeValue>1080</AttributeValue> </Attribute> <Attribute AttributeId="urn:Cisco:uc:1.0:transformedcdpn" DataType="http://www.w3.org/2001/XMLSchema#string"> <AttributeValue>7700</AttributeValue> </Attribute> </Subject> <Resource> <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" DataType="http://www.w3.org/2001/XMLSchema#anyURI"> <AttributeValue>CISCO:UC:VoiceOrVideoCall</AttributeValue> </Attribute> </Resource> <Action> <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" DataType="http://www.w3.org/2001/XMLSchema#anyURI"> <AttributeValue>any</AttributeValue> </Attribute> </Action> <Environment> <Attribute AttributeId="urn:Cisco:uc:1.0:triggerpointtype" DataType="http://www.w3.org/2001/XMLSchema#string"> <AttributeValue>routepattern</AttributeValue> </Attribute> </Environment> </Request>
04-20-2020 09:31 AM
It is there, that is nice. I'll have to play with that feature I can see a good bit of cool things being done with that kind of information.
david
04-21-2020 01:57 AM
Hi Marek,
Tried this out with a sample web service (not configured to respond with XML as your post indicated), I just wanted to confirm that CUCM triggers HTTP request upon arrival of the call and sends http request to outside. I have wireshark running on the server side, collecting any incoming http requests.
After creating and applying ECC profile to an extension (and to a translation pattern), I could not see any http requests received to server side. I took a sdl log from call manager, I could see;
17634506.002 |13:48:16.991 |AppInfo |HttpHandler(2,39,6): -setHostPortPath http://172.25.107.180:8080
17634506.003 |13:48:16.991 |AppInfo |HttpHandler(2,39,6): -setHostPortPath token http
17634506.004 |13:48:16.991 |AppInfo |HttpHandler(2,39,6): -setHostPortPath token http
17634506.005 |13:48:16.991 |AppInfo |HttpHandler(2,39,6): -setHostPortPath token 172.25.107.180
17634506.006 |13:48:16.991 |AppInfo |HttpHandler(2,39,6): -setHostPortPath token 8080
17634506.007 |13:48:16.991 |AppInfo |HttpHandler(2,39,6): -setHostPortPath hScheme http, and hHost 172.25.107.180 , and value size 3
17634506.008 |13:48:16.991 |AppInfo |HttpHandler(2,39,6): -setHostPortPath retCode = FALSE for >=4
17634506.009 |13:48:16.991 |AppInfo |ConnectionFailureToPDP - A connection request from Unified CM to the policy decision point failed Policy Decision Point:http://172.25.107.180:8080 The cause of the connection failure:Invalid URI is specified in the External Call Control profile App ID:Cisco CallManager Cluster ID:StandAloneCluster Node ID:CUCMS
I added ECC profile with this following URL, which is the test web service:
Is there any other thing that should be done from CUCM side, before it starts sending requests to an external server ? Since http is used, no certificates are needed. Attached logs too.
Thank you very much for the support.
04-21-2020 07:39 AM
This worked for me !
Earlier, I tried with a WebService that was actually not configured to communicate with CUCM, I wanted to check if any packets arrive to the server from CUCM upon call arriving.
It seems, CUCM keep a session once you added a ECC profile, with the end Web Service. After running a Web Service designed for CUCM ECC functionality (https://aurus5.com/free-apps/external-caller-id.php), I could see that CUCM sends a http request when ever a call matched to a route patter / translation rule or a DN. So we can obtain the Caller DN, without answering the call at all !
As you mentioned, CUCM sends Calling party ID, Called party (DN/RoutePattern) and some mode routing details via XML format to end service.
Now we have to create a Web Service that will run similar to tested service, and that'll finalize the solution ! Thank you very much for the support !
04-21-2020 07:58 AM
04-21-2020 08:20 AM
In general, there are 2 options:
<?xml encoding="UTF-8" version="1.0"?> <Response> <Result> <Decision>Permit</Decision> <Obligations> <Obligation FulfillOn="Permit" obligationId="continue.simple"> <AttributeAssignment AttributeId="Policy:continue.simple"> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string"> <cixml version="1.0> <continue></continue> </cixml> </AttributeValue> </AttributeAssignment> </Obligation> </Obligations> </Result> </Response>
And here is the document that describes this AP Link
04-21-2020 01:25 PM
04-21-2020 10:46 AM
This particular application responds CUCM back in http/text with the corresponding Caller's Text Name. (https://aurus5.com/free-apps/external-caller-id.php).
But in our scenario, once Web Service receives the http request with Caller ID, a simple 200 OK will be sufficient as the reply, since we do not need to provide anything return to CUCM.
Thanks !
04-21-2020 01:26 PM
04-21-2020 10:22 PM - edited 04-21-2020 10:27 PM
Still testing in test environment, haven't put into production yet.
Now need a way to disconnect the call automatically after one ring, without answering the call. Haven't figured something yet. I'm thinking of forwarding it to a hunt, where no devices logged in, so call should be disconnected with a busy tone. This doesn't work for some reason yet.
The end result should be, external callers dial the advertised number, and call automatically disconnects after a one ring. While call route to CUCM, a translation patter is matched, and ECC profile triggered, sending CallerID to a WebService, which will collect the Caller ID and send a SMS with required details, to the collected mobile number.
04-21-2020 11:22 PM
You can play around with the ECCP server response, here are the options that you can use: https://developer.cisco.com/site/curri/documents/latest-version/
I would go and try the reject option. You also have a chance to specify if you want to play an announcement or set the reason code.
This way you will not need to push the call to other CUCM objects like hunt-groups etc.
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide