I've had a few requests for more details on the CURRI solution. <div><br></div><div>Please use this as development information only and consult legal counsel before mucking with EMS in your environment. </div><div><br>
</div><div>Disclaimer complete. Time for code. </div><div><br></div><div><div class="WordSection1" style><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">The PHP code I have developed is:</span></font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font> </font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)"><?php</span></font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt">
<font> </font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">// If CUCM is making a HEAD request as keep alive, simply respond with Headers and then quit</span></font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">if ($_SERVER['REQUEST_METHOD'] == 'HEAD') {</span></font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt">
<font><span style="background-color:rgba(255,255,255,0)">     header('Content-type: text/plain');</span></font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">     header('Content-length: 1');</span></font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">     die();</span></font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">}</span></font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font> </font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font> </font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">// Otherwise, output the CURRI instructions for this call</span></font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">header('Content-type: text/xml; charset="UTF-8"');</span></font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt">
<font> </font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">$xml = '<?xml version="1.0" encoding="UTF-8"?><Response><Result><Decision>Permit</Decision><Status></Status><Obligations><Obligation FulfillOn="Permit" ObligationId="urn:cisco:xacml:policy-attribute"><AttributeAssignment AttributeId="Policy:simplecontinue"><AttributeValue DataType="<a href="http://www.w3.org/2001/XMLSchema#string" style="text-decoration:underline">http://www.w3.org/2001/XMLSchema#string</a>">&lt;cixml ver="1.0"&gt;&lt;continue&gt;&lt;<b>greeting identification="MonitoringWarning_00055"</b>/&gt;&lt;/continue&gt; &lt;/cixml&gt;</AttributeValue></AttributeAssignment></Obligation></Obligations></Result></Response>';</span></font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font> </font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">header('Content-length: ' . strlen($xml));</span></font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font> </font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">echo $xml;</span></font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt">
<font> </font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">?></span></font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font> </font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">The <b>greeting identification="MonitoringWarning_00055"</b> is what tells the system which audio file to play.  You can upload custom audio files to each and every annunciator server.  You’ll just have to change your filename in the code to match whats on the server.  Also, announcements in CUCM can have a secondary announcement as backup, and so that’s kind of nice.  For example, your primary announcement could be the full audio file, and then your backup could be just a silent audio file.  Then, whenever there is an issue loading your primary, the caller will just hear silence, or experience a delay.  Really, the only time you should have trouble is when you’re updating or changing the announcement.  Otherwise it’s just there, not doing much, like an MOH file.</span></font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font> </font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">Also, how this gets limited to only 911 EMS calls is that you put your ECCP only on your 911 translation patterns.  Otherwise, you’ll need more PHP code to read the XML sent to you, read out the called number field, then make a conditional based decision on that value.  I think my way keeps it simple.</span></font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font> </font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">Here’s the required steps necessary within CUCM:</span></font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font> </font></p><p class="MsoListParagraph" style="text-indent:0px;margin:0in 0in 0.0001pt 0.5in"><font><span style="background-color:rgba(255,255,255,0)">1.    Upload your Announcement (Media Resources > Announcement > Upload File)</span></font></p>
<p class="MsoListParagraph" style="margin:0in 0in 0.0001pt 1in"><div style="text-indent:0px"><font><span style="background-color:rgba(255,255,255,0)"><span style>a.    </span><span style>Follow the instructions here:</span></span></font></div>
<div style="text-indent:0px"><a href="https://%3cpublisher%3e:8443/Help/en_US/ccm/wwhelp/wwhimpl/common/html/wwhelp.htm?context=ccmcfg&file=ccmcfg-060-4.html" style="text-decoration:underline;background-color:rgba(255,255,255,0)"><font color="#000000">https://<publisher>:8443/Help/en_US/ccm/wwhelp/wwhimpl/common/html/wwhelp.htm?context=ccmcfg&file=ccmcfg-060-4.html</font></a></div>
<font><span style="background-color:rgba(255,255,255,0)"></span></font></p><p class="MsoListParagraph" style="text-indent:0px;margin:0in 0in 0.0001pt 1in"><font><span style="background-color:rgba(255,255,255,0)">b.    The key thing to remember is to upload it to each and every annunciator server in the cluster</span></font></p>
<p class="MsoListParagraph" style="text-indent:0px;margin:0in 0in 0.0001pt 0.5in"><font><span style="background-color:rgba(255,255,255,0)">2.    Create an ECCP (Calll Routing > External Call Control Profile > Add New)</span></font></p>
<p class="MsoListParagraph" style="text-indent:0px;margin:0in 0in 0.0001pt 1in"><font><span style="background-color:rgba(255,255,255,0)">a.    Name = some name like EMS</span></font></p><p class="MsoListParagraph" style="text-indent:0px;margin:0in 0in 0.0001pt 1in">
<font><span style="background-color:rgba(255,255,255,0)">b.    Pri Web Service =<a href="http://%3cserver%3e:%3cport%3e/path" style="text-decoration:underline">http://<server>:<port>/path</a> (note that port is required even if port 80)</span></font></p>
<p class="MsoListParagraph" style="text-indent:0px;margin:0in 0in 0.0001pt 1in"><font><span style="background-color:rgba(255,255,255,0)">c.    Sec Web Service = Optional, but same deal as Pri</span></font></p><p class="MsoListParagraph" style="text-indent:0px;margin:0in 0in 0.0001pt 1in">
<font><span style="background-color:rgba(255,255,255,0)">d.    Enable Load Balancing = Optional if you have a Sec</span></font></p><p class="MsoListParagraph" style="text-indent:0px;margin:0in 0in 0.0001pt 1in"><font><span style="background-color:rgba(255,255,255,0)">e.    Routing Request Timer = Optional time to wait for web server to respond (min is 1 sec; default is 2 sec; max is 5 sec)</span></font></p>
<p class="MsoListParagraph" style="text-indent:0px;margin:0in 0in 0.0001pt 1in"><font><span style="background-color:rgba(255,255,255,0)">f.     Diversion Rerouting CSS = Not required for this solution as we do not divert the call, we permit it</span></font></p>
<p class="MsoListParagraph" style="text-indent:0px;margin:0in 0in 0.0001pt 1in"><font><span style="background-color:rgba(255,255,255,0)">g.    Call Treatment on Failure = Fail Open is a good thing</span></font></p><p class="MsoListParagraph" style="text-indent:0px;margin:0in 0in 0.0001pt 0.5in">
<font><span style="background-color:rgba(255,255,255,0)">3.    Create or modify your 911 translation pattern(s)</span></font></p><p class="MsoListParagraph" style="text-indent:0px;margin:0in 0in 0.0001pt 1in"><font><span style="background-color:rgba(255,255,255,0)">a.    External Call Control Profile = Set it to your ECCP from step 1</span></font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font> </font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font><span style="background-color:rgba(255,255,255,0)">In CUCM 8.6(2) you cannot make changes to your ECCP without restarting CCM process.  That feature is fixed in 9.0.  Also, in my testing, in 9.1(2), I couldn’t even get it to work the first time without restarting CCM process.  Not too mention, there is a defect (CSCui38773) in 9.1(2) that causes one way audio in this call flow for certain SIP implementations. So watch out for those. </span></font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font> </font></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt"><font>You can learn more about CURRI and every other API on <a href="http://developer.cisco.com/">http://developer.cisco.com/</a></font></p>
<p class="MsoNormal" style="margin:0in 0in 0.0001pt"><br></p><p class="MsoNormal" style="margin:0in 0in 0.0001pt">I hope that helps.</p></div><br>On Tuesday, January 14, 2014, Anthony Holloway <<a href="mailto:avholloway%2Bcisco-voip@gmail.com">avholloway+cisco-voip@gmail.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>This is learning a lesson in phone system ownership, and administration, in the hardest way possible. </div>
<div><br></div>On the topic of 911 strategies, I too allow both 911 and 9911 to go out.  I have even thought about allowing other PSTN access codes to go out as well.  E.g., 8911.  Though I have not yet done this.  Anyone else?<div>

<br></div><div>On the topic of mitigating miss-dials, I leverage the CUCM CURRI API to play an announcement and then route the call.  The announcement can be a blank audio file of any duration, giving you a way to control delay outside of T302.  Additionally, a short announcement such as "Routing your call to emergency services" followed by a short 1 or 2 seconds of silence to allow the caller time to react and hangup if it is a miss-dial is also possible.</div>

<div><br></div><div>The CURRI API is implemented in CUCM as External Call Control Profiles and has a fail open safety mechanism.  So, if for any reason CUCM cannot leverage the feature, the call simply routes.</div></div>

<div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jan 14, 2014 at 2:28 AM, Heim, Dennis <span dir="ltr"><<a href="javascript:_e({}, 'cvml', 'Dennis.Heim@wwt.com');" target="_blank">Dennis.Heim@wwt.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I have always told customers that 911 must go out to the PSAP. If they only want to allow 9-9-1-1, then they need to place stickers on the phones. That usually causes them to do 911. In an attempt to avoid miss dials, I have inserted a delay by changing the 911 pattern to 911? And changing the inter-digit (T.302) timers to 5000-7500 ms.<br>


<br>
Dennis Heim | Solution Architect (Collaboration)<br>
World Wide Technology, Inc. | <a href="tel:314-212-1814" value="+13142121814" target="_blank">314-212-1814</a><br>
<br>
PS Engineering:  Innovate & Ignite.<br>
<div><br>
<br>
-----Original Message-----<br>
From: cisco-voip [mailto:<a href="javascript:_e({}, 'cvml', 'cisco-voip-bounces@puck.nether.net');" target="_blank">cisco-voip-bounces@puck.nether.net</a>] On Behalf Of Coy Hile<br>
Sent: Monday, January 13, 2014 8:29 PM<br>
To: Adam Piasecki<br>
Cc: <a href="javascript:_e({}, 'cvml', 'cisco-voip@puck.nether.net');" target="_blank">cisco-voip@puck.nether.net</a><br>
Subject: Re: [cisco-voip] Hotel Murder Linked to E911 Programming<br>
<br>
<br>
</div><div><div>On Jan 13, 2014, at 6:35 PM, Adam Piasecki <<a href="javascript:_e({}, 'cvml', 'apiasecki@midatlanticbb.com');" target="_blank">apiasecki@midatlanticbb.com</a>> wrote:<br>
<br>
> I install CUCM along with CER at Hotels and I've always just allowed 911 to go out. I get people dialing 911 by accident but it's better then someone not getting out.<br>
><br>
> Adam<br>
<br>
I've done the same thing on my personal lab setups (which double for voice at the house), and I've personally seen PD respond to one of my company's offices because someone dialed 9-1-1 rather than 9-011-<XXXX> for an international call.<br>


<br>
Like others have said, better to have an accidental call than to have a call not go out.  I don't know any first responder personally who disagrees with that sentiment.<br>
<br>
-<br>
Coy Hile<br>
<a href="javascript:_e({}, 'cvml', 'coy.hile@coyhile.com');" target="_blank">coy.hile@coyhile.com</a><br>
<br>
<br>
_______________________________________________<br>
cisco-voip mailing list<br>
<a href="javascript:_e({}, 'cvml', 'cisco-voip@puck.nether.net');" target="_blank">cisco-voip@puck.nether.net</a><br>
<a href="https://puck.nether.net/mailman/listinfo/cisco-voip" target="_blank">https://puck.nether.net/mailman/listinfo/cisco-voip</a><br>
<br>
_______________________________________________<br>
cisco-voip mailing list<br>
<a href="javascript:_e({}, 'cvml', 'cisco-voip@puck.nether.net');" target="_blank">cisco-voip@puck.nether.net</a><br>
<a href="https://puck.nether.net/mailman/listinfo/cisco-voip" target="_blank">https://puck.nether.net/mailman/listinfo/cisco-voip</a><br>
</div></div></blockquote></div><br></div>
</blockquote></div>