With the 2.1 release of Cisco Meeting Server API, passcodeMode and passcodeTimeout was added to the callProfile section. This means the classic Personal Meeting Room behavior of the host and guests dialing the same bridge number and having 5 seconds to enter a host pin before defaulting to guest and entering the meeting. Having the same call in number for host and guests greatly simplifies things IMHO.

Full solution below:

Q: What have you been up to in the last year?

The DevNet Creator award was the start of (and perhaps conduit to) a big 2018 for me. I placed second at Presidio’s yearly “Shark Tank” coding contest with a CUCM Chat Ops tool called TACOS. I was asked to make a Proof of Concept for Cisco Live using DNA Center APIs which was featured on the floor of the World of Solutions. Our concept, “Honeycomb” was an energy monitoring and analysis tool for cost savings in the datacenter. Also at Live, I was invited to speak on a panel with DevNet’s Susie Wee and Hank Preston on “Career Pivots” to discuss my transition from Networking to Code. A month later at our own Presidio conference, I helped plan the “DevOps” track for Presidio and returned the invitation to have DevNet join us (Susie Wee as keynote, Hank Preston with his “NetDevOps”) and taught a few classes myself. At our conference I was awarded “Engineer of the Year”. For the last few months, I have been working on a cloud contact center project on AWS, which has included a ton of serverless architecture (API gateway, Lambda) and chat bots using Lex, Lambda and Elasticsearch. I also just completed a customer wireless pilot for “Cisco DNA Spaces”, which I customized to add captured data to an Amazon SNS topic for an emergency notification system. I look forward to returning to Create this year to share more of what I’ve been up to – whether you catch my talk on “More efficient governments through contact center AI”,  join my workshop on “How to teach an old prog new tricks”, or just chat over the campfire with some s-mores!

Q: What are you most proud of in your career?

What makes me most proud of in my career is when I can inspire others. I love it when someone I work with approaches me with a new idea to get my take or to help them execute. Sometimes I’ve never talked to the person before, but I’m always happy to help. Being able to inspire your peers is beyond titles or certifications. I hope that sharing the use cases I’ve found for coding helps others think with APIs in mind to really bring value to the customer! If it’s not in the GUI, look in the API docs – there is our value as integrators. 

Q: If you weren’t a developer, what would you want to be?

I help my wife sometimes with her lesson plans and really get into it. I think if I weren’t in the field I’m in (or if it paid what it should) I would be a teacher.

Q: What has surprised you most about DevNet and the DevNet community?

What has surprised me most about DevNet is how much fun they have in doing their job, and in general. They are always posting goofy pictures on Twitter, and  always have witty responses to the questions I ask (which they do often, and in short time). A lot of us work from home most days, so the sense of humor I’ve encountered and friendships I’ve made (online and offline) are that much more meaningful.

Q: What new technologies/innovations are you most excited about?

AI and Machine Learning are the most exciting for me. The terms have been around for a while, but the algorithms keep getting better and the data sets keep getting larger, more open and shared. That has led to some pretty scary accuracy.  One example of this is indico.io, a product that provides sentiment analysis (among other things). I fed a year’s worth of conversations from our “Presidio Codes” Webex teams space into the API and was able to sort by who was the Happiest or most Angry. I could run it through a Myers-Briggs test, or check for Political Affiliations. I could see right away how this could be used for IVR queueing, hiring or training exercises, or directed marketing.

Apart from sharing URIs and Patterns between clusters, ILS naturally shares UDS data, including home cluster.

In the example below, only a single _cisco-uds._tcp record can exist due to a shared dns zone, however using feature group templates to control the home cluster setting means the user will be “found” and home cluster information will be relayed with the request so the client finds it’s home.

I was asked to help come up with a Proof of Concept using DNA Center APIs for Cisco Live 2018. After a few days in the sandbox, my group decided on an app that gives granular data on power usage using energy wise along with actionable outcomes.

Along with granular cost analysis per IDF, per switch or per port, there is an included calculator for instant cost-benefit analysis. For instance, it takes 7.85kWh or $0.83/mo to power a Cisco 9971 phone but only 2.52kWh or $0.27 to power a newer, more efficient Cisco 8841 phone. At a cost of $250 per, over the span of 10 years, replacing 1,000 phones save $68,133 in power savings alone!

Since I didn’t think I could sit at my first Cisco Live and work a booth talking about charts all day, I decided to add a little “pizazz”. I made a IP Phone app that enrolls your desk phone to your cell phone as a paired device. Typically energy wise is smart enough to turn off your phones screen after 5PM or on the weekends, but with Meraki Scanning API and a location-aware network, phones (and other devices) can turn off and on as needed. Think of a stadium full of APs – leaving a couple on for probing new users and lighting up more as needed!

Pro Tip: When using Meraki Scanning API at an event like Cisco Live with 30,000 people, you may want to tune the power down on the AP, or be ready to re write the body-parser library to handle more throughput and to clean your laptop hard drive every 30 minutes 🙂

