cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
3507
Views
20
Helpful
14
Replies

XML response format for Continue, Divert, Reject Calls with possible attribute values

Hello,

I need exact XML response format with possible values for each attribute for Continue, Divert and Reject calls.

Possible values for ex. For StatusCode possible values are -

1. urn:oasis:names:tc:xacml:1.0:status:missing-attribute

2. urn:oasis:names:tc:xacml:1.0:status:ok

3. urn:oasis:names:tc:xacml:1.0:status:processing-error

4. urn:oasis:names:tc:xacml:1.0:status:syntax-error

 

Same way need possible values for ResourceId, ObligationId, etc.

14 Replies 14

Mamdouh Elgamal
Level 1
Level 1

These are examples of responses I've used/tested in the past. I believe it should work.

 

for more details check out:

https://developer.cisco.com/site/curri/documents/latest-version/

 

<?xml version="1.0" encoding="UTF-8"?>
<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>

<?xml version="1.0" encoding="UTF-8"?>
<Response> 
    <Result>
        <Decision>Permit</Decision> 
        <Obligations> 
            <Obligation FulfillOn="Permit" obligationId="divert.simple"> 
                <AttributeAssignment AttributeId="Policy:divert.simple"> 
                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string"> 
                        <cixml version="1.0">
                            <divert>
                                <destination>number|voicemail</destination>
                            </divert>
                        </cixml>
                    </AttributeValue> 
                </AttributeAssignment> 
            </Obligation> 
        </Obligations> 
    </Result>
</Response>

<?xml version="1.0" encoding="UTF-8"?>
<Response> 
    <Result>
        <Decision>Deny</Decision> 
        <Obligations> 
            <Obligation FulfillOn="Deny" obligationId="reject.simple"> 
                <AttributeAssignment AttributeId="Policy:reject.simple"> 
                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string"> 
                        <cixml version="1.0"> 
                            <reject></reject>
                        </cixml> 
                    </AttributeValue> 
                </AttributeAssignment> 
            </Obligation> 
        </Obligations> 
    </Result>
</Response>

For Reject call, I send the same response, so it rings twice, then there is blank tone for around 20 seconds and then call is getting cut. 

 

For Divert call, I get the continuous busy tone. 

 

Are these the correct behavior?

I am sending this when

to deny a call -

<?xml version="1.0" encoding="utf-8" ?>

<Response>
<Result>
<Decision>Deny</Decision>
<Status></Status>
<Obligations>
<Obligation FulfillOn="Deny" ObligationId="urn:cisco:xacml:response-qualifier">
<AttributeAssignment AttributeId="urn:cisco:xacml:is-resource">
<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>

 

 

to divert a call -

 

<?xml version="1.0" encoding="utf-8" ?>
<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;divert&gt;&lt;destination&gt;number|voicemail&lt;/destination&gt;&lt;/divert&gt;&lt;/cixml&gt;
</AttributeValue>
</AttributeAssignment>
</Obligation>
</Obligations>
</Result>
</Response>

 

Is anything wrong in this?

there are differences between the responses i posted as example and the responses you are using

 

i'm showing you the <cixml></cixml> elements without encoding, in your response it's encoded. Thats not really an issue, as long as the content is accurate.

 

but in your response messages you use different  "attributeID" and "obligationID", can you match it to the examples i posted ? for each type of response. 

 

FYI, the permit->continue and deny->reject response i have above have been tested and known to work on CUCM 11.5. The divert response i have, has not been tested. But i believe it should work or close to a working version. I used the documentation as reference. 

Hi @Mamdouh Elgamal,

Thanks for pointing out "attributeID" and "obligationID". I corrected it and again tried for Divert and Deny, I am getting busy tone only, so I am unable to judge whether it is right behavior or not.

I checked logs I am pasting below and trying to figure out errors (marked in Bold)-

Logs for Divert -


