cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
2061
Views
35
Helpful
20
Replies

Enabling UCCX miss call Trigger

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. 

2 Accepted Solutions

Accepted Solutions

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:

  1. The customer calls the line number
  2. The call arrives is routed and from the signaling point arrives on CUCM
  3. On CUCM you have a set of routing objects that push the call via ECCP
  4. The ECCP makes HTTP/HTTP request to Web Server
    1. Option 1 - it can be UCCX with Web Trigger that will execute Web Trigger script. The script will have logic to send SMS to customer
    2. Option 2 - it can be an external Web Server that will be responsible for sending SMS (ex - via Twilio)
  5. At the ane call can hit a routing pattern that will block the call, to terminate it.

Here is a document that I've created that describes the general concept of using ECCP (for notification purposes): ECCP  

Marek https://gaman-gt.com
UCCE, PCCE, UCCX, WxCC, Cisco Finesse, Custom Gadget, CVP, CUIC, CUCM

View solution in original post

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"> 
                        &lt;cixml version="1.0&gt;
                            &lt;reject&gt;&lt;/reject&gt; 
                        &lt;/cixml&gt; 
                    </AttributeValue> 
                </AttributeAssignment> 
            </Obligation> 
        </Obligations> 
    </Result>
</Response>

 

 

Marek https://gaman-gt.com
UCCE, PCCE, UCCX, WxCC, Cisco Finesse, Custom Gadget, CVP, CUIC, CUCM

View solution in original post

20 Replies 20

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:

  1. The customer calls the line number
  2. The call arrives is routed and from the signaling point arrives on CUCM
  3. On CUCM you have a set of routing objects that push the call via ECCP
  4. The ECCP makes HTTP/HTTP request to Web Server
    1. Option 1 - it can be UCCX with Web Trigger that will execute Web Trigger script. The script will have logic to send SMS to customer
    2. Option 2 - it can be an external Web Server that will be responsible for sending SMS (ex - via Twilio)
  5. At the ane call can hit a routing pattern that will block the call, to terminate it.

Here is a document that I've created that describes the general concept of using ECCP (for notification purposes): ECCP  

Marek https://gaman-gt.com
UCCE, PCCE, UCCX, WxCC, Cisco Finesse, Custom Gadget, CVP, CUIC, CUCM

Thanks for the great response. Let me check this and let you know. 

@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

@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>
Marek https://gaman-gt.com
UCCE, PCCE, UCCX, WxCC, Cisco Finesse, Custom Gadget, CVP, CUIC, CUCM

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

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:

http://172.25.107.180:8070/ 

 

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. 

 

 

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 !

 

Capture.PNG
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 !

That's cool! What do you send back to CUCM as a response?

In general, there are 2 options:

  1. You don't send anything - in this senario, the system will youse the config defined under ECCP call (timeout and behavior: route or reject)
  2. You can send the answer which may look like this (continue with the routing the call):
<?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"> 
                        &lt;cixml version="1.0&gt;
                            &lt;continue&gt;&lt;/continue&gt; 
                        &lt;/cixml&gt; 
                    </AttributeValue> 
                </AttributeAssignment> 
            </Obligation> 
        </Obligations> 
    </Result>
</Response>

And here is the document that describes this AP Link 

Marek https://gaman-gt.com
UCCE, PCCE, UCCX, WxCC, Cisco Finesse, Custom Gadget, CVP, CUIC, CUCM

Thanks, but I didn't mean what is possible to send back, as I have used the CURRI API myself several times; rather, I was asking what the OP was sending back in their specific solution. A+ info nonetheless. I love your posts!

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 !

 

Huh. Interesting. What's the caller's experience?

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. 

@SajithThrimavithana 

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.

Marek https://gaman-gt.com
UCCE, PCCE, UCCX, WxCC, Cisco Finesse, Custom Gadget, CVP, CUIC, CUCM