[prev in list] [next in list] [prev in thread] [next in thread]
List: freeswitch-users
Subject: =?utf-8?Q?Getting=20started=20with=20SignalWire=E2=80=99s=20Node.js=20client=20library?=
From: The FreeSWITCH Team <marketing () cluecon ! com>
Date: 2019-07-16 13:19:35
Message-ID: 73f7dcee16e0a87ece76c372d.81136d1409.20190716131924.bd4e8b18c2.69454e82 () mail17 ! sea61 ! rsgsv ! net
[Download RAW message or body]
This is a multi-part message in MIME format
View this email in your browser \
(https://mailchi.mp/freeswitch.com/getting-started-with-signalwires-nodejs-client-library-565245?e=81136d1409)
Building an Advanced Communications System with SignalWire
In our previous blog post \
(https://signalwire.com/blogs/product/build-an-advanced-cloud-communications-system?ut \
m_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873) \
, we discussed why a cloud communications system works for most businesses and gave \
an overview on what tools you can use when creating your own cloud based phone system \
with SignalWire.
Today, we will dive into the Node.js code and demonstrate how to install, test, and \
run the code locally. We will build example applications that \
demonstrate how to:
* Create an Interactive Voice Response (IVR) menu using Text To Speech (TTS)
* Make and receive Voice over IP (VoIP) calls in a web browser
* Receive and respond to SMS messages
Requirements:
* A SignalWire account (signup for free here \
(https://signalwire.com/signup?utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAI \
L_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873) \
)
* A SignalWire phone number
* A Node.js host (You can host this yourself for development purposes but you will \
likely want something more robust than ngrok when you push to \
production)
* A familiarization with the SignalWire API documentation \
(https://docs.signalwire.com/?utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL \
_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873) \
.
Getting started with the Node.js code
In this example we will show you how to host the Node.js code locally. If you would \
to like have your code hosted in a production environment, a commercial Node.js host \
will need to be configured.
Installation
To get started, make sure that Homebrew \
(https://brew.sh/?utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_CAMPAIGN_20 \
19_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873) \
is installed locally, then, in a terminal window, install npm if it is not already \
installed: brew install node
Then, to view the code, navigate to \
https://github.com/cpetrosi/signalwire-ivr?utm_source=FreeSWITCH+News&utm_campaign=bd4 \
e8b18c2-EMAIL_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873. \
To install the repository: git clone \
https://github.com/cpetrosi/signalwire-ivr.git?utm_source=FreeSWITCH+News&utm_campaign \
=bd4e8b18c2-EMAIL_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873
cd signalwire-ivr
npm install
Testing
For testing purposes, download ngrok here \
(https://ngrok.com/download?utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_C \
AMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873) \
. In a new terminal window, navigate to the directory where ngrok is installed and \
run:
./ngrok http 3000
From this window, grab the second Forwarding URL (the one with https) and navigate to \
the index.js file from the signalwire-ivrrepository.
Here, replace all the \
http://190.102.98.249:3000?utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_CA \
MPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873 \
URLs with your Forwarding URL. In my case, it would be \
https://906e01e2.ngrok.io?utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_CAM \
PAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873.
Note: when you terminate and restart the ngrok session, these URLs will change and \
you will have to update them again in the index.js file.
Other Edits
In the index.js file, edit the project, token, and client variables with your own \
Project ID, Authentication Token, and SignalWire Space URL.
To receive transcription messages, edit the to variable to your phone number. Change \
the from variable to your SignalWire phone number. You can also edit the \
dial.number()'s to sample phone numbers you can use for testing.
Running
In the same terminal window where you installed all the dependencies (npm install), \
run:
node index.js
Note: If you make any changes to the index.js file from the repository, be sure to \
terminate and restart the node index.js command in terminal.
Building an IVR
To build an interactive voice response (IVR), you should start with a main menu to \
present all the different menu options (i.e. press 1 for help, etc.) to the caller.
In my example, the caller will hear the three options and choose which party they \
would like to be connected to. If no input is received, SignalWire will wait 10 \
seconds before asking the caller to make a selection or listen to the options again. \
If there is still no input, the call will end.
After you have created a main menu, you will need to point to a URL (in my case, \
mmv-response) where SignalWire will make a request to when the entering of digits or \
speech is completed.
app.get("/main-menu", (req, res, next) => {
var response = new RestClient.LaML.VoiceResponse();
var gather = response.gather({
action: 'http://190.102.98.249:3000/mmv-response',
method: 'GET',
input: 'dtmf speech',
hints: 'help, conference'
})
gather.say("Hello and welcome to SignalWire.");
gather.say("If you're a customer in need of some assistance, press 1, or say help.");
gather.say("If you have been invited to a conference, press 2, or say conference.");
gather.say("If you know your party's extension, you may dial it at any time.");
gather.pause({ length: 10 });
gather.say("Are you still there? Please make a selection or press star to hear the \
options again."); response.say("We did not receive an option. Goodbye.");
res.set('Content-Type', 'text/xml');
res.send(response.toString());
});
Then, in mmv-response, you need to tell SignalWire what to do when one of those \
options is selected. For example, if the caller pressed 1 or said "help", dial the \
number +1.650.382.2000.
If an incorrect option is pressed or said, the caller will hear this and the call \
will end:
"We received an incorrect option. Goodbye."
app.get("/mmv-response", (req, res, next) => {
var response = new RestClient.LaML.VoiceResponse();
var digits = req.query.Digits;
var speech = req.query.SpeechResult;
if (digits == "1" || speech == "help") {
var dial = response.dial();
dial.number('650-382-0000');
else { response.say('We received an incorrect option. Goodbye.'); }
res.set('Content-Type', 'text/xml');
res.send(response.toString());
});
Read the Rest (https://signalwire.com/blogs/product/building-an-advanced-communication \
s-system-part-2?utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873)
Check out ClueCon Weekly with Oleg Agafonov!
https://youtu.be/PnH7Uj69-n4?utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_ \
CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873
Oleg is a solution architect with more than 10 years of experience in software \
development. This episode of ClueCon Weekly presents an exciting journey from \
troubleshooting to monitoring or how VoIP network monitoring can simplify \
troubleshooting and shorten customer tickets resolution time. Find out how SIP3 \
turned from troubleshooting into monitoring platform, what were the biggest \
challenges along the way and what is the team behind the project planning ahead.
***
https://sip3.io?utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873 \
(https://www.youtube.com/redirect?v=PnH7Uj69-n4&event=video_description&q=https%3A%2F% \
2Fsip3.io&redir_token=oSYxlEhzpTjbildw71KC3Ipv4M58MTU2MzMxMTUwOEAxNTYzMjI1MTA4&utm_sou \
rce=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873) \
- Learn more about monitoring and troubleshooting with SIP3 \
https://github.com/sip3io?utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_CAM \
PAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873 \
(https://www.youtube.com/redirect?v=PnH7Uj69-n4&event=video_description&q=https%3A%2F% \
2Fgithub.com%2Fsip3io&redir_token=oSYxlEhzpTjbildw71KC3Ipv4M58MTU2MzMxMTUwOEAxNTYzMjI1 \
MTA4&utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873) \
- Checkout SIP3 opensource components \
https://twitter.com/agaf0x?utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_CA \
MPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873 \
(https://www.youtube.com/redirect?v=PnH7Uj69-n4&event=video_description&q=https%3A%2F% \
2Ftwitter.com%2Fagaf0x&redir_token=oSYxlEhzpTjbildw71KC3Ipv4M58MTU2MzMxMTUwOEAxNTYzMjI \
1MTA4&utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873) \
- Follow Oleg in Twitter
** Sunset Boat Tour by VoiceTel
------------------------------------------------------------
Join us for the VoiceTel boat tour at #ClueCon15 \
(https://twitter.com/search?q=%23ClueCon15&utm_source=FreeSWITCH+News&utm_campaign=bd4 \
e8b18c2-EMAIL_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873) \
! Toast the end of the day with a glass of wine, ice-cold beer or hand-crafted \
cocktail as the sun sets over Lake Michigan. Everyone at ClueCon is invited!
Join us for the Coder Games!
ClueCon's Coder Games is our unique version of a Hack-A-Thon! Join us for a day \
filled with games and fun for every attendee, included with your ClueCon admission. \
Whether you like to code your way to the prize or are a builder at heart, there is \
something for everyone. Our challenges range from coding to maker to trivia and \
everything in between. You can work as a team or go solo as you utilize the provided \
materials to build your creation and win prizes!
This year we are having four different challenges! Build your own self-driving car in \
our Maker Challenge, create something amazing using household objects in FreeCYCLED \
Hacks, code something cool with our APIs in the SignalWire Challenge, and compete in \
our ClueCon gameshow Man vs. Machine!
Can't make ClueCon but want to participate in Monday's Coder Games? This year we \
offer a la carte admission to the Coder Games! Admission includes lunch, swag and \
access to the Coder Games. For student rates are available, contact \
sharon@signalwire.com (mailto:sharon@signalwire.com) Learn More \
(https://www.cluecon.com/codergames/?utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c \
2-EMAIL_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873)
============================================================
** Twitter (https://twitter.com/?utm_source=FreeSWITCH+News&utm_campaign=bd4e8b18c2-EM \
AIL_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873)
** Facebook (https://www.facebook.com/freeswitch/?utm_source=FreeSWITCH+News&utm_campa \
ign=bd4e8b18c2-EMAIL_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873)
** Website (https://www.linkedin.com/company/freeswitch-solutions-llc/?utm_source=Free \
SWITCH+News&utm_campaign=bd4e8b18c2-EMAIL_CAMPAIGN_2019_07_15_09_03_COPY_01&utm_medium=email&utm_term=0_8de1531556-bd4e8b18c2-47000873)
Want to change how you receive these emails?
You can ** update your preferences \
(https://freeswitch.us13.list-manage.com/profile?u=73f7dcee16e0a87ece76c372d&id=8de1531556&e=81136d1409)
or ** unsubscribe from this list \
(https://freeswitch.us13.list-manage.com/unsubscribe?u=73f7dcee16e0a87ece76c372d&id=8de1531556&e=81136d1409&c=bd4e8b18c2)
.
[Attachment #3 (text/html)]
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" \
xmlns:o="urn:schemas-microsoft-com:office:office"> <head>
<!-- NAME: 1:2:1 COLUMN - FULL WIDTH -->
<!--[if gte mso 15]>
<xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
<![endif]-->
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Getting started with SignalWire's Node.js client library</title>
<style type="text/css">
p{
margin:10px 0;
padding:0;
}
table{
border-collapse:collapse;
}
h1,h2,h3,h4,h5,h6{
display:block;
margin:0;
padding:0;
}
img,a img{
border:0;
height:auto;
outline:none;
text-decoration:none;
}
body,#bodyTable,#bodyCell{
height:100%;
margin:0;
padding:0;
width:100%;
}
.mcnPreviewText{
display:none !important;
}
#outlook a{
padding:0;
}
img{
-ms-interpolation-mode:bicubic;
}
table{
mso-table-lspace:0pt;
mso-table-rspace:0pt;
}
.ReadMsgBody{
width:100%;
}
.ExternalClass{
width:100%;
}
p,a,li,td,blockquote{
mso-line-height-rule:exactly;
}
a[href^=tel],a[href^=sms]{
color:inherit;
cursor:default;
text-decoration:none;
}
p,a,li,td,body,table,blockquote{
-ms-text-size-adjust:100%;
-webkit-text-size-adjust:100%;
}
.ExternalClass,.ExternalClass p,.ExternalClass td,.ExternalClass div,.ExternalClass \
span,.ExternalClass font{ line-height:100%;
}
a[x-apple-data-detectors]{
color:inherit !important;
text-decoration:none !important;
font-size:inherit !important;
font-family:inherit !important;
font-weight:inherit !important;
line-height:inherit !important;
}
.templateContainer{
max-width:600px !important;
}
a.mcnButton{
display:block;
}
.mcnImage,.mcnRetinaImage{
vertical-align:bottom;
}
.mcnTextContent{
word-break:break-word;
}
.mcnTextContent img{
height:auto !important;
}
.mcnDividerBlock{
table-layout:fixed !important;
}
body,#bodyTable{
background-color:#286769;
}
#bodyCell{
border-top:0;
}
h1{
color:#202020;
font-family:Helvetica;
font-size:26px;
font-style:normal;
font-weight:bold;
line-height:125%;
letter-spacing:normal;
text-align:left;
}
h2{
color:#202020;
font-family:Helvetica;
font-size:22px;
font-style:normal;
font-weight:bold;
line-height:125%;
letter-spacing:normal;
text-align:left;
}
h3{
color:#202020;
font-family:Helvetica;
font-size:20px;
font-style:normal;
font-weight:bold;
line-height:125%;
letter-spacing:normal;
text-align:left;
}
h4{
color:#202020;
font-family:Helvetica;
font-size:18px;
font-style:normal;
font-weight:bold;
line-height:125%;
letter-spacing:normal;
text-align:left;
}
#templatePreheader{
background-color:#ebe4e4;
background-image:none;
background-repeat:no-repeat;
background-position:center;
background-size:cover;
border-top:0;
border-bottom:0;
padding-top:9px;
padding-bottom:9px;
}
#templatePreheader .mcnTextContent,#templatePreheader .mcnTextContent p{
color:#656565;
font-family:Helvetica;
font-size:12px;
line-height:150%;
text-align:left;
}
#templatePreheader .mcnTextContent a,#templatePreheader .mcnTextContent p a{
color:#656565;
font-weight:normal;
text-decoration:underline;
}
#templateHeader{
background-color:#ffffff;
background-image:none;
background-repeat:no-repeat;
background-position:center;
background-size:cover;
border-top:0;
border-bottom:0;
padding-top:9px;
padding-bottom:0;
}
#templateHeader .mcnTextContent,#templateHeader .mcnTextContent p{
color:#202020;
font-family:Helvetica;
font-size:16px;
line-height:150%;
text-align:left;
}
#templateHeader .mcnTextContent a,#templateHeader .mcnTextContent p a{
color:#007C89;
font-weight:normal;
text-decoration:underline;
}
#templateUpperBody{
background-color:#ceedee;
background-image:none;
background-repeat:no-repeat;
background-position:center;
background-size:cover;
border-top:0;
border-bottom:0;
padding-top:0;
padding-bottom:0;
}
#templateUpperBody .mcnTextContent,#templateUpperBody .mcnTextContent p{
color:#202020;
font-family:Helvetica;
font-size:16px;
line-height:150%;
text-align:left;
}
#templateUpperBody .mcnTextContent a,#templateUpperBody .mcnTextContent p a{
color:#007C89;
font-weight:normal;
text-decoration:underline;
}
#templateColumns{
background-color:#ceedee;
background-image:none;
background-repeat:no-repeat;
background-position:center;
background-size:cover;
border-top:0;
border-bottom:0;
padding-top:0;
padding-bottom:0;
}
#templateColumns .columnContainer .mcnTextContent,#templateColumns .columnContainer \
.mcnTextContent p{ color:#202020;
font-family:Helvetica;
font-size:16px;
line-height:150%;
text-align:left;
}
#templateColumns .columnContainer .mcnTextContent a,#templateColumns \
.columnContainer .mcnTextContent p a{ color:#007C89;
font-weight:normal;
text-decoration:underline;
}
#templateLowerBody{
background-color:#ceedee;
background-image:none;
background-repeat:no-repeat;
background-position:center;
background-size:cover;
border-top:0;
border-bottom:2px solid #EAEAEA;
padding-top:0;
padding-bottom:9px;
}
#templateLowerBody .mcnTextContent,#templateLowerBody .mcnTextContent p{
color:#202020;
font-family:Helvetica;
font-size:16px;
line-height:150%;
text-align:left;
}
#templateLowerBody .mcnTextContent a,#templateLowperBody .mcnTextContent p a{
color:#007C89;
font-weight:normal;
text-decoration:underline;
}
#templateFooter{
background-color:#024682;
background-image:none;
background-repeat:no-repeat;
background-position:center;
background-size:cover;
border-top:0;
border-bottom:0;
padding-top:9px;
padding-bottom:9px;
}
#templateFooter .mcnTextContent,#templateFooter .mcnTextContent p{
color:#656565;
font-family:Helvetica;
font-size:12px;
line-height:150%;
text-align:center;
}
#templateFooter .mcnTextContent a,#templateFooter .mcnTextContent p a{
color:#656565;
font-weight:normal;
text-decoration:underline;
}
@media only screen and (min-width:768px){
.templateContainer{
width:600px !important;
}
} @media only screen and (max-width: 480px){
body,table,td,p,a,li,blockquote{
-webkit-text-size-adjust:none !important;
}
} @media only screen and (max-width: 480px){
body{
width:100% !important;
min-width:100% !important;
}
} @media only screen and (max-width: 480px){
#bodyCell{
padding-top:10px !important;
}
} @media only screen and (max-width: 480px){
.columnWrapper{
max-width:100% !important;
width:100% !important;
}
} @media only screen and (max-width: 480px){
.mcnRetinaImage{
max-width:100% !important;
}
} @media only screen and (max-width: 480px){
.mcnImage{
width:100% !important;
}
} @media only screen and (max-width: 480px){
.mcnCartContainer,.mcnCaptionTopContent,.mcnRecContentContainer,.mcnCaptionBottomCon \
tent,.mcnTextContentContainer,.mcnBoxedTextContentContainer,.mcnImageGroupContentConta \
iner,.mcnCaptionLeftTextContentContainer,.mcnCaptionRightTextContentContainer,.mcnCapt \
ionLeftImageContentContainer,.mcnCaptionRightImageContentContainer,.mcnImageCardLeftTe \
xtContentContainer,.mcnImageCardRightTextContentContainer,.mcnImageCardLeftImageContentContainer,.mcnImageCardRightImageContentContainer{
max-width:100% !important;
width:100% !important;
}
} @media only screen and (max-width: 480px){
.mcnBoxedTextContentContainer{
min-width:100% !important;
}
} @media only screen and (max-width: 480px){
.mcnImageGroupContent{
padding:9px !important;
}
} @media only screen and (max-width: 480px){
.mcnCaptionLeftContentOuter .mcnTextContent,.mcnCaptionRightContentOuter \
.mcnTextContent{ padding-top:9px !important;
}
} @media only screen and (max-width: 480px){
.mcnImageCardTopImageContent,.mcnCaptionBottomContent:last-child \
.mcnCaptionBottomImageContent,.mcnCaptionBlockInner .mcnCaptionTopContent:last-child \
.mcnTextContent{ padding-top:18px !important;
}
} @media only screen and (max-width: 480px){
.mcnImageCardBottomImageContent{
padding-bottom:9px !important;
}
} @media only screen and (max-width: 480px){
.mcnImageGroupBlockInner{
padding-top:0 !important;
padding-bottom:0 !important;
}
} @media only screen and (max-width: 480px){
.mcnImageGroupBlockOuter{
padding-top:9px !important;
padding-bottom:9px !important;
}
} @media only screen and (max-width: 480px){
.mcnTextContent,.mcnBoxedTextContentColumn{
padding-right:18px !important;
padding-left:18px !important;
}
} @media only screen and (max-width: 480px){
.mcnImageCardLeftImageContent,.mcnImageCardRightImageContent{
padding-right:18px !important;
padding-bottom:0 !important;
padding-left:18px !important;
}
} @media only screen and (max-width: 480px){
.mcpreview-image-uploader{
display:none !important;
width:100% !important;
}
} @media only screen and (max-width: 480px){
h1{
font-size:22px !important;
line-height:125% !important;
}
} @media only screen and (max-width: 480px){
h2{
font-size:20px !important;
line-height:125% !important;
}
} @media only screen and (max-width: 480px){
h3{
font-size:18px !important;
line-height:125% !important;
}
} @media only screen and (max-width: 480px){
h4{
font-size:16px !important;
line-height:150% !important;
}
} @media only screen and (max-width: 480px){
.mcnBoxedTextContentContainer .mcnTextContent,.mcnBoxedTextContentContainer \
.mcnTextContent p{ font-size:14px !important;
line-height:150% !important;
}
} @media only screen and (max-width: 480px){
#templatePreheader{
display:block !important;
}
} @media only screen and (max-width: 480px){
#templatePreheader .mcnTextContent,#templatePreheader .mcnTextContent p{
font-size:14px !important;
line-height:150% !important;
}
} @media only screen and (max-width: 480px){
#templateHeader .mcnTextContent,#templateHeader .mcnTextContent p{
font-size:16px !important;
line-height:150% !important;
}
} @media only screen and (max-width: 480px){
#templateUpperBody .mcnTextContent,#templateUpperBody .mcnTextContent p{
font-size:16px !important;
line-height:150% !important;
}
} @media only screen and (max-width: 480px){
#templateColumns .columnContainer .mcnTextContent,#templateColumns .columnContainer \
.mcnTextContent p{ font-size:16px !important;
line-height:150% !important;
}
} @media only screen and (max-width: 480px){
#templateLowerBody .mcnTextContent,#templateLowerBody .mcnTextContent p{
font-size:16px !important;
line-height:150% !important;
}
} @media only screen and (max-width: 480px){
#templateFooter .mcnTextContent,#templateFooter .mcnTextContent p{
font-size:14px !important;
line-height:150% !important;
}
}</style></head>
<body style="height: 100%;margin: 0;padding: 0;width: 100%;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;background-color: #286769;"> <!--
-->
<center>
<table align="center" border="0" cellpadding="0" cellspacing="0" \
height="100%" width="100%" id="bodyTable" style="border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;height: 100%;margin: 0;padding: 0;width: \
100%;background-color: #286769;"> <tr>
<td align="center" valign="top" id="bodyCell" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;height: 100%;margin: 0;padding: 0;width: \
100%;border-top: 0;"> <!-- BEGIN TEMPLATE // -->
<table border="0" cellpadding="0" cellspacing="0" \
width="100%" style="border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tr>
<td align="center" valign="top" \
id="templatePreheader" style="background:#ebe4e4 none no-repeat \
center/cover;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;background-color: #ebe4e4;background-image: \
none;background-repeat: no-repeat;background-position: center;background-size: \
cover;border-top: 0;border-bottom: 0;padding-top: 9px;padding-bottom: 9px;"> <!--[if \
(gte mso 9)|(IE)]>
<table align="center" border="0" cellspacing="0" \
cellpadding="0" width="600" style="width:600px;"> <tr>
<td align="center" valign="top" width="600" \
style="width:600px;"> <![endif]-->
<table align="center" border="0" cellpadding="0" \
cellspacing="0" width="100%" class="templateContainer" style="border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;max-width: 600px !important;"> <tr>
<td valign="top" \
class="preheaderContainer" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><table border="0" cellpadding="0" \
cellspacing="0" width="100%" class="mcnTextBlock" style="min-width: \
100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody \
class="mcnTextBlockOuter"> <tr>
<td valign="top" class="mcnTextBlockInner" style="padding-top: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <!--[if mso]>
<table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" \
style="width:100%;"> <tr>
<![endif]-->
<!--[if mso]>
<td valign="top" width="600" style="width:600px;">
<![endif]-->
<table align="left" border="0" cellpadding="0" cellspacing="0" \
style="max-width: 100%;min-width: 100%;border-collapse: collapse;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
width="100%" class="mcnTextContentContainer"> <tbody><tr>
<td valign="top" class="mcnTextContent" style="padding: 0px \
18px 9px;text-align: center;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;word-break: break-word;color: \
#656565;font-family: Helvetica;font-size: 12px;line-height: 150%;">
<a \
href="https://mailchi.mp/freeswitch.com/getting-started-with-signalwires-nodejs-client-library-565245?e=81136d1409" \
target="_blank" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: \
normal;text-decoration: underline;">View this email in your browser</a> </td>
</tr>
</tbody></table>
<!--[if mso]>
</td>
<![endif]-->
<!--[if mso]>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody>
</table></td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<tr>
<td align="center" valign="top" id="templateHeader" \
style="background:#ffffff none no-repeat center/cover;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;background-color: \
#ffffff;background-image: none;background-repeat: no-repeat;background-position: \
center;background-size: cover;border-top: 0;border-bottom: 0;padding-top: \
9px;padding-bottom: 0;"> <!--[if (gte mso 9)|(IE)]>
<table align="center" border="0" cellspacing="0" \
cellpadding="0" width="600" style="width:600px;"> <tr>
<td align="center" valign="top" width="600" \
style="width:600px;"> <![endif]-->
<table align="center" border="0" cellpadding="0" \
cellspacing="0" width="100%" class="templateContainer" style="border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;max-width: 600px !important;"> <tr>
<td valign="top" class="headerContainer" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><table border="0" cellpadding="0" \
cellspacing="0" width="100%" class="mcnImageBlock" style="min-width: \
100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody \
class="mcnImageBlockOuter"> <tr>
<td valign="top" style="padding: 9px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
class="mcnImageBlockInner"> <table align="left" width="100%" border="0" \
cellpadding="0" cellspacing="0" class="mcnImageContentContainer" style="min-width: \
100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody><tr>
<td class="mcnImageContent" valign="top" \
style="padding-right: 9px;padding-left: 9px;padding-top: 0;padding-bottom: \
0;text-align: center;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;">
<img align="center" alt="" \
src="https://gallery.mailchimp.com/73f7dcee16e0a87ece76c372d/images/2a458e73-3ee4-48ff-add5-76481ed7c6ea.png" \
width="564" style="max-width: 1024px;padding-bottom: 0px;vertical-align: \
bottom;display: inline !important;border-radius: 0%;border: 0;height: auto;outline: \
none;text-decoration: none;-ms-interpolation-mode: bicubic;" class="mcnImage">
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody>
</table></td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<tr>
<td align="center" valign="top" \
id="templateUpperBody" style="background:#ceedee none no-repeat \
center/cover;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;background-color: #ceedee;background-image: \
none;background-repeat: no-repeat;background-position: center;background-size: \
cover;border-top: 0;border-bottom: 0;padding-top: 0;padding-bottom: 0;"> <!--[if \
(gte mso 9)|(IE)]>
<table align="center" border="0" cellspacing="0" \
cellpadding="0" width="600" style="width:600px;"> <tr>
<td align="center" valign="top" width="600" \
style="width:600px;"> <![endif]-->
<table align="center" border="0" cellpadding="0" \
cellspacing="0" width="100%" class="templateContainer" style="border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;max-width: 600px !important;"> <tr>
<td valign="top" class="bodyContainer" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><table border="0" cellpadding="0" \
cellspacing="0" width="100%" class="mcnDividerBlock" style="min-width: \
100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;table-layout: fixed \
!important;"> <tbody class="mcnDividerBlockOuter">
<tr>
<td class="mcnDividerBlockInner" style="min-width: 100%;padding: \
18px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <table class="mcnDividerContent" border="0" \
cellpadding="0" cellspacing="0" width="100%" style="min-width: 100%;border-top: 2px \
solid #443D3D;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody><tr>
<td style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <span></span>
</td>
</tr>
</tbody></table>
<!--
<td class="mcnDividerBlockInner" style="padding: 18px;">
<hr class="mcnDividerContent" style="border-bottom-color:none; \
border-left-color:none; border-right-color:none; border-bottom-width:0; \
border-left-width:0; border-right-width:0; margin-top:0; margin-right:0; \
margin-bottom:0; margin-left:0;" />
-->
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnTextBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody class="mcnTextBlockOuter">
<tr>
<td valign="top" class="mcnTextBlockInner" style="padding-top: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <!--[if mso]>
<table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" \
style="width:100%;"> <tr>
<![endif]-->
<!--[if mso]>
<td valign="top" width="600" style="width:600px;">
<![endif]-->
<table align="left" border="0" cellpadding="0" cellspacing="0" \
style="max-width: 100%;min-width: 100%;border-collapse: collapse;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
width="100%" class="mcnTextContentContainer"> <tbody><tr>
<td valign="top" class="mcnTextContent" style="padding-top: \
0;padding-right: 18px;padding-bottom: 9px;padding-left: 18px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;word-break: \
break-word;color: #202020;font-family: Helvetica;font-size: 16px;line-height: \
150%;text-align: left;">
<div style="text-align: center;"><span \
style="font-size:32px"><span style="color:#444444">Building an Advanced \
Communications System with SignalWire</span></span></div>
</td>
</tr>
</tbody></table>
<!--[if mso]>
</td>
<![endif]-->
<!--[if mso]>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnImageBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody class="mcnImageBlockOuter">
<tr>
<td valign="top" style="padding: 9px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
class="mcnImageBlockInner"> <table align="left" width="100%" border="0" \
cellpadding="0" cellspacing="0" class="mcnImageContentContainer" style="min-width: \
100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody><tr>
<td class="mcnImageContent" valign="top" \
style="padding-right: 9px;padding-left: 9px;padding-top: 0;padding-bottom: \
0;text-align: center;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;">
<img align="center" alt="" \
src="https://gallery.mailchimp.com/73f7dcee16e0a87ece76c372d/images/8ace794a-7173-48ad-a3b8-9070a28d3ad3.png" \
width="564" style="max-width: 1200px;padding-bottom: 0;display: inline \
!important;vertical-align: bottom;border: 0;height: auto;outline: \
none;text-decoration: none;-ms-interpolation-mode: bicubic;" class="mcnImage">
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnTextBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody class="mcnTextBlockOuter">
<tr>
<td valign="top" class="mcnTextBlockInner" style="padding-top: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <!--[if mso]>
<table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" \
style="width:100%;"> <tr>
<![endif]-->
<!--[if mso]>
<td valign="top" width="600" style="width:600px;">
<![endif]-->
<table align="left" border="0" cellpadding="0" cellspacing="0" \
style="max-width: 100%;min-width: 100%;border-collapse: collapse;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
width="100%" class="mcnTextContentContainer"> <tbody><tr>
<td valign="top" class="mcnTextContent" style="padding-top: \
0;padding-right: 18px;padding-bottom: 9px;padding-left: 18px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;word-break: \
break-word;color: #202020;font-family: Helvetica;font-size: 16px;line-height: \
150%;text-align: left;">
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">In our <a \
href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=3b404467b7&e=81136d1409" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;color: #007C89;font-weight: \
normal;text-decoration: underline;">previous blog post</a>, we discussed why a \
cloud communications system works for most businesses and gave an overview on what \
tools you can use when creating your own cloud based phone system with \
SignalWire.</p>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">Today, we will dive into the Node.js code and demonstrate how to install, \
test, and run the code locally. We will build example applications that demonstrate \
how to:</p>
<ul>
<li style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;">Create an Interactive Voice Response (IVR) menu \
using Text To Speech (TTS)</li> <li style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">Make and receive \
Voice over IP (VoIP) calls in a web browser</li> <li style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">Receive and \
respond to SMS messages</li> </ul>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">Requirements:</p>
<ul>
<li style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;">A SignalWire account (signup for free <a \
href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=4f249c7e78&e=81136d1409" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;color: #007C89;font-weight: \
normal;text-decoration: underline;">here</a>)</li> <li style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">A SignalWire \
phone number</li> <li style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;">A Node.js host (You can host this yourself for \
development purposes but you will likely want something more robust than ngrok when \
you push to production)</li> <li style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">A familiarization \
with the <a href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=512bc05bcc&e=81136d1409" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;color: #007C89;font-weight: \
normal;text-decoration: underline;">SignalWire API documentation</a>.</li> </ul>
<h5 style="display: block;margin: 0;padding: 0;"><br>
<span style="font-size:18px"><strong>Getting started with the Node.js \
code</strong></span></h5>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">In this example we will show you how to host the Node.js code locally. If you \
would to like have your code hosted in a production environment, a commercial \
Node.js host will need to be configured.<br> <br>
<span style="font-size:18px"><strong>Installation</strong></span></p>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">To get started, make sure that <a \
href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=fe5b039096&e=81136d1409" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;color: #007C89;font-weight: \
normal;text-decoration: underline;">Homebrew</a> is installed locally, then, in \
a terminal window, install npm if it is not already installed:</p>
<pre><span style="color:#777777">brew install node</span></pre>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">Then, to view the code, navigate to <a \
href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=f5c074afab&e=81136d1409" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;color: #007C89;font-weight: \
normal;text-decoration: underline;">https://github.com/cpetrosi/signalwire-ivr</a>. \
To install the repository:</p>
<pre><span style="color:#777777">git clone \
https://github.com/cpetrosi/signalwire-ivr.git cd signalwire-ivr
npm install</span>
<span style="font-size:18px"><strong>Testing</strong></span></pre>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">For testing purposes, download ngrok <a \
href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=315c86d0d7&e=81136d1409" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;color: #007C89;font-weight: \
normal;text-decoration: underline;">here</a>. In a new terminal window, navigate to \
the directory where ngrok is installed and run:</p>
<pre><span style="color:#777777">./ngrok http 3000</span></pre>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">From this window, grab the second <strong>Forwarding</strong> URL \
(the one with https) and navigate to the <em>index.js</em> file from \
the <em>signalwire-ivr</em>repository.<br> <br>
Here, replace all the <strong>http://190.102.98.249:3000</strong> URLs with \
your <strong>Forwarding </strong>URL. In my case, it would \
be <strong>https://906e01e2.ngrok.io</strong>.</p>
<blockquote style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><strong>Note:</strong> when you terminate \
and restart the ngrok session, these URLs will change and you will have to update \
them again in the index.js file.</blockquote>
<h5 style="display: block;margin: 0;padding: 0;"><br>
<span style="font-size:18px"><strong>Other Edits</strong></span></h5>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">In the index.js file, edit the <strong>project, \
token, </strong>and <strong>client</strong> variables with your own \
Project ID, Authentication Token, and SignalWire Space URL.</p>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">To receive transcription messages, edit \
the <strong>to</strong> variable to your phone number. Change \
the <strong>from</strong> variable to your SignalWire phone number. You can \
also edit the <strong>dial.number()'s</strong> to sample phone numbers you \
can use for testing.</p>
<h5 style="display: block;margin: 0;padding: 0;"><br>
<span style="font-size:18px"><strong>Running</strong></span></h5>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">In the same terminal window where you installed all the dependencies (npm \
install), run:</p>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;"><span style="color:#777777">node index.js</span></p>
<blockquote style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><strong>Note</strong>: If you make any changes \
to the index.js file from the repository, be sure to terminate and restart the node \
index.js command in terminal.<br> </blockquote>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;"><strong>Building an IVR</strong></p>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">To build an interactive voice response (IVR), you should start with a main \
menu to present all the different menu options (i.e. press 1 for help, etc.) to the \
caller.</p>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">In my example, the caller will hear the three options and choose which party \
they would like to be connected to. If no input is received, SignalWire will wait 10 \
seconds before asking the caller to make a selection or listen to the options again. \
If there is still no input, the call will end.</p>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">After you have created a main menu, you will need to point to a URL (in my \
case, mmv-response) where SignalWire will make a request to when the entering of \
digits or speech is completed.<br> </p>
<table data-tab-size="8" style="border-collapse: collapse;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: \
100%;"> <tbody>
<tr>
<td data-line-number="1" id="file-main-menu-js-L1" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC1" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">app.get("/main-menu", \
(req, res, next) => {</span></td> </tr>
<tr>
<td data-line-number="2" id="file-main-menu-js-L2" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC2" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">var response = new RestClient.LaML.VoiceResponse();</span></td>
</tr>
<tr>
<td data-line-number="3" id="file-main-menu-js-L3" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC3" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">var gather = response.gather({</span></td> \
</tr> <tr>
<td data-line-number="4" id="file-main-menu-js-L4" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC4" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">action: 'http://190.102.98.249:3000/mmv-response',</span></td>
</tr>
<tr>
<td data-line-number="5" id="file-main-menu-js-L5" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC5" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">method: 'GET',</span></td> </tr>
<tr>
<td data-line-number="6" id="file-main-menu-js-L6" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC6" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span style="color:#777777">input: 'dtmf \
speech',</span></td> </tr>
<tr>
<td data-line-number="7" id="file-main-menu-js-L7" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC7" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span style="color:#777777">hints: 'help, \
conference'</span></td> </tr>
<tr>
<td data-line-number="8" id="file-main-menu-js-L8" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC8" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span style="color:#777777">})</span></td> \
</tr> <tr>
<td data-line-number="9" id="file-main-menu-js-L9" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC9" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span style="color:#777777">gather.say("Hello \
and welcome to SignalWire.");</span></td> </tr>
<tr>
<td data-line-number="10" id="file-main-menu-js-L10" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC10" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">gather.say("If you're a customer in need of some assistance, \
press 1, or say help.");</span></td> </tr>
<tr>
<td data-line-number="11" id="file-main-menu-js-L11" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC11" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">gather.say("If you have been invited to a conference, press 2, \
or say conference.");</span></td> </tr>
<tr>
<td data-line-number="12" id="file-main-menu-js-L12" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC12" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">gather.say("If you know your party's extension, you may dial it \
at any time.");</span></td> </tr>
<tr>
<td data-line-number="13" id="file-main-menu-js-L13" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC13" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">gather.pause({ length: 10 });</span></td> </tr>
<tr>
<td data-line-number="14" id="file-main-menu-js-L14" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC14" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">gather.say("Are you still there? Please make a selection or \
press star to hear the options again.");</span></td> </tr>
<tr>
<td data-line-number="15" id="file-main-menu-js-L15" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC15" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">response.say("We did not receive an option. \
Goodbye.");</span></td> </tr>
<tr>
<td data-line-number="16" id="file-main-menu-js-L16" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC16" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> \
</tr> <tr>
<td data-line-number="17" id="file-main-menu-js-L17" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC17" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">res.set('Content-Type', 'text/xml');</span></td> </tr>
<tr>
<td data-line-number="18" id="file-main-menu-js-L18" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC18" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">res.send(response.toString());</span></td> </tr>
<tr>
<td data-line-number="19" id="file-main-menu-js-L19" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-main-menu-js-LC19" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">});</span></td> </tr>
</tbody>
</table>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;"><br> Then, in mmv-response, you need to tell SignalWire what to do when one of \
those options is selected. For example, if the caller pressed 1 or said "help", dial \
the number +1.650.382.2000.</p>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">If an incorrect option is pressed or said, the caller will hear this and the \
call will end:</p>
<blockquote style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><em>"We received an incorrect option. \
Goodbye."</em></blockquote>
<table data-tab-size="8" style="border-collapse: collapse;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: \
100%;"> <tbody>
<tr>
<td data-line-number="1" id="file-mmv-response-L1" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC1" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">app.get("/mmv-response", (req, res, next) => {</span></td> \
</tr> <tr>
<td data-line-number="2" id="file-mmv-response-L2" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC2" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span style="color:#777777">var response = new \
RestClient.LaML.VoiceResponse();</span></td> </tr>
<tr>
<td data-line-number="3" id="file-mmv-response-L3" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC3" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span style="color:#777777">var digits = \
req.query.Digits;</span></td> </tr>
<tr>
<td data-line-number="4" id="file-mmv-response-L4" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC4" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span style="color:#777777">var speech = \
req.query.SpeechResult;</span></td> </tr>
<tr>
<td data-line-number="5" id="file-mmv-response-L5" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC5" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> </td> </tr>
<tr>
<td data-line-number="6" id="file-mmv-response-L6" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC6" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span style="color:#777777">if (digits == "1" \
|| speech == "help") {</span></td> </tr>
<tr>
<td data-line-number="7" id="file-mmv-response-L7" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC7" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span style="color:#777777">var dial = \
response.dial();</span></td> </tr>
<tr>
<td data-line-number="8" id="file-mmv-response-L8" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC8" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">dial.number('650-382-0000');</span></td> </tr>
<tr>
<td data-line-number="9" id="file-mmv-response-L9" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC9" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> </td> </tr>
<tr>
<td data-line-number="10" id="file-mmv-response-L10" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC10" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">else { response.say('We received an incorrect option. \
Goodbye.'); }</span></td> </tr>
<tr>
<td data-line-number="11" id="file-mmv-response-L11" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC11" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> \
</tr> <tr>
<td data-line-number="12" id="file-mmv-response-L12" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC12" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">res.set('Content-Type', 'text/xml');</span></td> </tr>
<tr>
<td data-line-number="13" id="file-mmv-response-L13" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC13" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">res.send(response.toString());</span></td> </tr>
<tr>
<td data-line-number="14" id="file-mmv-response-L14" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> </td> <td \
id="file-mmv-response-LC14" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"><span \
style="color:#777777">});</span></td> </tr>
</tbody>
</table>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;"> </p>
</td>
</tr>
</tbody></table>
<!--[if mso]>
</td>
<![endif]-->
<!--[if mso]>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnButtonBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody class="mcnButtonBlockOuter">
<tr>
<td style="padding-top: 0;padding-right: 18px;padding-bottom: \
18px;padding-left: 18px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;" valign="top" align="center" \
class="mcnButtonBlockInner"> <table border="0" cellpadding="0" cellspacing="0" \
class="mcnButtonContentContainer" style="border-collapse: separate \
!important;border-radius: 4px;background-color: #E0629A;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: \
100%;"> <tbody>
<tr>
<td align="center" valign="middle" \
class="mcnButtonContent" style="font-family: Arial;font-size: 16px;padding: \
18px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <a class="mcnButton " title="Read the Rest" \
href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=4dd90b5802&e=81136d1409" \
target="_blank" style="font-weight: bold;letter-spacing: normal;line-height: \
100%;text-align: center;text-decoration: none;color: #FFFFFF;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;display: \
block;">Read the Rest</a> </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnDividerBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;table-layout: fixed !important;"> <tbody \
class="mcnDividerBlockOuter"> <tr>
<td class="mcnDividerBlockInner" style="min-width: 100%;padding: \
18px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <table class="mcnDividerContent" border="0" \
cellpadding="0" cellspacing="0" width="100%" style="min-width: 100%;border-top: 2px \
solid #443D3D;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody><tr>
<td style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <span></span>
</td>
</tr>
</tbody></table>
<!--
<td class="mcnDividerBlockInner" style="padding: 18px;">
<hr class="mcnDividerContent" style="border-bottom-color:none; \
border-left-color:none; border-right-color:none; border-bottom-width:0; \
border-left-width:0; border-right-width:0; margin-top:0; margin-right:0; \
margin-bottom:0; margin-left:0;" />
-->
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnTextBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody class="mcnTextBlockOuter">
<tr>
<td valign="top" class="mcnTextBlockInner" style="padding-top: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <!--[if mso]>
<table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" \
style="width:100%;"> <tr>
<![endif]-->
<!--[if mso]>
<td valign="top" width="600" style="width:600px;">
<![endif]-->
<table align="left" border="0" cellpadding="0" cellspacing="0" \
style="max-width: 100%;min-width: 100%;border-collapse: collapse;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
width="100%" class="mcnTextContentContainer"> <tbody><tr>
<td valign="top" class="mcnTextContent" style="padding-top: \
0;padding-right: 18px;padding-bottom: 9px;padding-left: 18px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;word-break: \
break-word;color: #202020;font-family: Helvetica;font-size: 16px;line-height: \
150%;text-align: left;">
<div style="text-align: center;"><span \
style="font-size:32px"><span style="color:#444444">Check out ClueCon Weekly with Oleg \
Agafonov!</span></span></div>
</td>
</tr>
</tbody></table>
<!--[if mso]>
</td>
<![endif]-->
<!--[if mso]>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnImageCardBlock" style="border-collapse: collapse;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: \
100%;"> <tbody class="mcnImageCardBlockOuter">
<tr>
<td class="mcnImageCardBlockInner" valign="top" style="padding-top: \
9px;padding-right: 18px;padding-bottom: 9px;padding-left: 18px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
<table align="right" border="0" cellpadding="0" cellspacing="0" \
class="mcnImageCardBottomContent" width="100%" style="border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody><tr>
<td class="mcnImageCardBottomImageContent" align="center" valign="top" \
style="padding-top: 0px;padding-right: 0px;padding-bottom: 0;padding-left: \
0px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;">
<a href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=70c73f402e&e=81136d1409" \
title="" class="" target="" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
<img alt="" \
src="https://gallery.mailchimp.com/video_thumbnails_new/86ce80a8e5f3a3173c70e102efcb6f6e.png" \
width="480" style="max-width: 480px;border-radius: 9%;border: 0;height: auto;outline: \
none;text-decoration: none;-ms-interpolation-mode: bicubic;vertical-align: bottom;" \
class="mcnImage"> </a>
</td>
</tr>
<tr>
<td class="mcnTextContent" valign="top" style="padding: 9px 18px;color: \
#F2F2F2;font-family: Helvetica;font-size: 14px;font-weight: normal;text-align: \
center;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;word-break: break-word;line-height: 150%;" \
width="546"> <div style="text-align: left;"><span style="color:#444444"><span \
style="font-size:18px">Oleg is a solution architect with more than 10 years of \
experience in software development. This episode of ClueCon Weekly presents an \
exciting journey from troubleshooting to monitoring or how VoIP network monitoring \
can simplify troubleshooting and shorten customer tickets resolution time. Find out \
how SIP3 turned from troubleshooting into monitoring platform, what were the biggest \
challenges along the way and what is the team behind the project planning ahead. \
</span><br> <br>
*** </span><a href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=afc624b412&e=81136d1409" \
rel="nofollow" spellcheck="false" target="_blank" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#007C89;font-weight: normal;text-decoration: underline;"><span \
style="color:#444444">https://sip3.io</span></a><span style="color:#444444"> - Learn \
more about monitoring and troubleshooting with SIP3 </span><a \
href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=eb48bec629&e=81136d1409" \
rel="nofollow" spellcheck="false" target="_blank" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#007C89;font-weight: normal;text-decoration: underline;"><span \
style="color:#444444">https://github.com/sip3io</span></a><span \
style="color:#444444"> - Checkout SIP3 opensource components </span><a \
href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=cf3e554b6b&e=81136d1409" \
rel="nofollow" spellcheck="false" target="_blank" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#007C89;font-weight: normal;text-decoration: underline;"><span \
style="color:#444444">https://twitter.com/agaf0x</span></a><span \
style="color:#444444"> - Follow Oleg in Twitter</span></div>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnDividerBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;table-layout: fixed !important;"> <tbody \
class="mcnDividerBlockOuter"> <tr>
<td class="mcnDividerBlockInner" style="min-width: 100%;padding: \
18px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <table class="mcnDividerContent" border="0" \
cellpadding="0" cellspacing="0" width="100%" style="min-width: 100%;border-top: 2px \
solid #443D3D;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody><tr>
<td style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <span></span>
</td>
</tr>
</tbody></table>
<!--
<td class="mcnDividerBlockInner" style="padding: 18px;">
<hr class="mcnDividerContent" style="border-bottom-color:none; \
border-left-color:none; border-right-color:none; border-bottom-width:0; \
border-left-width:0; border-right-width:0; margin-top:0; margin-right:0; \
margin-bottom:0; margin-left:0;" />
-->
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnTextBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody class="mcnTextBlockOuter">
<tr>
<td valign="top" class="mcnTextBlockInner" style="padding-top: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <!--[if mso]>
<table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" \
style="width:100%;"> <tr>
<![endif]-->
<!--[if mso]>
<td valign="top" width="600" style="width:600px;">
<![endif]-->
<table align="left" border="0" cellpadding="0" cellspacing="0" \
style="max-width: 100%;min-width: 100%;border-collapse: collapse;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
width="100%" class="mcnTextContentContainer"> <tbody><tr>
<td valign="top" class="mcnTextContent" style="padding-top: \
0;padding-right: 18px;padding-bottom: 9px;padding-left: 18px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;word-break: \
break-word;color: #202020;font-family: Helvetica;font-size: 16px;line-height: \
150%;text-align: left;">
<h2 style="text-align: center;display: block;margin: \
0;padding: 0;color: #202020;font-family: Helvetica;font-size: 22px;font-style: \
normal;font-weight: bold;line-height: 125%;letter-spacing: normal;"><span \
style="color:#444444"><span style="font-size:32px">Sunset Boat Tour by \
VoiceTel</span></span></h2>
</td>
</tr>
</tbody></table>
<!--[if mso]>
</td>
<![endif]-->
<!--[if mso]>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnImageBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody class="mcnImageBlockOuter">
<tr>
<td valign="top" style="padding: 9px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
class="mcnImageBlockInner"> <table align="left" width="100%" border="0" \
cellpadding="0" cellspacing="0" class="mcnImageContentContainer" style="min-width: \
100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody><tr>
<td class="mcnImageContent" valign="top" \
style="padding-right: 9px;padding-left: 9px;padding-top: 0;padding-bottom: \
0;text-align: center;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;">
<img align="center" alt="" \
src="https://gallery.mailchimp.com/73f7dcee16e0a87ece76c372d/images/6f00cd85-2203-492c-9fd2-90289b07bea7.png" \
width="564" style="max-width: 1200px;padding-bottom: 0;display: inline \
!important;vertical-align: bottom;border: 0;height: auto;outline: \
none;text-decoration: none;-ms-interpolation-mode: bicubic;" class="mcnImage">
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnTextBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody class="mcnTextBlockOuter">
<tr>
<td valign="top" class="mcnTextBlockInner" style="padding-top: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <!--[if mso]>
<table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" \
style="width:100%;"> <tr>
<![endif]-->
<!--[if mso]>
<td valign="top" width="600" style="width:600px;">
<![endif]-->
<table align="left" border="0" cellpadding="0" cellspacing="0" \
style="max-width: 100%;min-width: 100%;border-collapse: collapse;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
width="100%" class="mcnTextContentContainer"> <tbody><tr>
<td valign="top" class="mcnTextContent" style="padding-top: \
0;padding-right: 18px;padding-bottom: 9px;padding-left: 18px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;word-break: \
break-word;color: #202020;font-family: Helvetica;font-size: 16px;line-height: \
150%;text-align: left;">
Join us for the VoiceTel boat tour at <a \
href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=0a40e9a42f&e=81136d1409" \
rel="hashtag" target="_blank" style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#007C89;font-weight: normal;text-decoration: underline;">#ClueCon15</a>! Toast the \
end of the day with a glass of wine, ice-cold beer or hand-crafted cocktail as the \
sun sets over Lake Michigan. Everyone at ClueCon is invited! </td>
</tr>
</tbody></table>
<!--[if mso]>
</td>
<![endif]-->
<!--[if mso]>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnDividerBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;table-layout: fixed !important;"> <tbody \
class="mcnDividerBlockOuter"> <tr>
<td class="mcnDividerBlockInner" style="min-width: 100%;padding: \
18px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <table class="mcnDividerContent" border="0" \
cellpadding="0" cellspacing="0" width="100%" style="min-width: 100%;border-top: 2px \
solid #443D3D;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody><tr>
<td style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <span></span>
</td>
</tr>
</tbody></table>
<!--
<td class="mcnDividerBlockInner" style="padding: 18px;">
<hr class="mcnDividerContent" style="border-bottom-color:none; \
border-left-color:none; border-right-color:none; border-bottom-width:0; \
border-left-width:0; border-right-width:0; margin-top:0; margin-right:0; \
margin-bottom:0; margin-left:0;" />
-->
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnTextBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody class="mcnTextBlockOuter">
<tr>
<td valign="top" class="mcnTextBlockInner" style="padding-top: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <!--[if mso]>
<table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" \
style="width:100%;"> <tr>
<![endif]-->
<!--[if mso]>
<td valign="top" width="600" style="width:600px;">
<![endif]-->
<table align="left" border="0" cellpadding="0" cellspacing="0" \
style="max-width: 100%;min-width: 100%;border-collapse: collapse;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
width="100%" class="mcnTextContentContainer"> <tbody><tr>
<td valign="top" class="mcnTextContent" style="padding-top: \
0;padding-right: 18px;padding-bottom: 9px;padding-left: 18px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;word-break: \
break-word;color: #202020;font-family: Helvetica;font-size: 16px;line-height: \
150%;text-align: left;">
<div>
<div style="text-align: center;"> </div>
<table align="left" border="0" cellpadding="0" cellspacing="0" width="100%" \
style="border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody>
<tr>
<td style="text-align: center;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;" valign="top"><span style="color:#444444"><span \
style="font-size:32px">Join us for the Coder Games!</span></span></td> </tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody></table>
<!--[if mso]>
</td>
<![endif]-->
<!--[if mso]>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnImageBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody class="mcnImageBlockOuter">
<tr>
<td valign="top" style="padding: 9px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
class="mcnImageBlockInner"> <table align="left" width="100%" border="0" \
cellpadding="0" cellspacing="0" class="mcnImageContentContainer" style="min-width: \
100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody><tr>
<td class="mcnImageContent" valign="top" \
style="padding-right: 9px;padding-left: 9px;padding-top: 0;padding-bottom: \
0;text-align: center;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;">
<img align="center" alt="" \
src="https://gallery.mailchimp.com/73f7dcee16e0a87ece76c372d/images/9fb60dce-a5b7-4174-a04d-95bce7b419d5.png" \
width="564" style="max-width: 705px;padding-bottom: 0;display: inline \
!important;vertical-align: bottom;border: 0;height: auto;outline: \
none;text-decoration: none;-ms-interpolation-mode: bicubic;" class="mcnImage">
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnTextBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody class="mcnTextBlockOuter">
<tr>
<td valign="top" class="mcnTextBlockInner" style="padding-top: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <!--[if mso]>
<table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" \
style="width:100%;"> <tr>
<![endif]-->
<!--[if mso]>
<td valign="top" width="600" style="width:600px;">
<![endif]-->
<table align="left" border="0" cellpadding="0" cellspacing="0" \
style="max-width: 100%;min-width: 100%;border-collapse: collapse;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
width="100%" class="mcnTextContentContainer"> <tbody><tr>
<td valign="top" class="mcnTextContent" style="padding-top: \
0;padding-right: 18px;padding-bottom: 9px;padding-left: 18px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;word-break: \
break-word;color: #202020;font-family: Helvetica;font-size: 16px;line-height: \
150%;text-align: left;">
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">ClueCon's Coder Games is our unique version of a Hack-A-Thon! Join us \
for a day filled with games and fun for every attendee, included with your \
ClueCon admission. Whether you like to code your way to the prize or are a builder at \
heart, there is something for everyone. Our challenges range from coding to maker to \
trivia and everything in between. You can work as a team or go solo as you utilize \
the provided materials to build your creation and win prizes!<br> <br>
<font color="#444444">This year we are having four different challenges! Build your \
own self-driving car in our Maker Challenge, create something amazing using household \
objects in FreeCYCLED Hacks, code something cool with our APIs in the \
SignalWire Challenge, and compete in our ClueCon gameshow <em>Man vs. \
Machine!</em></font><br> </p>
<p style="margin: 10px 0;padding: 0;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: \
#202020;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: \
left;">Can't make ClueCon but want to participate in Monday's Coder Games? This \
year we offer a la carte admission to the Coder Games! Admission includes lunch, \
swag and access to the Coder Games. For student rates are available, \
contact <a href="mailto:sharon@signalwire.com" target="_blank" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;color: #007C89;font-weight: \
normal;text-decoration: underline;">sharon@signalwire.com</a></p>
</td>
</tr>
</tbody></table>
<!--[if mso]>
</td>
<![endif]-->
<!--[if mso]>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnButtonBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody class="mcnButtonBlockOuter">
<tr>
<td style="padding-top: 0;padding-right: 18px;padding-bottom: \
18px;padding-left: 18px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;" valign="top" align="center" \
class="mcnButtonBlockInner"> <table border="0" cellpadding="0" cellspacing="0" \
class="mcnButtonContentContainer" style="border-collapse: separate \
!important;border-radius: 4px;background-color: #2BAADF;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: \
100%;"> <tbody>
<tr>
<td align="center" valign="middle" \
class="mcnButtonContent" style="font-family: Arial;font-size: 16px;padding: \
18px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <a class="mcnButton " title="Learn More" \
href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=738cd1a0ee&e=81136d1409" \
target="_blank" style="font-weight: bold;letter-spacing: normal;line-height: \
100%;text-align: center;text-decoration: none;color: #FFFFFF;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;display: \
block;">Learn More</a> </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnDividerBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;table-layout: fixed !important;"> <tbody \
class="mcnDividerBlockOuter"> <tr>
<td class="mcnDividerBlockInner" style="min-width: 100%;padding: \
18px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <table class="mcnDividerContent" border="0" \
cellpadding="0" cellspacing="0" width="100%" style="min-width: 100%;border-top: 2px \
solid #443D3D;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody><tr>
<td style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <span></span>
</td>
</tr>
</tbody></table>
<!--
<td class="mcnDividerBlockInner" style="padding: 18px;">
<hr class="mcnDividerContent" style="border-bottom-color:none; \
border-left-color:none; border-right-color:none; border-bottom-width:0; \
border-left-width:0; border-right-width:0; margin-top:0; margin-right:0; \
margin-bottom:0; margin-left:0;" />
-->
</td>
</tr>
</tbody>
</table></td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<tr>
<td align="center" valign="top" id="templateColumns" \
style="background:#ceedee none no-repeat center/cover;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;background-color: \
#ceedee;background-image: none;background-repeat: no-repeat;background-position: \
center;background-size: cover;border-top: 0;border-bottom: 0;padding-top: \
0;padding-bottom: 0;"> <table border="0" cellpadding="0" cellspacing="0" \
width="100%" class="templateContainer" style="border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;max-width: 600px !important;"> <tr>
<td valign="top" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <!--[if (gte mso 9)|(IE)]>
<table align="center" border="0" \
cellspacing="0" cellpadding="0" width="600" style="width:600px;"> <tr>
<td align="center" valign="top" \
width="300" style="width:300px;"> <![endif]-->
<table align="left" border="0" \
cellpadding="0" cellspacing="0" width="300" class="columnWrapper" \
style="border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tr>
<td valign="top" \
class="columnContainer" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"></td> </tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
<td align="center" valign="top" \
width="300" style="width:300px;"> <![endif]-->
<table align="left" border="0" \
cellpadding="0" cellspacing="0" width="300" class="columnWrapper" \
style="border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tr>
<td valign="top" \
class="columnContainer" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"></td> </tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center" valign="top" \
id="templateLowerBody" style="background:#ceedee none no-repeat \
center/cover;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;background-color: #ceedee;background-image: \
none;background-repeat: no-repeat;background-position: center;background-size: \
cover;border-top: 0;border-bottom: 2px solid #EAEAEA;padding-top: 0;padding-bottom: \
9px;"> <!--[if (gte mso 9)|(IE)]>
<table align="center" border="0" cellspacing="0" \
cellpadding="0" width="600" style="width:600px;"> <tr>
<td align="center" valign="top" width="600" \
style="width:600px;"> <![endif]-->
<table align="center" border="0" cellpadding="0" \
cellspacing="0" width="100%" class="templateContainer" style="border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;max-width: 600px !important;"> <tr>
<td valign="top" class="bodyContainer" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><table border="0" cellpadding="0" \
cellspacing="0" width="100%" class="mcnTextBlock" style="min-width: \
100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody \
class="mcnTextBlockOuter"> <tr>
<td valign="top" class="mcnTextBlockInner" style="padding-top: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <!--[if mso]>
<table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" \
style="width:100%;"> <tr>
<![endif]-->
<!--[if mso]>
<td valign="top" width="600" style="width:600px;">
<![endif]-->
<table align="left" border="0" cellpadding="0" cellspacing="0" \
style="max-width: 100%;min-width: 100%;border-collapse: collapse;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
width="100%" class="mcnTextContentContainer"> <tbody><tr>
<td valign="top" class="mcnTextContent" style="padding-top: \
0;padding-right: 18px;padding-bottom: 9px;padding-left: 18px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;word-break: \
break-word;color: #202020;font-family: Helvetica;font-size: 16px;line-height: \
150%;text-align: left;">
</td>
</tr>
</tbody></table>
<!--[if mso]>
</td>
<![endif]-->
<!--[if mso]>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody>
</table></td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<tr>
<td align="center" valign="top" id="templateFooter" \
style="background:#024682 none no-repeat center/cover;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;background-color: \
#024682;background-image: none;background-repeat: no-repeat;background-position: \
center;background-size: cover;border-top: 0;border-bottom: 0;padding-top: \
9px;padding-bottom: 9px;"> <!--[if (gte mso 9)|(IE)]>
<table align="center" border="0" cellspacing="0" \
cellpadding="0" width="600" style="width:600px;"> <tr>
<td align="center" valign="top" width="600" \
style="width:600px;"> <![endif]-->
<table align="center" border="0" cellpadding="0" \
cellspacing="0" width="100%" class="templateContainer" style="border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;max-width: 600px !important;"> <tr>
<td valign="top" class="footerContainer" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><table border="0" cellpadding="0" \
cellspacing="0" width="100%" class="mcnFollowBlock" style="min-width: \
100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody \
class="mcnFollowBlockOuter"> <tr>
<td align="center" valign="top" style="padding: 9px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
class="mcnFollowBlockInner"> <table border="0" cellpadding="0" cellspacing="0" \
width="100%" class="mcnFollowContentContainer" style="min-width: \
100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody><tr>
<td align="center" style="padding-left: 9px;padding-right: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <table border="0" cellpadding="0" \
cellspacing="0" width="100%" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;" class="mcnFollowContent"> <tbody><tr>
<td align="center" valign="top" style="padding-top: \
9px;padding-right: 9px;padding-left: 9px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <table \
align="center" border="0" cellpadding="0" cellspacing="0" style="border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody><tr>
<td align="center" valign="top" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <!--[if mso]>
<table align="center" border="0" cellspacing="0" \
cellpadding="0"> <tr>
<![endif]-->
<!--[if mso]>
<td align="center" valign="top">
<![endif]-->
<table align="left" border="0" \
cellpadding="0" cellspacing="0" class="mcnFollowStacked" style="display: \
inline;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
<tbody><tr>
<td align="center" valign="top" \
class="mcnFollowIconContent" style="padding-right: 10px;padding-bottom: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <a \
href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=fc29172ece&e=81136d1409" \
target="_blank" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><img \
src="https://cdn-images.mailchimp.com/icons/social-block-v2/outline-light-twitter-96.png" \
alt="Twitter" class="mcnFollowBlockIcon" width="48" style="width: 48px;max-width: \
48px;display: block;border: 0;height: auto;outline: none;text-decoration: \
none;-ms-interpolation-mode: bicubic;"></a> </td>
</tr>
</tbody></table>
<!--[if mso]>
</td>
<![endif]-->
<!--[if mso]>
<td align="center" valign="top">
<![endif]-->
<table align="left" border="0" \
cellpadding="0" cellspacing="0" class="mcnFollowStacked" style="display: \
inline;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
<tbody><tr>
<td align="center" valign="top" \
class="mcnFollowIconContent" style="padding-right: 10px;padding-bottom: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <a \
href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=a779191184&e=81136d1409" \
target="_blank" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><img \
src="https://cdn-images.mailchimp.com/icons/social-block-v2/outline-light-facebook-96.png" \
alt="Facebook" class="mcnFollowBlockIcon" width="48" style="width: 48px;max-width: \
48px;display: block;border: 0;height: auto;outline: none;text-decoration: \
none;-ms-interpolation-mode: bicubic;"></a> </td>
</tr>
</tbody></table>
<!--[if mso]>
</td>
<![endif]-->
<!--[if mso]>
<td align="center" valign="top">
<![endif]-->
<table align="left" border="0" \
cellpadding="0" cellspacing="0" class="mcnFollowStacked" style="display: \
inline;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
<tbody><tr>
<td align="center" valign="top" \
class="mcnFollowIconContent" style="padding-right: 0;padding-bottom: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <a \
href="https://freeswitch.us13.list-manage.com/track/click?u=73f7dcee16e0a87ece76c372d&id=6361c52db6&e=81136d1409" \
target="_blank" style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"><img \
src="https://cdn-images.mailchimp.com/icons/social-block-v2/outline-light-link-96.png" \
alt="Website" class="mcnFollowBlockIcon" width="48" style="width: 48px;max-width: \
48px;display: block;border: 0;height: auto;outline: none;text-decoration: \
none;-ms-interpolation-mode: bicubic;"></a> </td>
</tr>
</tbody></table>
<!--[if mso]>
</td>
<![endif]-->
<!--[if mso]>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnDividerBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;table-layout: fixed !important;"> <tbody \
class="mcnDividerBlockOuter"> <tr>
<td class="mcnDividerBlockInner" style="min-width: 100%;padding: \
18px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <table class="mcnDividerContent" border="0" \
cellpadding="0" cellspacing="0" width="100%" style="min-width: 100%;border-top: 2px \
solid #FFFFFF;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: \
0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <tbody><tr>
<td style="mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> <span></span>
</td>
</tr>
</tbody></table>
<!--
<td class="mcnDividerBlockInner" style="padding: 18px;">
<hr class="mcnDividerContent" style="border-bottom-color:none; \
border-left-color:none; border-right-color:none; border-bottom-width:0; \
border-left-width:0; border-right-width:0; margin-top:0; margin-right:0; \
margin-bottom:0; margin-left:0;" />
-->
</td>
</tr>
</tbody>
</table><table border="0" cellpadding="0" cellspacing="0" width="100%" \
class="mcnTextBlock" style="min-width: 100%;border-collapse: \
collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <tbody class="mcnTextBlockOuter">
<tr>
<td valign="top" class="mcnTextBlockInner" style="padding-top: \
9px;mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;"> <!--[if mso]>
<table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" \
style="width:100%;"> <tr>
<![endif]-->
<!--[if mso]>
<td valign="top" width="600" style="width:600px;">
<![endif]-->
<table align="left" border="0" cellpadding="0" cellspacing="0" \
style="max-width: 100%;min-width: 100%;border-collapse: collapse;mso-table-lspace: \
0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;" \
width="100%" class="mcnTextContentContainer"> <tbody><tr>
<td valign="top" class="mcnTextContent" style="padding-top: \
0;padding-right: 18px;padding-bottom: 9px;padding-left: 18px;mso-line-height-rule: \
exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;word-break: \
break-word;color: #656565;font-family: Helvetica;font-size: 12px;line-height: \
150%;text-align: center;">
<br>
<span style="color:#eeeeee">Want to change how you receive these emails?<br>
You can </span><a href="https://freeswitch.us13.list-manage.com/profile?u=73f7dcee16e0a87ece76c372d&id=8de1531556&e=81136d1409" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: \
normal;text-decoration: underline;"><span style="color:#eeeeee">update your \
preferences</span></a><span style="color:#eeeeee"> or </span><a \
href="https://freeswitch.us13.list-manage.com/unsubscribe?u=73f7dcee16e0a87ece76c372d&id=8de1531556&e=81136d1409&c=bd4e8b18c2" \
style="mso-line-height-rule: exactly;-ms-text-size-adjust: \
100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: \
normal;text-decoration: underline;"><span style="color:#eeeeee">unsubscribe from this \
list</span></a><span style="color:#eeeeee">.</span><br> <br>
</td>
</tr>
</tbody></table>
<!--[if mso]>
</td>
<![endif]-->
<!--[if mso]>
</tr>
</table>
<![endif]-->
</td>
</tr>
</tbody>
</table></td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
</table>
<!-- // END TEMPLATE -->
</td>
</tr>
</table>
</center>
<img src="https://freeswitch.us13.list-manage.com/track/open.php?u=73f7dcee16e0a87ece76c372d&id=bd4e8b18c2&e=81136d1409" \
height="1" width="1"></body> </html>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic