don't_panic
personal and professional blog of mike pultz, technology specialist and serial entrepreneur.

2Aug/101

Mr.DNS Network Tools v1.7

I've released a new version of the Mr.DNS Network Tools website.

This release just has one new feature - "Website Neighbors"; this gives you a comprensive list of all the websites hosted on the same IP address as the IP address or hostname provided.

Hosting hundreds if not thousands of sites, on a single IP address is fairly common practice for shared web hosting providers- there's absolutely nothing wrong with it, but this gives you a good idea of how many, and what sites are hosted on the same system as your website.

This list is never 100% complete, but it will give you a fairly accurate estimate.

16Jul/100

Mr.DNS Network Tools v1.6

I've released a new version of the Mr.DNS Network Tools website.

New features include:

SPF Parsing and Validation:

DNS SRV Records:

HTTP Header Parsing for any HTTP/HTTPS URL:

and many other small changes and fixes.

6Jul/100

Mr.DNS Network Tools v1.4

I've updated the Mr.DNS site and included several new features:

Visual Trace Routes - overlays each hop of the trace route on a google map:

Real-Time Multi-RBL and URIBL checks:

Real-Time SMTP Server Validation:

more features to come soon.

16May/100

Automatic Dial Resource Fail-over in Asterisk

Asterisk is generally pretty reliable, but termination providers aren't always so good; in a market where anybody can re-sell an upstream provider, or setup a few Asterisk boxes and start routing calls for people, it's generally a good idea to have a "backup" provider (or three) to route your calls through.

You can easily setup an Asterisk system, to fail-over to secondary systems, if your primary provider fails for some reason- and this can all be done right in the dial plan, using a simple MACRO.

Add this MACRO to your dial plan:

[macro-direct-dial]
exten => s,1,Set(CALL_ATTEMPT=1)
exten => s,2,Set(TERM_PROVIDER=${TERM_PROVIDER1})
exten => s,3,Dial(${TERM_PROVIDER}/${ARG1},60)
exten => s,4,GotoIf($["${CALL_ATTEMPT}" >= "${MAX_PROVIDERS}"]?s-CANCEL,1)
exten => s,5,Set(CALL_ATTEMPT=$[${CALL_ATTEMPT} + 1])
exten => s,6,Goto(s-${DIALSTATUS},1)

exten => s-BUSY,1,Noop()
exten => s-NOANSWER,1,Noop()
exten => s-CANCEL,1,Hangup()
exten => s-HANGUP,1,Hangup()

exten => s-CHANUNAVAIL,1,Set(TERM_PROVIDER=${EVAL(${TERM_PROVIDER${CALL_ATTEMPT}})})
exten => s-CHANUNAVAIL,2,Goto(s,3)

exten => s-CONGESTION,1,Set(TERM_PROVIDER=${EVAL(${TERM_PROVIDER${CALL_ATTEMPT}})})
exten => s-CONGESTION,2,Goto(s,3)

Now you'll need to route your calls into this MACRO; this can vary by dial plan, as you may have a special configuration for different area codes, or country codes, or based on some least-cost-routing business decisions, but a simple example would be something like this:

[default]
exten => _1NXXNXXXXXX,1,Answer()
exten => _1NXXNXXXXXX,2,Macro(direct-dial,${EXTEN})
exten => _1NXXNXXXXXX,3,Hangup()

This routes any NANPA numbers through the direct-dial MACRO above, passing in the phone number as the first argument to the MACRO.

Now, before this will work, you'll need to configure some variables; this can be done in many places- in my working configuration, I have these variables dynamically generated via an AGI script, based on the phone number being dialed. This way I can control dial-groups, by phone number, based on a cost/preference/etc.

In this example, we'll simply set these values in the globals section of the extensions.conf file:

[globals]
TERM_PROVIDER1 = SIP/first_provider
TERM_PROVIDER2 = IAX/second_provider
TERM_PROVIDER3 = SIP/last_provider
MAX_PROVIDERS = 3

So I've configured three fictitious termination providers; you can specify as many as you like, as long as the TERM_PROVIDER increments one for each, and you set the MAX_PROVIDERS value to the total number of providers listed.

This is obviously more useful if this list is automatically generated somehow, or changed based on the phone number being dialed, otherwise the retries could simply be hard-coded into the dial plan.

Now when you dial your number, it will start with the first (default) provider; if the dial() function returns a congestion or channel un-available error, the MACRO will cycle to the next provider, until it as gone through all of the providers listed.

18Feb/100

Fonolo iPhone App In The News

We've received a tremendous amount of press coverage in the week since we launched the Fonolo iPhone application, including a quick spot on the ABC News tech bytes segment.

It was also featured on:

lifehacker- Fonolo Skips Automated Customer Service Phone Trees, Now on iPhone

TMCnet.com - Fonolo Launches Free iPhone App

CNet - Fonolo's deep dialer comes to the iPhone

Techvibes - Fonolo lets iPhone users skip corporate phone hell

and many other sites.

We couldn't be happier!

Stay tuned for some upcoming additions.

Tagged as: , No Comments