08935589.001 |02:22:33.562 |AppInfo |HttpHandler(2,38,2): - processHttpRes response from url (http://64.90.248.38:8899/Curri), directive (2), routing result code (0x0), Tid (33555124), xacml (<Response><Result><Decision>Permit</Decision><Obligations><Obligation FulfillOn="Permit" obligationId="divert.simple"><AttributeAssignment AttributeId="Policy:divert.simple"><AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">&lt;cixml version="1.0"&gt;&lt;divert&gt;&lt;destination&gt;1992&lt;/destination&gt;&lt;/divert&gt;&lt;/cixml&gt;</AttributeValue></AttributeAssignment></Obligation></Obligations></Result></Response>)
08935590.000 |02:22:33.562 |SdlSig |RoutingRes |wait |Da(2,100,211,1) |HttpHandler(2,100,38,2) |2,100,38,2.891^*^* |[R:N-H:0,N:0,L:0,V:0,Z:0,D:0] SsKey=0 Tid=33555124 routingResultCode=0 mDir=2 mAnnId= mResetHistory=0 callingNum= calledNum= callingName= calledName= mDest=1992 mReason=
08935590.001 |02:22:33.562 |AppInfo |Da::RoutingRes directive DIVERT , td =33555124, destination=[1992]
08935591.000 |02:22:33.562 |SdlSig |DaRes |setup_da |Cdcc(2,100,219,6666) |Da(2,100,211,1) |2,100,38,2.891^*^* |[R:N-H:0,N:0,L:0,V:0,Z:0,D:0] CI=36384110 Block ForegoPotentialMatches OnNetpatternUsage =3requestID =0
08935591.001 |02:22:33.562 |AppInfo |processCCMFeatureData: operationIeIdd=0
08935591.002 |02:22:33.562 |AppInfo |findUnfiredInterceptOnPattern numOfPatterns = 1
08935592.000 |02:22:33.563 |SdlSig |CcProceedReq |restart0 |MGCPpn9d(2,100,150,9) |Cdcc(2,100,219,6666) |2,100,38,2.891^*^* |[R:N-H:0,N:1,L:0,V:0,Z:0,D:0] CI=36384110 CI.branch=0 lPart= lPatt=

 

 

08935607.001 |02:22:33.563 |AppInfo |redirectOneSideCall PER RR, orig = 3, lrn = 3, current = 3
08935608.000 |02:22:33.563 |SdlSig |DaReq |wait |Da(2,100,211,1) |Cdcc(2,100,219,6666) |2,100,38,2.891^*^* |[R:N-H:0,N:0,L:0,V:0,Z:0,D:0] CI=36384110 Fqdn=pi=0si1 Cgpn=tn=2npi=1ti=1nd=6304241800pi=0si3 DialedNum=ti=1nd=1992pi=0si1 requestID=0 DigitAnalysisComplexity=0 CallingUser= IgnoreIntercept=0
08935608.001 |02:22:33.563 |AppInfo |Digit Analysis: star_DaReq: daReq.partitionSearchSpace(), filteredPartitionSearchSpaceString(), partitionSearchSpaceString()
08935608.002 |02:22:33.563 |AppInfo |Digit Analysis: star_DaReq: Matching Legacy Numeric, digits=1992
08935608.003 |02:22:33.563 |AppInfo |Digit Analysis: getDaRes data: daRes.ssType=[0] Intercept DAMR.sstype=[0], TPcount=[0], DAMR.NotifyCount=[0], DaRes.NotifyCount=[0]
08935608.004 |02:22:33.563 |AppInfo |Digit Analysis: getDaRes - Remote Destination [] isURI[1]
08935608.005 |02:22:33.563 |AppInfo |Digit analysis: patternUsage=2
08935608.006 |02:22:33.563 |AppInfo |Digit analysis: match(pi="1",fqcn="", cn="6304241800", plv="5", pss="", TodFilteredPss="", dd="1992",dac="0")
08935608.007 |02:22:33.563 |AppInfo |Digit analysis: potentialMatches=NoPotentialMatchesExist
08935609.000 |02:22:33.563 |SdlSig |DaRes |intercept_da |Cdcc(2,100,219,6666) |Da(2,100,211,1) |2,100,38,2.891^*^* |[R:N-H:0,N:0,L:0,V:0,Z:0,D:0] CI=36384110 Block NoPotentialMatchesExist OnNetpatternUsage =2requestID =0
08935609.001 |02:22:33.563 |Created | | |MatrixControl(2,100,142,4967) |Cdcc(2,100,219,6666) | |NumOfCurrentInstances: 1
08935609.002 |02:22:33.563 |AppInfo |Cdcc(0006666) - verifySymmetricPrecedenceAfterJoined - A.pl[5], B.pl[5]
08935610.000 |02:22:33.563 |SdlSig |SsRedirectCallErr |wait |PERManager(2,100,96,1) |Cdcc(2,100,219,6666) |2,100,38,2.891^*^* |[R:N-H:0,N:2,L:0,V:0,Z:0,D:0] Type=33554464 Key=676 Node=2 Party=36384110 RedirectCallErr=3
08935611.000 |02:22:33.563 |SdlSig |DropPartyReq |await_command |MatrixControl(2,100,142,4967) |Cdcc(2,100,219,6666) |2,100,38,2.891^*^* |[R:N-H:0,N:1,L:0,V:0,Z:0,D:0] ClearType= 0
08935612.000 |02:22:33.563 |SdlSig |SsRedirectCallErr |await_redirect_call_res |PER(2,100,97,676) |PERManager(2,100,96,1) |2,100,38,2.891^*^* |[R:N-H:0,N:1,L:0,V:0,Z:0,D:0] Type=33554464 Key=676 Node=2 Party=36384110 RedirectCallErr=3
08935613.000 |02:22:33.563 |SdlSig |MediaDisconnectRequest |wait |ConnectionManager(2,100,214,1) |MatrixControl(2,100,142,4967) |2,100,38,2.891^*^* |[R:N-H:0,N:1,L:0,V:0,Z:0,D:0] CI1=36384110 CI2=36384112 sc=0 disconnType=1 ssReason=0 clearType=0 IF1Created=F IF2Created=F party1.mMediaCoordinatorNodeId=0 party2.mMediaCoordinatorNodeId=0 party1.dtmCall= dtm.mode=0 dtm.CI=0 dtm.MTPForDTMF=F party2.dtmCall= dtm.mode=0 dtm.CI=0 dtm.MTPForDTMF=F reconnectPending=F forceStopCI=0
08935613.001 |02:22:33.563 |AppInfo |!!ERROR!! -ConnectionManager- wait_MediaDisconnectRequest :CI NOT FOUND IN TABLE,CI(36384110,36384112),discType=1,IFCreated(0,0),PID(0-0,0-0),IFHandling(0,0),MCNode(0,0)
08935614.000 |02:22:33.564 |SdlSig |PERStopInd |wait |PERManager(2,100,96,1) |PER(2,100,97,676) |2,100,38,2.891^*^* |[R:N-H:0,N:1,L:0,V:0,Z:0,D:0]

 

 Logs for REJECT -

08959775.001 |02:50:04.651 |AppInfo |HttpHandler(2,38,2): - processHttpRes response from url (http://64.90.248.38:8899/Curri), directive (3), routing result code (0x100), Tid (33555126), xacml (<Response><Result><Decision>Deny</Decision><Status></Status><Obligations><Obligation FulfillOn="Deny" ObligationId="reject.simple"><AttributeAssignment AttributeId="Policy:reject.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>)
08959776.000 |02:50:04.651 |SdlSig |RoutingRes |wait |Da(2,100,211,1) |HttpHandler(2,100,38,2) |2,100,38,2.895^*^* |[R:N-H:0,N:0,L:0,V:0,Z:0,D:0] SsKey=0 Tid=33555126 routingResultCode=256 mDir=3 mAnnId= mResetHistory=0 callingNum= calledNum= callingName= calledName= mDest=-1 mReason=
08959776.001 |02:50:04.651 |AppInfo |Da::RoutingRes directive REJECT,td =33555126
08959777.000 |02:50:04.651 |SdlSig |DaRes |setup_da |Cdcc(2,100,219,6674) |Da(2,100,211,1) |2,100,38,2.895^*^* |[R:N-H:0,N:0,L:0,V:0,Z:0,D:0] CI=36384128 Block ForegoPotentialMatches OnNetpatternUsage =3requestID =0
08959777.001 |02:50:04.651 |AppInfo |processCCMFeatureData: operationIeIdd=0
08959777.002 |02:50:04.651 |AppInfo |findUnfiredInterceptOnPattern numOfPatterns = 1
08959778.000 |02:50:04.651 |SdlSig |CcProceedReq |restart0 |MGCPpn9d(2,100,150,9) |Cdcc(2,100,219,6674) 
08959786.000 |02:50:04.652 |SdlSig |SsCallInfoReq |wait |Cc(2,100,220,1) |PER(2,100,97,678) |2,100,38,2.895^*^* |[R:N-H:0,N:1,L:0,V:0,Z:0,D:0] Type=33554464 Key=678 NodeId=2 Party=36384128

08959789.001 |02:50:04.652 |AppInfo |MGCPHandler send msg SUCCESSFULLY to: 10.14.0.2

 
08959799.004 |02:50:04.653 |AppInfo |EnvProcessCdr::outuptCdrHeader
08959799.005 |02:50:04.653 |AppInfo |EnvProcessCdr::formatCdrFieldNames
08959799.006 |02:50:04.653 |AppInfo |EnvProcessCdr::formatCdrFieldTypes
08959799.007 |02:50:04.653 |AppInfo |EnvProcessCdr::formatCdrData
08959804.000 |02:50:04.666 |AppInfo |MGCPHandler received msg from: 10.14.0.2

Please suggest me, is anything wrong in it?

Hi i'm sorry for the late response, been out of office. I don't know if you are still having an issue.

 

for diverting, i would imagine the translation with the ECC profile has a CSS that can give you access to the extension you are trying to divert to

 

it seems like it sees no matches

 

08935608.006 |02:22:33.563 |AppInfo |Digit analysis: match(pi="1",fqcn="", cn="6304241800", plv="5", pss="", TodFilteredPss="", dd="1992",dac="0")
08935608.007 |02:22:33.563 |AppInfo |Digit analysis: potentialMatches=NoPotentialMatchesExist

 

as for deny, i dont recall if busy tone is the expected response.

 

but it seems to recognize the REJCT:

 

08959776.001 |02:50:04.651 |AppInfo |Da::RoutingRes directive REJECT,td =33555126

 

also make sure in you app, you are responding to the keep alive from cucm. it's a HEAD request, response should be a 200 okay and correct headers

 

 

Hi @Mamdouh Elgamal,

Thanks a lot for your response.

I don't know how I am getting POST request and able to ALLOW , DENY call, even though I don't send keep-alive header in response to HEAD request, i get the head request and sending and empty string with 200 OK status code.

 

Is this the reason I am not able to redirect a call?

 

Actually the problem is , when I pass keep-alive header , and status code 200 ok, and I track request and response through wireshark, it seems like it doesn't responding back to the UCM, it is just blocking somewhere when Head request comes in, that's why I changed response to just responding a blank string with status code 200 ok, it works fine for me.

 

so my head method is now and works fine - 

 

[AcceptVerbs("GET", "HEAD")]
[HttpGet]
public string Head(HttpRequestMessage msg)
{
return "";
}

 

 

Previously it was stated as below and not working -

[AcceptVerbs("GET", "HEAD")]
[HttpGet]
[HttpHead]
public HttpResponseMessage Head(HttpRequestMessage msg)
{
HttpResponseMessage res = new HttpResponseMessage
{
Content = new StringContent("", Encoding.UTF8, "text/plain")
};
res.Headers.Add("Connection", "Keep-Alive");
res.Headers.Add("Keep-Alive", "timeout = 1000 max = 100");
return res;
}

 

Is anything wrong in it?

 

 

 

 

The headers i use for HEAD response are the following:

 

Content-type: "text/xml"

Connection: "Keep-Alive"

Keep-Alive: "timeout = 3000 max = 100"

Hi @Mamdouh Elgamal

Can you please elaborate about this, as I am new for UCM and I am curious to know about it?

 

"for diverting, i would imagine the translation with the ECC profile has a CSS that can give you access to the extension you are trying to divert to"

 

Is there any configuration needed for diverting a call? If yes then can you please elaborate it?

 

In my case I am calling on the number which is triggers my application by translation pattern - 7814385 where my ECCP is attached, and CSS attached is "HAR-CSS".

So is there anything I need to do with HAR-CSS?

 

 

HAR-CSS needs to have a partition associated with the divert destination.

 

what's the divert destination in your message ?

<divert>
      <destination>"number x"</destination>
</divert>

if "number x" is a directory number, then it must have a partition assigned to it. This partition needs to be added to HAR-CSS. Same applies if "number x" is a route pattern, cti port, etc..

Hi @Mamdouh Elgamal,

 

Now, I am calling on a number 1 and diverting to 7814376 which is a translation pattern.

I am listening phone ring only, so not able to understand whether my call is redirected or not, when I checked logs, I did not find any error, it says "Forwarding - Created!"

 

In this case divert destination is an translation pattern which is 7814376.

Is it correct? Can we have a translation pattern as a destination?

And that translation pattern doesn't have partition assigned to it, it has CSS assigned which is HAR-CSS.

 

The thing is that translation pattern is translated to a Directory Number which is 10762.

Should my destination be a DN (10762) instead of translation pattern (7814376)?

 

Now, I also tried with putting a DN as a destination(10762) in CIXML, but no luck.

you can have any number as a destination, even if it's a translation pattern

 

can you divert to a phone that rings and you can answer it ? this might be an easier way to understand how things work.

 

original pattern with ECC profile --> divert to a phone number

 

 

Hi @Mamdouh Elgamal ,

No I can't do that, because number provided on which I am testing is from another country and I can test by calling on that number when they have night, on day time I can't test as they have their usual routine.

 

Is there any way by which I can test, I can get acknowledgement that yes call is redirected?

Hi @Mamdouh Elgamal,

Diverting call from one phone (10 digit) to another phone(10 digit) is working fine.
But it doesn't work when I divert a call to a Port number.
Any idea?

Thanks.