Camp Create is a part of Cisco’s DevNet Create conference and each year they pick about 30 people in groups of 5 and assign a topic. Think of it like a hackathon with some constraints to work with and a coach to guide you.

Since my wife is a teacher, I decided to pick the Education track, and our app “Roll Call” solved the challenge of both: taking roll, and gathering assignments through Cisco Spark and Cisco Meraki APIs.

Having worked with the Cisco Spark APIs, I took on making a bot that serves as the front end to gather assignments and take roll, but also guided the group around the design to make sure everything came together.

One of our group members did a talk on Microsoft’s Face API, and had the idea to use facial recognition to sign onto the WiFi. To track the user to the classroom, Meraki’s Scanning API sends the Device MAC address to a database that stores only the last 10 minutes, and flags those students as “online”

Once the bones were in place, taking roll and asking for assignments was simple.

Another word I’ve heard buzzing around lately, microservices works to brings cloud and containers a step further and modularizes the application into smaller function-specific mini applications that work together through APIs. With this approach, the elasticity of the cloud is tuned to the needs of the subscribers, and the business only pays for the network and compute resources they need on a more granular level. The early adopters at this point are the usual suspects: Airbnb, Uber and Netflix.

“the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API.”

Principals of Microservices (PPT)

Cisco’s APIC-EM, or Application Policy Infrastructure Controller Enterprise Module is an OpenDayLight based SDN (Software Defined Network) controller. You could also possibly call it Cisco’s attempt to Merakify the Enterprise. On the bright side, it’s a free virtual appliance and no license is required.

One of the biggest features of APIC-EM is called Network Plug and Play

At a high level, the Cisco switch or router talks to the APIC-EM to streamline workflows and automate deployments. Switches and routers, known as agents discover the controller using any of the following mechanisms in order:

dhcp option 43 or dns (below), usb key, cloud discovery (currently beta), or the smartphone app.

DHCP

option 43 ascii "5A1N;B2;K4;I172.19.45.222;J80"

The option 43 string has the following components, delimited by semicolons:

  • 5A1N;—Specifies the DHCP suboption for Plug and Play, active operation, version 1, no debug information. It is not necessary to change this part of the string.
  • B2;—IP address type:
    • B1 = hostname
    • B2 = IPv4 (default)
  • Ixxx.xxx.xxx.xxx ;—IP address or hostname of the APIC-EM controller (following a capital letter i). In this example, the IP address is 172.19.45.222.
  • Jxxxx —Port number to use to connect to the APIC-EM controller. In this example, the port number is 80. The default is port 80 for HTTP and port 443 for HTTPS.
  • K4;—Transport protocol to be used between the Cisco Plug and Play IOS Agent and the server:
    • K4 = HTTP (default)
    • K5 = HTTPS

DNS

APIC-EM: pnpserver.<customerdomain>.com
NTP Server: pnpntpserver.<customerdomain>.com

The DHCP pool will need to either be on vlan 1, or you’ll need to specify a staging vlan on the upstream switch:

pnp startup-vlan 55

That brings me to another caveat of of Plug and Play is that the firmware needs to be supported, and may not match the shipping version of the hardware!

Another feature of APIC-EM is called Easy QoS

I actually really like this use-case for network programmability. It’s important for the policies to match end-to-end in QoS, so being able to roll out policies and get insights into your policy-maps holistically is kind of a big deal.

APIC-EM documentation gives the concept of Northbound, which is the REST API you can use for custom applications, and Southbound in which APIC-EM talks to hardware using SNMP and CLI. Cisco states “future APIC-EM releases will leverage other southbound technology such as NetConf as they become available”.

I found some Postman collections from CiscoDevNet’s Github page here. Postman collections are a great way to learn by doing.

APIC-EM Firmware Compatibility

Official Getting Started Guide

When you change your dogs food, they get sick all over the place, they just can’t stomach change. As an IT professional, the dog food we know and love changes frequently.. The technology you spent all that time learning about last year is obsolete.

Don’t get mad, adapt! As a collaboration engineer, my title didn’t exist 20 years ago. During the TDM to VoIP migration, analog teleco guys were forced to adapt or find new work. When virtualization came on the map, the ability for one person to manage hundreds of servers meant that the early adopters got a new title and quite possibly a pay raise, while the ones late to the game found themselves no longer needed.

This blog is adapting, too. Let me throw out a few buzzwords: API, IoT, REST. Knowing what they mean and why they are important might save you from being the next casualty of change. It’s about asking more from technology. People don’t expect their GPS to just give them directions anymore. They want voice navigation with social networking that tells you where the cops are hiding, and they want it to predict when you’re leaving to go to work and tell you how to traffic is. From a development perspective, the GPS apps with the most APIs get the most love, and almost everything is OPEN, meaning you or I could “tap” into that technology, helping both parties.

I recently gave a presentation on coding along with the CTO of the company, Vinu Thomas. One of the points he made that really stuck was this: try to automate your own job. If you’re smart enough to do that, I promise you’ll be just fine.

