tag:blogger.com,1999:blog-78506284661081830592024-02-20T09:34:59.451-08:00The MessageRandom thoughts about technology, findings, tips and tricksMarcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comBlogger92125tag:blogger.com,1999:blog-7850628466108183059.post-45795915335646781092018-04-23T20:58:00.000-07:002018-04-25T09:05:05.883-07:00Setting Up Local Environment for Developing Oracle Intelligent Bots Custom Components<div style="text-align: justify;">
Oh the joy of having a local development environment is priceless. For most cloud based solutions the story repeats itself being hard to troubleshoot and make changes while developing your project.</div>
<div style="text-align: justify;">
Well, this is no different with Oracle Intelligent Bots and for your benefit setting up a local development environment is pretty simple to do.</div>
<br />
<div style="text-align: justify;">
Before you get started, make sure you have a <a href="https://nodejs.org/en/" target="_blank">Node.js</a> downloaded and installed.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Download the <a href="http://www.oracle.com/technetwork/topics/cloud/downloads/mobile-suite-3636471.html" target="_blank">OMCe Bots Samples v18.1.x</a> from the Oracle Mobile Cloud Downloads page (<a href="http://www.oracle.com/technetwork/topics/cloud/downloads/mobile-suite-3636471.html">http://www.oracle.com/technetwork/topics/cloud/downloads/mobile-suite-3636471.html</a>) and extract the zip file on your machine.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
There is no entry point to run this in a local environment so here is what you have to do.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Create a file called <i>server.js</i> with your favorite editor in the <i>api_implementation</i> directory you have extracted the zip file above and paste the following JavaScript code:</div>
<br />
<pre style="background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: "arial"; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> const express = require('express');
const bodyParser = require('body-parser');
const components = require('./mcebots');
const app = express();
app.use(bodyParser.json());
components(app);
app.listen(process.env.PORT || 3000, () => {
console.log('Custom Components Server Ready');
});
</code></pre>
<br />
<div style="text-align: justify;">
<div class="MsoNormal" style="background: white; text-align: justify; text-justify: inter-ideograph;">
<br /></div>
</div>
<div style="text-align: justify;">
The piece of code above will wrap the Oracle Intelligent Bots custom component SDK functionality to run a simple <a href="https://expressjs.com/" target="_blank">Express.js</a> implementation on top of <a href="https://nodejs.org/en/" target="_blank">Node.js</a> using the port number you specify.<br />
The way it does that is by requiring the <i>mcebots.js</i> as a dependency during the server startup.<br />
<br />
To run it, use the following command:</div>
<br />
<pre style="background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: "arial"; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> node server.js
</code></pre>
<br />
<div style="text-align: justify;">
When you have your local server above running, try sending a HTTP GET to http://localhost:port/mobile/custom/bots_samples/components (you can use something like cURL, Postman or simply the browser).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
That call should return a list of sample components available to you and you should see something similar to the following payload:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg58xcvRTpeINjwiagy_LsRaeV6de9iP6cSNH03mMjOtQambh_1_WtPYldiHtD9WyO2BMFjq1NgnkiaHs6Iaw6DM5HKy5yGfn4PWesyQZ_8MkTwiwOPNc8CcbYl9eHGmVnD3Kw5POD0vRU/s1600/Postman.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1460" data-original-width="616" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg58xcvRTpeINjwiagy_LsRaeV6de9iP6cSNH03mMjOtQambh_1_WtPYldiHtD9WyO2BMFjq1NgnkiaHs6Iaw6DM5HKy5yGfn4PWesyQZ_8MkTwiwOPNc8CcbYl9eHGmVnD3Kw5POD0vRU/s640/Postman.png" width="268" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<br />
<br />
<div style="text-align: justify;">
You can start testing it or making changes to the registry and other functionality by editing the files</div>
<div style="text-align: justify;">
provided in the sample package. Please refer to the Oracle Mobile Cloud Enterprise documentation if needed (<a href="https://docs.oracle.com/en/cloud/paas/mobile-suite/develop/bot-components1.html#GUID-899EAAC9-2EF5-4C81-A836-F2CD4FA647DD">https://docs.oracle.com/en/cloud/paas/mobile-suite/develop/bot-components1.html#GUID-899EAAC9-2EF5-4C81-A836-F2CD4FA647DD</a>).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Now, the next thing you should do is to enable your local server to be accessed by your Oracle Intelligent Bot and to do that I'd suggest that you use something like <a href="https://ngrok.com/" target="_blank">ngrok</a> to create a public URL for exposing your local web server where the Bot Service will be able to reach your environment.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
To make that happen, start a tunnel on your machine pointing to the port number you have ran your local server. In my case, I have started on port 3000 so I'd run ngrok like this:</div>
<br />
<pre style="background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: "arial"; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> ./ngrok http 3000
</code></pre>
<br />
<div style="text-align: justify;">
That would work for any free (un)registered account but if you have a ngrok subscription you can also setup a subdomain which helps quite a lot as you would not need to keep updating the server URL in the Bot Custom Component Service definition every time you restart your ngrok tunnel or it expires.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Anyway, ngrok will generate two tunnels for you (HTTP and HTTPS) so pick one to be used by your Custom Compoment definition.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiisq2BNgNWy2goKRCK2tkGjAWERNFju0XXqlexZmI76xSA0okUbklnKS6m85Q0ybkYCEAMAg2GdZ6WCrZ0IOA6dtBtuwIQtm-USXzlVGpKMnAtVJJxZwdZdYH3q5Y30XZKQNDFg-eLtNo/s1600/1__zsh.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="376" data-original-width="1186" height="126" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiisq2BNgNWy2goKRCK2tkGjAWERNFju0XXqlexZmI76xSA0okUbklnKS6m85Q0ybkYCEAMAg2GdZ6WCrZ0IOA6dtBtuwIQtm-USXzlVGpKMnAtVJJxZwdZdYH3q5Y30XZKQNDFg-eLtNo/s400/1__zsh.png" width="400" /></a></div>
<br />
<br />
<div style="text-align: justify;">
Log in to your OMCe (Oracle Mobile Cloud Enterprise) instance, select Bots and choose the Bot you want to use. Go to the Components tab and click on the Add Service button.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijiJwFaU2DzKyHh5Zi2Mca-jBgZlvpIR6gpa1jQVBJn4Y-cAEqx4pglwwRYeWzGmOf60437u5aLLWOfqKvsRnIjQB9uBYqbWWWiaFe57gVU8eVmVSjFo3rU4tY5oTJWa9gBT__rezJeAQ/s1600/Bots.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1003" data-original-width="1600" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijiJwFaU2DzKyHh5Zi2Mca-jBgZlvpIR6gpa1jQVBJn4Y-cAEqx4pglwwRYeWzGmOf60437u5aLLWOfqKvsRnIjQB9uBYqbWWWiaFe57gVU8eVmVSjFo3rU4tY5oTJWa9gBT__rezJeAQ/s400/Bots.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
Fill up all the required fields and remember that the Metadata URL should be your ngrok tunnel URL appended by<i> /mobile/custom/bots_samples/components</i>.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Click Create.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
You should see a list of components created by expanding the recently service.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmBqgemcbBkOJR05BeM7G1g0OHwvUywKp7xy-HLesKWV98t7jFy-s3BS46mhi3_p_euY3XE_rci-weO9tAFHCUDcVPPNqg_yXnIi7bFL1absATYRigtiYtXwg_fd0nAUK4_5HmM5BXOIQ/s1600/Bots-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="710" data-original-width="1600" height="177" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmBqgemcbBkOJR05BeM7G1g0OHwvUywKp7xy-HLesKWV98t7jFy-s3BS46mhi3_p_euY3XE_rci-weO9tAFHCUDcVPPNqg_yXnIi7bFL1absATYRigtiYtXwg_fd0nAUK4_5HmM5BXOIQ/s400/Bots-2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
You are all set to develop your customer component locally with access from your Bot running on the Oracle Mobile Cloud Enterprise instance.</div>
<div>
<br /></div>
<style>
<!--
/* Font Definitions */
@font-face
{font-family:PMingLiU;
panose-1:2 2 5 0 0 0 0 0 0 0;
mso-font-alt:新細明體;
mso-font-charset:136;
mso-generic-font-family:roman;
mso-font-pitch:variable;
mso-font-signature:-1610611969 684719354 22 0 1048577 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-pitch:variable;
mso-font-signature:-536870145 1107305727 0 0 415 0;}
@font-face
{font-family:"\@PMingLiU";
panose-1:2 1 6 1 0 1 1 1 1 1;
mso-font-charset:136;
mso-generic-font-family:roman;
mso-font-pitch:variable;
mso-font-signature:-1610611969 684719354 22 0 1048577 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:8.5pt;
mso-bidi-font-size:9.0pt;
font-family:"Arial",sans-serif;
mso-fareast-font-family:PMingLiU;
color:black;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#1F4F82;
mso-themecolor:hyperlink;
text-decoration:underline;
text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-noshow:yes;
mso-style-priority:99;
color:#BDBDBD;
mso-themecolor:followedhyperlink;
text-decoration:underline;
text-underline:single;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:9.0pt;
mso-ansi-font-size:9.0pt;
mso-bidi-font-size:9.0pt;
font-family:"Arial",sans-serif;
mso-ascii-font-family:Arial;
mso-fareast-font-family:PMingLiU;
mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
-->
</style>Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-25619800225121212142017-12-26T12:14:00.000-08:002017-12-26T12:14:02.543-08:00Using SMS Channels with Oracle Intelligent Bots<div class="OIntro">
<br /><br />Using SMS is a very convenient way to communicate with someone these days and most people prefer to use SMS instead of email. SMS also gives you a history of the conversation while, for example, the context of a phone call can be easily forgotten if you don’t take notes.<br /><br />In the same way that you text someone these days, you could also apply the same idea to business communications. The convenience, flexibility and speed of SMS can dramatically improve customer service. On top of that, several business tasks could be easily automated. Just imagine that you can get the status of something you order without waiting in line or having to download a particular mobile app by just texting the business’ phone number.<br /><br />Having the capability of serving your users using SMS with an Intelligent Bot performing the interactions is the exact scenario we are going to explore in this article.</div>
<div class="OIntro">
<br /></div>
<div class="OIntro">
<h3>
The Big Picture</h3>
<div>
<br /></div>
<div>
To give you an overview of what we are going to put together here, you can start with the following diagram that illustrates the messaging flow and the major components involved.</div>
</div>
<div class="OBodyText" style="text-align: justify; text-justify: inter-ideograph;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpUpmr1c9rYq5QTVB35fmzC8jKKACI45srhIpoBmAkdd5EDWRGRzMTbZoLnfCg9ug_d8jEXv_E4LkWu5CtatSR8juqv-gjW_W8Foc-RLNhd6Rv3aFe9HPo19cwaoDjVz_DXM4ysLHcSk4/s1600/001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="329" data-original-width="1050" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpUpmr1c9rYq5QTVB35fmzC8jKKACI45srhIpoBmAkdd5EDWRGRzMTbZoLnfCg9ug_d8jEXv_E4LkWu5CtatSR8juqv-gjW_W8Foc-RLNhd6Rv3aFe9HPo19cwaoDjVz_DXM4ysLHcSk4/s640/001.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<br /></div>
<ul>
<li>You set up that Phone Number to send an HTTP request to your server every time a SMS message comes in.</li>
<li>Your server receives the messages from Twilio and prepare them to the Intelligent Bot server.</li>
<li>The Intelligent Bot server processes the request and sends an asynchronous HTTP response back to your server.</li>
<li>Your server receives that information and sends an HTTP request through the Twilio SMS API.</li>
<li>Twilio sends the SMS message to the user.</li>
</ul>
<div>
<br /></div>
<h3>
Setting up my Bot to Interact with SMS users</h3>
<div>
<br /></div>
<div>
Once you already know what we are going to be doing, let’s have a look on what’s required before we get started and then dive into each one of these components.</div>
<br />Here are the ingredients:<div>
<br /></div>
<div>
<ul>
<li>Twilio Account (You can get a free account here: <a href="https://www.twilio.com/try-twilio)">https://www.twilio.com/try-twilio)</a> </li>
<li>Twilio Phone Number (Buy a Twilio Number here: <a href="https://www.twilio.com/console/phone-numbers/incoming)">https://www.twilio.com/console/phone-numbers/incoming)</a> </li>
<li>The Sample Node.js Server (more info below)</li>
<li>Oracle Intelligent Bot instance (You can get started here: <a href="https://cloud.oracle.com/en_US/tryit">https://cloud.oracle.com/en_US/tryit</a>)</li>
</ul>
<div>
<br /></div>
<h3>
The Twilio SMS Setup</h3>
<div>
<br /></div>
The very first part of our scenario is to setup the Twilio Phone Number and SMS capabilities that users will send and receive SMS messages.<br /><br />To do that, you’ll need to set up a Twilio account. You can sign up here: <a href="https://www.twilio.com/try-twilio">https://www.twilio.com/try-twilio</a>.<br /><br />Once you have a Twilio account, log into the Twilio Console (<a href="https://www.twilio.com/console)">https://www.twilio.com/console)</a> and buy a Twilio Phone Number with SMS enabled.<div class="OBodyText" style="text-align: justify; text-justify: inter-ideograph;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi72Q3fiegEKoIrtbNIW4ElUkxz0OltrfhYD2Qo2qXJlgRW9qyBvD0JRzdfzs5NIybhevt-lCwSuKD84X5Reu6BsQPDoAQlFPEBScN3j2oPz1dpN2EGSIfHMHVwgdN_csD4ILVj2wQENWY/s1600/002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="444" data-original-width="1050" height="267" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi72Q3fiegEKoIrtbNIW4ElUkxz0OltrfhYD2Qo2qXJlgRW9qyBvD0JRzdfzs5NIybhevt-lCwSuKD84X5Reu6BsQPDoAQlFPEBScN3j2oPz1dpN2EGSIfHMHVwgdN_csD4ILVj2wQENWY/s640/002.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:RelyOnVML/>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>ZH-TW</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
<w:UseFELayout/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
DefSemiHidden="false" DefQFormat="false" DefPriority="99"
LatentStyleCount="380">
<w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="3" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 9"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="header"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footer"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index heading"/>
<w:LsdException Locked="false" Priority="35" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of figures"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope return"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="line number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="page number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of authorities"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="macro"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="toa heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 5"/>
<w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Closing"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Signature"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="true"
UnhideWhenUsed="true" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Message Header"/>
<w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Salutation"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Date"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Block Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="FollowedHyperlink"/>
<w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Document Map"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Plain Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="E-mail Signature"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Top of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Bottom of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal (Web)"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Acronym"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Cite"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Code"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Definition"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Keyboard"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Preformatted"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Sample"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Typewriter"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Variable"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Table"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation subject"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="No List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Contemporary"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Elegant"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Professional"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Balloon Text"/>
<w:LsdException Locked="false" Priority="39" Name="Table Grid"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Theme"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 9"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" QFormat="true"
Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" QFormat="true"
Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" QFormat="true"
Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" QFormat="true"
Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" QFormat="true"
Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" QFormat="true"
Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" SemiHidden="true"
UnhideWhenUsed="true" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
<w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
<w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
<w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
<w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
<w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
<w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 6"/>
</w:LatentStyles>
</xml><![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Arial;
panose-1:2 11 6 4 2 2 2 2 2 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:"Cambria Math";
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:PMingLiU;
panose-1:2 2 5 0 0 0 0 0 0 0;
mso-font-charset:136;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-1610611969 684719354 22 0 1048577 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:8.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-fareast-font-family:PMingLiU;
color:black;}
p.OBodyText, li.OBodyText, div.OBodyText
{mso-style-name:"O\.BodyText";
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"O\.BodyText Char";
margin-top:0in;
margin-right:0in;
margin-bottom:6.0pt;
margin-left:0in;
line-height:13.0pt;
mso-pagination:widow-orphan;
mso-layout-grid-align:none;
text-autospace:none;
font-size:10.0pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-fareast-font-family:PMingLiU;
color:black;
mso-themecolor:text1;
letter-spacing:-.05pt;}
span.OBodyTextChar
{mso-style-name:"O\.BodyText Char";
mso-style-unhide:no;
mso-style-locked:yes;
mso-style-link:"O\.BodyText";
mso-ansi-font-size:10.0pt;
color:black;
mso-themecolor:text1;
letter-spacing:-.05pt;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:9.0pt;
mso-ansi-font-size:9.0pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-ascii-font-family:Arial;
mso-fareast-font-family:PMingLiU;
mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:9.0pt;
font-family:Arial;}
</style>
<![endif]-->
<!--StartFragment-->
<!--EndFragment--></div>
<br />With your new Phone Number, you have completed the first part of our configuration and you should be able to send SMS messages to your number. The following diagram shows you what have you done so far.<br /><br /><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiy4SR56TRGxvq6N2nMFP9Lc8YpxX4h1iyjVzs8sJsnIfJZZH85_HV-qkNgGBeUdUMVbb3O_KzXPFr2tpWwx1ZOE8m-pME_Wh8DUivMzUeIa3hSR-vHqNFmi4k5NAxj_Xg2cENA51OT8jw/s1600/003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="365" data-original-width="530" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiy4SR56TRGxvq6N2nMFP9Lc8YpxX4h1iyjVzs8sJsnIfJZZH85_HV-qkNgGBeUdUMVbb3O_KzXPFr2tpWwx1ZOE8m-pME_Wh8DUivMzUeIa3hSR-vHqNFmi4k5NAxj_Xg2cENA51OT8jw/s320/003.png" width="320" /></a></div>
<div class="OBodyText" style="text-align: justify; text-justify: inter-ideograph;">
<br /></div>
<br />The next thing you will need is a way for Twilio to send HTTP requests to your sample Node.js server. If the Node.js server is running on your machine and it’s not directly exposed to the Internet then Twilio won’t be able to reach it. To enable that, I’d recommend using ngrok (<a href="https://ngrok.com/)">https://ngrok.com/)</a> with multiple simultaneous tunnels which allows you to expose a local server to the Internet, in this case one endpoint to be used by Twilio and the other by the Intelligent Bot server. If you already have a server that’s exposed to the Internet then feel free to use it as we move along.<br /><br />Make sure that your ngrok setup points to where you are going to be running your Node.js server.<br /><br />The URL generated by ngrok or the URL of your own server is what we are going to use to set up the Webhook in the Twilio Phone Number under the Messaging section for when “A Message Comes In”.<br /><br /><br /><div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUvfDLUyQk-Uh8pawfwyTRJfbjDkzLIAwC9EOHKJQI6km7rJa1S8VGppj95ZuNygIFI8iqUb1WeZaB0tBSicjc1CPtPBKoVRCW8bVW3oRT9EHZuUwQsPHX82vxPboq2j-uDZtDIYdPGnE/s1600/004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="281" data-original-width="1050" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUvfDLUyQk-Uh8pawfwyTRJfbjDkzLIAwC9EOHKJQI6km7rJa1S8VGppj95ZuNygIFI8iqUb1WeZaB0tBSicjc1CPtPBKoVRCW8bVW3oRT9EHZuUwQsPHX82vxPboq2j-uDZtDIYdPGnE/s640/004.png" width="640" /></a></div>
<br /><br />So, every time that someone sends a SMS message to the number you have set up, Twilio will make an HTTP request to the Webhook URL you have provided above.<br /><br />With that, you have completed the second part of our configuration and now Twilio is able to communicate with your server as showed in the below diagram.<div class="OBodyText" style="text-align: justify; text-justify: inter-ideograph;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9OHOC1kY8oUxXGUSVeGC29agSL8fACWYXQTWDunVFyEySq3zz87GvdKgVkETTBLmjhDEq9txmkJGS0UHQ0TGtarHQNbmxUg7ygjo_90m6iuUcHcTM3oJ4BKhECDHSyHYR6h6Zn8DFBzU/s1600/005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="356" data-original-width="573" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9OHOC1kY8oUxXGUSVeGC29agSL8fACWYXQTWDunVFyEySq3zz87GvdKgVkETTBLmjhDEq9txmkJGS0UHQ0TGtarHQNbmxUg7ygjo_90m6iuUcHcTM3oJ4BKhECDHSyHYR6h6Zn8DFBzU/s320/005.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<h3>
<b>The Intelligent Bot SMS Channel Setup</b></h3>
<div>
<b><br /></b></div>
To use the Oracle Intelligent Bot with SMS you’ll need to set up the generic Webhook channel configuration.<br /><br />To create a Webhook channel, go to your Bot Settings page, select Channels and click the ‘+ Channel’ to start configuring what you need.<br /><br />Give it a name, description, select Webhook as the Channel Type, provide the Outgoing Webhook URI (this is where the Intelligent Bot server will make HTTP requests to your Node.js server) and make sure the Channel is set to Enabled.</div>
<div>
<br /><br /><div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUf6BQJGzPr0JmP7wvA06twqirsLeyykY6HZKd9hSI0f6wGp-Efdy1HLyBFQ33MycesUSfj0E_KeKp__HZi-LsNvMCM5XXVnR2aSU17Y-wjZQhKGGy0OCvyiJrspzOBs5AnvBOJgidlm0/s1600/006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="569" data-original-width="1050" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUf6BQJGzPr0JmP7wvA06twqirsLeyykY6HZKd9hSI0f6wGp-Efdy1HLyBFQ33MycesUSfj0E_KeKp__HZi-LsNvMCM5XXVnR2aSU17Y-wjZQhKGGy0OCvyiJrspzOBs5AnvBOJgidlm0/s640/006.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:RelyOnVML/>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>ZH-TW</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
<w:UseFELayout/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
DefSemiHidden="false" DefQFormat="false" DefPriority="99"
LatentStyleCount="380">
<w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="3" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 9"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="header"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footer"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index heading"/>
<w:LsdException Locked="false" Priority="35" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of figures"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope return"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="line number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="page number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of authorities"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="macro"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="toa heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 5"/>
<w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Closing"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Signature"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="true"
UnhideWhenUsed="true" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Message Header"/>
<w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Salutation"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Date"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Block Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="FollowedHyperlink"/>
<w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Document Map"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Plain Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="E-mail Signature"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Top of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Bottom of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal (Web)"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Acronym"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Cite"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Code"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Definition"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Keyboard"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Preformatted"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Sample"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Typewriter"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Variable"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Table"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation subject"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="No List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Contemporary"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Elegant"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Professional"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Balloon Text"/>
<w:LsdException Locked="false" Priority="39" Name="Table Grid"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Theme"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 9"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" QFormat="true"
Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" QFormat="true"
Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" QFormat="true"
Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" QFormat="true"
Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" QFormat="true"
Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" QFormat="true"
Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" SemiHidden="true"
UnhideWhenUsed="true" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
<w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
<w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
<w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
<w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
<w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
<w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 6"/>
</w:LatentStyles>
</xml><![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Arial;
panose-1:2 11 6 4 2 2 2 2 2 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:"Cambria Math";
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:PMingLiU;
panose-1:2 2 5 0 0 0 0 0 0 0;
mso-font-charset:136;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-1610611969 684719354 22 0 1048577 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:8.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-fareast-font-family:PMingLiU;
color:black;}
p.OBodyText, li.OBodyText, div.OBodyText
{mso-style-name:"O\.BodyText";
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"O\.BodyText Char";
margin-top:0in;
margin-right:0in;
margin-bottom:6.0pt;
margin-left:0in;
line-height:13.0pt;
mso-pagination:widow-orphan;
mso-layout-grid-align:none;
text-autospace:none;
font-size:10.0pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-fareast-font-family:PMingLiU;
color:black;
mso-themecolor:text1;
letter-spacing:-.05pt;}
span.OBodyTextChar
{mso-style-name:"O\.BodyText Char";
mso-style-unhide:no;
mso-style-locked:yes;
mso-style-link:"O\.BodyText";
mso-ansi-font-size:10.0pt;
color:black;
mso-themecolor:text1;
letter-spacing:-.05pt;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:9.0pt;
mso-ansi-font-size:9.0pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-ascii-font-family:Arial;
mso-fareast-font-family:PMingLiU;
mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:9.0pt;
font-family:Arial;}
</style>
<![endif]-->
<!--StartFragment-->
<!--EndFragment--></div>
After you click Create, the Intelligent Bot server generates a Webhook URL for your bot and its correspondent Secret Key for encrypting messages. Keep these two values handy because we are going to need them soon when we configure our Node.js server.<div class="OBodyText" style="text-align: justify; text-justify: inter-ideograph;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: small;"><o:p></o:p></span></div>
<div class="OBodyText" style="text-align: justify; text-justify: inter-ideograph;">
<span style="font-size: 10pt; letter-spacing: -0.05pt;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk7z62DGps33YxzV53j_ZonLVfdzMTJQMaSxse9BJmY7JMEpaMA1cz2WFfUJhY27IqEarLS6B8EKJdDGkTTXjhqK-ssjkKOEP0IxE3-mFEtLJThVDaZ7W3KFE7EjxBuTRq6Ncwx94E5s4/s1600/007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="490" data-original-width="1050" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk7z62DGps33YxzV53j_ZonLVfdzMTJQMaSxse9BJmY7JMEpaMA1cz2WFfUJhY27IqEarLS6B8EKJdDGkTTXjhqK-ssjkKOEP0IxE3-mFEtLJThVDaZ7W3KFE7EjxBuTRq6Ncwx94E5s4/s640/007.png" width="640" /></a></div>
<div class="OBodyText" style="text-align: justify; text-justify: inter-ideograph;">
<span style="font-size: 10pt; letter-spacing: -0.05pt;"><br /></span></div>
<h3>
The Sample Node.js Server</h3>
<div>
<br /></div>
<div>
Download and extract the sample Node.js server code from <a href="https://drive.google.com/open?id=1KaNwmDnPvFfy90ONA6jt_c1UXki0epSl">here</a>. Make sure you have Node.js (<a href="https://nodejs.org/en/)">https://nodejs.org/en/)</a> downloaded and installed on your machine before continuing on this step.<br /><br />The next step in our configuration is to have a piece of software that’s going to interface with both the SMS side (Twilio in this case) and the Oracle Intelligent Bot server. For this particular thing we are going to use a Node.js based server running some sample code to take care of those required tasks but you could host this on Oracle Mobile Cloud Enterprise (OMCe), Oracle Application Container Cloud Service (ACCS) or on your own server. <br /><br />The sample Node.js server will receive the SMS messages from Twilio, extract the relevant information, sign the message according to the Intelligent Bot server expectations and send the messages to the Intelligent Bot server.<br /><br />Then, the sample Node.js server will also receive messages back from the Intelligent Bot server, verify its signature, set up the response message and finally send the messages back to Twilio where the SMS will be generated and sent to the user.<br /><br />But, before you run the sample Node.js server, you will need to provide some required metadata information. You can set this up as environment variables or straight into the source code if you want to.<br /><br />These are the environment variables you’ll need:</div>
<div>
<br /></div>
<div>
<ul>
<li>TWILIO_ACCOUNT_SID – Your Twilio Account SID (You can get this from <a href="http://www.twilio.com/console">www.twilio.com/console</a>)</li>
<li>TWILIO_AUTH_TOKEN – Your Twilio Auth Token (You can get this from <a href="http://www.twilio.com/console)">www.twilio.com/console)</a></li>
<li>MY_TWILIO_NUMBER – This is the Twilio Phone Number you set up</li>
<li>BOT_SECRET_KEY – This is the Intelligent Bot SMS Channel Secret Key (You have this from the previous step) </li>
<li>BOT_WEBHOOK_URL – This is the Intelligent Bot SMS Webhook URL (You have this from the previous step)</li>
</ul>
</div>
<br />The sample Node.js server will look for those variables during the startup and you can export/set them depending on your host platform of choice.<br /><br />Personally, since I'm on macOS, I prefer to use a .env file with the following information:</div>
<div>
<br /><div class="OBodyText" style="text-indent: .5in;">
<span style="font-family: "courier new"; font-size: small;">export
TWILIO_ACCOUNT_SID=ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<o:p></o:p></span></div>
<div class="OBodyText" style="text-indent: .5in;">
<span style="font-family: "courier new"; font-size: small;">export
TWILIO_AUTH_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<o:p></o:p></span></div>
<div class="OBodyText" style="text-indent: .5in;">
<span style="font-family: "courier new"; font-size: small;">export
BOT_SECRET_KEY= XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<o:p></o:p></span></div>
<div class="OBodyText" style="margin-left: .5in;">
<span style="font-family: "courier new"; font-size: small;">export
BOT_WEBHOOK_URL=https://XXXXXXX.ngrok.io/connectors/v1/tenants/chatbot-tenant/listeners/webhook/channels/8C9F0AC4-FBBA-4BBE-8C4A-299D518396B8<o:p></o:p></span></div>
<div class="OBodyText" style="text-indent: .5in;">
<span style="font-family: "courier new";"><span style="font-size: small;">export
MY_TWILIO_NUMBER=+1555-555-5555</span><o:p></o:p></span><br />
<br /></div>
so I can keep all the required information in one place for my development needs. <br /><br />Replace the instructions above based on your platform of choice and keep in mind that if you don’t set those values as environment variables then you’ll need to add that information in the twilio-sms/app.js file (approximately line 25) like showed below:<br /><br /><br /><div class="OBodyText">
<div class="OBodyText">
<span style="font-family: "Courier New";"><span style="font-size: small;">var metadata = {<o:p></o:p></span></span></div>
<div class="OBodyText">
<span style="font-family: "Courier New";"><span style="font-size: small;"><span style="mso-spacerun: yes;"> </span>waitForMoreResponsesMs: 500,<o:p></o:p></span></span></div>
<div class="OBodyText">
<span style="font-family: "Courier New";"><span style="font-size: small;"><span style="mso-spacerun: yes;"> </span>accountSid: ACXXXXXXXXXXXXXXXXXXXXXXX,
// Your Twilio Account SID<o:p></o:p></span></span></div>
<div class="OBodyText">
<span style="font-family: "Courier New";"><span style="font-size: small;"><span style="mso-spacerun: yes;"> </span>authToken: XXXXXXXXXXXXXXXXXXXXXXX, // Your
Twilio authToken<o:p></o:p></span></span></div>
<div class="OBodyText">
<span style="font-family: "Courier New";"><span style="font-size: small;"><span style="mso-spacerun: yes;"> </span>myTwilioNumber: ‘+1555-555-5555’, // Your
Twilio Phone Number<o:p></o:p></span></span></div>
<div class="OBodyText">
<span style="font-family: "Courier New";"><span style="font-size: small;"><span style="mso-spacerun: yes;"> </span>channelSecretKey:
XXXXXXXXXXXXXXXXXXXXXXX, // BOT Secret Key<o:p></o:p></span></span></div>
<div class="OBodyText">
<span style="font-family: "Courier New";"><span style="font-size: small;"><span style="mso-spacerun: yes;"> </span>channelUrl: XXXXXXXXXXXXXXXXXXXXXXX //
BOT Webhook URL<o:p></o:p></span></span></div>
<span style="font-size: small; letter-spacing: -0.05pt;">
<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:RelyOnVML/>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>ZH-TW</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
<w:UseFELayout/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
DefSemiHidden="false" DefQFormat="false" DefPriority="99"
LatentStyleCount="380">
<w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="3" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 9"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="header"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footer"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index heading"/>
<w:LsdException Locked="false" Priority="35" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of figures"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope return"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="line number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="page number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of authorities"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="macro"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="toa heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 5"/>
<w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Closing"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Signature"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="true"
UnhideWhenUsed="true" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Message Header"/>
<w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Salutation"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Date"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Block Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="FollowedHyperlink"/>
<w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Document Map"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Plain Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="E-mail Signature"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Top of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Bottom of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal (Web)"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Acronym"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Cite"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Code"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Definition"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Keyboard"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Preformatted"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Sample"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Typewriter"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Variable"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Table"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation subject"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="No List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Contemporary"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Elegant"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Professional"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Balloon Text"/>
<w:LsdException Locked="false" Priority="39" Name="Table Grid"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Theme"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Level 9"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" QFormat="true"
Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" QFormat="true"
Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" QFormat="true"
Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" QFormat="true"
Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" QFormat="true"
Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" QFormat="true"
Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" SemiHidden="true"
UnhideWhenUsed="true" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
<w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
<w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
<w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
<w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
<w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
<w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 6"/>
</w:LatentStyles>
</xml><![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Arial;
panose-1:2 11 6 4 2 2 2 2 2 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:"Courier New";
panose-1:2 7 3 9 2 2 5 2 4 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:"Cambria Math";
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:PMingLiU;
panose-1:2 2 5 0 0 0 0 0 0 0;
mso-font-charset:136;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-1610611969 684719354 22 0 1048577 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:8.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-fareast-font-family:PMingLiU;
color:black;}
p.OBodyText, li.OBodyText, div.OBodyText
{mso-style-name:"O\.BodyText";
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"O\.BodyText Char";
margin-top:0in;
margin-right:0in;
margin-bottom:6.0pt;
margin-left:0in;
line-height:13.0pt;
mso-pagination:widow-orphan;
mso-layout-grid-align:none;
text-autospace:none;
font-size:10.0pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-fareast-font-family:PMingLiU;
color:black;
mso-themecolor:text1;
letter-spacing:-.05pt;}
span.OBodyTextChar
{mso-style-name:"O\.BodyText Char";
mso-style-unhide:no;
mso-style-locked:yes;
mso-style-link:"O\.BodyText";
mso-ansi-font-size:10.0pt;
color:black;
mso-themecolor:text1;
letter-spacing:-.05pt;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:9.0pt;
mso-ansi-font-size:9.0pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-ascii-font-family:Arial;
mso-fareast-font-family:PMingLiU;
mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:9.0pt;
font-family:Arial;}
</style>
<![endif]-->
<!--StartFragment-->
<!--EndFragment--></span><br />
<div class="OBodyText">
<span style="font-size: small;"><span style="font-family: "Courier New"; letter-spacing: -0.05pt;"> </span><span style="font-family: "Courier New"; letter-spacing: -0.05pt;">};</span></span></div>
<div class="OBodyText">
<span style="font-size: small;"><span style="font-family: "Courier New"; letter-spacing: -0.05pt;"><br /></span></span></div>
Now that you have set up all the required information for you Node.js server you can go ahead and start the server using the following command:<br /><div class="MsoNormal" style="text-align: justify; text-justify: inter-ideograph;">
<span style="font-family: "Courier New"; font-size: 10.0pt; mso-bidi-font-size: 9.0pt;"><br /></span></div>
<div class="MsoNormal" style="text-align: justify; text-justify: inter-ideograph;">
<span style="font-family: "Courier New";"><span style="font-size: small;">>
node twilio-sms/index.js</span></span></div>
<br />With that, you have put together the final part of our configuration that allows the Intelligent Bot server communicate with your server.<br /><br /><div class="MsoNormal">
<span style="font-size: 10pt; letter-spacing: -0.05pt;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF9WUrjMaOGaA1zh92NGehA5sSd81rlRNfWk3R_DTSYW1gI2Y2i-VM3H81er9iIGJSH_yF4f4jBelJvLgQy8C_FvXrGc1nkBsIuPbPIiGId25PFCJuJDP6XQGFCtVYV2JwuMgxpjr7Fwk/s1600/008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="372" data-original-width="567" height="209" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF9WUrjMaOGaA1zh92NGehA5sSd81rlRNfWk3R_DTSYW1gI2Y2i-VM3H81er9iIGJSH_yF4f4jBelJvLgQy8C_FvXrGc1nkBsIuPbPIiGId25PFCJuJDP6XQGFCtVYV2JwuMgxpjr7Fwk/s320/008.png" width="320" /></a></div>
<div class="MsoNormal" style="text-align: justify; text-justify: inter-ideograph;">
<span style="font-size: 10pt; letter-spacing: -0.05pt;"><br /></span></div>
<h3>
<span style="mso-bookmark: _Toc371775598;">Testing the SMS Channel with Intelligent Bots</span></h3>
<div>
<span style="mso-bookmark: _Toc371775598;"><br /></span></div>
To test the scenario that you just put together, you can send a SMS message to your Twilio Number and have a conversation with your Bot. If you have setup the sample Financial Bot then you can try asking your bot “what’s my balance?” or “send a payment” to see how the bot responds to your requests.</div>
<div class="OBodyText">
<br /><div class="OBodyText" style="text-align: justify; text-justify: inter-ideograph;">
<o:p></o:p></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKhNOZZy1o30iQlFlL2v7eW8QlGQUV6DWkGT-Wu4Hx1SRy9o5lp9sgQS6om7oVcTknbIG0VlkMHAvOSNhLZTagmNY8N7OF-_TToQCM3Llxb6hEEff_mwDf2TKTx7ed3uS-q6-hHU9mF-k/s1600/001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="329" data-original-width="1050" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKhNOZZy1o30iQlFlL2v7eW8QlGQUV6DWkGT-Wu4Hx1SRy9o5lp9sgQS6om7oVcTknbIG0VlkMHAvOSNhLZTagmNY8N7OF-_TToQCM3Llxb6hEEff_mwDf2TKTx7ed3uS-q6-hHU9mF-k/s640/001.png" width="640" /></a></div>
<div class="OBodyText">
<br /></div>
<h3>
Conclusion</h3>
<div>
<br /></div>
<div>
<span style="font-size: 10pt; letter-spacing: -0.05pt;">The fact that SMS is available everywhere, doesn’t require the user to download anything and it has a very low entry barrier makes it very appealing for a Bot channel.</span></div>
<br />With very little effort, you can set up everything needed for your Bot to be integrated with SMS API-based providers and have that channel available to your bot quickly.<br /><br />Hopefully, this article provided a good idea on the major components, the necessary configuration on each level and the end to end functionality it provides to your bot project.<div class="OBodyText">
<o:p></o:p></div>
</div>
<div class="OBodyText" style="text-align: justify; text-justify: inter-ideograph;">
<o:p></o:p></div>
<div class="OBodyText" style="text-align: justify; text-justify: inter-ideograph;">
<o:p></o:p></div>
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Arial;
panose-1:2 11 6 4 2 2 2 2 2 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:"Cambria Math";
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:PMingLiU;
panose-1:2 2 5 0 0 0 0 0 0 0;
mso-font-charset:136;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-1610611969 684719354 22 0 1048577 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:8.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-fareast-font-family:PMingLiU;
color:black;}
h1
{mso-style-priority:3;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"Heading 1 Char";
mso-style-next:"O\.BodyText";
margin-top:16.0pt;
margin-right:0in;
margin-bottom:3.0pt;
margin-left:0in;
mso-add-space:auto;
line-height:13.0pt;
mso-line-height-rule:exactly;
mso-pagination:widow-orphan;
mso-outline-level:1;
font-size:11.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
color:red;
letter-spacing:.15pt;
mso-font-kerning:0pt;
font-weight:normal;}
h1.CxSpFirst
{mso-style-priority:3;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"Heading 1 Char";
mso-style-next:"O\.BodyText";
mso-style-type:export-only;
margin-top:16.0pt;
margin-right:0in;
margin-bottom:0in;
margin-left:0in;
margin-bottom:.0001pt;
mso-add-space:auto;
line-height:13.0pt;
mso-line-height-rule:exactly;
mso-pagination:widow-orphan;
mso-outline-level:1;
font-size:11.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
color:red;
letter-spacing:.15pt;
mso-font-kerning:0pt;
font-weight:normal;}
h1.CxSpMiddle
{mso-style-priority:3;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"Heading 1 Char";
mso-style-next:"O\.BodyText";
mso-style-type:export-only;
margin:0in;
margin-bottom:.0001pt;
mso-add-space:auto;
line-height:13.0pt;
mso-line-height-rule:exactly;
mso-pagination:widow-orphan;
mso-outline-level:1;
font-size:11.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
color:red;
letter-spacing:.15pt;
mso-font-kerning:0pt;
font-weight:normal;}
h1.CxSpLast
{mso-style-priority:3;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"Heading 1 Char";
mso-style-next:"O\.BodyText";
mso-style-type:export-only;
margin-top:0in;
margin-right:0in;
margin-bottom:3.0pt;
margin-left:0in;
mso-add-space:auto;
line-height:13.0pt;
mso-line-height-rule:exactly;
mso-pagination:widow-orphan;
mso-outline-level:1;
font-size:11.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
color:red;
letter-spacing:.15pt;
mso-font-kerning:0pt;
font-weight:normal;}
span.Heading1Char
{mso-style-name:"Heading 1 Char";
mso-style-priority:3;
mso-style-unhide:no;
mso-style-locked:yes;
mso-style-link:"Heading 1";
mso-ansi-font-size:11.5pt;
color:red;
letter-spacing:.15pt;}
p.OBodyText, li.OBodyText, div.OBodyText
{mso-style-name:"O\.BodyText";
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"O\.BodyText Char";
margin-top:0in;
margin-right:0in;
margin-bottom:6.0pt;
margin-left:0in;
line-height:13.0pt;
mso-pagination:widow-orphan;
mso-layout-grid-align:none;
text-autospace:none;
font-size:10.0pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-fareast-font-family:PMingLiU;
color:black;
mso-themecolor:text1;
letter-spacing:-.05pt;}
span.OBodyTextChar
{mso-style-name:"O\.BodyText Char";
mso-style-unhide:no;
mso-style-locked:yes;
mso-style-link:"O\.BodyText";
mso-ansi-font-size:10.0pt;
color:black;
mso-themecolor:text1;
letter-spacing:-.05pt;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:9.0pt;
mso-ansi-font-size:9.0pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-ascii-font-family:Arial;
mso-fareast-font-family:PMingLiU;
mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
-->
</style></div>
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Arial;
panose-1:2 11 6 4 2 2 2 2 2 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:"Courier New";
panose-1:2 7 3 9 2 2 5 2 4 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:"Cambria Math";
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:PMingLiU;
panose-1:2 2 5 0 0 0 0 0 0 0;
mso-font-charset:136;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-1610611969 684719354 22 0 1048577 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:8.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-fareast-font-family:PMingLiU;
color:black;}
p.OBodyText, li.OBodyText, div.OBodyText
{mso-style-name:"O\.BodyText";
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"O\.BodyText Char";
margin-top:0in;
margin-right:0in;
margin-bottom:6.0pt;
margin-left:0in;
line-height:13.0pt;
mso-pagination:widow-orphan;
mso-layout-grid-align:none;
text-autospace:none;
font-size:10.0pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-fareast-font-family:PMingLiU;
color:black;
mso-themecolor:text1;
letter-spacing:-.05pt;}
span.OBodyTextChar
{mso-style-name:"O\.BodyText Char";
mso-style-unhide:no;
mso-style-locked:yes;
mso-style-link:"O\.BodyText";
mso-ansi-font-size:10.0pt;
color:black;
mso-themecolor:text1;
letter-spacing:-.05pt;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:9.0pt;
mso-ansi-font-size:9.0pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-ascii-font-family:Arial;
mso-fareast-font-family:PMingLiU;
mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
-->
</style><style>
<!--
/* Font Definitions */
@font-face
{font-family:Arial;
panose-1:2 11 6 4 2 2 2 2 2 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-536859905 -1073711037 9 0 511 0;}
@font-face
{font-family:"Cambria Math";
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:PMingLiU;
panose-1:2 2 5 0 0 0 0 0 0 0;
mso-font-charset:136;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:-1610611969 684719354 22 0 1048577 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:8.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-fareast-font-family:PMingLiU;
color:black;}
h1
{mso-style-priority:3;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"Heading 1 Char";
mso-style-next:"O\.BodyText";
margin-top:16.0pt;
margin-right:0in;
margin-bottom:3.0pt;
margin-left:0in;
mso-add-space:auto;
line-height:13.0pt;
mso-line-height-rule:exactly;
mso-pagination:widow-orphan;
mso-outline-level:1;
font-size:11.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
color:red;
letter-spacing:.15pt;
mso-font-kerning:0pt;
font-weight:normal;}
h1.CxSpFirst
{mso-style-priority:3;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"Heading 1 Char";
mso-style-next:"O\.BodyText";
mso-style-type:export-only;
margin-top:16.0pt;
margin-right:0in;
margin-bottom:0in;
margin-left:0in;
margin-bottom:.0001pt;
mso-add-space:auto;
line-height:13.0pt;
mso-line-height-rule:exactly;
mso-pagination:widow-orphan;
mso-outline-level:1;
font-size:11.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
color:red;
letter-spacing:.15pt;
mso-font-kerning:0pt;
font-weight:normal;}
h1.CxSpMiddle
{mso-style-priority:3;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"Heading 1 Char";
mso-style-next:"O\.BodyText";
mso-style-type:export-only;
margin:0in;
margin-bottom:.0001pt;
mso-add-space:auto;
line-height:13.0pt;
mso-line-height-rule:exactly;
mso-pagination:widow-orphan;
mso-outline-level:1;
font-size:11.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
color:red;
letter-spacing:.15pt;
mso-font-kerning:0pt;
font-weight:normal;}
h1.CxSpLast
{mso-style-priority:3;
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"Heading 1 Char";
mso-style-next:"O\.BodyText";
mso-style-type:export-only;
margin-top:0in;
margin-right:0in;
margin-bottom:3.0pt;
margin-left:0in;
mso-add-space:auto;
line-height:13.0pt;
mso-line-height-rule:exactly;
mso-pagination:widow-orphan;
mso-outline-level:1;
font-size:11.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
color:red;
letter-spacing:.15pt;
mso-font-kerning:0pt;
font-weight:normal;}
p.MsoHeader, li.MsoHeader, div.MsoHeader
{mso-style-priority:99;
mso-style-link:"Header Char";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
tab-stops:center 3.25in right 6.5in;
font-size:8.5pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-fareast-font-family:PMingLiU;
color:black;}
span.Heading1Char
{mso-style-name:"Heading 1 Char";
mso-style-priority:3;
mso-style-unhide:no;
mso-style-locked:yes;
mso-style-link:"Heading 1";
mso-ansi-font-size:11.5pt;
color:red;
letter-spacing:.15pt;}
p.OBodyText, li.OBodyText, div.OBodyText
{mso-style-name:"O\.BodyText";
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-link:"O\.BodyText Char";
margin-top:0in;
margin-right:0in;
margin-bottom:6.0pt;
margin-left:0in;
line-height:13.0pt;
mso-pagination:widow-orphan;
mso-layout-grid-align:none;
text-autospace:none;
font-size:10.0pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-fareast-font-family:PMingLiU;
color:black;
mso-themecolor:text1;
letter-spacing:-.05pt;}
span.OBodyTextChar
{mso-style-name:"O\.BodyText Char";
mso-style-unhide:no;
mso-style-locked:yes;
mso-style-link:"O\.BodyText";
mso-ansi-font-size:10.0pt;
color:black;
mso-themecolor:text1;
letter-spacing:-.05pt;}
span.HeaderChar
{mso-style-name:"Header Char";
mso-style-priority:99;
mso-style-unhide:no;
mso-style-locked:yes;
mso-style-link:Header;
mso-ansi-font-size:8.5pt;
color:black;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:9.0pt;
mso-ansi-font-size:9.0pt;
mso-bidi-font-size:9.0pt;
font-family:Arial;
mso-ascii-font-family:Arial;
mso-fareast-font-family:PMingLiU;
mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;}
@page WordSection1
{size:8.5in 11.0in;
margin:.5in .75in 1.0in .75in;
mso-header-margin:.3in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
-->
</style>Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-3925161735648561652017-09-20T15:47:00.001-07:002017-09-20T16:22:05.026-07:00How to Use Twilio Functions with the Phone Verification API<a href="https://www.twilio.com/functions" target="_blank">Twilio Functions</a>, a serverless environment to build and run Twilio applications, was released back in May 2017 and allows you to use Node.js code for handling communications events such as a text message, an incoming voice call or HTTP requests ensuring that you can leverage the benefits of the platform like security, no infrastructure requirements, auto-scaling, native integration with Twilio REST Helper Library in a familiar environment powered by Node (6.10.x).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3SyaaY6xHb7XAv1mra6IThVysJkG4dZIWDhae2xkIqOPbEW8eYRHVeeTt-O_VCO7WW2Pqgs75hUy3Y7XHI9YwwTxBABSHVA4UrL9Ha_f97wPFJ6zwBBP8vcrsmjB36Hmkojb0i5NKiIk/s1600/Screen_Shot_2017-07-13_at_12.55.39_PM.width-500.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3SyaaY6xHb7XAv1mra6IThVysJkG4dZIWDhae2xkIqOPbEW8eYRHVeeTt-O_VCO7WW2Pqgs75hUy3Y7XHI9YwwTxBABSHVA4UrL9Ha_f97wPFJ6zwBBP8vcrsmjB36Hmkojb0i5NKiIk/s640/Screen_Shot_2017-07-13_at_12.55.39_PM.width-500.png" width="640" /></a></div>
<br />
We could use a simple Hello World example to show you the power of Twilio Functions but instead we are going to use the <a href="https://www.twilio.com/verification" target="_blank">Twilio Phone Verification APIs (formerly known as Authy)</a> to demonstrate how easy to use and simple the Twilio Functions interfaces are.<br />
<br />
The <a href="https://www.twilio.com/verification" target="_blank">Twilio Phone Verification API</a> allows you to verify that a given phone number is accurate and it's in the user's possession. The Phone Verification API is absolutely simple to use, one API call to request the code to be sent to the user (SMS or Voice call) and one API call to verify the code provided by the user is valid.<br />
<a href="https://www.twilio.com/docs/api/authy/authy-phone-verification-api" target="_blank">The Phone Verification API</a> is deployed on top of Twilio's Super Network so it has global reach by default, it's localized in +35 languages and it offers lots of customizations from the length of the code to message template to be sent to the user.<br />
Typical use cases for the Phone Verification API are fraud prevention and transaction verification.<br />
<br />
To get started with our simple example here, head over to the <a href="https://www.twilio.com/console" target="_blank">Twilio Console</a> (<a href="https://www.twilio.com/console">https://www.twilio.com/console</a>), select All Products & Services on the left side menu and then Runtime under Developer Tools.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2BUq95-gv1cadm8OqGtu6HDbZSU4CXl_T7g6OqUPgLnxPvWQhgUHeK8kX7S5TAFZeYQkBjzWuaRyVFisxEfwXud9_8OTeBtANmXQmqzZH0ouLxRkbpH8wqpdzvDp0fGnZpDG78lltd20/s1600/Twilio_Cloud_Communications___Web_Service_API_for_building_Voice_and_SMS_Applications.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="74" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2BUq95-gv1cadm8OqGtu6HDbZSU4CXl_T7g6OqUPgLnxPvWQhgUHeK8kX7S5TAFZeYQkBjzWuaRyVFisxEfwXud9_8OTeBtANmXQmqzZH0ouLxRkbpH8wqpdzvDp0fGnZpDG78lltd20/s320/Twilio_Cloud_Communications___Web_Service_API_for_building_Voice_and_SMS_Applications.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
From the Runtime Overview page, select Functions.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifGZlENbyLwP3YlZakDhHTUr7fYQuMmHM27UK5h0MuyNouQ62YgY4UdK1koa87BVL6MiONLpdXzNxVmkjfh3QIJAHcbnDzPmha6J-lh4ziuA5atZk63xDUh6WYgjKAkGa6fM9-IP1Axoo/s1600/Twilio_Console_-_Runtime_Overview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifGZlENbyLwP3YlZakDhHTUr7fYQuMmHM27UK5h0MuyNouQ62YgY4UdK1koa87BVL6MiONLpdXzNxVmkjfh3QIJAHcbnDzPmha6J-lh4ziuA5atZk63xDUh6WYgjKAkGa6fM9-IP1Axoo/s640/Twilio_Console_-_Runtime_Overview.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Hit the plus (+) sign to create a new Function and select JSON Response. Click Create when you're ready.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimEMDeSQ5spLVVo3pHwg-rw4rLvJelU7BXTqT5B_elrKZ9POaAQBPSIjZmj5skSjW0H4fpcOhmX9138A4TT4SP3Q9T07RuvrL0qpy_nS_Hj8dprLJPKCZ_HSYYfpqtv8tjzQhZdBYLcJQ/s1600/Twilio_Console_-_Runtime_Overview+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="344" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimEMDeSQ5spLVVo3pHwg-rw4rLvJelU7BXTqT5B_elrKZ9POaAQBPSIjZmj5skSjW0H4fpcOhmX9138A4TT4SP3Q9T07RuvrL0qpy_nS_Hj8dprLJPKCZ_HSYYfpqtv8tjzQhZdBYLcJQ/s640/Twilio_Console_-_Runtime_Overview+2.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Your recently created Function has been created and it's ready to be developed.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTZDGljLQ0euRREVtkLWNoeNZ1LPm9vqM46WQOvsBZVzruI7R8FRAHkc4lBWV9u60ml-HP4RavWsBkjl9szGSBKk-wVEsYXwd8FfQUlmsFNBZudS3YrsbSxwqArF8RS-CZhitNU6QXxqw/s1600/Twilio_Console_-_Runtime_Overview+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTZDGljLQ0euRREVtkLWNoeNZ1LPm9vqM46WQOvsBZVzruI7R8FRAHkc4lBWV9u60ml-HP4RavWsBkjl9szGSBKk-wVEsYXwd8FfQUlmsFNBZudS3YrsbSxwqArF8RS-CZhitNU6QXxqw/s640/Twilio_Console_-_Runtime_Overview+3.png" width="513" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Give it a name, for example, <i>Phone Verification Start</i>, set the path to <i>/start </i>and add the following code to the Function:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<pre style="background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: "arial"; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;">1: exports.handler = function(context, event, callback) {
2: const request = require('request');
3: console.log("Phone Number: "+event.phone_number);
4: console.log("Country Code: "+event.country_code);
5: var options = {
6: url: 'https://api.authy.com/protected/json/phones/verification/start',
7: method: 'POST',
8: form: {'api_key':context.AUTHY_API_KEY,
9: 'country_code':event.country_code,
10: 'phone_number':event.phone_number,
11: 'via':'sms'}
12: }
13: request(options, function(error, response, body){
14: if(!error && response.statusCode == 200){
15: console.log("Phone Information: " + body);
16: }else{
17: console.log("ERROR: " + error);
18: }
19: callback(null, body);
20: })
21: }; </code></pre>
<br />
The code above will receive an HTTP request with two parameters (phone_number and country_code) showed on lines 3 and 4.<br />
These parameters are going to be available in the code in the <i>event </i>object upon the request.<br />
The <i>context</i> object will hold environment variables and that's what we are going to need next (line 8).<br />
Then, we are going to make a request to the Phone Verification API (line 13) and send the response back to the client using the <i>callback</i> object (line 19).<br />
<br />
You should end up with something similar to the following Twilio Function:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXdG4em50m1SozD7lpb9qbaqukXd0XiAk3xx1KgMGTKF529L7X-Dxmt4GZVzC1CjSCE-4lAulGTDd0bb1AbXp8BSDU47zVqFJ14rCbycuTnsewBNEK9FK83UlnFWUccSIpTInVawkvpaE/s1600/Twilio_Console_-_Runtime_Functions_Manage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXdG4em50m1SozD7lpb9qbaqukXd0XiAk3xx1KgMGTKF529L7X-Dxmt4GZVzC1CjSCE-4lAulGTDd0bb1AbXp8BSDU47zVqFJ14rCbycuTnsewBNEK9FK83UlnFWUccSIpTInVawkvpaE/s640/Twilio_Console_-_Runtime_Functions_Manage.png" width="600" /></a></div>
<br />
Press Save.<br />
<br />
Finally, we need an AUTHY_API_KEY (line 8 above) to make everything work.<br />
<br />
If you don't have an Authy application created already, go back to All Products & Services menu in the Twilio Console and then select Authy under Engagement Cloud.<br />
<br />
Create a new Authy application, give it a name, go to Settings and grab the Production API Key<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwPX5XrTQ8tDjFK-f6FRRHk8KdT0alcdX1_PtEMidDJnV162rXt1kQ99aIzaFPjB0rdmh8NMwhx6qT01ZhMkGMeawtO18mFr92mG5u3B-IOJczhzOiWdex4tuLyPsLJ8X-B_AR1Fyy6nQ/s1600/Twilio_Console_-_Authy_Dashboard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwPX5XrTQ8tDjFK-f6FRRHk8KdT0alcdX1_PtEMidDJnV162rXt1kQ99aIzaFPjB0rdmh8NMwhx6qT01ZhMkGMeawtO18mFr92mG5u3B-IOJczhzOiWdex4tuLyPsLJ8X-B_AR1Fyy6nQ/s640/Twilio_Console_-_Authy_Dashboard.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Go back to your Twilio Function, select Configure and then create a new Environment Variable called AUTHY_API_KEY. Set the value to be the Production API Key you grabbed above after creating the Authy application.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhnYTXGE8zn2Lpqjtb-1HHluDyoJCpTWNcAwQyEJfAaICsKMf3JppOc2AOH5KDMQQh6AkeHN66kTOlM-C71NIB99t7RjusWq6n-9mKlFXLPp0SF02w407TqBeV2lguVJJoKZuOwu4g6eI/s1600/Twilio_Console_-_Runtime_Functions_Configure.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhnYTXGE8zn2Lpqjtb-1HHluDyoJCpTWNcAwQyEJfAaICsKMf3JppOc2AOH5KDMQQh6AkeHN66kTOlM-C71NIB99t7RjusWq6n-9mKlFXLPp0SF02w407TqBeV2lguVJJoKZuOwu4g6eI/s640/Twilio_Console_-_Runtime_Functions_Configure.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Click on Manage, select your Twilio Function and copy the full URL where your Function is going to be available.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiygtexdC5erXQABEyhtk6nO2gu0iPiLkJ_QR_AI6I_wx5me7wffO2k67WzJk7Q3oaz7uyBFIIlXMFVmPdr_FVIq0G2ERm9A14e30c8a2Vhlito5fCX6CaHqyqk6v3oZ5gcOSFHKRDCBgs/s1600/Twilio_Console_-_Runtime_Functions_Manage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiygtexdC5erXQABEyhtk6nO2gu0iPiLkJ_QR_AI6I_wx5me7wffO2k67WzJk7Q3oaz7uyBFIIlXMFVmPdr_FVIq0G2ERm9A14e30c8a2Vhlito5fCX6CaHqyqk6v3oZ5gcOSFHKRDCBgs/s640/Twilio_Console_-_Runtime_Functions_Manage.png" width="640" /></a><br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
You are now ready to test the start of your Phone Verification Function.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Send an HTTP request to the URL you just copied, add the phone_number and country_code you wna to send the verification code to and your Twilio Account SID and Twilio Auth Token as the credentials.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
As an example, I'm using <a href="https://www.getpostman.com/" target="_blank">Postman</a> but you are free to use anything you want.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYgdt3idjkHLmAfJz3IKZX2iYysfix20WvjPn1SztI-kaet0XIaREbwmloAXMDus-2Bd0TWguajpdmdbGVc7Dt-42aV2uS1Gd1v-bTj0Owv5ycZRLoKdCRMy5TH4Bxcx5m3jcIlLa_n1Y/s1600/Postman.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYgdt3idjkHLmAfJz3IKZX2iYysfix20WvjPn1SztI-kaet0XIaREbwmloAXMDus-2Bd0TWguajpdmdbGVc7Dt-42aV2uS1Gd1v-bTj0Owv5ycZRLoKdCRMy5TH4Bxcx5m3jcIlLa_n1Y/s640/Postman.png" width="640" /></a><br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Send your request, and you should have a response from the Phone Verification API back to you as well as an SMS message sent to the phone number you specified.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
You can also watch the console messages under Logs section of the Twilio Function you have created. Here is an example of the expected output:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilzZVT_2vYT4fBqwPbH0zeNfEqmkao4g7sCYO5-OaxT4QoTpKLVUxeCLriTAQc18A8Oj5dD-qXVdecTaIr-PXqW_Fk_jglFRjCJHqrjPRYqmWeqpKjid18ibi8bFkaxgQ_oE7RTt3NvnM/s1600/Twilio_Console_-_Runtime_Functions_Manage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="148" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilzZVT_2vYT4fBqwPbH0zeNfEqmkao4g7sCYO5-OaxT4QoTpKLVUxeCLriTAQc18A8Oj5dD-qXVdecTaIr-PXqW_Fk_jglFRjCJHqrjPRYqmWeqpKjid18ibi8bFkaxgQ_oE7RTt3NvnM/s640/Twilio_Console_-_Runtime_Functions_Manage.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Now that you have received the verification code on your phone we need to verify that code against the Phone Verification API. To do that, let's go back to the Twilio Console, create another Function using the JSON Response template and call it <i>Phone Verification Check.</i></div>
<div class="separator" style="clear: both; text-align: left;">
<i><br /></i></div>
<div class="separator" style="clear: both; text-align: left;">
Set the PATH to <i>/check </i>and add the following code to the Function:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
<pre style="background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: "arial"; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;">1: exports.handler = function(context, event, callback) {
2: const request = require('request');
3: console.log("Phone Number: "+event.phone_number);
4: console.log("Country Code: "+event.country_code);
5: console.log("Verification Code: "+event.verification_code);
6: var options = {
7: url: 'https://api.authy.com/protected/json/phones/verification/check',
8: method:'GET',
9: form: {'api_key':context.AUTHY_API_KEY,
10: 'country_code':event.country_code,
11: 'phone_number':event.phone_number,
12: 'verification_code':event.verification_code}
13: }
14: request(options, function(error, response, body){
15: if(!error && response.statusCode == 200){
16: console.log("Phone Information: " + body);
17: }else{
18: console.log("ERROR: " + error);
19: }
20: callback(null, body);
21: })
22: };
</code></pre>
<br />
<br />
The code above will receive an HTTP request with three parameters (phone_number, country_code and verification_code) showed on lines 3, 4 and 5.<br />
These parameters are going to be available in the code in the <i>event </i>object upon the request.<br />
The <i>context</i> object will hold environment variables and that's what we are going to retrieve on line 9.<br />
Then, we are going to make a request to the Phone Verification API (line 14) and send the response back to the client using the <i>callback</i> object (line 20).<br />
<br />
You should end up with something similar to the following Twilio Function:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6gUnZ4genExbqg9miO7-leDDHWzXKHbNw0Vi9RyOVPH2po7Nbhn4Vwo0UQMCBmGRf6BNvY4puc12x6AqorNStSYvaSwREETne_U9b6Q4sin0ykOKF7uLsgF_YVxeLgWH7yHOI9Dlm15g/s1600/Twilio_Console_-_Runtime_Functions_Manage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="626" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6gUnZ4genExbqg9miO7-leDDHWzXKHbNw0Vi9RyOVPH2po7Nbhn4Vwo0UQMCBmGRf6BNvY4puc12x6AqorNStSYvaSwREETne_U9b6Q4sin0ykOKF7uLsgF_YVxeLgWH7yHOI9Dlm15g/s640/Twilio_Console_-_Runtime_Functions_Manage.png" width="640" /></a></div>
<br />
<br />
Press Save.<br />
<br />
Grab the <i>Phone Verification Check </i>Twilio Function URL:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcl3KonnUvfnQwl9cbJ1jKt_JfoHfWTa0VHz1OwS1aop7ecb3Oahje0rJrr-qNzI399NDa8VXb6-vw6weawDoK0aSkmFUxKuMjBjeemkgibQ4XgjCumRH97HmTEQ0OBxSNM32TafNRAeI/s1600/Twilio_Console_-_Runtime_Functions_Manage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcl3KonnUvfnQwl9cbJ1jKt_JfoHfWTa0VHz1OwS1aop7ecb3Oahje0rJrr-qNzI399NDa8VXb6-vw6weawDoK0aSkmFUxKuMjBjeemkgibQ4XgjCumRH97HmTEQ0OBxSNM32TafNRAeI/s640/Twilio_Console_-_Runtime_Functions_Manage.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
You are now ready to test your Phone Verification Function for checking the provided code.<br />
<br />
Go back to Postman or whatever testing tool you are using and then populate the phone_number, country_code and verification_code required parameters that you have received when calling the Phone Verification Start Function as well as the required credentials to invoke the Twilio REST call.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgBOGxF6zrfraE7Cm00uOZLanzeEJ7oHz8Y44awkKgpupDyRqWKOiH6bdfzzCuL2eyt4n0I-Hanna17jUdlDny9n_SWDfvcw2-aOJHugKGaDPurazVHC6JAlHMJCnpnv7VkqhUD4oSxc4/s1600/Postman_2.png" imageanchor="1"><img border="0" height="434" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgBOGxF6zrfraE7Cm00uOZLanzeEJ7oHz8Y44awkKgpupDyRqWKOiH6bdfzzCuL2eyt4n0I-Hanna17jUdlDny9n_SWDfvcw2-aOJHugKGaDPurazVHC6JAlHMJCnpnv7VkqhUD4oSxc4/s640/Postman_2.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Send the HTTP request and your Twilio Function (Phone Verification Check) should process that and respond with the Phone Verification API information about the scenario you just tested.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
You can also watch the log messages in the Logs section of your Twilio Function and you should see something similar to this:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-2xCSgrgqfzmaeU5ZKpk4RYa8cnTAzGmbgH0jhyphenhyphent8z_nKR2UUclMh8N9U72EaNRFzqkKSfoAm3gxlKdJHr6N0N7a6SkKMsbvcNoSOCsKhe3u6z2XZxyljh7NIEqGw-zl5uiZc_GaVu5A/s1600/Twilio_Console_-_Runtime_Functions_Manage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-2xCSgrgqfzmaeU5ZKpk4RYa8cnTAzGmbgH0jhyphenhyphent8z_nKR2UUclMh8N9U72EaNRFzqkKSfoAm3gxlKdJHr6N0N7a6SkKMsbvcNoSOCsKhe3u6z2XZxyljh7NIEqGw-zl5uiZc_GaVu5A/s640/Twilio_Console_-_Runtime_Functions_Manage.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
If you want to learn more about Twilio Functions I'd recommend watching the "<a href="https://www.youtube.com/watch?v=-hFnrnVCIsE" target="_blank">Building Serverless Twilio Apps with Twilio Functions</a>" recently presented at <a href="https://www.twilio.com/signal/london" target="_blank">Signal London</a>.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
There you have it... <a href="https://www.twilio.com/functions" target="_blank">Twilio Functions</a> interfacing with the <a href="https://www.twilio.com/verification" target="_blank">Twilio Phone Verification</a> API.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-55901332529829439912017-02-16T21:56:00.003-08:002017-02-16T21:57:05.949-08:00Authy 2FA Automated Testing FrameworkWhen developing a system that provides two-factor authentication capabilities it's always nice to see things working in an unit or functional testing. But, when you need to run automated integrated tests that doesn't seem to be an easy task as it might be dependent on other factors like sending and receiving SMS messages for example.<br />
<br />
With that in mind, we have created an extensible framework for you to test your applications being deployed with <a href="https://www.twilio.com/docs/api/authy/authy-totp" target="_blank">Authy OneCode</a> and <a href="https://www.twilio.com/docs/api/authy/authy-phone-verification-api" target="_blank">Authy Phone Verification</a> for the delivery of the one-time passwords and tokens via SMS.<br />
The framework can be found <a href="https://github.com/AuthySE/authy-testing-sample" target="_blank">here</a> and it's completely free and open source.<br />
<br />
Some of the tasks that the 2FA Automated Testing Framework is able to help you with are:<br />
<br />
<br />
<ul style="box-sizing: border-box; color: #333333; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;">
<li style="box-sizing: border-box;"><span style="font-family: inherit;">Acquire a new <a href="https://www.twilio.com/phone-numbers" style="box-sizing: border-box; color: #4078c0; text-decoration: none;">Twilio Number</a> (or use an existing one)</span></li>
</ul>
<ul style="box-sizing: border-box; color: #333333; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;">
<li style="box-sizing: border-box; margin-top: 0.25em;"><span style="font-family: inherit;">Setup a Webhook URL for the Twilio Number to forward the SMS messages generated and delivered by Authy OneCode and/or Authy Phone Verification. You can also set the framework to poll for SMS messages on your Twilio Number.</span></li>
</ul>
<ul style="box-sizing: border-box; color: #333333; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;">
<li style="box-sizing: border-box; margin-top: 0.25em;"><span style="font-family: inherit;">Register the Twilio Phone Number and create a new user with the Authy service</span></li>
</ul>
<ul style="box-sizing: border-box; color: #333333; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;">
<li style="box-sizing: border-box; margin-top: 0.25em;"><span style="font-family: inherit;">Use the Authy One Code and/or Authy Phone Verification API to trigger a SMS message delivery to the Twilio Number</span></li>
</ul>
<ul style="box-sizing: border-box; color: #333333; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;">
<li style="box-sizing: border-box; margin-top: 0.25em;"><span style="font-family: inherit;">Validate the received SMS message payload with the Authy OneCode and/or Authy Phone Verification APIs</span></li>
</ul>
<ul style="box-sizing: border-box; color: #333333; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;">
<li style="box-sizing: border-box; margin-top: 0.25em;"><span style="font-family: inherit;">Report if the token provided is valid or not</span></li>
</ul>
<ul style="box-sizing: border-box; color: #333333; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;">
<li style="box-sizing: border-box; margin-top: 0.25em;"><span style="font-family: inherit;">Release the Twilio Phone Number and remove the Authy user depending on how you configure the framework</span></li>
</ul>
<div>
<span style="color: #333333;">So, if you need to test your 2FA application using <a href="https://www.twilio.com/docs/api/authy/authy-totp" target="_blank">Authy OneCode</a> or <a href="https://www.twilio.com/docs/api/authy/authy-phone-verification-api" target="_blank">Authy Phone Verification</a> in an automated fashion this framework is for you.</span></div>
<div>
<span style="color: #333333;"><br /></span></div>
<div>
<span style="color: #333333;">Download or clone it from here: <a href="https://github.com/AuthySE/authy-testing-sample">https://github.com/AuthySE/authy-testing-sample</a> and start testing!</span></div>
Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-81444799858274821762016-12-02T11:50:00.000-08:002016-12-02T11:50:34.255-08:00Getting Started with Authy Two-Factor Authentication in Node.js and AngularJS<span style="background-color: white; font-family: , "blinkmacsystemfont" , "segoe ui" , "helvetica" , "arial" , sans-serif , "apple color emoji" , "segoe ui emoji" , "segoe ui symbol";">If you are planning to use Two-Factor Authentication in your application or getting started with the technology, this is definitely for you. </span><br />
<span style="background-color: white; font-family: , "blinkmacsystemfont" , "segoe ui" , "helvetica" , "arial" , sans-serif , "apple color emoji" , "segoe ui emoji" , "segoe ui symbol";"><br /></span>
<span style="background-color: white; font-family: , "blinkmacsystemfont" , "segoe ui" , "helvetica" , "arial" , sans-serif , "apple color emoji" , "segoe ui emoji" , "segoe ui symbol";">This simple implementation of a web application based in <a href="https://nodejs.org/en/" target="_blank">Node.js</a> and <a href="https://angularjs.org/" target="_blank">AngularJS</a> will show you how to use Two-Factor Authentication and protect assets. As a bonus feature we also have a simple <a href="https://www.twilio.com/docs/api/authy/authy-phone-verification-api" target="_blank">Phone Verification API</a> sample application that allows you to verify the user has the device on their possession.</span><br />
<span style="background-color: white; font-family: , "blinkmacsystemfont" , "segoe ui" , "helvetica" , "arial" , sans-serif , "apple color emoji" , "segoe ui emoji" , "segoe ui symbol";"><br /></span>
<span style="background-color: white; font-family: , "blinkmacsystemfont" , "segoe ui" , "helvetica" , "arial" , sans-serif , "apple color emoji" , "segoe ui emoji" , "segoe ui symbol";">To download or clone this sample application go to: </span><span style="font-family: , "blinkmacsystemfont" , "segoe ui" , "helvetica" , "arial" , sans-serif , "apple color emoji" , "segoe ui emoji" , "segoe ui symbol";"><a href="https://github.com/AuthySE/Authy-demo">https://github.com/AuthySE/Authy-demo</a></span><br />
<br />
To get started, make sure you have <a href="https://nodejs.org/en/download/" target="_blank">Node.js</a> and <a href="https://www.mongodb.com/download-center" target="_blank">MongoDB</a> installed and ready to go.<br />
<br />
Follow these instructions to get up and running:<br />
<ul>
<li>Clone the repo</li>
<li>Run <span style="font-family: Courier New, Courier, monospace;">npm install</span>
</li>
<li>Register for a <a href="https://www.authy.com/signup/" target="_blank">Twilio Account</a></li>
<li>Setup an Authy application via the <a href="https://twilio.com/console" target="_blank">Twilio Console</a></li>
<li>Copy the Authy API Key from the <a href="https://dashboard.authy.com/" target="_blank">Authy Dashboard</a> and save it in your demo.env file</li>
<li>Make sure your MongoDB instance is up and running</li>
<li>Run<span style="font-family: Courier New, Courier, monospace;"> node . </span>from the cloned repo to start the app</li>
</ul>
<div>
Have fun!</div>
<div>
<br /></div>
Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-63584195915237247792016-07-06T14:19:00.000-07:002016-07-06T14:19:41.156-07:00How to Prevent Sublime Text from Opening Files at StartupIf you don't like the Sublime Text default behavior of opening files from your last session, here is a little trick for you.<br />
<br />
Go to Preferences --> Settings - User and add the following settings:<br />
<br />
<pre style="background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: "arial"; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> "remember_open_files": false,
"hot_exit": false </code></pre>
<br />
Then, all you have to do is to restart Sublime Text one more time.<br />
<br />
This has been tested with Sublime Text 2 but it should work with ST 3 as well.Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-47163430860391390412016-04-29T07:10:00.000-07:002016-04-29T07:10:00.586-07:00Two-Factor Authentication with Authy REST APIs<div>
Ahoy! I've recently joined <a href="http://www.twilio.com/" target="_blank">Twilio</a> as a Solutions Architect in the <a href="http://www.twilio.com/authy" target="_blank">Authy</a> team and got my hands right away on the <a href="http://docs.authy.com/api_docs.html" target="_blank">REST APIs</a> we provide you to make it easier to get started with Two-Factor Authentication. Then, I put together a set of scripts that you can use to get started, test and play around with the API request and response.<br />
<br />
Feel free to clone the GitHub repo and provide feedback if you want.<br />
<br />
<a href="https://github.com/mjabali/Authy-API-Samples">https://github.com/mjabali/Authy-API-Samples</a><br />
<br />
Have fun!<br />
<br /></div>
Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-86019248402856480422015-11-04T11:55:00.003-08:002015-11-04T11:57:13.960-08:00Using the Ionic Framework with Oracle Mobile Cloud Services (MCS)One of the goals of the <a href="https://cloud.oracle.com/mobile" target="_blank">Oracle Mobile Cloud Service (MCS) </a> is to be client agnostic. So, you should be able to connect to your MCS hosted mobile backend from any client technology out there.<br />
<br />
If you are a JavaScript developer you might be familiar with the very popular <a href="http://ionicframework.com/" target="_blank">Ionic Framework</a>.<br />
<br />
Now, if you want to use an Ionic-based mobile app with the Oracle Mobile Cloud Service backend we have created a starter project for you that will show you how to perform the basic tasks and get you going in no time.<br />
<br />
Have a look or clone the following GIT repo: <a href="https://github.com/mjabali/ionic-starter-mcs">https://github.com/mjabali/ionic-starter-mcs</a><br />
<br />
The <a href="https://github.com/mjabali/ionic-starter-mcs/blob/master/README.md" target="_blank">Readme</a> file provides the instructions on how to get started with this sample.<br />
<br />
Have fun!Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-62885448139190734692015-10-21T11:21:00.000-07:002015-10-21T11:21:03.285-07:00Developing against Oracle Mobile Cloud Service (MCS) with Oracle Enterprise Pack for Eclipse (OEPE) and the Mobile Application Framework (MAF)<div style="text-align: justify;">
If you want to get started developing against the <a href="https://cloud.oracle.com/mobile" target="_blank">Oracle Mobile Cloud Service (MCS)</a> using the <a href="http://www.oracle.com/technetwork/developer-tools/eclipse/overview/index.html" target="_blank">Oracle Enterprise Pack for Eclipse (OEPE)</a> and the <a href="http://www.oracle.com/technetwork/developer-tools/maf/overview/index.html" target="_blank">Mobile Application Framework (MAF)</a> here is a quick demonstration for you to get a feel and see how quick you can get things done.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In the following 5 min. demonstration you'll see how to setup a new MAF application, connect to the Oracle Cloud from Eclipse, search for the mobile backend you're interested on, import the API definition to your app, generate the required data controls, populate a new page with data and deploy to the Android emulator.<br />
<br />
Have fun!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/ZKqjHN6ljs4" width="540"></iframe>
</div>
Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-3503710870523512342015-10-12T10:02:00.000-07:002015-10-12T10:02:37.040-07:00Getting Started with Oracle Enterprise Pack for Eclipse and Mobile Cloud Service APIsThere is a recent uploaded Oracle Mobile Cloud Service (MCS) tutorial that walks you through the process of connecting Oracle Enterprise Pack for Eclipse (OEPE) to the MCS APIs.<br />
<br />
There are 6 steps involved on this tutorial and you will:<br />
<ul>
<li>Start Eclipse and configure it to work with Oracle Mobile Application Framework (MAF)</li>
<li>Create a new mobile application, a new feature and a page to hold data</li>
<li>Connect the MAF-based application to an MCS instance</li>
<li>Generate the Java classes to support the exposed MCS REST API</li>
<li>Develop a new page by adding data and security settings</li>
<li>Package, deploy and test the application</li>
</ul>
<div>
The tutorial can be accessed here: <a href="http://docs.oracle.com/cd/E65774_01/tutorials/tut_mcs_oepe/tut_mcs_oepe_1.html" target="_blank">http://docs.oracle.com/cd/E65774_01/tutorials/tut_mcs_oepe/tut_mcs_oepe_1.html</a></div>
<div>
<br /></div>
<div>
Enjoy!</div>
<div>
<br /></div>
<br />
<br />Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-67572201332617526022015-06-22T15:07:00.002-07:002015-06-22T15:07:18.849-07:00Oracle Mobile Cloud Services - Mobile Application Accelerator (MAX) Demo<div style="direction: ltr; margin-bottom: 0pt; margin-top: 6.0pt; text-align: left; unicode-bidi: embed; vertical-align: baseline;">
<div style="text-align: justify;">
<span style="font-family: inherit;">To satisfy the many,<span style="vertical-align: baseline;"> many enterprise use cases for
mobility we need a new way to satisfy the demand without having to involve a
mobile app development project.</span>For many, the answer lies in
giving business-side workers the ability to mobilize their own business
processes. To address this requirement, Oracle is announcing the preview of
Mobile Application Accelerator (MAX) , a new capability in Oracle Mobile Cloud
Service. MAX is a cloud-based offering that brings mobile application
development capabilities to professionals with no previous software development
experience. With MAX, program managers, power users, and business professionals
can develop mobile applications quickly and visually through their web browser.</span></div>
<span style="font-family: inherit;"><br />Here are a few highlights of the Mobile Application Accelerator (MAX):</span></div>
<ul>
<li><span style="font-family: inherit;">Browser based development</span></li>
</ul>
<ul>
<li><span style="font-family: inherit;">No coding required</span></li>
</ul>
<ul>
<li><span style="font-family: inherit;">Easily map to business services</span></li>
</ul>
<ul>
<li><span style="font-family: inherit;">App Preview</span></li>
</ul>
<ul>
<li><span style="font-family: inherit;">Edit, Test and Publish from the web browser</span></li>
</ul>
<span style="font-family: inherit;">Have a look on the following demo what MAX looks like:</span><br />
<div style="direction: ltr; margin-bottom: 0pt; margin-top: 6.0pt; text-align: left; unicode-bidi: embed; vertical-align: baseline;">
</div>
<!--StartFragment-->
<br />
<div style="direction: ltr; margin-bottom: 0pt; margin-top: 6pt; unicode-bidi: embed; vertical-align: baseline;">
</div>
<!--EndFragment--><br />
<div style="direction: ltr; margin-bottom: 0pt; margin-top: 6.0pt; text-align: left; unicode-bidi: embed; vertical-align: baseline;">
</div>
<div>
<span style="color: #5f5f5f; font-family: Calibri;"><span style="font-size: 14.6666669845581px;"><b><br /></b></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/wCGLRX91qxI/0.jpg" frameborder="0" height="315" src="https://www.youtube.com/embed/wCGLRX91qxI?feature=player_embedded" width="540"></iframe></div>
<div>
<span style="color: #5f5f5f; font-family: Calibri;"><span style="font-size: 14.6666669845581px;"><b><br /></b></span></span></div>
Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-32391991666579378232015-04-03T09:36:00.003-07:002015-04-03T09:36:59.727-07:00How to Change Oracle JDeveloper 12c Font Size on Mac OS X<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: justify;">
There are a few references to this on the Internet but they all seem to describe the behavior of Oracle JDeveloper 11g and not the current version 12c.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
If you, like me, have been using Oracle JDeveloper 12c on a Mac OS X and wondered how can you change the IDE's font size then look no further :) Here are the instructions that worked for me:<br />
<br />
<ul style="text-align: start;">
<li style="text-align: justify;">After installing Oracle JDeveloper 12c go to the Help menu and Check for Updates. Install the necessary extensions to do the kind of work you want (i.e. Mobile Application Framework) and restart JDeveloper.</li>
<li style="text-align: justify;">You'll probably see an undesired font size after you restart JDeveloper like the picture below. </li>
</ul>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwVgPzE1UbW9_MU5u9jQ3PdFZAGs28EQxAdBrbiYGp_69eATH-SLZ5AWeaY-44TWjcnbaS3gRVI4NkMTu6vzzju9HOnTQvxmg0kKBChV7LvMaB9uezzJ052FuK7ZhxWn_MESQ2VYhlAhM/s1600/jdev01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwVgPzE1UbW9_MU5u9jQ3PdFZAGs28EQxAdBrbiYGp_69eATH-SLZ5AWeaY-44TWjcnbaS3gRVI4NkMTu6vzzju9HOnTQvxmg0kKBChV7LvMaB9uezzJ052FuK7ZhxWn_MESQ2VYhlAhM/s1600/jdev01.png" height="310" width="320" /></a></div>
<br /><ul>
<li style="text-align: justify;">Shut down JDeveloper and open a Terminal session.</li>
<li style="text-align: justify;">Go to /Users/<username>/.jdeveloper/system12.x.x.x.xx.xxxxxx.xxxx/o.jdeveloper.12.x.x.x.xx.xxxxxx.xxxx (i.e. /Users/Marcelo/.jdeveloper/system12.1.3.0.41.140521.1008/o.jdeveloper.12.1.3.1.41.150325.1239)</li>
<li style="text-align: justify;">Open the file ide.properties (you can use vi, nano, etc). Any text editor will do it.</li>
<li style="text-align: justify;">Find the line Ide.FontSize.Aqua=10. It should be something similar to:</li>
</ul>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ92QHkYm9jx_XNiM-CPm0GnCynd-OQmRt2wFhdCrgxWnQ7hUEaSpGAKhmL50GLJyFPldhAgtlGrCGbj8mkZ7Q74MoWC3V_lhqF4u2_7vg-xbuMMYshnYw9dvy9xxOF4j5FFbzOP0voYTE/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> # The default Ide.FontSize for Mac OS X.
Ide.FontSize.Aqua=10 </code></pre>
<ul>
<li style="text-align: justify;">Update the IDE's font size replacing the lines above with the following:</li>
</ul>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ92QHkYm9jx_XNiM-CPm0GnCynd-OQmRt2wFhdCrgxWnQ7hUEaSpGAKhmL50GLJyFPldhAgtlGrCGbj8mkZ7Q74MoWC3V_lhqF4u2_7vg-xbuMMYshnYw9dvy9xxOF4j5FFbzOP0voYTE/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> # The default Ide.FontSize for Mac OS X.
Ide.FontSize=10 </code></pre>
<ul>
<li style="text-align: justify;">Save and close the file. Start JDeveloper again and you should see the updated IDE's font size similar to the picture below.</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLil2vkiJoBw4AdhmBhizzgQ6q8VnaXCKJnq8vQ-ndxxsaX9yxpjualrDB_qmmNI_b7Srm3RBEIymuVSM9cMOtu7FtUVaJeMeNhLKZhkLxPdJMRFaKROK7j7LKo6_2KvGwqDiHfLzJdLg/s1600/jdev02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLil2vkiJoBw4AdhmBhizzgQ6q8VnaXCKJnq8vQ-ndxxsaX9yxpjualrDB_qmmNI_b7Srm3RBEIymuVSM9cMOtu7FtUVaJeMeNhLKZhkLxPdJMRFaKROK7j7LKo6_2KvGwqDiHfLzJdLg/s1600/jdev02.png" height="320" width="284" /></a></div>
<div style="text-align: justify;">
<br /></div>
Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-46980248325592253852015-02-04T14:41:00.001-08:002015-02-04T14:41:32.668-08:00Redirecting the log file in the Oracle Mobile Application FrameworkIf you have been developing with the Oracle Mobile Application Framework you already know that's not always easy to get debugging information out of the iOS Simulator or the Android Emulator.<br />
<br />
When you are running on the iOS Simulator you can now use the <i>-consoleRedirect</i> option and send the logging information to an easier location to find. Although you can do that in Apple's XCode, doing that in JDeveloper is quite straightforward.<br />
<br />
Open up your MAF project in JDeveloper, select Run >>> Choose Active Run Configuration >>> Manage Run Configurations<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6WiJklWfScTZwQ_QJVC_jrwhgesuoW-bNs9_lf5PIZY8El6MDegJxCQOIH5QphAEslTwy145sPm13QEvhlt5GcvVmBbuvbZjHCLmTPHIC9yfvhsCxEOXPiQqKayQu6iw9cY4eFbqtqKI/s1600/Choose_Active_Run_Configuration_and_Run.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6WiJklWfScTZwQ_QJVC_jrwhgesuoW-bNs9_lf5PIZY8El6MDegJxCQOIH5QphAEslTwy145sPm13QEvhlt5GcvVmBbuvbZjHCLmTPHIC9yfvhsCxEOXPiQqKayQu6iw9cY4eFbqtqKI/s1600/Choose_Active_Run_Configuration_and_Run.png" height="60" width="400" /></a></div>
<br />
Then, click Edit and select the Mobile Run Configuration<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqAaTXVzJqKFCKo2KqAutImMwLUaesGrcabItfc_af-8HzD_taymC0eofciUISj_IHP3leqMhtQfvEQ_ZQdIQDk8-56CTn13sbN_7kBqajpdKZsZVSR_lk8an-Q1EukNT2BFuJeKsui_w/s1600/Edit_Run_Configuration__Default__and_Project_Properties_-__Users_Marcelo_Work_Oracle_work_AMXProgrammingDemo_ApplicationController_ApplicationController_jpr.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqAaTXVzJqKFCKo2KqAutImMwLUaesGrcabItfc_af-8HzD_taymC0eofciUISj_IHP3leqMhtQfvEQ_ZQdIQDk8-56CTn13sbN_7kBqajpdKZsZVSR_lk8an-Q1EukNT2BFuJeKsui_w/s1600/Edit_Run_Configuration__Default__and_Project_Properties_-__Users_Marcelo_Work_Oracle_work_AMXProgrammingDemo_ApplicationController_ApplicationController_jpr.png" height="283" width="400" /></a></div>
<br />
Add the -consoleRedirect=<Any_File_You_Want> and select the Simulator configuration (if you have multiple ones configured). Click OK.<br />
<br />
You can now use the JDeveloper Run button (the little green triangle on the top menu) that will launch and run your app (you must use this approach to redirect the log file - that's a limitation but worth the price).<br />
<br />
This has been tested with the Oracle Mobile Application Framework 2.1.<br />
<br />
Happy Debugging!<br />
<br />
<br />
<br />Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-32654259533277116872015-01-19T12:19:00.002-08:002015-01-19T12:19:04.425-08:00Oracle Mobile Application Framework Getting Started Demo<div style="text-align: justify;">
Sometimes you just need a little push to get started on something and this is pretty much the goal of this post... to get you started with the Oracle Mobile Application Framework.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I'm a very visual person and no matter how much I read about a specific topic I prefer watching a demo or a tutorial and then I try to do something on my own.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
With that idea in mind I recorded a 3-part Oracle MAF demo that covers how to get started developing a mobile app, create a new feature (module), create and customize a task flow, invoke a REST Web Service as well as a SOAP Web Service, customize the request and response for the Web Service calls, create a data control, customize the MAF AMX pages, import a local HTML resource, configure a Remote URL based feature and deploy to the iOS Simulator.</div>
<br />
I hope you enjoy!<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/KZ3xZDDDFwc" width="540"></iframe>
</div>
<div class="separator" style="clear: both; text-align: center;">
Part 1: Getting Started with Oracle Mobile Application Framework</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/6_hwPxxmMuo" width="540"></iframe>
</div>
<div class="separator" style="clear: both; text-align: center;">
Part 2: Getting Started with Oracle Mobile Application Framework</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/JTHlZR5nPNg" width="540"></iframe>
</div>
<div class="separator" style="clear: both; text-align: center;">
Part 3: Getting Started with Oracle Mobile Application Framework</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
You can also watch these videos directly on Youtube: <a href="https://www.youtube.com/watch?v=KZ3xZDDDFwc&list=PLgz4ntw9X2fG_umbS1GcSIHZJs1jheUM_" target="_blank">https://www.youtube.com/watch?v=KZ3xZDDDFwc&list=PLgz4ntw9X2fG_umbS1GcSIHZJs1jheUM_</a></div>
<br />Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-43533492359075936182014-12-16T14:12:00.000-08:002014-12-16T14:12:45.636-08:00How to dial a phone number from Oracle Mobile Application Framework?<div style="background-color: white; color: #222222; font-family: 'Open Sans', arial, sans-serif; font-size: 13.3333339691162px; line-height: 20px; margin-bottom: 1em; margin-top: 1em;">
Sometimes you need to dial a number from within a mobile app and for my surprise that functionality was not directly exposed through the Oracle Mobile Application Framework APIs.</div>
<div style="background-color: white; color: #222222; font-family: 'Open Sans', arial, sans-serif; font-size: 13.3333339691162px; line-height: 20px; margin-bottom: 1em; margin-top: 1em;">
Oracle MAF provides a component called <b>Link (Go) </b>available under the General Controls palette that can be used for navigation between pages but it can also be used to enable linking to external URLs.</div>
<div style="background-color: white; color: #222222; font-family: 'Open Sans', arial, sans-serif; font-size: 13.3333339691162px; line-height: 20px; margin-bottom: 1em; margin-top: 1em;">
Using the <b>tel: </b>URL scheme with the <b>Link (Go) </b>component gives you the capability to dial phone numbers from within an Oracle Mobile Application Framework app. </div>
<div style="background-color: white; color: #222222; font-family: 'Open Sans', arial, sans-serif; font-size: 13.3333339691162px; line-height: 20px; margin-bottom: 1em; margin-top: 1em;">
So, here is how to do it:</div>
<div style="background-color: white; color: #222222; font-family: 'Open Sans', arial, sans-serif; font-size: 13.3333339691162px; line-height: 20px; margin-bottom: 1em; margin-top: 1em;">
On your MAF page, drag and drop a <b>Link (Go) </b>to the Panel Page and then set the URL in the component properties to the desired phone number. You can also use a Managed Bean to set the value if you want to do some processing before displaying the number to be called.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2QH5ggDptDM9IjxFrVAtigrFzgwNCq-_TKuEQJaEdRKqHly6hnWKNec0y277MZ28ywp3cXWrs2bO2sgl5DKaG7nC5RM9vVxxt2sBSfsb0NiQ-2V_6DgLL6wjLyY1X529pLtkK6zvQ87M/s1600/ph1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2QH5ggDptDM9IjxFrVAtigrFzgwNCq-_TKuEQJaEdRKqHly6hnWKNec0y277MZ28ywp3cXWrs2bO2sgl5DKaG7nC5RM9vVxxt2sBSfsb0NiQ-2V_6DgLL6wjLyY1X529pLtkK6zvQ87M/s1600/ph1.png" height="162" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">MAF Page source code after adding a Link (Go) component</td></tr>
</tbody></table>
<br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzH8zq4PR_3rKxTsc6mwvZtk7Juyl0bahjE2gCnDrg7IPE0J7Lbx6JOipTwL32LVEDJWl0i0TFWVAnNH8nKUQqNu8VkyZah8NcKzO8NXgmDz8jGHRGbIlBBtDHVYtAlYCBJ-Dqq9KajIk/s1600/ph2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzH8zq4PR_3rKxTsc6mwvZtk7Juyl0bahjE2gCnDrg7IPE0J7Lbx6JOipTwL32LVEDJWl0i0TFWVAnNH8nKUQqNu8VkyZah8NcKzO8NXgmDz8jGHRGbIlBBtDHVYtAlYCBJ-Dqq9KajIk/s1600/ph2.png" height="304" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Link (Go) component property panel</td></tr>
</tbody></table>
<br /><div style="background-color: white; color: #222222; font-family: 'Open Sans', arial, sans-serif; font-size: 13.3333339691162px; line-height: 20px; margin-bottom: 1em; margin-top: 1em;">
If you have mixed UI content on your Oracle MAF app and you want to get the same behavior on a HTML page you just need to add the following on your source code:</div>
<div style="background-color: white; margin-bottom: 1em; margin-top: 1em; text-align: center;">
<span style="color: #222222; font-family: Open Sans, arial, sans-serif;"><span style="font-size: 13px; line-height: 20px;"><b><a href="tel:+1-800-555-1234">call this number</a></b></span></span></div>
<div style="background-color: white; margin-bottom: 1em; margin-top: 1em; text-align: left;">
<span style="color: #222222; font-family: 'Open Sans', arial, sans-serif; font-size: 13px; line-height: 20px;">The sample code is also available here: </span><span style="background-color: transparent; font-size: 13px; line-height: 20px;"><span style="color: #222222; font-family: Open Sans, arial, sans-serif;"><a href="https://github.com/mjabali/PhoneSample">https://github.com/mjabali/PhoneSample</a></span></span><span style="color: #222222; font-family: 'Open Sans', arial, sans-serif; font-size: 13px; line-height: 20px;"> </span></div>
Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-62749092183023905482014-10-22T15:10:00.001-07:002014-10-22T15:10:52.513-07:00New Oracle Mobile Application Framework (MAF) Academy Course<h3 class="entry-title" style="background-color: white; font-weight: normal; line-height: 25px; margin: 0px 0px 3px; text-align: justify;">
<span style="font-size: small;">If you want to get into mobile application development with Oracle Mobile Application Framework (MAF), there is a new Oracle Developer Academy course available for you.</span></h3>
<div style="text-align: justify;">
<span style="font-size: small;">This new course includes an introduction to the Mobile Application Framework and teaches you how to design a MAF-based application, integrate with device capabilities, how to develop with web services and how to secure a MAF application.</span></div>
<div>
<span style="font-size: small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-size: small;">In this FREE two-hour interactive online course you'll learn and master the design, architecture, interoperability and security of Oracle Mobile Application Framework based applications.</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-size: small;">Hurry up and get yourself educated on the Oracle mobile application development framework.</span></div>
<div>
<span style="font-size: small;"><br /></span></div>
<div>
<span style="font-size: small;">Here is the link to the course: <a href="http://bit.ly/MAFCourse" target="_blank">http://bit.ly/MAFCourse</a></span></div>
<div>
<br /></div>
<div>
Have fun!</div>
<div class="entry-body" style="background-color: white; color: #555555; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 18px;">
</div>
Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-43704994668903809712014-10-09T11:58:00.000-07:002014-10-09T13:36:00.396-07:00Working with Device Information in the Oracle Mobile Application Framework<div style="text-align: justify;">
With the proliferation of new device models, form factors and operating systems, you may be thinking about the challenges to make your application work handle all of these different device properties information as there may be features that rely on specific characteristics or capabilities.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
As an example, how frustrating it would be for the user trying to use a mapping feature if the device doesn't support geolocation? Or, just getting the device screen height and width to make sure the content fits nicely and also dynamically present different things on the smaller / larger real state you have available. As a developer, it's your responsibility to make sure everything works and looks good on all devices (even though this is a hard task).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
The <a href="http://www.oracle.com/us/technologies/mobile/overview/index.html" target="_blank">Oracle Mobile Application Framework (MAF)</a> utilizes <a href="http://cordova.apache.org/" target="_blank">Apache Cordova</a> to provide access to device properties, SMS, Email, Contacts, Camera, Pictures/Photo Library, Geolocation, Accelerometer, Network, etc. that can either be accessed from Java, JavaScript and Expression Languages in order to support these requirements on your mobile application.</div>
<div style="text-align: justify;">
<br />
Additionally, the most common functionality (sendEmail, getPicture, createContact, sendSMS, etc) is exposed as a Data Control and can be simply dragged-and-dropped onto an AMX page reducing the need for coding calls to the API and constructing the necessary screens.<br />
<br /></div>
<div style="text-align: justify;">
The MAF <a href="http://docs.oracle.com/middleware/mobile201/mobile/develop/maf-data-controls.htm#CHDIBFIG" target="_blank">documentation</a> covers all in details but here is a list of what's currently supported by the framework (through the embedded Apache Cordova API):</div>
<ul>
<li>device.name</li>
<li>device.platform</li>
<li>device.version</li>
<li>device.os</li>
<li>device.model</li>
<li>device.phonegap</li>
</ul>
<div>
<ul>
<li>hardware.hasCamera</li>
<li>hardware.hasContacts</li>
<li>hardware.hasTouchScreen</li>
<li>hardware.hasGeolocation</li>
<li>hardware.hasAccelerometer</li>
<li>hardware.hasCompass</li>
<li>hardware.hasFileAccess</li>
<li>hardware.hasLocalStorage</li>
<li>hardware.hasMediaPlayer</li>
<li>hardware.hasMediaRecorder</li>
<li>hardware.networkStatus</li>
</ul>
</div>
<div>
<ul>
<li>hardware.screen.width</li>
<li>hardware.screen.height</li>
<li>hardware.screen.availableWidth</li>
<li>hardware.screen.availableHeight</li>
<li>hardware.screen.dpi</li>
<li>hardware.screen.diagonalSize</li>
<li>hardware.screen.scaleFactor</li>
</ul>
</div>
<br />
<div style="text-align: justify;">
Most of the property names are self-explanatory and I won't go into the details of each one of them but there is a demo available for you that shows how to get started and use some of the information that the framework provides. Screenshots on both platforms are available below so you can take a peek what it looks like:</div>
<div style="text-align: justify;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6BJDHEar6T9PGcdkhGzHtj-_CVP43g-aMUY8nvd7KUZjRDKpM_91pl6Y3reqR9aTWlrOJwo25e7szR0ivXe8udWBHPPWLdu91TOGdzpMjlLsidQXPaAkasEDYiE_aelXuRu_uhkg1Wwc/s1600/iOS+Simulator+Screen+shot+Oct+9,+2014,+11.51.17+AM.png" height="320" style="margin-left: auto; margin-right: auto;" width="212" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">iOS Simulator</td></tr>
</tbody></table>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVjomzhCoSeNtHVG5M-4O8jG9RnuPYr1NZOTKQMYvKBxiGJLt6jB672B0vYdfTa2vkYgWLM9zOwvLASneZjUfN76u9Ef2nbv0-Lfgem1kQGN7NBAL1QRC6v-wvU3tXtnb3t2YF0QVeoxY/s1600/5554_Intel_x86_KK_4_4.png" imageanchor="1" style="clear: right; display: inline !important; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVjomzhCoSeNtHVG5M-4O8jG9RnuPYr1NZOTKQMYvKBxiGJLt6jB672B0vYdfTa2vkYgWLM9zOwvLASneZjUfN76u9Ef2nbv0-Lfgem1kQGN7NBAL1QRC6v-wvU3tXtnb3t2YF0QVeoxY/s1600/5554_Intel_x86_KK_4_4.png" height="320" width="212" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Android Emulator</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
The demo itself uses EL (expression languages) to get the values and then present them in different ways on the AMX page including outputText, buttons, etc and also change the availability of the component based on the feature capability.<br />
<br />
<div style="text-align: justify;">
In summary, integrating the device features into a Oracle MAF application is easy and flexible, the declarative drag and drop support suits most of the use cases and you can get deeper control programatically.</div>
<br />
The source code is available here: <a href="https://github.com/mjabali/DeviceFeatures">https://github.com/mjabali/DeviceFeatures</a><br />
<br />
Have fun!<br />
<br />
<div class="page" title="Page 528">
<div class="layoutArea">
<div class="column">
<span style="font-family: 'Palatino'; font-size: 10.000000pt;"><br /></span>
<span style="font-family: 'Palatino'; font-size: 10.000000pt;"><br /></span>
</div>
</div>
</div>
Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-48949716705163244062014-08-04T09:57:00.000-07:002014-08-04T09:58:25.262-07:00Oracle Mobile Application Framework Hands-On Workshops<span style="font-family: Arial, Helvetica, sans-serif;">We are kicking off the US-based series of the Oracle Mobile Application Framework hands-on workshops that are going to cover the details of the platform and get you started with Oracle mobile development in a heartbeat. By the way, this is a FREE event!</span><br />
<div class=" " style="background-color: white; line-height: 18px; margin-bottom: 10px; margin-top: 10px; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif;">These are one-day workshops where you will get technical insights into the new product enhancements, see live demos, and best of all, get hands-on experience with mobile app development. </span></div>
<div class=" " style="background-color: white; line-height: 18px; margin-bottom: 10px; margin-top: 10px; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif;">All you need to do is register for the workshop, pre-install/configure the development environment (MAF) on your laptop and you will be ready to go (don’t worry, we’ll send you detailed instructions on how to do this as well as contact information, should you need it). We also plan to set this up so that you can BYOD to test out your completed app (details will be provided in the invite).</span></div>
<div class=" " style="background-color: white; line-height: 18px; margin-bottom: 10px; margin-top: 10px;">
<span style="font-family: Arial, Helvetica, sans-serif;">Here are the links for the currently scheduled workshops so that you can register. If you don’t see your city listed be sure to send me an <a href="mailto:marcelo.jabali@oracle.com">email</a> letting me know where you would like to see a workshop added – we’re working to prioritize additional workshops now and your input will be valuable.</span></div>
<div style="background-color: white; line-height: 18px; margin-bottom: 10px; margin-top: 10px;">
<span style="font-family: Arial, Helvetica, sans-serif;"> Click the city of interest below. </span></div>
<div class=" " style="background-color: white; line-height: 18px; margin-bottom: 6pt; margin-top: 10px;">
</div>
<br />
<ul style="background-color: white; line-height: 18px; margin: 10px 0px 10px 17px; padding: 0px;">
<li style="margin-left: 15px;"><a href="https://workshops.oracle.com/pls/apex/f?p=105:1:::NO::G_PASSED_EVENT:6516" target="_blank"><span style="line-height: 13.800000190734863px;"><span style="color: black; font-family: Arial, Helvetica, sans-serif;">San Diego: 8/19/14</span></span></a></li>
</ul>
<ul style="background-color: white; line-height: 18px; margin: 10px 0px 10px 17px; padding: 0px;">
<li style="margin-left: 15px;"><a href="https://workshops.oracle.com/pls/apex/f?p=105:1:::NO::G_PASSED_EVENT:6518" target="_blank"><span style="line-height: 13.800000190734863px;"><span style="color: black; font-family: Arial, Helvetica, sans-serif;">Cincinnati: 8/26/14</span></span></a></li>
</ul>
<ul style="background-color: white; line-height: 18px; margin: 10px 0px 10px 17px; padding: 0px;">
<li style="margin-left: 15px;"><a href="https://workshops.oracle.com/pls/apex/f?p=105:1:::NO::G_PASSED_EVENT:6520" target="_blank"><span style="line-height: 13.800000190734863px;"><span style="color: black; font-family: Arial, Helvetica, sans-serif;">Indianapolis: 8/26/14</span></span></a></li>
</ul>
<ul style="background-color: white; line-height: 18px; margin: 10px 0px 10px 17px; padding: 0px;">
<li style="margin-left: 15px;"><a href="https://workshops.oracle.com/pls/apex/f?p=105:1:::NO::G_PASSED_EVENT:6511" target="_blank"><span style="line-height: 13.800000190734863px;"><span style="color: black; font-family: Arial, Helvetica, sans-serif;">Tampa: 8/27/14</span></span></a></li>
</ul>
<ul style="background-color: white; line-height: 18px; margin: 10px 0px 10px 17px; padding: 0px;">
<li style="margin-left: 15px;"><a href="https://workshops.oracle.com/pls/apex/f?p=105:1:::NO::G_PASSED_EVENT:6514" target="_blank"><span style="line-height: 13.800000190734863px;"><span style="color: black; font-family: Arial, Helvetica, sans-serif;">Houston: 8/28/14</span></span></a></li>
</ul>
<ul style="background-color: white; line-height: 18px; margin: 10px 0px 10px 17px; padding: 0px;">
<li style="margin-left: 15px;"><a href="https://workshops.oracle.com/pls/apex/f?p=105:1:::NO::G_PASSED_EVENT:6522" target="_blank"><span style="line-height: 13.800000190734863px;"><span style="color: black; font-family: Arial, Helvetica, sans-serif;">Calgary: 9/16/14</span></span></a></li>
</ul>
<ul style="background-color: white; line-height: 18px; margin: 10px 0px 10px 17px; padding: 0px;">
<li style="margin-left: 15px;"><a href="https://workshops.oracle.com/pls/apex/f?p=105:1:::NO::G_PASSED_EVENT:6524" target="_blank"><span style="line-height: 13.800000190734863px;"><span style="color: black; font-family: Arial, Helvetica, sans-serif;">Kansas City: 10/28/14</span></span></a></li>
</ul>
<ul style="background-color: white; line-height: 18px; margin: 10px 0px 10px 17px; padding: 0px;">
<li style="margin-left: 15px;"><a href="https://workshops.oracle.com/pls/apex/f?p=105:1:::NO::G_PASSED_EVENT:6526" target="_blank"><span style="line-height: 13.800000190734863px;"><span style="color: black; font-family: Arial, Helvetica, sans-serif;">Omaha: 10/30/14</span></span></a></li>
</ul>
<ul style="background-color: white; line-height: 18px; margin: 10px 0px 10px 17px; padding: 0px;">
<li style="margin-left: 15px;"><a href="https://workshops.oracle.com/pls/apex/f?p=105:1:::NO::G_PASSED_EVENT:6528" target="_blank"><span style="line-height: 13.800000190734863px;"><span style="color: black; font-family: Arial, Helvetica, sans-serif;">Raleigh: 11/4/14</span></span></a></li>
</ul>
<ul style="background-color: white; line-height: 18px; margin: 10px 0px 10px 17px; padding: 0px;">
<li style="margin-left: 15px;"><a href="https://workshops.oracle.com/pls/apex/f?p=105:1:::NO::G_PASSED_EVENT:6530" target="_blank"><span style="line-height: 13.800000190734863px;"><span style="color: black; font-family: Arial, Helvetica, sans-serif;">Pittsburgh: 11/5/14</span></span></a></li>
</ul>
<ul style="background-color: white; line-height: 18px; margin: 10px 0px 10px 17px; padding: 0px;">
<li style="margin-left: 15px;"><span style="line-height: 13.800000190734863px;"><span style="font-family: Arial, Helvetica, sans-serif;"><a href="https://workshops.oracle.com/pls/apex/f?p=105:1:::NO::G_PASSED_EVENT:6532" target="_blank">Rochester: 11/6/14</a></span></span></li>
</ul>
<div>
<span style="line-height: 13.800000190734863px;"><br /></span></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="line-height: 18px;">See you at the workshop!</span></span><br />
<div>
<br /></div>
Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-42073143699903547142014-05-14T21:22:00.001-07:002014-05-14T21:22:56.618-07:00Mobile Emulation on Google ChromeIf you want to see what your web page will look like on a mobile device and also do debugging during development on your desktop, here is a very useful resource for you.<br />
<br />
Google Chrome allows you to emulate different mobile devices, screen resolutions, user agents and things like touch screen, geolocation and the accelerometer.<br />
<br />
To enable Mobile Emulation on Google Chrome, open the Developer Tools, go to Settings and enable "Show 'Emulation' view in the console drawer".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii-mgE40awbe9HjbS1HzMyodVL2PTW0LxOVz9cp9Yy5AW8mTYJcxovwhYJ0wrqAfd-IONQKIV7g_diZlrBRzqaxmnsaOsVkSW7yxgQqTTFxNYgaBgWf3fGPvqtKONGfKzqSpC_4A9XMtQ/s1600/New_Tab.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii-mgE40awbe9HjbS1HzMyodVL2PTW0LxOVz9cp9Yy5AW8mTYJcxovwhYJ0wrqAfd-IONQKIV7g_diZlrBRzqaxmnsaOsVkSW7yxgQqTTFxNYgaBgWf3fGPvqtKONGfKzqSpC_4A9XMtQ/s1600/New_Tab.png" height="137" width="320" /> </a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
Then, press 'Esc' to bring up the Developer Tools console drawer and finally select the Emulation tab. You'll find four sections: Device, Screen, User Agent and Sensors.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJkfm1RTxm7non68vCx8e_QSHfqVbJl36fmANct545uWMM2Z3fndsusWNXJ9yNX_PK1slFeC39ke1W2_FMD9TtUtNKhWnpDw-y14OomB4bZMDcRK9i5JQHJ7kMybkNd6wMlHbH-awTRiI/s1600/New_Tab2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJkfm1RTxm7non68vCx8e_QSHfqVbJl36fmANct545uWMM2Z3fndsusWNXJ9yNX_PK1slFeC39ke1W2_FMD9TtUtNKhWnpDw-y14OomB4bZMDcRK9i5JQHJ7kMybkNd6wMlHbH-awTRiI/s1600/New_Tab2.png" height="87" width="400" /> </a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
A quick test to understand this powerful feature can be done by simply navigating to <a href="http://www.google.com/">www.google.com</a>, select a device (i.e. Google Nexus 5) and then click Emulate. You'll be able to see that Google Chrome will show you the mobile optimized version of the Google website.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP1W4JXwDDOGeImo4HxaDxTuRO2nq77tJ5C0nNB8UDMUWDp1FdbSsmnrNoRfhwy16HJCBdIL_W2DhDzS1VDwQSvQgf6NFkr4EQT9HbLPoNHQRTOFwlgZk-UxfA_cFEc3QFeQ7I7eDodsA/s1600/marcelo_jabali_-_Google_Search.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP1W4JXwDDOGeImo4HxaDxTuRO2nq77tJ5C0nNB8UDMUWDp1FdbSsmnrNoRfhwy16HJCBdIL_W2DhDzS1VDwQSvQgf6NFkr4EQT9HbLPoNHQRTOFwlgZk-UxfA_cFEc3QFeQ7I7eDodsA/s1600/marcelo_jabali_-_Google_Search.png" height="400" width="225" /> </a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
To go back to the original settings, just hit Reset and you'll see the regular Google Chrome rendering of the web page.</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: left;">
Have fun playing with the other features!</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<br />Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-53939780006310911272014-04-29T13:53:00.001-07:002014-04-29T13:58:06.282-07:00Mac OS X Boot, Sleep and Wake Time and Date<div style="background-color: white; color: #303030; line-height: 1em; margin: 0px 0px 7px; orphans: 2; text-align: -webkit-auto; widows: 2;">
<div style="text-align: justify;">
<span style="font-family: inherit;">For several times I wondered what was the exact time my machine booted, woke up or slept. So, I did a little investigation to find out that's actually very simple to get those answers.</span></div>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Using the Mac OS X Terminal, you can run the following commands:</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"> </span><br />
<span style="font-family: inherit;">- For System Boot Time, use: <span style="font-family: "Courier New",Courier,monospace;"><b>systcl -a | grep kern.boottime</b></span></span><br />
<span style="font-family: inherit;"><br /></span></div>
You should get results similar to the picture below<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8gaSJ9aX5cY84b_12xVLjooe-94lrJGg52LoHwQJm1DoUQtVFvmim8JGPkTBEL2zgmsUgYMGmU39kKQ0oqc2VCwQUYKorVMSugyoiGC9mEyHbIYD5bbJYYyOt6YiEOJIWLHHoqDnsXdQ/s1600/boottime.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8gaSJ9aX5cY84b_12xVLjooe-94lrJGg52LoHwQJm1DoUQtVFvmim8JGPkTBEL2zgmsUgYMGmU39kKQ0oqc2VCwQUYKorVMSugyoiGC9mEyHbIYD5bbJYYyOt6YiEOJIWLHHoqDnsXdQ/s1600/boottime.png" height="30" width="400" /></a></div>
<br />
<br />
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
- For System Sleep Time, use: <span style="font-size: small;"><span style="font-family: "Courier New",Courier,monospace;"><b>sysctl -a | grep sleeptime</b></span></span></div>
<br />
You should get results similar to the picture below <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1kJbZcPPeIz4W8M7tct9G0fzggcLGEJgFmNfWtqA7q6YveHghC2tVJa6zC-L-3cm3_legHRs62GfF_CTu04-GzcQoxtd7ub3SjiMZ7_M0Q1UsfS0Q1h5OpCvziBMdCoP4AGEyTCSvhfE/s1600/sleeptime.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1kJbZcPPeIz4W8M7tct9G0fzggcLGEJgFmNfWtqA7q6YveHghC2tVJa6zC-L-3cm3_legHRs62GfF_CTu04-GzcQoxtd7ub3SjiMZ7_M0Q1UsfS0Q1h5OpCvziBMdCoP4AGEyTCSvhfE/s1600/sleeptime.png" height="17" width="400" /></a></div>
<br />
<br />
<br />
- For System Wake Time, use: <b><span style="font-family: "Courier New",Courier,monospace;">sysctl -a | grep waketime</span></b><br />
<br />
You should get results similar to the picture below<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4XYlGwrjGrVMBxF31FmujMEZUHmkS1K2mbBrrMvpARo0GLZ6VZLGUI4NENDYk_0zU2aa-Iw4bvZSy6EhZjOufnyZqQcmvKrW4nnRZjfCvb5es15wM_KwXKZR0Andhvsc_XXSKL1SX_X0/s1600/waketime.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4XYlGwrjGrVMBxF31FmujMEZUHmkS1K2mbBrrMvpARo0GLZ6VZLGUI4NENDYk_0zU2aa-Iw4bvZSy6EhZjOufnyZqQcmvKrW4nnRZjfCvb5es15wM_KwXKZR0Andhvsc_XXSKL1SX_X0/s1600/waketime.png" height="17" width="400" /></a></div>
<br />
<br />
<br />
<div style="text-align: justify;">
I typically use the "uptime" command (just type <b><span style="font-family: "Courier New",Courier,monospace;">uptime</span></b> on the Mac OS X Terminal) to find out how long my machine has been powered on.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lastly, you can get a short history of the machine boot using the "last reboot" command (just type <span style="font-family: "Courier New",Courier,monospace;"><b>last reboot</b></span> on the Mac OS X Terminal) to get the last three boots of the system.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
You can get the same information reviewing system log files but I think opening the terminal and typing a few commands easy enough to get the information you're looking for.</div>
Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-63207202204763861562014-04-18T15:10:00.000-07:002014-04-21T07:55:57.139-07:00Debugging Oracle ADF Mobile Applications - Part II've been involved with the Oracle Mobile Application Framework (a.k.a. ADF Mobile) lately and one of the things developers typically ask me during my talks is how to debug mobile applications created with the Oracle framework.<br />
<br />
To give you a little bit of context, the Oracle Mobile Application Framework does generate a hybrid app (native container + HTML/JavaScript) so standard debugging techniques apply here. The Oracle Mobile Application Framework has some other capabilities like running Java code on the device but that's a topic for another post.<br />
<br />
So, there is more than one way for debugging Oracle-generated (read hybrid) applications depending on the platform your are own and the target device you are working on. I'll try to isolate specific use cases on different posts so you don't get distracted with irrelevant stuff.<br />
<br />
The first one on the list is debugging Oracle Mobile Applications on iOS and Mac OS X.<br />
<br />
The ingredients are:<br />
<br />
- Oracle JDeveloper 11.1.2.4.0<br />
- XCode 5.1 (for the Simulator)<br />
- Apple Safari<br />
<br />
The setup is pretty straightforward and here is what you have to do:<br />
<br />
On the iOS Simulator (works on iOS +6.x), go to Settings > Safari > Advanced > and make sure Web Inspector is turned ON.<br />
<br />
Open up the Safari web browser and enable the Develop features. To do that, go to Preferences > Advanced and check the Show Develop menu in the menu bar.
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvQitZB6dfP8MM0-TpxWdGCFnHXjQ3gzCgcXS49zx-2nFMvsit_5LnxgS9-7NiB1w4a4L6G2zpEchy05-gSFYEzVdKxS1enoPUAVQwSOqFubjXbGi-ReAo729aqfHHuWJSXiEU1j8o8do/s1600/safari.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvQitZB6dfP8MM0-TpxWdGCFnHXjQ3gzCgcXS49zx-2nFMvsit_5LnxgS9-7NiB1w4a4L6G2zpEchy05-gSFYEzVdKxS1enoPUAVQwSOqFubjXbGi-ReAo729aqfHHuWJSXiEU1j8o8do/s400/safari.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
If you don't have an app deployed to the simulator yet, this is a good time to do so. Open up JDeveloper and deploy a simple application to the simulator (you can use the same approach with a real device but I'd rather start debugging on the simulator).</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Once you have the app installed/deployed and running on your iOS simulator go to Safari and select the Develop menu. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
You should see something similar to the picture below where you select the iPhone Simulator and then the name of your application (in my case - MyWeatherChannel). The below HTML pages are part of your application and highlighting one of them in the Safari menu will also highlight them on the iOS simulator.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0-PyBqKaXfjJhL_1l7kqSypP_CoumncXOn2Zs0xnzZrIqPpiIKdtKyodu3UrJ48AcweZAFzTo3Micqi6eJEuE5zkYKAf-Z4Q-e3jZh1gKGqds3-vlSSjRJbM9Hgp-qLpmy20JfYaHMHo/s1600/menu2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0-PyBqKaXfjJhL_1l7kqSypP_CoumncXOn2Zs0xnzZrIqPpiIKdtKyodu3UrJ48AcweZAFzTo3Micqi6eJEuE5zkYKAf-Z4Q-e3jZh1gKGqds3-vlSSjRJbM9Hgp-qLpmy20JfYaHMHo/s1600/menu2.png" height="105" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Selecting that highlighted page will bring Safari's Web Inspector up. Click on the first icon on the left (Resources) and that should show you the DOM for the page you selected.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLGjzjnXXriMpDY3pLAMXgmQbEod_rEkTzC04U_Omwss0SqVPTk0oaWFxebm0hUDdewKumBg3E9pbuiJhroI-Du4Cx-9JYqaQISADabJbk8VWnLSJKMFM7i6TcCa6RRNnpGUxv7sp96OM/s1600/inspector1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLGjzjnXXriMpDY3pLAMXgmQbEod_rEkTzC04U_Omwss0SqVPTk0oaWFxebm0hUDdewKumBg3E9pbuiJhroI-Du4Cx-9JYqaQISADabJbk8VWnLSJKMFM7i6TcCa6RRNnpGUxv7sp96OM/s1600/inspector1.png" height="236" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
At this point, you have many options but you may want to try enabling the Styles (click on the Styles button on the top menu) and make changes to the existing components on the page. That would give a good idea on what to look for when doing further debugging.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
You can also manipulate the DOM to change the name or size of the labels and see how they are going to look like.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghzKdfguLTDsO5PvOIhkjnH82uCphzHAb58DNNH6h3ReIOij0qz2QsVamVGrJZOen_q1a62e0PaRxEX7Gy_WVXFp2KTAYiSqUMfGagFkC8myP89xy56T9DU6Mz0NZLfl8tkIp9wjbHVz0/s1600/inspector2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghzKdfguLTDsO5PvOIhkjnH82uCphzHAb58DNNH6h3ReIOij0qz2QsVamVGrJZOen_q1a62e0PaRxEX7Gy_WVXFp2KTAYiSqUMfGagFkC8myP89xy56T9DU6Mz0NZLfl8tkIp9wjbHVz0/s1600/inspector2.png" height="228" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
What is also very interesting are the Timelines (click on the Timelines button on the top menu) where you can see how long it takes to make a network request, to load different components of your application and the details of JavaScript calls.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9KFb6Qpn-kLpZKl64Zu8wTyOM4T1BQopoNlrf4R0d8J1oON81H0B0Yfd5qMs0GDufjTqTfrO7l0P_cH-y-BXXKPbbtTWEoVTdGGoc2hxo0JVg_wYenfkmKCWBuFxOHqiQLVj_TMB4VFs/s1600/timelines.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9KFb6Qpn-kLpZKl64Zu8wTyOM4T1BQopoNlrf4R0d8J1oON81H0B0Yfd5qMs0GDufjTqTfrO7l0P_cH-y-BXXKPbbtTWEoVTdGGoc2hxo0JVg_wYenfkmKCWBuFxOHqiQLVj_TMB4VFs/s1600/timelines.png" height="287" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The last thing I'd like to show you here is the option to enable the Console (click on the Console button on the top menu) and you can many other things like triggering commands or watching the console output. You can also reload the application by pressing Cmd + R.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK9abJhw0c1DwN0U64K9poGk8D9YgP-XMldUXEeteIbTj5OdlhB6UodBtuCBtRfDckfW6Cv4klwLpF8F9rZetbZIF7vxCJ_Br2zBleP26nphbfJ_BunG5i_-6ky1Gu89vNOuCoJVyzcts/s1600/inspector3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK9abJhw0c1DwN0U64K9poGk8D9YgP-XMldUXEeteIbTj5OdlhB6UodBtuCBtRfDckfW6Cv4klwLpF8F9rZetbZIF7vxCJ_Br2zBleP26nphbfJ_BunG5i_-6ky1Gu89vNOuCoJVyzcts/s1600/inspector3.png" height="227" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
In the test above, I just fired an alert command (<b>alert("My Test Message");</b>) from the console and saw the JavaScript alert on the simulator.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
You can also change the current values (by also manipulating the DOM) in the app like the example below where the command: <b>document.getElementById("ot3").innerHTML=72;</b> changes the value of one the fields in the app.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjznjXU-ZVIro76he0yyUa69Ve_p2qsQdiUZk_HYwVEXkfmY_iGKmeB4zTG9MXM9PWP23dBgDW6Iy3lDJpAMlTTJMaxwBxBum6hCnlgyK-_sE_vtwYd9wKstEZS8ZSAEV5f0Av70E6SsCo/s1600/inspector4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjznjXU-ZVIro76he0yyUa69Ve_p2qsQdiUZk_HYwVEXkfmY_iGKmeB4zTG9MXM9PWP23dBgDW6Iy3lDJpAMlTTJMaxwBxBum6hCnlgyK-_sE_vtwYd9wKstEZS8ZSAEV5f0Av70E6SsCo/s1600/inspector4.png" height="227" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Happy debugging!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-84657810824338795172014-02-22T09:14:00.000-08:002014-02-26T10:37:21.091-08:00An Introduction to Oracle Mobile Suite<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
Here is a quick overview and introduction to the Oracle Mobile Suite. There are basically four areas that the Oracle Mobile Suite helps with your mobile strategy:<br />
<ul class="obullets">
<li><b>Development</b> of multichannel applications with Oracle Mobile Application Framework</li>
<li>Data and services <b>integration</b> across the enterprise with Oracle SOA Suite</li>
<li>Uniform information <b>security</b> across all layers of enterprise and mobile applications with Oracle Identity Management</li>
<li><b>Deployment</b> and management (cloud and on premise) of multichannel applications with Oracle Cloud Application Foundation</li>
</ul>
The video below shows the core capabilities of the Oracle Mobile Suite and how can you benefit of it.<br />
<br />
<!--
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dzborimfD-AOI1R6ZlZLOtAfddAeIJuJQ1HsTAJIFN-gAqqKvEvvqHYXUyY9MOQ7jdXuqaTgvgRw5jPurv0mw' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
-->
<iframe width="550" height="315" src="//www.youtube.com/embed/qw8DjvpdKfQ" frameborder="0" allowfullscreen></iframe>
<br />Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-65636153228509866072014-02-05T19:43:00.002-08:002014-02-05T19:45:25.396-08:00Getting Started with HTML5 WebSocket on Oracle WebLogic 12c<div style="text-align: justify;">
The current release of Oracle WebLogic (12.1.2) added support to HTML5 WebSocket (<a href="http://tools.ietf.org/html/rfc6455" target="_blank">RFC-6455</a>) providing the bi-directional communication over a single TCP connection between clients and servers. Unlike the HTTP communication model, client and server can send and receive data independently from each other. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
The use of WebSocket is becoming very popular for highly interactive web applications that depend on time critical data delivery, requirements for true bi-directional data flow and higher throughput.</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
To initiate the WebSocket connection, the client sends a handshake
request to the server. The connection is established if the handshake
request passes validation, and the server accepts the request. When a
WebSocket connection is established, a browser client can send data to a
WebLogic Server instance while simultaneously receiving data from that
server instance. </div>
<br />
The WebLogic server implementation has the following components:<br />
<ul>
<li> The WebSocket protocol implementation that handles connection upgrades and establishes and manages connections as well as exchanges with the client. The WebLogic server fully implements the WebSocket protocol using its existing threading and networking infrastructure.</li>
<li>The WebLogic WebSocket Java API, through the weblogic.websocket package, allows you to create WebSocket-based server side applications handling client connections, WebSocket messages, providing context information for a particular WebSocket connection and managing the request/response handshake. For additional information about the WebLogic WebSocket Java API interfaces and classes, visit the following resource: <a href="http://docs.oracle.com/middleware/1212/wls/WLPRG/websockets.htm#BABJEFFD" target="_blank">http://docs.oracle.com/middleware/1212/wls/WLPRG/websockets.htm#BABJEFFD</a></li>
<li>To declare a WebSocket endpoint you use the @WebSocket annotation that allow you to mark a class as a WebSocket listener that's ready to be exposed and handle events. The annotated class must implement the WebSocketListener interface or extend from the WebSocketAdapter class.</li>
</ul>
When you deploy the WebSocket-based application on WebLogic, you basically follow the same approach using the standard Java EE Web Application archives (WARs), either as standalone or WAR module. Either way, the WebLogic Application Server detects the @WebSocket annotation on the class and automatically establishes it as a WebSocket endpoint.<br />
<span style="font: 13.0px Arial;"> </span><br />
<span style="font: 13.0px Arial;">Here is a simple application that creates a WebSocket endpoint at the /echo/ location path, receives messages from the client and sends the same message back to the client.</span><br />
<span style="font: 13.0px Arial;"><br /></span>
<span style="font: 13.0px Arial;">import weblogic.websocket.WebSocketAdapter;<br />import weblogic.websocket.WebSocketConnection;<br />import weblogic.websocket.annotation.WebSocket;<br /><br />@WebSocket(pathPatterns={"/echo/*"})<br />public class Echo extends WebSocketAdapter{<br /><br />@Override<br /> public void onMessage(WebSocketConnection connection, String msg){<br /> try{<br /> connection.send(msg);<br /> }catch(IOException ioe){<br /> //Handle error condition<br /> }<br /> }</span><br />
<span style="font: 13.0px Arial;">}</span><br />
<span style="font: 13.0px Arial;"><br /></span>
<span style="font: 13.0px Arial;">On the client side, you typically use the WebSocket JavaScript API that most of the web browsers already support. </span><br />
<br />
<span style="font: 13.0px Arial;">
</span><br />
There are many samples out there that you can use to test the implementation above. One quick way of doing that is to navigate to <a href="http://www.websocket.org/echo.html" target="_blank">http://www.websocket.org/echo.html</a> and then point the location field to your WebLogic server. If you follow the sample available on <a href="https://github.com/mjabali/HelloWorld_WebSocket" target="_blank">https://github.com/mjabali/HelloWorld_WebSocket</a> then you'll end up with something like <a href="ws://localhost:7001/HelloWorld_WebSocket/echo/" target="_blank">ws://localhost:7001/HelloWorld_WebSocket/echo/</a> for the WebSocket server application.<br />
<br />
The sample client provided will be available at <a href="http://localhost:7001/HelloWorld_WebSocket/index.html">http://localhost:7001/HelloWorld_WebSocket/index.html</a> after the WebLogic deployment. See the README.md file on GitHub for additional instructions. <br />
<br />
<span style="font: 13.0px Arial;">Have fun!</span><br />
Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-28123326179467838782013-10-30T10:52:00.000-07:002013-10-30T10:58:23.542-07:00Getting Started with Oracle WebLogic 12c Dynamic Clusters<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="text-align: justify;">One of the new features introduced on <a href="http://www.oracle.com/us/products/middleware/cloud-app-foundation/weblogic/overview/index.html" target="_blank">WebLogic 12c (12.1.2)</a> is the ability to create and add new managed servers to a clustered environment dynamically. Dynamic Clusters make the task of creating additional servers for scaling out your environment really easy.</span><br />
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
You no longer have to configure managed servers individually but instead you configure a cluster with the number of servers you want and the server template or the domain default values. From there the system maps out managed servers with attributes inherited from the server template.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="http://docs.oracle.com/middleware/1212/wls/WLACH/pagehelp/Corecoreclustercreatedynamicclusterpagetitle.html" target="_blank">Dynamic clusters</a> can absolutely be a building block for elasticity in the cloud environment.</div>
<br />
<br />
To create a sample WebLogic Dynamic Cluster configuration, follow the steps below:<br />
<br />
- Download and install Oracle WebLogic Server 12.1.2 at <a href="http://www.oracle.com/technetwork/middleware/fusion-middleware/downloads/index.html">http://www.oracle.com/technetwork/middleware/fusion-middleware/downloads/index.html</a><br />
<br />
- Create a new domain called <i>mydomain. </i>If you need the instructions on how to create a WebLogic domain, go to: <a href="http://docs.oracle.com/middleware/1212/wls/WLDCW/newdom.htm#i1097775">http://docs.oracle.com/middleware/1212/wls/WLDCW/newdom.htm#i1097775</a><br />
<br />
- Start WebLogic Admin Server by running $WLS_HOME/user_projects/domains/my_domain/startWebLogic.sh | .bat where WLS_HOME is the directory where you have installed WebLogic<br />
<br />
- Navigate to WebLogic console at http://localhost:7001/console (default settings used here)<br />
<br />
- Under the domain structure, click on Machines and configure a new Machine called <i>myMachine</i> and the default settings.<br />
<br />
- Create the Dynamic Cluster. Click on Cluster under the Domain Structure menu<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSNXW-awtC2WgKOZh4aaNjxC7Gek18iCXCnV5rlqstSAGVrSI6FP7zZe3g1mhMOWiHuTkgHmtuFELGjAV7G6tDcqXJSPs0FF9XRAPHzTwzn6IAAA2Y-F0wCdTAkJYzDWjnrj4yLxx1RnU/s1600/Summary_of_Clusters_-_my_domain_-_WLS_Console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSNXW-awtC2WgKOZh4aaNjxC7Gek18iCXCnV5rlqstSAGVrSI6FP7zZe3g1mhMOWiHuTkgHmtuFELGjAV7G6tDcqXJSPs0FF9XRAPHzTwzn6IAAA2Y-F0wCdTAkJYzDWjnrj4yLxx1RnU/s1600/Summary_of_Clusters_-_my_domain_-_WLS_Console.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
- Click on the New button and then select Dynamic Cluster</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvsV4kW8NwJ01i8VZtxNSD9KdRLZ1ksMX8EggGguGdks3v41WDnXyrC2PFUa2VU1wxLQoo892Z3GoI0xIn8chcm1tXegCCPDaE84DIrzPSo4rEp-6Mr3YGnoSaA8Bymgn79ZBHk8FC2xM/s1600/Summary_of_Clusters_-_my_domain_-_WLS_Console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="174" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvsV4kW8NwJ01i8VZtxNSD9KdRLZ1ksMX8EggGguGdks3v41WDnXyrC2PFUa2VU1wxLQoo892Z3GoI0xIn8chcm1tXegCCPDaE84DIrzPSo4rEp-6Mr3YGnoSaA8Bymgn79ZBHk8FC2xM/s320/Summary_of_Clusters_-_my_domain_-_WLS_Console.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
- Specify the name for your Dynamic Cluster (i.e. myDynamicCluster) and press Next</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs0H71PAGqAtRMILK2tKjTX9yNnwHn2g30MyHlBTRi9sUEJlqFFXzb5VJxmmW0LQGExIVREh9pcKjGdvz7xCecVleLxoZ5G_6q7hQgkY4bP2G-MZ_Xfr6OHr6fuhMMTpvXrgXAf722d5U/s1600/Create_a_New_Dynamic_Cluster_-_my_domain_-_WLS_Console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs0H71PAGqAtRMILK2tKjTX9yNnwHn2g30MyHlBTRi9sUEJlqFFXzb5VJxmmW0LQGExIVREh9pcKjGdvz7xCecVleLxoZ5G_6q7hQgkY4bP2G-MZ_Xfr6OHr6fuhMMTpvXrgXAf722d5U/s400/Create_a_New_Dynamic_Cluster_-_my_domain_-_WLS_Console.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
- Select the number of dynamic server you want to configure, select the server name prefix and the template to be used when creating new servers. Click Next</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEims27GiOP-nXJpjQRnkpCoeOsZMNzkg2rYlzcGvhKC4uDz36bG2i5EZxDOvHygXv1y2nHyeN8rx22mUpGZkPj118OFX_V0smDyu4lld7xBMGAaQXafS7m5b5rftY6Erc9dEsgHnEzDnGs/s1600/Create_a_New_Dynamic_Cluster_-_my_domain_-_WLS_Console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEims27GiOP-nXJpjQRnkpCoeOsZMNzkg2rYlzcGvhKC4uDz36bG2i5EZxDOvHygXv1y2nHyeN8rx22mUpGZkPj118OFX_V0smDyu4lld7xBMGAaQXafS7m5b5rftY6Erc9dEsgHnEzDnGs/s400/Create_a_New_Dynamic_Cluster_-_my_domain_-_WLS_Console.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
- For this simple local configuration, specify the Machine Binding to be using the machine you created (myMachine) previously. Click Next</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhexo5hHNGWvGAz_Fe8nRWoEIPowajWxAR607hNr4fBVQO6amGOE6AZk1kKidKOMZMJ9Jyq4hIoltq6yXXx5MyQRGe_yiAiv9NZA3qQDnzKZHENXR2FzWgmXdF8fSw2tDr1itFDj0KSKuk/s1600/Create_a_New_Dynamic_Cluster_-_my_domain_-_WLS_Console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhexo5hHNGWvGAz_Fe8nRWoEIPowajWxAR607hNr4fBVQO6amGOE6AZk1kKidKOMZMJ9Jyq4hIoltq6yXXx5MyQRGe_yiAiv9NZA3qQDnzKZHENXR2FzWgmXdF8fSw2tDr1itFDj0KSKuk/s400/Create_a_New_Dynamic_Cluster_-_my_domain_-_WLS_Console.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<br />
- Select the listen port for the first server in the dynamic cluster and then the SSL lister port for the first server in the dynamic cluster. The subsequent servers will be assigned with an incremental port number. Click Next<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY-vHCYpFe0NdQXO07D2ONfoDnKM20iyZdfJpZ4P_KFv4dABt_KiJQB_JmBlmMj5MVyWgfnlFHsXxsOwWlu56vEIXmCMz4Q9v17jqbq5tHpzWM4CRalO16WM5VWbTh6Yz4Iipvn0dDZgs/s1600/Create_a_New_Dynamic_Cluster_-_my_domain_-_WLS_Console-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY-vHCYpFe0NdQXO07D2ONfoDnKM20iyZdfJpZ4P_KFv4dABt_KiJQB_JmBlmMj5MVyWgfnlFHsXxsOwWlu56vEIXmCMz4Q9v17jqbq5tHpzWM4CRalO16WM5VWbTh6Yz4Iipvn0dDZgs/s400/Create_a_New_Dynamic_Cluster_-_my_domain_-_WLS_Console-2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
- You will be presented with the summary of your New Dynamic Cluster configuration. Click Finish and it will be created for you.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDiMUI-bxt257O94Pnv8ZtIzQq7zCPapM9jSllnwDWb5Q6qP0DJSFkkZ7jm68zqVu1N5c-N3yYW_QvYR-ImJZxP37zs61IgQt85PtA_5n6uG0H4C8GD4ZLgFvEZ7z1ox6Gxqn15zJIseE/s1600/Create_a_New_Dynamic_Cluster_-_my_domain_-_WLS_Console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="367" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDiMUI-bxt257O94Pnv8ZtIzQq7zCPapM9jSllnwDWb5Q6qP0DJSFkkZ7jm68zqVu1N5c-N3yYW_QvYR-ImJZxP37zs61IgQt85PtA_5n6uG0H4C8GD4ZLgFvEZ7z1ox6Gxqn15zJIseE/s400/Create_a_New_Dynamic_Cluster_-_my_domain_-_WLS_Console.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
- The Summary of Clusters screens should show you the recently created Dynamic Cluster.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyMmdlelSaHLsuPwARCPGfGhkqGEsghX81SsVkyu8_sNqrbWbdq70u2HKJfTC90fSAGPNLmN2AA2tN6JuwFd7h_32wfzrvVu_6fB02OEWz6twF_n2IKgLSfdM92wtoMe7ZkP9e_YZkbpg/s1600/Summary_of_Clusters_-_my_domain_-_WLS_Console-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyMmdlelSaHLsuPwARCPGfGhkqGEsghX81SsVkyu8_sNqrbWbdq70u2HKJfTC90fSAGPNLmN2AA2tN6JuwFd7h_32wfzrvVu_6fB02OEWz6twF_n2IKgLSfdM92wtoMe7ZkP9e_YZkbpg/s400/Summary_of_Clusters_-_my_domain_-_WLS_Console-2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
- Click on <i>myDynamicCluster </i>and then go to the <i>Control </i>tab. </div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVd9uIjm6ZkgU_32gYFIN79guDC8jDm6G4dWgoH4UC5H5_xSYo9xYgdVLZlFt2mmEMTVuDOltcmTndJyAY4FVbzY8BXgOquUe2duXBS7Al7UwihToZvzoojjsTU73tfzxcPKI5L8HBeLg/s1600/Settings_for_myDynamicCluster_-_my_domain_-_WLS_Console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVd9uIjm6ZkgU_32gYFIN79guDC8jDm6G4dWgoH4UC5H5_xSYo9xYgdVLZlFt2mmEMTVuDOltcmTndJyAY4FVbzY8BXgOquUe2duXBS7Al7UwihToZvzoojjsTU73tfzxcPKI5L8HBeLg/s400/Settings_for_myDynamicCluster_-_my_domain_-_WLS_Console.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Before you can start any of the dynamic cluster members, make sure you have started the Node Manager on your machine with the following command: $WLS_HOME/user_projects/domains/my_domain/bin/startNodeManager.sh | .bat</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
As soon as the Node Manager is started, then go back to the WebLogic Admin Console, then select one of the servers in the cluster and then click Start. As a result of that operation, you should see the selected server up and running.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZB3_dLTfmIFaVU9z_m_JA3SHrnmsYJeAzwOMht5G4LWA3YrxzNKvOxzCnW61lnejF1N1maZiLzPGi-9AnxpoSx-8mproeQgpZtcBTpIj8QnTkV2zKBbOT86eAvyr6lzthwh6l_PnwiI/s1600/Settings_for_myDynamicCluster_-_my_domain_-_WLS_Console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZB3_dLTfmIFaVU9z_m_JA3SHrnmsYJeAzwOMht5G4LWA3YrxzNKvOxzCnW61lnejF1N1maZiLzPGi-9AnxpoSx-8mproeQgpZtcBTpIj8QnTkV2zKBbOT86eAvyr6lzthwh6l_PnwiI/s400/Settings_for_myDynamicCluster_-_my_domain_-_WLS_Console.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
- The next step here is to start the other servers configured in your cluster and as a bonus you can dynamically add new members to the dynamic cluster.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfg-DonnuLbQwpbVy0gXH8fzUduhunNrIHX5GU9OxvdVtsJUdVqd3NLjNKLM0YL1AiMoKH40OT0sS7LjygcJbbMMId-XO0RwZiLJbdt5QFIzCk8LUMcyZK8hn5Zba15MA-8avUGi2VGGA/s1600/Settings_for_myDynamicCluster_-_my_domain_-_WLS_Console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfg-DonnuLbQwpbVy0gXH8fzUduhunNrIHX5GU9OxvdVtsJUdVqd3NLjNKLM0YL1AiMoKH40OT0sS7LjygcJbbMMId-XO0RwZiLJbdt5QFIzCk8LUMcyZK8hn5Zba15MA-8avUGi2VGGA/s400/Settings_for_myDynamicCluster_-_my_domain_-_WLS_Console.png" width="400" /> </a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
I hope you found this sample tutorial and stay tuned for more!</div>
<br />Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.comtag:blogger.com,1999:blog-7850628466108183059.post-60277374466811222732013-10-22T14:27:00.001-07:002013-10-22T14:27:32.583-07:00Oracle Mobile Development Platform WorkshopIt has been almost five months since I started at Oracle and I have been busy working on a bunch of different technologies including <a href="http://www.oracle.com/us/products/middleware/cloud-app-foundation/weblogic/suite/overview/index.html" target="_blank">WebLogic</a>, <a href="http://www.oracle.com/us/products/middleware/cloud-app-foundation/coherence/overview/index.html" target="_blank">Coherence</a>, <a href="http://www.oracle.com/us/products/middleware/soa/service-bus/overview/index.html" target="_blank">Service Bus</a>, <a href="http://www.oracle.com/us/products/middleware/identity-management/api-gateway/overview/index.html" target="_blank">API Gateway</a> and obviously <a href="http://www.oracle.com/technetwork/developer-tools/adf-mobile/overview/index.html" target="_blank">Mobile</a>. If you are interested in the Oracle Mobile Development Platform, we are offering a free technical webinar on October 30th at 9:30 AM Pacific/10:30 AM Mountain. This is going to be a 90 minute technical presentation and demonstration where you will see how:<br />
<ul>
<li>You can develop Mobile Applications once and deploy natively to both iOS and Android</li>
<li>Resulting Applications allow your company’s employees and customers to securely access your internal packaged and custom applications from any device</li>
<li>Your Mobile Applications are written Java and HTML5, but leverage native device functionality such as GPS, Camera, Address Book and Accelerometer</li>
<li>The Resulting Applications look, feel, and perform as though they were natively developed, i.e., these are not just web applications running in a phone’s browser</li>
<li>Oracle is using the <a href="http://www.oracle.com/technetwork/developer-tools/adf-mobile/overview/index.html" target="_blank">Mobile Development Platform</a> for their own application delivery</li>
<li>Oracle’s Mobile Platform enables full lifecycle support of Mobile Applications covering their development, end-to-end security, service connectivity and integration, deployment, distribution and management</li>
</ul>
To attend the webinar, please contact me at: mqjabali [at] gmail dot com<br />
<br />
See you online...Marcelo Jabalihttp://www.blogger.com/profile/07390745824902391926noreply@blogger.com