{"id":472,"date":"2011-01-28T00:30:38","date_gmt":"2011-11-26T05:51:50","guid":{"rendered":"http:\/\/kraftek.com\/blog\/message-delivery-to-a-dahdi-line-using-the-manager-interface-with-asterisk-java\/"},"modified":"2011-01-28T00:30:38","modified_gmt":"2011-11-26T05:51:50","slug":"message-delivery-to-a-dahdi-line-using-the-manager-interface-with-asterisk-java","status":"publish","type":"post","link":"\/blog\/index.php\/message-delivery-to-a-dahdi-line-using-the-manager-interface-with-asterisk-java\/","title":{"rendered":"Message delivery to a dahdi line using the Manager interface with asterisk-java"},"content":{"rendered":"<p>You want to deliver a message to a pots line, and you don&#8217;t trust callprogress in asterisk, so you implement a dialplan<br \/>\nthat waits for a digit, then plays a message.<br \/>\nThe dialplan, in \/etc\/asterisk\/extensions_custom.conf is<br \/>\n[mimensaje]<br \/>\nexten =&gt; s,1(lbl_mensaje_0),Playback(nuevo_mensaje,noanswer)<br \/>\nexten =&gt; s,n,WaitForSilence(10,6,10)<br \/>\nexten =&gt; s,n,GotoIf($[&#8220;${WAITSTATUS}&#8221; = &#8220;TIMEOUT&#8221;]?lbl_mensaje_0:)<br \/>\nexten =&gt; s,n,Read(CONTEXT,nuevo_mensaje,1,ni,6,3)<br \/>\nexten =&gt; s,n,GotoIf($[&#8220;${READSTATUS}&#8221; != &#8220;OK&#8221;]?lbl_mensaje_1:)<br \/>\nexten =&gt; s,n,Playback(${elmensaje},noanswer)<br \/>\nexten =&gt; s,n,GotoIf($[&#8220;${PLAYBACKSTATUS}&#8221; = &#8220;SUCCESS&#8221;]?:lbl_mensaje_2)<br \/>\nexten =&gt; s,n(lbl_mensaje_2),Hangup()<br \/>\nexten =&gt; s,n(lbl_mensaje_1),Playback(self-destruct,noanswer)<br \/>\nexten =&gt; s,n,Goto(lbl_mensaje_2)<br \/>\nThe java class that sends the message using that dialplan is:<br \/>\nimport java.io.IOException;<br \/>\nimport org.asteriskjava.manager.*;<br \/>\nimport org.asteriskjava.manager.event.*;<br \/>\nimport org.asteriskjava.manager.action. *;<br \/>\nimport org.asteriskjava.manager.response.ManagerResponse;<br \/>\npublic class HelloEvents1 implements ManagerEventListener<br \/>\n{<br \/>\nprivate ManagerConnection managerConnection;<br \/>\nString number=&#8221;&#8221;;<br \/>\nString message=&#8221;&#8221;;<br \/>\nint i=0;<br \/>\npublic HelloEvents1() throws IOException<br \/>\n{<br \/>\nManagerConnectionFactory factory = new<br \/>\nManagerConnectionFactory(&#8220;localhost&#8221;,&#8221;adm&#8221;,&#8221;password&#8221;);<br \/>\nthis.managerConnection = factory.createManagerConnection();<br \/>\n}<br \/>\npublic OriginateAction setupOriginate(String n,String m) {<br \/>\nOriginateAction originateAction = new OriginateAction();<br \/>\n11\/433<br \/>\noriginateAction. setChannel(&#8220;DAHDI\/1\/&#8221;+n);<br \/>\noriginateAction. setVariable(&#8220;elmensaje&#8221;, m);<br \/>\noriginateAction. setContext(&#8220;mimensaje&#8221;);<br \/>\noriginateAction. setExten(&#8220;10&#8221;);<br \/>\noriginateAction. setActionId(n);<br \/>\noriginateAction. setAsync(Boolean.TRUE);<br \/>\noriginateAction. setTimeout(new Integer(30000));<br \/>\nreturn originateAction;<br \/>\n}<br \/>\npublic void start() throws IOException, AuthenticationFailedException,<br \/>\nTimeoutException, InterruptedException<br \/>\n{<br \/>\n\/\/ register for events<br \/>\nmanagerConnection.addEventListener(this);<br \/>\n\/\/ connect to Asterisk and log in<br \/>\nmanagerConnection.login();<br \/>\nOriginateAction originateAction;<br \/>\nManagerResponse originateResponse;<br \/>\noriginateAction = new OriginateAction();<br \/>\noriginateAction=setupOriginate(number,message);<br \/>\noriginateResponse = managerConnection.sendAction(originateAction, 30000);<br \/>\nThread.sleep(20000);<br \/>\nmanagerConnection.sendAction(new StatusAction()) ;<br \/>\nThread.sleep(80000);<br \/>\nmanagerConnection.logoff();<br \/>\n}<br \/>\npublic void onManagerEvent(ManagerEvent event)<br \/>\n{<br \/>\n\/\/ just print received events<br \/>\n\/\/ System.out.println(&#8220;&#8212;&#8212;&#8211;&#8220;+event);<br \/>\nString e=&#8221;&#8221;+event;<br \/>\nif (e.indexOf(&#8220;appdata='&#8221;+message+&#8221;,noanswer'&#8221;)&gt;0){<br \/>\nSystem.out.println(&#8220;ISSY: Mensaje recibido&lt;br&gt;&#8221;);<br \/>\nSystem.exit(0);<br \/>\n}<br \/>\nif (e.indexOf(&#8220;CONTEXT&#8221;)&gt;0||e.indexOf(&#8220;nuevo_mensaje&#8221;)&gt;0){<br \/>\ni++;<br \/>\nSystem.out.println(&#8220;ISSY: Esperando a que digite 1 : &#8220;+i+&#8221; de 8 intentos&lt;br&gt;&#8221;);<br \/>\n}<br \/>\nif (i==8){<br \/>\nSystem.out.println(&#8220;ISSY: Mensaje no enviado, usuario no digito 1&lt;br&gt;&#8221;);<br \/>\nSystem.exit(1);<br \/>\n}<br \/>\nif (e.indexOf(&#8220;HANGUP&#8221;)&gt;0){<br \/>\nSystem.out.println(&#8220;ISSY: Linea Colgada, mensaje no enviado&lt;br&gt;&#8221;) ;<br \/>\nSystem.exit(1);<br \/>\n}<br \/>\n}<br \/>\npublic static void main(String[] args) throws Exception {<br \/>\nif (args.length&lt;2){<br \/>\nSystem.out.println(&#8220;Usage: Call &lt;number&gt; &lt;message&gt;&#8221;);<br \/>\nSystem.exit(1);<br \/>\n}<br \/>\n12\/433<br \/>\nHelloEvents1 hello = new HelloEvents1();<br \/>\nhello.number=args[0];<br \/>\nhello.message=args[1];<br \/>\nhello.start();<br \/>\n}<br \/>\n}<br \/>\nEnjoy!<br \/>\n13\/433<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You want to deliver a message to a pots line, and you don&#8217;t trust callprogress in asterisk, so you implement a dialplan that waits for a digit, then plays a message. The dialplan, in \/etc\/asterisk\/extensions_custom.conf is [mimensaje] exten =&gt; s,1(lbl_mensaje_0),Playback(nuevo_mensaje,noanswer) exten =&gt; s,n,WaitForSilence(10,6,10) exten =&gt; s,n,GotoIf($[&#8220;${WAITSTATUS}&#8221; = &#8220;TIMEOUT&#8221;]?lbl_mensaje_0:) exten =&gt; s,n,Read(CONTEXT,nuevo_mensaje,1,ni,6,3) exten =&gt; s,n,GotoIf($[&#8220;${READSTATUS}&#8221; != [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-472","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"\/blog\/index.php\/wp-json\/wp\/v2\/posts\/472","targetHints":{"allow":["GET"]}}],"collection":[{"href":"\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=472"}],"version-history":[{"count":0,"href":"\/blog\/index.php\/wp-json\/wp\/v2\/posts\/472\/revisions"}],"wp:attachment":[{"href":"\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=472"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=472"},{"taxonomy":"post_tag","embeddable":true,"href":"\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=472"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}