I started asking during phone migrations: why do I have to tell the router what the new phone’s mac address is, if the switch already knows? Why can’t the switch and the router work this out between themselves ? Why do call center agents have to login to their phone every day if they also login to their computers ? I think we’re almost there, if not already. Both of these use cases: extension mobility and ios-xe have APIs. So do yourself a favor, hang in there, and learn Python.. or Ruby or my favorite: Node.js

#1 – request

Request is the easiest way to make REST calls. It runs server-side to hide your token and if you use Postman to test the HTTP request, it can even generate the code for you!
https://www.npmjs.com/package/request

Example Request Using Spark Messages API:

var request = require(‘request’);
var req = {
  auth: { bearer: ‘sparkTokenHere’ },
  url: ‘https://api.ciscospark.com/v1/messages’,
  json: true,
  body: {
    ‘roomId’: roomId,
    ‘text’: message
    }
};//end setup

request.post(req, function(err, res) {
if(err) {
console.log(err);
} else {
  }
});//end rest call


#2 – picker

Picker is a server side router for Meteor that works alongside middleware to easily provide an API or webhook into your application.
https://atmospherejs.com/meteorhacks/picker

Example Webhook with JSON parsing using body-parser:

Picker.middleware(bodyParser.json());
Picker.middleware(bodyParser.urlencoded({extended: false}));
Picker.route(‘/myWebhook’, function(params, request, response) {
  personEmail = (request.body.data.personEmail);
  msgid = (request.body.data.id);


#3 – Q

Before getting too far ahead with node.js, you’ll need to grasp the underlying language, javascript. Javascript is a synchronous language, meaning it runs functions all at the same time, which can make a mess of things if you don’t use callbacks properly. Q uses something called promises to run things asynchronously in the order you tell it. To learn more about callbacks and why this package is so necessary, check out callbackhell.com
http://documentup.com/kriskowal/q/

Example of promises with Q:

Q.fcall(promisedStep1)
.then(promisedStep2)
.then(promisedStep3)
.then(promisedStep4)
.then(function (value4) {
// Do something with value4
})
.catch(function (error) {
// Handle any error from all above steps
})
.done();


#4 – bert

Bert makes notifications simple
https://github.com/themeteorchef/bert

Bert.alert({
  title: ‘Conference Now’,
  message: ‘Connecting to Tropo…’,
  type: ‘info’,
  style: ‘growl-bottom-right’,
  icon: ‘fa-phone’
});


#5 – fontawesome

fontawesome is a collection of 675 icons in unicode that can be embedded in your site with a single tag. Most people will use their built in CDN (content delivery network) to make deployment even easier.
http://fontawesome.io/icons/

<i class=fa fa-camera-retro”></i>


#6 – nodemailer

nodemailer is the best email package hands down. It supports an html body and allows you to specify options within the app.
https://www.npmjs.com/package/nodemailer

var nodemailer = require(‘nodemailer’);

// create reusable transporter object using the default SMTP transport
var transporter = nodemailer.createTransport(‘smtps://user%40gmail.com:pass@smtp.gmail.com:587’);

// setup e-mail data with unicode symbols
var mailOptions = {
  from: ‘”Fred Foo 👥” <foo@blurdybloop.com>’, // sender address
  to: ‘bar@blurdybloop.com, baz@blurdybloop.com’, // list of receivers
  subject: ‘Hello ✔’, // Subject line
  text: ‘Hello world 🐴’, // plaintext body
  html: ‘Hello world 🐴‘ // html body
};

// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info){
  if(error){
  return console.log(error);
  }
console.log(‘Message sent: ‘ + info.response);
});


#7 – validator

Need to check if an email is actually an email? A dollar amount is actually a dollar amount? Validator has a ton of built-in methods to check for you.
https://www.npmjs.com/package/validator

var validator = require(‘validator’);
validator.isEmail(‘foo@bar.com’); //=> true


#8 – csv

While ECMA 5 has native XML and JSON support, a lot of Cisco applications still rely on CSV (comma seperated values). This package aims to bridge the gap.
https://www.npmjs.com/package/csv

var csv = require(‘csv’);
csv.parse(data, function(err, data){
  csv.stringify(data, function(err, data){
  process.stdout.write(data);
  });
});


#9 – bootstrap

Boostrap is so useful, I wish it was just included in HTML period. Any buttons, menus, fonts, tables, grids, layouts, etc. are super easy with Bootstrap.
https://www.npmjs.com/package/bootstrap

Just include the bootstrap code below to utilize their CDN:

<!– Latest compiled and minified CSS –>
<link rel=”stylesheet” href=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css” integrity=”sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u” crossorigin=”anonymous”>

<!– Latest compiled and minified JavaScript –>
<script src=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js” integrity=”sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa” crossorigin=”anonymous”></script>


#10 – jsPDF

PDFs are still the industry standard for “digital hard copies” of documents. jsPDF makes generating PDFs easy.
https://parall.ax/products/jspdf

<script src=”https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.debug.js”></script>
var pdf = new jsPDF();
pdf.text(30, 30, ‘Hello world!’);
pdf.save(‘hello_world.pdf’);