I needed to have MS Visio Professional on my new Win8 notebook, but paying $900 for the license was somewhat uncomfortable. Also relatively recently, Microsoft started offering Office 365 subscriptions where the software is offered as a monthly or yearly subscription instead of a one-off purchase.
It appears that MS Visio is also offered as subscription, but for some reason it’s not so easy to find: on the product page, you see only the full license for purchasing. But if you click to “Try or buy”, you have a “Learn more” link under the Visio Pro for Office 365 title.
Then, I could not find anywhere, which Office 365 subscription is needed to add Visio to it. So i thought, maybe I should just buy one, so I ordered the one which seemed the right one for my purposes, Office 365 Small Business Premium.
When I tried to add Visio Pro for Office 365 to my account, I got an error that this product is incompatible with my current subscription, and they tried to make me create a new subscription instead.
So, I opened a support request and they explained me that Visio can only be added to Office 365 Enterprise subscriptions!
I then asked them to cancel my subscription and promised to open an Enterprise one.
But: to say the truth, I actually had a valid Office 2007 license, and I only needed Visio. So, I made a new subscription for Visio only. Also funny, that even after deleting my first subscription, I could not use the same account name, and had to come up with a new name.
Actually that was not the end of the fun: after buying it, it took a while to find the installation link in the Office 365 Admin panel. Also when I clicked and downloaded something, it was not an installer in its traditional way. It was a self-extracting archive with a command line utility in it, and a sample XML file. Luckily this XML file had already an example for Visio, so I only needed to uncomment the relevant parts of it, and then use the command-line tool to download and set up the software. It was not difficult, but kind of surprising :)
So, finally I got Visio 2013 working, and Office 2007 has installed and activated smoothly. But I lost about hour or so because of:
After I got my US number at Callcentric, I got several wrong calls in the following days. The calls were quite late at night, and most of them dropped after few seconds, before I could take up the handset. And another ring around 3am was really long and loud, and it dropped anyway before I could come up and pick the call.
First, I needed to record my own greeting. In “default” dialplan, I added a new extension. It takes a recording and plays it back :
<!-- 7396: Record a greeting --> <extension name="app_7396"> <condition field="destination_number" expression="^7396$"> <action application="answer"/> <action application="sleep" data="500"/> <action application="playback" data="tone_stream://%(100,100,1400,2060,2450,2600)"/> <action application="set" data="playback_terminators=#"/> <action application="set" data="record_waste_resources=true"/> <action application="set" data="recfilename=$${base_dir}/recordings/greeting_${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> <action application="record" data="${recfilename}"/> <action application="sleep" data="700"/> <action application="playback" data="tone_stream://%(100,100,1400,2060,2450,2600)"/> <action application="playback" data="${recfilename}"/> <action application="hangup"/> </condition> </extension>As I’m using a Gigaset 610IP handset with G722 codec, the produced recording had 16KHz sampling rate, and needed to be resampled, because inbound external calls are G711 only:
sox recordings/greeting_2013-08-17-11-46-35.wav sounds/dvop/8000/ssinyagin_oob.wav rate 8000Then my extension in “public” dialplan is modified to play the greeting unless the call is between 7am and 11pm. It also plays MOH for 5 seconds before bridging the call, and continues playing MOH while ringing my phone. This gives the mistaken caller another chance to realize that something is wrong and drop the call.
<extension name="pub_ssinyagin"> <condition field="destination_number" expression="^ssinyagin$" break="on-false"> <action application="set" data="timezone=Europe/Zurich" inline="true"/> </condition> <!-- 7:00 - 23:00 --> <condition minute-of-day="420-1000" break="on-true"> <action application="answer"/> <action application="set" data="playback_timeout_sec=5"/> <action application="playback" data="$${hold_music}"/> <action application="set" data="ringback=$${hold_music}"/> <action application="transfer" data="7110 XML default"/> </condition> <condition> <action application="answer"/> <action application="sleep" data="1000"/> <action application="playback" data="$${sounds_dir}/dvop/ssinyagin_oob.wav"/> <action application="hangup"/> </condition> </extension>Callcentric offers US numbers in NY area code, with zero recurring costs. This is very convenient if you want your USA customers to connect to your PBX. After ordering a free number, you create a SIP account and route the DID to it. The service allows to register multiple free numbers. Forwarding to SIP URI is not supported.
Upon receiving a call, the caller ID in From field will look like 16313335447, with the country code without any leading symbols. The following piece of FreeSWITCH configuration (in public context) alters the caller ID in order to look like a normal number in a European dial plan:
<extension name="intl_normalize" continue="true"> <!-- remove Swiss country code --> <condition field="${caller_id_number}" expression="^41(\d+)" break="on-true"> <action application="set" data="effective_caller_id_number=0$1"/> <action application="set" data="effective_caller_id_name=0$1"/> </condition> <!-- add 00 in front of country code --> <condition field="${caller_id_number}" expression="^[1-9]" break="on-true"> <action application="set" data="effective_caller_id_number=00${caller_id_number}"/> <action application="set" data="effective_caller_id_name=00${caller_id_number}"/> </condition> </extension>It is important to set both effective_caller_id_number and effective_caller_id_name variables. If only effective_caller_id_number is set, the effective_caller_id_name still keeps the original caller ID number, and if the call is bridged to a local extension, the SIP phone may want to use it for displaying the caller.
Here’s a new website where I promote the VoIP integration services on Swiss market: http://www.voxserv.ch/
The website is built with the Twitter Bootstrap, and here are the templates for template-toolkit which separate the Bootstrap HTML from text content: https://github.com/ssinyagin/voxserv.ch/tree/master/builder
SIP clients installed on smartphones may pick up the destination number from the phone book, and it’s sometimes in e.164 format (+[countrycode][localdigits]).
The following piece of XML dialplan transforms such numbers into the standard form that is expected by most PSTN VoIP providers. This example assumes that the FreeSWITCH server is located in Switzerland and +41 is the e.164 prefix for in-land calls. It returns the call to the same context, making the switch traverse the whole context dialplan from the beginning. It makes sense to place this extension at the bottom of a context.
<extension name="e164_pstn"> <condition field="destination_number" expression="^\+41(\d+)" break="on-true"> <action application="transfer" data="0$1 XML ${context}"/> </condition> <condition field="destination_number" expression="^\+(\d+)" break="on-true"> <action application="transfer" data="00$1 XML ${context}"/> </condition> </extension>The user has several SIP accounts on a vPBX, and he wants that maximum one call is possible at a time.
The limit application in FreeSWITCH allows to control the number of concurrent calls, but one should be careful with when this limit should be applied. The switch decrements the limit counter automatically when a channel is terminated. But if the limit is executed on a-leg, and b-leg is transferred, the limit counter decreases only when the a-leg finishes the call. As a result, the user may receive a call, transfer it to a new destination and hang up, but the new calls are not coming in because the limit counter is reset when the original call ends.
In order to reset the limit counter after the b-leg is transferred, the limit application needs to be executed on b-leg only. This is possible by exporting the execute_on_answer variable with nolocal modifier.
The example also shows how to retrieve user variables from the XML directory in the calls toward the user.
<context name="moretti"> <extension name="common_variables" continue="true"> <condition> <action inline="true" application="set" data="availability_username=moretti"/> </condition> </extension> <extension name="pstn_out"> <condition field="destination_number" expression="^[01]" break="on-false"> <!-- For outbound calls, we only set the limit counters, but do not limit the call --> <action application="limit" data="hash ${domain_name} ${availability_username} -1"/> <action application="set" data="hangup_after_bridge=true"/> <action application="set" data="continue_on_fail=false"/> </condition> <condition> <action application="bridge" data="${outgw}/${destination_number}"/> </condition> </extension> <extension name="inbound_73x"> <condition field="destination_number" expression="^73(d)$" break="on-false"> <!-- retrieve variables from the user entry in the directory --> <action application="set" data="directory_userid=70$1@${domain_name}"/> <action application="set" data="call_timeout=${user_data(${directory_userid} var ring_timeout)}"/> </condition> <!-- check the limit --> <condition field="${cond(${limit_usage(hash ${domain} ${availability_username})} > 0 ? true:false)}" expression="^true$" break="on-true"> <action application="hangup"/> </condition> <!-- group call to the SIP user and a mobile phone --> <condition> <action application="export" data="nolocal:execute_on_answer=limit hash ${domain} ${availability_username} -1"/> <action application="set" data="ignore_early_media=true"/> <action application="set" data="transfer_ringback=$${hold_music}"/> <action application="set" data="hangup_after_bridge=true"/> <action application="set" data="continue_on_fail=false"/> <action application="bridge" data="user/${directory_userid},[leg_delay_start=10]${outgw}/0123456789"/> </condition> </extension> </context>Phosfluorescently utilize future-proof scenarios whereas timely leadership skills. Seamlessly administrate maintainable quality vectors whereas proactive mindshare.
Dramatically plagiarize visionary internal or "organic" sources via process-centric. Compellingly exploit worldwide communities for high standards in growth strategies.
Wow, this most certainly is a great a theme.
Donec sed odio dui. Nulla vitae elit libero, a pharetra augue. Nullam id dolor id nibh ultricies vehicula ut id elit. Integer posuere erat a ante venenatis dapibus posuere velit aliquet.
Donec sed odio dui. Nulla vitae elit libero, a pharetra augue. Nullam id dolor id nibh ultricies vehicula ut id elit. Integer posuere erat a ante venenatis dapibus posuere velit aliquet.