IP Phone

From Medien Wiki

Kontextmenü in OS X Address Book

Um über ein Klick den im OS X Adressbuch geöffneten Kontakt anzuwählen kann folgendes AppleScript verwendet werden, es kann als Call with IP Phone.scpt in ~/Library/Address Book plugins/ gelegt werden. Voraussetzung für das Funktionieren des Scripts ist, dass man schon die Sicherheitszertifikate der Webdialer-URL mit Safari importiert hat und dass man in dort schon eingeloggt ist (Login muss beim SCC beantragt werden).

-- AppleScript(+JavaScript) to dial phone numbers with a Cisco IP Phone from the Mac OS Address Book via the Webdialer URL
-- 2011 Max Neupert, Bauhaus-Universität Weimar with the help of the world wide web and Google

-- some snippets are taken from http://www.mactech.com/articles/mactech/Vol.21/21.10/ScriptingAddressBook/index.html
using terms from application "Address Book"
	on action property
		return "phone"
	end action property
	
	on action title for p with e
		return "mit IP Phone wählen"
	end action title
	
	on should enable action for p with e
		return true
	end should enable action
	
	on perform action for p with e
		set theNumberInAddressBook to value of e
		set theNumberInAddressBook to theNumberInAddressBook's words as string
		set lengthOfNumber to length of theNumberInAddressBook
		
		-- the following lines replace the international prefix for germany (+49, or 0049) with 0
		if theNumberInAddressBook begins with "+49" then
			set theFormattedNumber to "0" & characters -1 thru -(lengthOfNumber - 3) of theNumberInAddressBook
		else if theNumberInAddressBook begins with "0049" then
			set theFormattedNumber to "0" & characters -1 thru -(lengthOfNumber - 4) of theNumberInAddressBook
		else if theNumberInAddressBook begins with "+" then
			set theFormattedNumber to "00" & characters -1 thru -(lengthOfNumber - 1) of theNumberInAddressBook
		else if theNumberInAddressBook begins with "00" then
			set theFormattedNumber to "00" & characters -1 thru -(lengthOfNumber - 2) of theNumberInAddressBook
		end if
		
		-- in case if it's an internal number (attention, it just checks for 58xxxx at the end of the number!) just dial the last 4 numbers
		ignoring white space, punctuation, diacriticals and case
			if character -6 of theFormattedNumber is "5" then
				if character -5 of theFormattedNumber is "8" then
					set theNumberToBeDialed to characters -1 thru -4 of theFormattedNumber
				else
					-- the following line adds a 0 = “Amtsholung”
					set theNumberToBeDialed to "0" & theFormattedNumber
				end if
			end if
		end ignoring
		tell application "Safari"
			activate
			open location "https://telefon.uni-weimar.de/webdialer/Webdialer"
			
			-- wait until page is completely loaded
			-- taken from http://www.mactipper.com/2009/10/run-applescript-when-webpage-is-done.html
			delay 0.5
			repeat until ((do JavaScript "document.readyState" in document 1) is "complete")
				delay 0.25
			end repeat
			
			do JavaScript "document.forms['loginForm'].elements['destination'].value ='" & theNumberToBeDialed & "'" in document 1
			do JavaScript "document.forms['loginForm'].elements['dial'].click()" in document 1
			
		end tell
		return true
	end perform action
end using terms from

Known Bugs:

  1. University numbers like +49 3643 583872 will be called externally, that means it will cost money! (surprisingly the cisco phone system isn't that smart to correct that internally) fixed
  2. doesn't work with phone number which start like 0049...., (0049), (49) fixed
  3. browser window opens and resizes
  4. only works with phone numbers in Germany so far fixed
  5. doesn't work if page loading in browser takes longer than 1 sec. fixed.