<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.innovaphone.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aza</id>
	<title>innovaphone wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.innovaphone.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aza"/>
	<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Special:Contributions/Aza"/>
	<updated>2026-05-05T13:32:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference15r1:Concept_myApps_platform_services&amp;diff=79490</id>
		<title>Reference15r1:Concept myApps platform services</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference15r1:Concept_myApps_platform_services&amp;diff=79490"/>
		<updated>2026-04-17T05:47:31Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* myApps for iOS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|myApps]]&lt;br /&gt;
&lt;br /&gt;
myApps platform services provide various operating system specific services which can be used by other &#039;&#039;Apps&#039;&#039; running in the [[{{NAMESPACE}}:Concept myApps|myApps client]]. Those services typically are not available in the browser&#039;s JavaScript environment and hence must be implemented in native platform code. Therefore, the platform services are installed as native executable on the respective platform.&lt;br /&gt;
&lt;br /&gt;
When myApps is started in a web browser (and hence has no access to the platform services), some Apps will use [https://en.wikipedia.org/wiki/WebRTC WebRTC] services implemented by the browser instead.  For ease of reference, features available in this scenario are also described here.&lt;br /&gt;
&lt;br /&gt;
On windows, the platform services also come with their own web browser in which the myApps web App will be started then.  This browser is based on google&#039;s [https://en.wikipedia.org/wiki/Chromium_(web_browser) Chromium] open source software.&lt;br /&gt;
= Applies To =&lt;br /&gt;
&lt;br /&gt;
* [[{{NAMESPACE}}:Concept myApps|myApps]]&lt;br /&gt;
* myApps for Windows&lt;br /&gt;
* myApps for macOS&lt;br /&gt;
* myApps for iOS&lt;br /&gt;
* myApps for Android&lt;br /&gt;
&lt;br /&gt;
* myApps Web App (WebRTC)&lt;br /&gt;
version 14r2&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
Not all features are available or required on all platforms.&lt;br /&gt;
 {|&lt;br /&gt;
! style=&amp;quot;text-align: left; font-weight: bold&amp;quot; | Feature&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;text-align: left; font-weight: bold&amp;quot; | Description&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;text-align: left; font-weight: bold&amp;quot;| Availability&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| || || Windows || iOS || Android || macOS || Browser&amp;lt;ref&amp;gt;This refers to the myApps web application running in a browser with no platform services available&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| audio || manage local audio devices to record and playback audio conversations || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; (audio available but devices managed by web browser)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| video || manage local displays and cameras to capture and render video live stream || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; (video available but devices managed by web browser)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| ringer || manage local ringing device || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| application sharing&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp; presenter || share an application || &amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp; consumer  || view an application shared by the peer || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| hot keys || capture key presses for quick invocation of phone apps (e.g. dial selected number) || &amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10004; || &amp;amp;#10007;&lt;br /&gt;
|-&lt;br /&gt;
| tel: and sip: URI handler || intercept clicks on tel: and sip: links in web sites to invoke phone apps || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10007;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| user activity || set presence state according to user activity ||  &amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10004; || &amp;amp;#10004;&amp;lt;ref&amp;gt;limited, see [[#User activity|User activity]] below&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| docking || myApps can be docked persistently to the right or left edge of your screens ||  &amp;amp;#10004;  || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10007;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| multi-windowing|| Apps can be launched in separate windows||  &amp;amp;#10004;  || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10004; || &amp;amp;#10007;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| recording|| Calls can be recorded to recording app||  &amp;amp;#10004;  || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10007;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| notifications || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp; display notifications || display notifications with OS standard mechanism ||  &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp; push notifications || receive push notifications while myApps is not running  ||  &amp;amp;#10007; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004;&amp;lt;ref&amp;gt;The browser needs to be running in order to receive push notifications.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp; chat and apps || display notifications for chat and other apps  ||  &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp; calls || display notifications for incoming calls  ||  &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10007;&amp;lt;ref&amp;gt;Call notifications are only displayed locally while the phone or softphone app is started.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| phone book access || access local phone book ||  &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10007;&lt;br /&gt;
|-&lt;br /&gt;
| office presence provider || maps PBX presence state to Microsoft office presence state ||  &amp;amp;#10004;  || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10007;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| external application start || start arbitrary external applications for calls || &amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10004; || &amp;amp;#10007;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| app proxy|| a caching proxy that provides app persistence  || &amp;amp;#10004;  || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10007;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| auto update || automatically updates myApps platform services to the same version the PBX has || &amp;amp;#10004;  || &amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10004; || &amp;amp;#10004;&amp;lt;ref&amp;gt;The then-current web app is always loaded from the PBX upon startup and hence up-to-date by definition&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| three party conference || initiate 3-pty-conference using Softphone-App || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10007;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| exclude VPN || disable use of VPN connections for audio and appsharing || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10007;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Requirements=&lt;br /&gt;
* innovaphone PBX 14r2 and up&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Recommended hardware requirements&lt;br /&gt;
* Processor: Dual-core 2Ghz or higher&lt;br /&gt;
* RAM: 4 Gb&lt;br /&gt;
&lt;br /&gt;
== myApps for Windows ==&lt;br /&gt;
* Windows 10 and up&lt;br /&gt;
* Windows Server 2016 and later versions&lt;br /&gt;
&lt;br /&gt;
=== 32 &amp;amp; 64 bit Windows ===&lt;br /&gt;
* 32 bit Windows: install the myAppsSetup32.msi from the App Store&lt;br /&gt;
* 64 bit Windows: install the myAppsSetup.msi from the App Store&lt;br /&gt;
** the 64 bit variant still installs into Program Files (x86), as the main myApps.exe is still a 32bit application&lt;br /&gt;
** the 64 bit variant just contains an additional 64 bit binary for the outlook search&lt;br /&gt;
&lt;br /&gt;
=== Windows N editions ===&lt;br /&gt;
&lt;br /&gt;
Windows N editions are missing the &#039;&#039;Media Feature Pack&#039;&#039; which is pre installed on other Windows versions.&lt;br /&gt;
&lt;br /&gt;
Please install the pack from [https://www.microsoft.com/en-us/software-download/mediafeaturepack Microsoft (Windows 10 pack)] before you install myApps. The installer will check if the file &amp;lt;code&amp;gt;C:\Windows\SysWOW64\mfplat.dll&amp;lt;/code&amp;gt; exist on your system.&lt;br /&gt;
&lt;br /&gt;
Make sure to install the correct pack depending on your Windows version! There are different packs for Windows 10 1703, 1803, 1809 and 32bit or 64bit etc.&lt;br /&gt;
&lt;br /&gt;
NB: Sometimes the myApps installation will not work even though the media pack is already installed. This is because the installer has no read access to check if the package is already installed. If the above-mentioned file exists and the installer asks to install the Windows Media Feature Pack nevertheless, you have to start the myApps install with administrative rights.&lt;br /&gt;
&lt;br /&gt;
=== Terminal Server environments ===&lt;br /&gt;
&lt;br /&gt;
Audio driver was removed if myApps discovers that it is running in a terminal server environment like Citrix.&lt;br /&gt;
&lt;br /&gt;
The audio driver is needed for the Softphone App but the Softphone App should not use an audio driver at the server side because the audio devices are plugged locally and there would be a delay sending and receiving audio data with the server.&lt;br /&gt;
&lt;br /&gt;
If a customer wants to use the Softphone App at the server side he needs to make use of the myApps Plugin for virtual desktops solution:&lt;br /&gt;
&lt;br /&gt;
[[{{NAMESPACE}}:MyApps_Plugin_for_Virtual_Desktops|Reference15r1:MyApps_Plugin_for_Virtual_Desktops]]&lt;br /&gt;
&lt;br /&gt;
== myApps for macOS ==&lt;br /&gt;
* macOS 10.13 or higher&lt;br /&gt;
&lt;br /&gt;
== myApps for iOS ==&lt;br /&gt;
* iOS 13 or higher&lt;br /&gt;
&lt;br /&gt;
== myApps for Android ==&lt;br /&gt;
* Android 6.0 or higher. Android 6.x may need an update of the Chrome browser.&lt;br /&gt;
&lt;br /&gt;
= Licenses =&lt;br /&gt;
* No license needed for myApps platform services&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
myApps platform services is a native executable that is installed using the standard mechanisms on the respective operating system. It provides various advanced services which can be used by the myApps web client code as well as the Apps running in the myApps context. &lt;br /&gt;
&lt;br /&gt;
Also, on Windows, the platform services come with their own, dedicated browser to run myApps in.  This browser is based on [https://en.wikipedia.org/wiki/Chromium_(web_browser) Chromium].  On iOS, macOS and Android, it is based upon native embedded web view facilities (such as WKWebView) instead.&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
=== RTP service for audio and appsharing ===&lt;br /&gt;
The RTP service provides audio and appsharing as a video stream. VoIP RTP endpoints (e.g. for softphones).  It supports STUN, TURN, ICE, SRTP, DTLS. Note however that unlike WebRTC, these endpoints do not &#039;&#039;require&#039;&#039; ICE and DTLS. In other words, they can communicate also with non-compliant (i.e. older) VoIP devices.&lt;br /&gt;
&lt;br /&gt;
Note that the available capabilities when not running the myApps platform services depend on the used browser&#039;s WebRTC implementation. See your browser documentation for details.&lt;br /&gt;
&lt;br /&gt;
Apps can request RTP channels using the [https://sdk.innovaphone.com/doc/launcher/Media.htm Media Protocol]&#039;s &#039;&#039;AllocChannel&#039;&#039; message.&lt;br /&gt;
&lt;br /&gt;
===== RTP ports=====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|  audio || 50000 -&amp;gt; 50099&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| video (app sharing) || 50100 -&amp;gt; 50199&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The RTP service will enumerate all local interfaces and create local HOST candidates for ICE.  There is an option however to disregard VPN interfaces (more precisely such interfaces with type of &#039;&#039;IF_TYPE_PPP&#039;&#039; or &#039;&#039;IF_TYPE_TUNNEL&#039;&#039;).  This can eliminate quality issues when RTP data is transmitted through TCP based VPN tunnels.&lt;br /&gt;
&lt;br /&gt;
SRFLX and RELAY candidates are obtained using the STUN and TURN server configuration passed by the App (e.g the &#039;&#039;softphone&#039;&#039; App) as part of the &#039;&#039;AllocChannel&#039;&#039; request.&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;mt&amp;quot;:&amp;quot;AllocChannel&amp;quot;,&amp;quot;channel&amp;quot;:&amp;quot;81429cba-396d-43de-8a76-ec020ba8796e&amp;quot;,&amp;quot;iceServers&amp;quot;:[{&amp;quot;urls&amp;quot;:&amp;quot;turn:myturn.domaincom:4077?transport=udp&amp;quot;,&amp;quot;username&amp;quot;:&amp;quot;turnuser&amp;quot;,&amp;quot;credential&amp;quot;:&amp;quot;pwd&amp;quot;,&amp;quot;credentialType&amp;quot;:&amp;quot;password&amp;quot;},{&amp;quot;urls&amp;quot;:&amp;quot;stun:mystun.domain.com:4077&amp;quot;}],&amp;quot;dn&amp;quot;:&amp;quot;Foo Bar&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;RemoteRtp&amp;quot;,&amp;quot;kind&amp;quot;:&amp;quot;video&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Codecs =====&lt;br /&gt;
&lt;br /&gt;
The installed myApps launchers provide codecs that can be used by softphone apps for media streams. When running in a web browser the codecs depend on the browser version and operating system. See the documentation of your browser for details.&lt;br /&gt;
&lt;br /&gt;
The following codecs are supported:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!style=&amp;quot;text-align:left;width:100px;&amp;quot;|Codec&lt;br /&gt;
!style=&amp;quot;width:100px&amp;quot;|Windows-Launcher&lt;br /&gt;
!style=&amp;quot;width:100px&amp;quot;|Android&lt;br /&gt;
!style=&amp;quot;width:100px&amp;quot;|iOS&lt;br /&gt;
!style=&amp;quot;width:100px&amp;quot;|macOS&lt;br /&gt;
!style=&amp;quot;width:100px&amp;quot;|Firefox (Browser)&lt;br /&gt;
!style=&amp;quot;width:100px&amp;quot;|Chrome (Browser)&lt;br /&gt;
!style=&amp;quot;width:100px&amp;quot;|Edge (Browser)&lt;br /&gt;
!style=&amp;quot;width:100px&amp;quot;|Safari (Browser)&lt;br /&gt;
!style=&amp;quot;width:100px&amp;quot;|Opera (Browser)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left; background-color:lightgray&amp;quot; colspan=&amp;quot;10&amp;quot;|Audio&lt;br /&gt;
|-&lt;br /&gt;
|G711A&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|-&lt;br /&gt;
|G711u&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|-&lt;br /&gt;
|G722&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|-&lt;br /&gt;
|G729&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|-&lt;br /&gt;
|G729A&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|-&lt;br /&gt;
|G729B&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|-&lt;br /&gt;
|G729AB&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|-&lt;br /&gt;
|[https://caniuse.com/#search=Opus OPUS-NB]&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|-&lt;br /&gt;
|[https://caniuse.com/#search=Opus OPUS-WB]&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left; background-color:lightgray&amp;quot; colspan=&amp;quot;10&amp;quot;|Video&lt;br /&gt;
|-&lt;br /&gt;
|[https://caniuse.com/#search=VP8 VP8]&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[https://caniuse.com/#search=VP9 VP9]&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔**&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔**&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔**&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔**&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔**&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔**&lt;br /&gt;
|-&lt;br /&gt;
|[https://caniuse.com/#search=H264 H264]&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔**&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left; background-color:lightgray&amp;quot; colspan=&amp;quot;10&amp;quot;|Application Sharing&lt;br /&gt;
|-&lt;br /&gt;
|Share&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|-&lt;br /&gt;
|Watch&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔*&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔*&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|style=&amp;quot;color:red;text-align:center;font-weight:bold;&amp;quot;|X&lt;br /&gt;
|style=&amp;quot;color:green;text-align:center&amp;quot;|✔&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;* small presentation only&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;** only for 1:1 calls, not for conferences&lt;br /&gt;
&lt;br /&gt;
===== Video capture =====&lt;br /&gt;
&lt;br /&gt;
The default resolution for video capture is 1920x1080 if available.  Otherwise, 1280x720, 640x480, 352x288 or 320x240 will be used.  The frame rate is 30 fps if available, otherwise 15 fps. The resulting average bandwidth could reach 1 Mbps.&lt;br /&gt;
&lt;br /&gt;
===== Application sharing =====&lt;br /&gt;
&lt;br /&gt;
Screen content will be transmitted as video stream by the presenter&lt;br /&gt;
&lt;br /&gt;
===== Device handling =====&lt;br /&gt;
&lt;br /&gt;
The RTP service enumerates microphones, loudspeaker, cameras and ringing devices and notifies apps when devices come and go. It is up to the apps using the devices to store preferences.&lt;br /&gt;
&lt;br /&gt;
The RTP service also enables some extended features (such as hook switch or volume control) for supported USB headsets or Bluetooth headsets connected to myApps.&lt;br /&gt;
The supported headset-SDKs determine which headset vendors are recommended to be used with the myApps softphone app. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this to work, the following vendor specific development kits are integrated in our myApps client. Be aware that the SDK are updated within our Service release :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SDK Vendor !! Supported OS !! SDK Version !! innovaphone Service Release&lt;br /&gt;
|-&lt;br /&gt;
| Jabra|| MacOS || 1.16.4.0 || 15r1sr3&lt;br /&gt;
|-&lt;br /&gt;
||| Windows || 1.12.2.0 || 13r3sr10&lt;br /&gt;
|-&lt;br /&gt;
| Epos &#039;&#039;(formerly Sennheiser)&#039;&#039; || MacOS || 12.4.0.5478 || 14r1sr3&lt;br /&gt;
|-&lt;br /&gt;
||| Windows || n.a. - [[Support:13r3 sr10 MyApps Windows Client - Epos/Sennheiser-Headsets require installed Epos-Connect Software|to be installed separately]]|| 13r3sr10&lt;br /&gt;
|-&lt;br /&gt;
| Poly &#039;&#039;(formerly Plantronics)&#039;&#039; || MacOS || 3.25.53799.37131 || 13r3sr9&lt;br /&gt;
|-&lt;br /&gt;
||| Windows || 3.25.53800.37131 || 13r3sr10&lt;br /&gt;
|-&lt;br /&gt;
| Yealink || MacOS || 3.1.1.20 || 14r1sr3&lt;br /&gt;
|-&lt;br /&gt;
||| Windows || 3.1.1.20 || 14r1sr3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* It is possible to inhibit the start of the Sennheiser SDK (SenncomSDK.exe) using the &amp;lt;code&amp;gt;DISABLEHEADSETS&amp;lt;/code&amp;gt; directive of the installer (see [[#MSI Parameters and install options|  MSI parameters]]  below).&lt;br /&gt;
&lt;br /&gt;
* Starting with V13r3sr10, the Epos-SDK needs to be installed separately using the Epos Connect software to ensure full compatibility between current Epos headset models and native myApps-Windows client. For details [[Support:13r3 sr10 MyApps Windows Client - Epos/Sennheiser-Headsets require installed Epos-Connect Software|refer to this article]].&lt;br /&gt;
&amp;lt;!--Keywords: myapps softphone supported headsets sdk--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Ring tones =====&lt;br /&gt;
&lt;br /&gt;
Ring tones can be played. Apps can choose the tone from a pre-defined list of ring tones.&lt;br /&gt;
&lt;br /&gt;
On Windows, custom ring tones can be uploaded as .mp3 files to the &amp;lt;code&amp;gt;ringtones&amp;lt;/code&amp;gt; sub-directory of myApps&#039; roaming directory (which usually is in &amp;lt;code&amp;gt;%appdata%\innovaphone\myApps\ringtones&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
On Android, custom ring tones can be added to the system via Android settings.&lt;br /&gt;
&lt;br /&gt;
On iOS, custom ring tones can be uploaded as .mp3 files to the &amp;lt;code&amp;gt;Ringtones&amp;lt;/code&amp;gt; subdirectory of the myApps file share that is available in iTunes if the iPhone has been connected via USB.&lt;br /&gt;
&lt;br /&gt;
On macOS, custom ring tones can be uploaded as .mp3 files to &amp;lt;code&amp;gt;~/Library/Containers/com.innovaphone.client-macos/Data/Documents/Ringtones&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Debugging =====&lt;br /&gt;
For extended debugging, turn on the &#039;&#039;Audio&#039;&#039;, &#039;&#039;Media&#039;&#039; and &#039;&#039;AppSharing&#039;&#039; traces in myApps.&lt;br /&gt;
&lt;br /&gt;
=== Hot keys ===&lt;br /&gt;
On Windows and macOS systems, myApps platform services can listen for hot keys and invoke certain functions. Invocation is done by sending API messages to myApps which passes it to an appropriate API provider (in the cases described here, this will be a &#039;&#039;phone&#039;&#039; or &#039;&#039;softphone&#039;&#039; or &#039;&#039;rcc&#039;&#039; App typically.  See [[{{NAMESPACE}}:Concept_myApps#Client_APIs_and_default_apps | Client APIs and default apps]] for more details about this mechanism.&lt;br /&gt;
&lt;br /&gt;
The hot keys can be specified using the &#039;&#039;advanced settings&#039;&#039; user interface (see [[#UI elements| UI elements]] below. Any of the function keys F1 to F11 (optionally combined with up to two modifier keys &#039;&#039;alt&#039;&#039;, &#039;&#039;ctrl&#039;&#039;, &#039;&#039;shift&#039;&#039; or &#039;&#039;win&#039;&#039;) can be chosen for each function. If you do not want to start the call with &amp;quot;Hotkey+Enter&amp;quot; because you would have to wait for the focus, the hotkey can also be pressed twice and the number is dialled directly.&lt;br /&gt;
&lt;br /&gt;
; dial selected number : Initiates a call using the currently selected text as target.&lt;br /&gt;
&lt;br /&gt;
: A &#039;&#039;PrepareCall&#039;&#039; message with the &#039;&#039;text&#039;&#039; argument set to the selected text and the &#039;&#039;adjust&#039;&#039; argument set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; will be sent to the [http://sdk.innovaphone.com/web1/com.innovaphone.phone/com.innovaphone.phone.htm &#039;&#039;com.innovaphone.phone&#039;&#039; API].&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;code&amp;gt;{&amp;quot;mt&amp;quot;:&amp;quot;ApiRequest&amp;quot;,&amp;quot;apiId&amp;quot;:&amp;quot;com.innovaphone.phone&amp;quot;,&amp;quot;consumer&amp;quot;:&amp;quot;@local-ae2fc2ab74-3f1e-4ab9-b215-d42f213520317&amp;quot;,&amp;quot;msg&amp;quot;:&amp;quot;mt&amp;quot;:&amp;quot;PrepareCall&amp;quot;,&amp;quot;text&amp;quot;:&amp;quot;13&amp;quot;,&amp;quot;adjust&amp;quot;:true}}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; accept call : Accepts a currently alerting call.&lt;br /&gt;
&lt;br /&gt;
: A &#039;&#039;ConnectCall&#039;&#039; message will be sent to the [http://sdk.innovaphone.com/web1/com.innovaphone.phone/com.innovaphone.phone.htm &#039;&#039;com.innovaphone.phone&#039;&#039; API].&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;code&amp;gt;{&amp;quot;mt&amp;quot;:&amp;quot;ApiRequest&amp;quot;,&amp;quot;apiId&amp;quot;:&amp;quot;com.innovaphone.phone&amp;quot;,&amp;quot;consumer&amp;quot;:&amp;quot;@local-ae2fc2ab74-3f1e-4ab9-b215-d42f213520317&amp;quot;,&amp;quot;msg&amp;quot;:{&amp;quot;mt&amp;quot;:&amp;quot;ConnectCall&amp;quot;}}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; reject/disconnect call : Rejects a currently alerting call or disconnects an active call.&lt;br /&gt;
&lt;br /&gt;
: A &#039;&#039;DisconnectCall&#039;&#039; message will be sent to the [http://sdk.innovaphone.com/web1/com.innovaphone.phone/com.innovaphone.phone.htm &#039;&#039;com.innovaphone.phone&#039;&#039; API].&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;code&amp;gt;{&amp;quot;mt&amp;quot;:&amp;quot;ApiRequest&amp;quot;,&amp;quot;apiId&amp;quot;:&amp;quot;com.innovaphone.phone&amp;quot;,&amp;quot;consumer&amp;quot;:&amp;quot;@local-ae2fc2ab74-3f1e-4ab9-b215-d42f213520317&amp;quot;,&amp;quot;msg&amp;quot;:{&amp;quot;mt&amp;quot;:&amp;quot;DisconnectCall&amp;quot;}}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== URL Handler ===&lt;br /&gt;
&lt;br /&gt;
On Windows systems, two URI-handler are installed with the myApps platform services.  Windows will call up this URI handler when a user clicks on an appropriate link, for example in a web site.&lt;br /&gt;
&lt;br /&gt;
The handler will the send an API message to myApps which passes it to an appropriate API provider (in the cases described here, this will be a &#039;&#039;phone&#039;&#039; or &#039;&#039;softphone&#039;&#039; or &#039;&#039;rcc&#039;&#039; App typically.  See [[{{NAMESPACE}}:Concept_myApps#Client_APIs_and_default_apps | Client APIs and default apps]] for more details about this mechanism.&lt;br /&gt;
&lt;br /&gt;
; tel URI : call a number, e.g. &amp;lt;code&amp;gt;tel:4711&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: A &#039;&#039;PrepareCall&#039;&#039; message with the &#039;&#039;num&#039;&#039; argument set to the selected text and the &#039;&#039;adjust&#039;&#039; argument set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; will be sent to the [http://sdk.innovaphone.com/web1/com.innovaphone.phone/com.innovaphone.phone.htm &#039;&#039;com.innovaphone.phone&#039;&#039; API].&lt;br /&gt;
:: &amp;lt;code&amp;gt;{&amp;quot;mt&amp;quot;:&amp;quot;ApiRequest&amp;quot;,&amp;quot;apiId&amp;quot;:&amp;quot;com.innovaphone.phone&amp;quot;,&amp;quot;consumer&amp;quot;:&amp;quot;@local-ae2fc2ab74-3f1e-4ab9-b215-d42f213520317&amp;quot;,&amp;quot;msg&amp;quot;:{&amp;quot;mt&amp;quot;:&amp;quot;StartCall&amp;quot;,&amp;quot;num&amp;quot;:&amp;quot;4711&amp;quot;,&amp;quot;adjust&amp;quot;:true}}&amp;lt;/code&amp;gt;&lt;br /&gt;
; sip URI : call a SIP name, e.g. &amp;lt;code&amp;gt;sip:zkl@innovaphone.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: A &#039;&#039;PrepareCall&#039;&#039; message with the &#039;&#039;sip&#039;&#039; argument set to the selected text and the &#039;&#039;adjust&#039;&#039; argument set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; will be sent to the [http://sdk.innovaphone.com/web1/com.innovaphone.phone/com.innovaphone.phone.htm &#039;&#039;com.innovaphone.phone&#039;&#039; API].&lt;br /&gt;
:: &amp;lt;code&amp;gt;{&amp;quot;mt&amp;quot;:&amp;quot;ApiRequest&amp;quot;,&amp;quot;apiId&amp;quot;:&amp;quot;com.innovaphone.phone&amp;quot;,&amp;quot;consumer&amp;quot;:&amp;quot;@local-ae2fc2ab74-3f1e-4ab9-b215-d42f213520317&amp;quot;,&amp;quot;msg&amp;quot;:{&amp;quot;mt&amp;quot;:&amp;quot;StartCall&amp;quot;,&amp;quot;sip&amp;quot;:&amp;quot;zkl@innovaphone.com&amp;quot;,&amp;quot;adjust&amp;quot;:true}}&amp;lt;/code&amp;gt;&lt;br /&gt;
; im URI : start chat with SIP name, e.g. &amp;lt;code&amp;gt;im:zkl@innovaphone.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: A &#039;&#039;StartChat&#039;&#039; message with the &#039;&#039;sip&#039;&#039; argument set to the selected text will be sent to the [http://sdk.innovaphone.com/web1/com.innovaphone.chat/com.innovaphone.chat.htm &#039;&#039;com.innovaphone.chat&#039;&#039; API].&lt;br /&gt;
:: &amp;lt;code&amp;gt;{&amp;quot;mt&amp;quot;:&amp;quot;ApiRequest&amp;quot;,&amp;quot;apiId&amp;quot;:&amp;quot;com.innovaphone.chat&amp;quot;,&amp;quot;consumer&amp;quot;:&amp;quot;@local-ae2fc2ab74-3f1e-4ab9-b215-d42f213520317&amp;quot;,&amp;quot;msg&amp;quot;:{&amp;quot;mt&amp;quot;:&amp;quot;StartChat&amp;quot;,&amp;quot;sip&amp;quot;:&amp;quot;zkl@innovaphone.com&amp;quot;}}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On macOS systems myApps might be made the default application to handle tel URI e.g. &amp;lt;code&amp;gt;tel:4711&amp;lt;/code&amp;gt; via Apple FaceTime. Open the &amp;quot;FaceTime&amp;quot; menu &amp;quot;Settings...&amp;quot; and select myApps as &amp;quot;Default for phone calls&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
On iOS &#039;&#039;tel&#039;&#039; URIs are always dialed via GSM. Therefore myApps iOS also reacts to URI schemes &#039;&#039;com.innovaphone.tel&#039;&#039;, &#039;&#039;com.innovaphone.sip&#039;&#039; and &#039;&#039;com.innovaphone.im&#039;&#039;, e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;com.innovaphone.tel:4711&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;com.innovaphone.sip:zkl@innovaphone.com&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;com.innovaphone.im:zkl@innovaphone.com&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== User activity ===&lt;br /&gt;
On Windows and macOS systems, the myApps platform services can monitor user keyboard/mouse activity and change the user&#039;s presence state after a certain amount of inactivity.  The timeout can be specified using the &#039;&#039;advanced settings&#039;&#039; user interface (see [[#UI elements| UI elements]] below.&lt;br /&gt;
&lt;br /&gt;
myApps will then send a [https://sdk.innovaphone.com/doc/appwebsocket/myApps.htm#SetUserActivity&#039;&#039;SetUserActivity&#039;&#039;] message to the PBX using the &#039;&#039;myApps&#039;&#039; protocol.&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;{&amp;quot;mt&amp;quot;:&amp;quot;SetUserActivity&amp;quot;,&amp;quot;inactive&amp;quot;:true}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will change the &#039;&#039;status&#039;&#039; property of the &#039;&#039;im:&#039;&#039; contact for the user&#039;s own presence and hence result in a presence update from the PBX to myApps&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;{&amp;quot;mt&amp;quot;:&amp;quot;UpdateOwnPresence&amp;quot;,&amp;quot;presence&amp;quot;:[{...},{&amp;quot;contact&amp;quot;:&amp;quot;im:&amp;quot;,&amp;quot;activity&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;status&amp;quot;:&amp;quot;closed&amp;quot;}]}&amp;lt;/code&amp;gt;&lt;br /&gt;
The &#039;&#039;closed&#039;&#039; status is reflected in the grey status color when displaying a contact [[Image:myapps-inactive.png|myapps-inactive.png/|myapps-inactive.png/]].&lt;br /&gt;
&lt;br /&gt;
On iOS and Android, the state is set to &#039;&#039;inactive&#039;&#039; as soon as the App is brought to background.&lt;br /&gt;
When myApps platform services are not available (i.e. when running the web application in a browser solely) a limited user activity monitoring is available: the state is set to active when the web page is not used for more than 5 minutes.&lt;br /&gt;
&lt;br /&gt;
=== Recording ===&lt;br /&gt;
&lt;br /&gt;
The new launcher offers the possibility to record the audio of incoming and outgoing calls. In order to activate that functionality the URL of the recording instance must be configured in either the PBX (PBX-&amp;gt;myApps-&amp;gt;Config: Recording URL) or the softphone App (Settings-&amp;gt;Audio Recording (URL)) &lt;br /&gt;
&lt;br /&gt;
[[Image:PBX-Recording-Settings.png|pbx-recording-settings.png/|pbx-recording-settings.png/]] [[Image:Recording-Softphone-Settings.png|recording-softphone-settings.png/|recording-softphone-settings.png/]]. &lt;br /&gt;
&lt;br /&gt;
As long as that URL is configured the audio data of all calls are stored as pcap-files under that URL.&lt;br /&gt;
If the URL points to a CF device in the PBX, write access must be granted for that URL (PBX-&amp;gt;Services-&amp;gt;HTTP-&amp;gt;Server:Public compact flash access) and if the URL points to the recording app, the files can be accessed via the recording app [[{{NAMESPACE}}:Concept_App_Service_Recordings|recording]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Under PBX-&amp;gt;myApps the administrator can set a certain default behaviour of the audio recording like whether or not the recording should start automatically at the beginning of the call (Recording by Default ON/OFF), only calls with external numbers should be recorded (Record external calls only) or whether or not the user should be able to start/stop the recording himself (Allow user incall recording control). Except for the last parameter these parameters can also be modified by the user in its softphone settings if the administrator doesn&#039;t set the FORCE flag.&lt;br /&gt;
&lt;br /&gt;
If the user was allowed by the admin to control the recording a recording switch is active during the call when the &amp;quot;Media&amp;quot; Panel is opened. There the audio recording may be stopped and continued at will. A red recording notice is shown in the top right corner when the recording actually takes place.&lt;br /&gt;
 &lt;br /&gt;
[[Image:Recording-incall-switch.png|recording-incall-switch.png/|recording-incall-switch.png/]]&lt;br /&gt;
&lt;br /&gt;
=== Notifications ===&lt;br /&gt;
&lt;br /&gt;
The myApps platform services can use the OS specific notification mechanism (e.g. &#039;&#039;desktop notifications&#039;&#039; on Windows) to display messages (e.g. &#039;&#039;incoming new chat message&#039;&#039;) to the user.&lt;br /&gt;
&lt;br /&gt;
Note that the actual rendering of the notification is under control of the OS.  Therefore, myApps must be allowed to show notifications and its appearance can be restricted by OS native settings.&lt;br /&gt;
&lt;br /&gt;
==== Microsoft Windows Notifications ====&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows Server editions (2016, 2019, 2022) are just capable of showing a single &#039;&#039;IncomingCall&#039;&#039; notification at the same time (we couldn&#039;t find a workaround for this limitation).&amp;lt;br/&amp;gt;&lt;br /&gt;
An &#039;&#039;IncomingCall&#039;&#039; notification is visible the whole time instead of being moved to the action center after a certain time.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
A notification about a missed call uses the &#039;&#039;IncomingCall&#039;&#039; type so that this notification is visible until the user returns.&amp;lt;br/&amp;gt;&lt;br /&gt;
Due to the above limitation, on a new arriving call such a missed call notification is transformed to a default notification which will be moved to the action center automatically.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
On non server editions, you can have multiple IncomingCall notifications at the same time (so two parallel incoming calls will be indeed notified at the same time), but the missed call notification handling is the same on both platforms!&lt;br /&gt;
&lt;br /&gt;
 Thus there will be always just &#039;&#039;&#039;one&#039;&#039;&#039; missed call notification visible and previous missed calls can be found inside your action center!&lt;br /&gt;
&lt;br /&gt;
To see myApps notifications, ensure:&lt;br /&gt;
* System -&amp;gt; Notifications &lt;br /&gt;
** enable notifications&lt;br /&gt;
** disable &amp;quot;Do not disturb&amp;quot; or allow myApps as priority application while &amp;quot;Do not disturb&amp;quot; is active&lt;br /&gt;
** enable notifications for myApps in the list of applications&lt;br /&gt;
* System -&amp;gt; Focus &lt;br /&gt;
** if a focus session is active and the &amp;quot;Do not disturb&amp;quot; is activated during a focus session, make sure that myApps is a priority application (see above)&lt;br /&gt;
&lt;br /&gt;
==== macOS Notifications ====&lt;br /&gt;
Notifications are the same as on Windows.&lt;br /&gt;
The difference is, that for macOS, notifications need to be allowed in the system settings.&lt;br /&gt;
Go to Notifications - myApps, select Banner and enable all check marks.&lt;br /&gt;
&lt;br /&gt;
=== Local phonebook access ===&lt;br /&gt;
&#039;&#039;&#039;Contact Search:&#039;&#039;&#039; The myApps platform services implement an &#039;&#039;API provider&#039;&#039; for the [http://sdk.innovaphone.com/web1/com.innovaphone.search/lib1_api_search.htm &#039;&#039;com.innovaphone.search&#039;&#039; API]]. They perform search capabilities on the OS&#039; local phone books which can be used by Apps like the &#039;&#039;phoneapp&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Apps would send a &#039;&#039;Search&#039;&#039; request to the API:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;{&amp;quot;mt&amp;quot;:&amp;quot;ApiRequest&amp;quot;,&amp;quot;consumer&amp;quot;:&amp;quot;dev:SwPh_zkl_5e42e884&amp;quot;,&amp;quot;provider&amp;quot;:&amp;quot;*&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;4&amp;quot;,&amp;quot;msg&amp;quot;:{&amp;quot;mt&amp;quot;:&amp;quot;Search&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;contact&amp;quot;,&amp;quot;search&amp;quot;:&amp;quot;john doe&amp;quot;},&amp;quot;apiId&amp;quot;:&amp;quot;com.innovaphone.search&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
Search results are delivered as &#039;&#039;SearchInfo&#039;&#039; messages:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;{&amp;quot;mt&amp;quot;:&amp;quot;ApiResult&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;3&amp;quot;,&amp;quot;provider&amp;quot;:&amp;quot;@local-8125d22e37-519d-4056-bfe5-c52ef2ae8fabb0&amp;quot;,&amp;quot;consumer&amp;quot;:&amp;quot;dev:SwPh_zkl_5e42e884&amp;quot;,&amp;quot;client&amp;quot;:&amp;quot;@client-f62702dd86-be3f-47fc-b4bc-7a21627b75b2ea&amp;quot;,&amp;quot;msg&amp;quot;:{&amp;quot;mt&amp;quot;:&amp;quot;SearchInfo&amp;quot;,&amp;quot;relevance&amp;quot;:2000,&amp;quot;adjust&amp;quot;:true,&amp;quot;type&amp;quot;:&amp;quot;contact&amp;quot;,&amp;quot;contact&amp;quot;:{&amp;quot;givenname&amp;quot;:&amp;quot;John&amp;quot;,&amp;quot;sn&amp;quot;:&amp;quot;Doe&amp;quot;,&amp;quot;company&amp;quot;:&amp;quot;ACME&amp;quot;,&amp;quot;position&amp;quot;:&amp;quot;Head of everything&amp;quot;,&amp;quot;telephonenumber&amp;quot;:[&amp;quot;11111&amp;quot;,&amp;quot;22222&amp;quot;],&amp;quot;homephone&amp;quot;:[&amp;quot;+4944444&amp;quot;,&amp;quot;33333&amp;quot;],&amp;quot;mobile&amp;quot;:[&amp;quot;+49 (123) 55555&amp;quot;]}},&amp;quot;api&amp;quot;:&amp;quot;com.innovaphone.search&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Reverse Lookup:&#039;&#039;&#039; The myApps platform services implement an &#039;&#039;API provider&#039;&#039; for the [http://sdk.innovaphone.com/web1/com.innovaphone.phonelookup/lib1_api_phonelookup.htm &#039;&#039;com.innovaphone.phonelookup&#039;&#039; API]. They perform search capabilities on the OS&#039; local phone books which can be used by Apps like the &#039;&#039;phoneapp&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Apps would send a &#039;&#039;Lookup&#039;&#039; request to the API: &lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;{&amp;quot;mt&amp;quot;:&amp;quot;ApiRequest&amp;quot;,&amp;quot;consumer&amp;quot;:&amp;quot;dev:SwPh_zkl_5e42e884&amp;quot;,&amp;quot;provider&amp;quot;:&amp;quot;*&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;4&amp;quot;,&amp;quot;msg&amp;quot;:{ mt: &amp;quot;Lookup&amp;quot;, prefixIntl: &amp;quot;000&amp;quot;, prefixNtl: &amp;quot;00&amp;quot;, prefixExt:&amp;quot;0&amp;quot;, area: &amp;quot;7031&amp;quot;, country: &amp;quot;49&amp;quot;, lookup: &amp;quot;0004970311234567&amp;quot; },&amp;quot;apiId&amp;quot;:&amp;quot;com.innovaphone.lookup&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search results are delivered as &#039;&#039;LookupInfo&#039;&#039; messages:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;{&amp;quot;mt&amp;quot;:&amp;quot;ApiResult&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;3&amp;quot;,&amp;quot;provider&amp;quot;:&amp;quot;@local-8125d22e37-519d-4056-bfe5-c52ef2ae8fabb0&amp;quot;,&amp;quot;consumer&amp;quot;:&amp;quot;dev:SwPh_zkl_5e42e884&amp;quot;,&amp;quot;client&amp;quot;:&amp;quot;@client-f62702dd86-be3f-47fc-b4bc-7a21627b75b2ea&amp;quot;,&amp;quot;msg&amp;quot;:{mt: &amp;quot;LookupInfo&amp;quot;, dn: &amp;quot;Jake Blues&amp;quot;, contact: { telephonenumber: [&amp;quot;0004970311234567&amp;quot;], givenname: &amp;quot;Jake&amp;quot;, sn: &amp;quot;Blues&amp;quot;, company: &amp;quot;Blues Brothers&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
On Windows, the search and lookup are performed in all of the user&#039;s Outlook contact folders.  As opposed to the search implemented in the &#039;&#039;Contacts&#039;&#039; and &#039;&#039;Users&#039;&#039; App, all items are returned which match any of the search words (i.e. searching for &#039;&#039;a b&#039;&#039; will return items matching either &#039;&#039;a&#039;&#039; or &#039;&#039;b&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
; searched properties : firstname, lastname&lt;br /&gt;
; returned properties : Following Outlook contact phone number properties are returned  (if available):&lt;br /&gt;
&lt;br /&gt;
:* OFFICE_TELEPHONE_NUMBER as &#039;&#039;telephonenumber&#039;&#039;&lt;br /&gt;
:* OFFICE2_TELEPHONE_NUMBER as &#039;&#039;telephonenumber&#039;&#039;&lt;br /&gt;
:* HOME_TELEPHONE_NUMBER as &#039;&#039;homephone&#039;&#039;&lt;br /&gt;
:* HOME2_TELEPHONE_NUMBER as &#039;&#039;homephone&#039;&#039;&lt;br /&gt;
:* MOBILE_TELEPHONE_NUMBER as &#039;&#039;mobile&#039;&#039;&lt;br /&gt;
:* BUSINESS_FAX_NUMBER as &#039;&#039;facsimiletelephonenumber&#039;&#039;&lt;br /&gt;
Note that contact information is cached in the search provider.  Updated contacts may therefore become effective after a while only.&lt;br /&gt;
Outlook search will create its own trace file &amp;lt;code&amp;gt;myAppsOutlookSearch-&amp;lt;/code&amp;gt;&#039;&#039;date-time&#039;&#039;&amp;lt;code&amp;gt;.txt&amp;lt;/code&amp;gt; in the standard trace directory.&lt;br /&gt;
&lt;br /&gt;
This search provider is always installed and can be disabled.  There is no need (nor possibility) to enable it in the &#039;&#039;Apps&#039;&#039; tab of the PBX&#039;s user object.  Also, no &#039;&#039;App&#039;&#039; object needs to be created for it.&lt;br /&gt;
&lt;br /&gt;
==== Android/iOS ====&lt;br /&gt;
The search and lookup are performed in the contacts.&lt;br /&gt;
&lt;br /&gt;
==== macOS ====&lt;br /&gt;
The search and lookup are performed in the contacts. If you wish to disable local contact lookup, go to system settings - Security &amp;amp; Privacy and disable the access to contacts for myapps.&lt;br /&gt;
&lt;br /&gt;
=== Microsoft Office integration ===&lt;br /&gt;
&lt;br /&gt;
The myApps platform services has a &#039;&#039;office presence provider&#039;&#039; that can provide the user&#039;s presence state to Office applications.  See [[{{NAMESPACE}}:Concept_myApps_Office_Integration|myApps Office Integration]] for details.&lt;br /&gt;
&lt;br /&gt;
This feature is installed by default.  However, it can be disabled using the &#039;&#039;OFFICEPRESENCE&#039;&#039; MSI Parameter.  Also, a check-mark is available in the setup dialog.&lt;br /&gt;
&lt;br /&gt;
=== Call an external application for calls ===&lt;br /&gt;
&lt;br /&gt;
Phone Apps (such as the phoneapp or softphone) can initiate the start of an external application when a new call appears (either incoming or outgoing).  The actual spawning of the application is done by the myApps platform service.  Also, the application properties (such as e.g. the executable&#039;s path) is configured in the myApps platform services (see [[#UI elements|Advanced settings]] in the &#039;&#039;UI elements&#039;&#039; section below).&lt;br /&gt;
&lt;br /&gt;
A number of arguments can be passed to the application by substituting $-variables in the &#039;&#039;Parameter&#039;&#039; field:&lt;br /&gt;
&lt;br /&gt;
; $n : phone number as dialed (called party number for outgoing calls) or received (calling party number for incoming calls)&lt;br /&gt;
&lt;br /&gt;
; $N : called or calling party number in &#039;&#039;national&#039;&#039; format (e.g. 07031730090)&lt;br /&gt;
&lt;br /&gt;
; $I : called or calling party number in &#039;&#039;international&#039;&#039; format (e.g. +497031730090)&lt;br /&gt;
&lt;br /&gt;
: note that both $N and $I only work if $n includes both subscriber number and area code (e.g. 07031730090). Otherwise they are equal to $n&lt;br /&gt;
&lt;br /&gt;
; $d : display name of peer (if known)&lt;br /&gt;
&lt;br /&gt;
; $u : URI name of the peer (if available eg with a federation call)&lt;br /&gt;
&lt;br /&gt;
; $c : conference id&lt;br /&gt;
&lt;br /&gt;
: this is a globally unique ID for this call and may be used to relate the call to the &#039;&#039;guid&#039;&#039; found in the CallInfo structure in the [http://wiki.innovaphone.com/index.php?title=Reference10:SOAP_API#CallInfo SOAP-API] and [http://sdk.innovaphone.com/doc/appwebsocket/RCC.htm RCC-API ].  Also, corresponding [[Reference10:Call Detail Record CDR PBX|CDRs]] can be related using the &#039;&#039;event&#039;&#039; tag&#039;s &#039;&#039;conf&#039;&#039; attribute.&lt;br /&gt;
The start of an external application can be requested using the &#039;&#039;com.innovaphone.externalapps&#039;&#039; API.&lt;br /&gt;
&lt;br /&gt;
Some setup examples are [[Howto:Integrate External Apps in innovaphone UC clients|shown here]].&lt;br /&gt;
&lt;br /&gt;
=== Push ===&lt;br /&gt;
&lt;br /&gt;
Mobile operating systems usually inhibit network operation of apps which run in the background or are closed by the user.  This is done in order to reduce battery consumption.  Unfortunately, this also stops such apps to maintain a registration by regularly sending &#039;&#039;keep alive&#039;&#039; messages to a server (in our case to the PBX).  As a result, myApps will be disconnected from the PBX.   When the PBX determines that there is an event for the application which needs a response, it needs to wake up the app using a dedicated channel provided by the operating system.  This mechanism is know as &#039;&#039;push&#039;&#039;. When running on iOS or Android, myApps supports &#039;&#039;push&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;push&#039;&#039; to work, a [[{{NAMESPACE}}:PBX/Objects/Push|&#039;&#039;push object&#039;&#039;]] needs to be configured in the PBX .  Also, it needs to be enabled on the mobile phone for the myApps app.&lt;br /&gt;
This mechanism is quite similar in v12 and v13, so you can refer to [[{{NAMESPACE}}:Concept_Push_Notifications_for_iOS_and_Android|Reference14r2:Concept_Push_Notifications_for_iOS_and_Android]] for more details. &lt;br /&gt;
&lt;br /&gt;
Also, helpful hints can be found in [[Howto:Troubleshoot v13 Push with myApps for Android and iOS]].&lt;br /&gt;
&lt;br /&gt;
=== App Proxy ===&lt;br /&gt;
&lt;br /&gt;
myApps runs further &#039;&#039;Apps&#039;&#039; (such as e.g. the &#039;&#039;phoneapp&#039;&#039;) as a web page in an IFRAME of the browser myApps is running in.  The App&#039;s page code is loaded either from the PBX or from an &#039;&#039;application platform&#039;&#039; (AP).   This however would mean that the App&#039;s IFRAME would remain empty (a dead white screen) when the PBX or AP is not available. To make sure the App can start-up anyway, the myApps platform services feature the so-called &#039;&#039;App Proxy&#039;&#039;.  This is a caching proxy that caches all the App code so it is available even in case of network failure. When myApps runs in the context of the platform services, Apps are therefore not loaded from the App source directly, but from the local App proxy. &lt;br /&gt;
&lt;br /&gt;
The cached files are stored in the PCs local file system in the &amp;lt;code&amp;gt;%LOCALAPPDATA%\innovaphone\myApps\appproxy&amp;lt;/path&amp;gt;&amp;lt;/code&amp;gt;.  There is no configuration required.  However, if myApps seems to run with outdated or corrupt cached copies of the App, you can safely delete the entire directory.&lt;br /&gt;
&lt;br /&gt;
=== Auto update ===&lt;br /&gt;
&lt;br /&gt;
On Windows and on macOS, the myApps platform services can auto-update themselves to a common version.  This is controlled by the [[{{NAMESPACE}}:PBX/Config/myApps#Launcher_Software_Update | &#039;&#039;Launcher Software Update&#039;&#039;]] settings under &#039;&#039;PBX/Config/myApps&#039;&#039; in the PBX. &lt;br /&gt;
&lt;br /&gt;
When myApps is started or the user logs in or myApps needs to re-connect to the PBX, the platform services will use the [http://sdk.innovaphone.com/web1/com.innovaphone.client/lib1_api_client.htm com.innovaphone.client API] to learn the desired version (&#039;&#039;launcherUpdateBuild&#039;&#039;, which is part of the API&#039;s &#039;&#039;model&#039;&#039;). If this differs from the current version, the platform services will try to download the respective new version. &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;mt&amp;quot;: &amp;quot;ApiUpdate&amp;quot;,&lt;br /&gt;
    &amp;quot;apis&amp;quot;: {&lt;br /&gt;
        &amp;quot;com.innovaphone.client&amp;quot;: {&lt;br /&gt;
            &amp;quot;@client&amp;quot;: {&lt;br /&gt;
                &amp;quot;title&amp;quot;: &amp;quot;innovaphone myApps&amp;quot;,&lt;br /&gt;
                &amp;quot;model&amp;quot;: {&lt;br /&gt;
                    &amp;quot;launcher&amp;quot;: true,&lt;br /&gt;
                    &amp;quot;launcherUpdateBuild&amp;quot;: &amp;quot;134906&amp;quot;,&lt;br /&gt;
                    &amp;quot;appStoreUrl&amp;quot;: &amp;quot;http://store.innovaphone.com/release/download/&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The installation of the downloaded version is done by the &#039;&#039;innovaphonemyAppsUpdateService&#039;&#039;. This service is installed and enabled during the initial installation of the myApps platform services.  To disable auto-update, either leave the &#039;&#039;Launcher Software Update&#039;&#039; settings empty or set the service&#039;s start mode to &#039;&#039;disabled&#039;&#039; in the Windows &#039;&#039;services control panel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Note that on Windows the update service does not work on terminal servers. Administrators must do myApps base services updates using standard windows mechanisms.&lt;br /&gt;
&lt;br /&gt;
Note that on macOS if myApps has been installed from the Apple Store it is assumed that auto update from the PBX is not desired and disabled therefore.&lt;br /&gt;
&lt;br /&gt;
On Android/iOS/macOS updates can be downloaded from the respective app store.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Devices&#039;&#039; app can not update software installed on Windows PCs directly. However, when the PBX is updated using an &#039;&#039;update job&#039;&#039; in the &#039;&#039;Devices&#039;&#039; App, the &#039;&#039;Launcher Software Update&#039;&#039; settings will be updated accordingly and hence the myApps base services will ultimately also be updated to the same version.&lt;br /&gt;
&lt;br /&gt;
==== Auto update flow on Windows ====&lt;br /&gt;
&lt;br /&gt;
* On start of myApps, myApps checks if an update is available and ready for installation&lt;br /&gt;
** if yes, the update is installed directly, without user interaction (a popup is shown during the installation)&lt;br /&gt;
** if not, myApps starts&lt;br /&gt;
* if an update is available while myApps is already running, an update notification will be shown which let&#039;s the user choose to install the update now or later (the notification will then popup again after one hour)&lt;br /&gt;
&lt;br /&gt;
==UI elements ==&lt;br /&gt;
There are a few user interfaces provided by the platform services:&lt;br /&gt;
===tray-icon (Windows only) ===&lt;br /&gt;
::[[Image:myapps-tray.png|myapps-tray.png/|myapps-tray.png/]]&lt;br /&gt;
:Allows to&lt;br /&gt;
:* terminate myApps&lt;br /&gt;
:* toggle the &#039;&#039;autostart&#039;&#039; state&lt;br /&gt;
:* toggle the &#039;&#039;show in task bar&#039;&#039; state&lt;br /&gt;
:* open the trace folder&lt;br /&gt;
:&lt;br /&gt;
=== PBX connect form===&lt;br /&gt;
:: [[Image:myapps-connect.png|myapps-connect.png/|myapps-connect.png/]]&lt;br /&gt;
: Allows the user to specify the connect data for the PBX (i.e. IP address or DNS name)&lt;br /&gt;
:&lt;br /&gt;
=== Advanced settings===&lt;br /&gt;
::[[Image:myapps-settings0.png|myapps-settings0.png/|myapps-settings0.png/]]&lt;br /&gt;
::[[Image:myapps-settings.png|myapps-settings.png/|myapps-settings.png/]] [[Image:myapps-settings2.png|myapps-settings2.png/|myapps-settings2.png/]] [[Image:myapps-settings3.png|myapps-settings3.png/|myapps-settings3.png/]]&lt;br /&gt;
&lt;br /&gt;
: Allows to modify various platform dependant settings (such as e.g. the hotkey selection on Windows)&lt;br /&gt;
&lt;br /&gt;
== Interfaces ==&lt;br /&gt;
=== Provided APIs ===&lt;br /&gt;
&lt;br /&gt;
; [http://sdk.innovaphone.com/web1/com.innovaphone.search/lib1_api_search.htm com.innovaphone.search] : access to local phone book entries by the [[#Local phonebook access|Local phonebook access]] component.&lt;br /&gt;
; [http://sdk.innovaphone.com/web1/com.innovaphone.launcher/com.innovaphone.launcher.htm com.innovaphone.launcher] : display of OS specific user notifications and receipt of related user actions&lt;br /&gt;
; com.innovaphone.notificationhandler : reports back click on a notification.&lt;br /&gt;
; com.innovaphone.externalapps : to start external applications, see [[#Call an external application for calls|Call an external application for calls]]  above&lt;br /&gt;
&lt;br /&gt;
=== Used APIs ===&lt;br /&gt;
&lt;br /&gt;
; [http://sdk.innovaphone.com/web1/com.innovaphone.phone/com.innovaphone.phone.htm com.innovaphone.phone] : used to initiate new or manipulate existing calls by the [[#Hot keys|Hot keys]] and [[#URL handler|URL handler]] components.&lt;br /&gt;
&lt;br /&gt;
; [http://sdk.innovaphone.com/web1/com.innovaphone.chat/com.innovaphone.chat.htm com.innovaphone.chat] : used to start a new chat by the [[#URL handler|URL handler]] component.&lt;br /&gt;
&lt;br /&gt;
; [http://sdk.innovaphone.com/web1/com.innovaphone.client/lib1_api_client.htm com.innovaphone.client] : the model is used to learn the update settings, see [[#Auto update|Auto update]] above&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
; [https://sdk.innovaphone.com/doc/launcher/Media.htm Media Protocol] : used by apps to allocate RTP channels, see [[#RTP service for audio.2C video and data|RTP service for audio, video and data]] above&lt;br /&gt;
&lt;br /&gt;
== Related App Services ==&lt;br /&gt;
&lt;br /&gt;
none&lt;br /&gt;
&lt;br /&gt;
== Known limitations ==&lt;br /&gt;
; Incoming call as banner on myApps for iOS : Since iOS 14 the iOS CallKit presents incoming calls as a banner leaving the original green answer button of myApps visible. Use only the blue button of the banner to accept the call or change iPhone Settings, App &amp;quot;Phone&amp;quot;, &amp;quot;Incoming Calls&amp;quot; to &amp;quot;Full Screen&amp;quot; to hide the myApps user interface again during call answering.&lt;br /&gt;
&lt;br /&gt;
; Call answer in speakerphone mode even with active Bluetooth headset on myApps for iOS : This causes unwanted speakerphone operation if the smartphone is used with a Bluetooth car audio system. The behaviour can be changed by selecting &#039;&#039;Bluetooth Headset&#039;&#039; in this setting:&lt;br /&gt;
:&#039;&#039;iOS Settings-&amp;gt;Accessibility-&amp;gt;Touch-&amp;gt;Call Audio Routing: Automatic / Bluetooth Headset / Speaker&#039;&#039;&lt;br /&gt;
:&#039;&#039;iOS Einstellungen-&amp;gt;Bedienungshilfen-&amp;gt;Tippen-&amp;gt;Anrufaudioausgabe: Automatisch / Bluetooth-Headset / Lautsprecher&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; Windows Server 2016 (Windows 10 Build 1607) : windows just shows the first notification. Further notifications aren&#039;t displayed until the previous ones are removed from the notification center. Current windows builds do not show this behaviour anymore.&lt;br /&gt;
&lt;br /&gt;
; Problems on Mac computers with Yealink USB headsets&lt;br /&gt;
: we have received reports that myApps quits unexpectedly on some Mac computers when a Yealink headset is plugged in.  Unfortunately, we could not find out the cause yet.  If you use Yealink USB headsets and have a similar issue, please open a support ticket and send myApps traces.&lt;br /&gt;
&lt;br /&gt;
; Poly / Plantronics headset buttons only functional if myApps is started with Rosetta&lt;br /&gt;
: myApps macOS supports Apple M1/M2 hardware natively. However, the Poly / Plantronics headset SDK is only available for Intel platform and thus myApps needs to be started via Apple&#039;s Intel emulator Rosetta if a Poly / Plantronics headset is used. This is done with right-click on the myApps executable, &#039;&#039;Information&#039;&#039;, &#039;&#039;Open with Rosetta&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
; Windows surface devices may not work correctly&lt;br /&gt;
: Chromium does not get touch keyboard events. USB Keyboards may not be recognized either.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
myApps platform services are installed on Windows using the .msi file found in the &#039;&#039;myApps Windows&#039;&#039; package from [https://store.innovaphone.com/release/download.htm store.innovaphone.com].&lt;br /&gt;
&lt;br /&gt;
myApps can update itself automatically, see [[#Auto update|Auto update]] above.&lt;br /&gt;
&lt;br /&gt;
=== MSI Parameters and install options ===&lt;br /&gt;
&lt;br /&gt;
The MSI installer of myApps for Windows supports the following parameters and can be edited with [https://docs.microsoft.com/en-us/windows/win32/msi/orca-exe Microsoft Orca]. You can add your parameters in the table &#039;&#039;property&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
; SERVER (REG_SZ): the PBX&#039;s server address (without protocol like https://)&lt;br /&gt;
; OFFICEPRESENCE (REG_DWORD): &#039;&#039;&#039;false&#039;&#039;&#039; to disable presence integration in Microsoft Office&lt;br /&gt;
: this is also available as a check-mark when running the install manually&lt;br /&gt;
&lt;br /&gt;
; DISABLEHEADSETS (REG_DWORD): &#039;&#039;&#039;true&#039;&#039;&#039; to disable headsets support, see [[#Device handling|Device handling]] above&lt;br /&gt;
&lt;br /&gt;
; EXTERNALAPPS (REG_SZ): pre-define external applications, see [[#Call an external application for calls|Call an external application for calls]] above&lt;br /&gt;
: e.g. &amp;lt;code&amp;gt;&amp;quot;{&amp;quot;&amp;quot;externalApps&amp;quot;&amp;quot;:[{&amp;quot;&amp;quot;id&amp;quot;&amp;quot;:0,&amp;quot;&amp;quot;name&amp;quot;&amp;quot;:&amp;quot;&amp;quot;Wireshark&amp;quot;&amp;quot;,&amp;quot;&amp;quot;path&amp;quot;&amp;quot;:&amp;quot;&amp;quot;C:\\Program Files\\Wireshark\\Wireshark.exe&amp;quot;&amp;quot;,&amp;quot;&amp;quot;param&amp;quot;&amp;quot;:&amp;quot;&amp;quot;test $I&amp;quot;&amp;quot;}]}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; FORCERESTART (REG_DWORD): &#039;&#039;&#039;true&#039;&#039;&#039; (or any string ...) kills myApps during the installation and restarts it for the currently logged in user, if it was running&lt;br /&gt;
&lt;br /&gt;
; DISABLELOCALHOST (REG_DWORD): &#039;&#039;&#039;true&#039;&#039;&#039; to disable use of &#039;&#039;&#039;localhost&#039;&#039;&#039; string to access the local webserver. Use &#039;&#039;&#039;127.0.0.1&#039;&#039;&#039; instead&lt;br /&gt;
&lt;br /&gt;
; EXCLUDEINTERFACES (REG_SZ): some VPN interfaces are not detected by Windows as IF_TYPE_PPP or IF_TYPE_TUNNEL and therefore the &#039;&#039;&#039;media outside VPN&#039;&#039;&#039; setting is not taking effect. With this option interfaces can be pre-defined that will not be used for media. Interfaces must be comma separated&lt;br /&gt;
: e.g. &amp;lt;code&amp;gt;EXCLUDEINTERFACES=&amp;quot;172,192.168,10.10&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; FASTERDOWNLOADS (REG_DWORD): &#039;&#039;&#039;true&#039;&#039;&#039; to have faster downloads without artificially slowing down the download of an update (which is done to avoid audio lags if clients have slow networks).&lt;br /&gt;
&lt;br /&gt;
Current settings are stored in the registry at &amp;lt;code&amp;gt;Computer\HKEY_CURRENT_USER\Software\innovaphone\myApps&amp;lt;/code&amp;gt; or at &amp;lt;code&amp;gt;Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\innovaphone\myApps&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Boolean values like OfficePresence are stored in registry entries with type REG_DWORD and values 1 or 0. 0 disables the setting and 1 enables it.&lt;br /&gt;
&lt;br /&gt;
== iOS ==&lt;br /&gt;
&lt;br /&gt;
myApps platform services are installed on iOS by loading &#039;&#039;innovaphone myApps&#039;&#039; from the &#039;&#039;App Store&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Configuration via MDM ===&lt;br /&gt;
&lt;br /&gt;
the PBX&#039;s server URL can be pre-configured by specifying this dictionary in the MDM&lt;br /&gt;
 &amp;lt;plist&amp;gt;&lt;br /&gt;
   &amp;lt;dict&amp;gt;&lt;br /&gt;
     &amp;lt;key&amp;gt;server&amp;lt;/key&amp;gt;&lt;br /&gt;
     &amp;lt;string&amp;gt;pbx.example.com&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== macOS ==&lt;br /&gt;
&lt;br /&gt;
myApps platform services might be installed directly from the Apple store. An installer package &amp;lt;code&amp;gt;myapps.pkg&amp;lt;/code&amp;gt; and a disk image &amp;lt;code&amp;gt;myapps.dmg&amp;lt;/code&amp;gt; is also available from the innovaphone app store. Install &amp;lt;code&amp;gt;myapps.pkg&amp;lt;/code&amp;gt; by double-click on the file and follow the instructions of the installer. myApps becomes available in the Applications folder and can be opened by double-click. Or download and open &amp;lt;code&amp;gt;myapps.dmg&amp;lt;/code&amp;gt; and double klick myApps. If desired integrate it into the app dock by right click, &#039;&#039;Options, Keep in the dock&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If installed from the innovaphone app store, myApps can update itself automatically, see [[#Auto update|Auto update]] above.&lt;br /&gt;
&lt;br /&gt;
If installed from the Apple store, macOS notifies about updates on the Apple store. myApps [[#Auto update|Auto update]] is disabled then.&lt;br /&gt;
&lt;br /&gt;
If a clean-install of the client is necessary, the folder &amp;quot;/Users/username/Library/Containers/myapps&amp;quot; needs to be deleted. To be on the safe side also delete it from the trash bin.&lt;br /&gt;
&lt;br /&gt;
=== Configuration via MDM ===&lt;br /&gt;
&lt;br /&gt;
the PBX&#039;s server URL can be pre-configured by specifying this dictionary in the MDM&lt;br /&gt;
 &amp;lt;plist&amp;gt;&lt;br /&gt;
   &amp;lt;dict&amp;gt;&lt;br /&gt;
     &amp;lt;key&amp;gt;server&amp;lt;/key&amp;gt;&lt;br /&gt;
     &amp;lt;string&amp;gt;pbx.example.com&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Preferences ===&lt;br /&gt;
&lt;br /&gt;
macOS supports preference settings that can be set via a shell command or via Mac remote management&lt;br /&gt;
&lt;br /&gt;
 defaults write com.innovaphone.client-ios-14r1 server &amp;quot;PBX-server-URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The following parameters and can be set through this method:&lt;br /&gt;
&lt;br /&gt;
; server: the PBX&#039;s server URL&lt;br /&gt;
&lt;br /&gt;
=== Setting myApps as Default App for SIP-URLs ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|defaults write com.apple.LaunchServices/com.apple.launchservices.secure LSHandlers -array-add &#039;{&lt;br /&gt;
   LSHandlerURLScheme = sip;&lt;br /&gt;
   LSHandlerRoleAll = &amp;quot;&amp;lt;CFBundleIdentifier&amp;gt;&amp;quot;;&lt;br /&gt;
}&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To find the “CFBundleIdentifier”, proceed as follows:&lt;br /&gt;
* In the Finder under “Applications”, search for the desired myApps client that you want to set as the default app.&lt;br /&gt;
* Right-click on “Show package contents” -&amp;gt; you will find the “CFBundleIdentifier” in the Info.plist file.&lt;br /&gt;
&lt;br /&gt;
A restart of the MAC is required.&lt;br /&gt;
&lt;br /&gt;
=== Using Sennheiser headsets ===&lt;br /&gt;
If you use Sennheiser headsets, you should also install the then-current &amp;lt;code&amp;gt;DSEA_SDK_v&amp;lt;/code&amp;gt;&#039;&#039;version&#039;&#039;&amp;lt;code&amp;gt;.pkg&amp;lt;/code&amp;gt; package, after you installed the myApps client.  Without that, audio will still work, but not the controls on the headset.  You will need to keep that up-to-date yourself, as it is not updated by myApps&#039;s auto-update function.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
&lt;br /&gt;
myApps platform services are installed on Android by loading &#039;&#039;innovaphone myApps&#039;&#039; from the &#039;&#039;Play Store&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Configuration via MDM ===&lt;br /&gt;
&lt;br /&gt;
the PBX&#039;s server URL can be pre-configured by specifying a property &amp;quot;server&amp;quot; with string value &amp;quot;pbx.example.com&amp;quot; in the MDM.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
== Server configuration ==&lt;br /&gt;
When opening myApps for the first time, the user is prompted for the Server. Usually only the hostname (DNS host name or IP address) needs to be configured.&lt;br /&gt;
&lt;br /&gt;
But there are more options for special PBX configurations.&lt;br /&gt;
&lt;br /&gt;
; Non-standard HTTPS port&lt;br /&gt;
: If the PBX uses a non-standard HTTPS port, it must be appended to the host name separated by a colon (&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;).&lt;br /&gt;
: Example: &amp;lt;code&amp;gt;pbx.example.com:4444&amp;lt;/code&amp;gt; (expands to &amp;lt;code&amp;gt;https://pbx.example.com:4444/PBX0/APPCLIENT/appclient.htm&amp;lt;/code&amp;gt;)&lt;br /&gt;
; DynPBX module name&lt;br /&gt;
: If the PBX is a DynPBX, the module id must be appended to PBX0 separated - (&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;).&lt;br /&gt;
: Example: &amp;lt;code&amp;gt;pbx.example.com/PBX0-1&amp;lt;/code&amp;gt; (expands to &amp;lt;code&amp;gt;https://pbx.example.com/PBX0-1/APPCLIENT/appclient.htm&amp;lt;/code&amp;gt;)&lt;br /&gt;
; Softphone physical location&lt;br /&gt;
: If user defined physical location shall be used for softphone, you can append it using a parameter &amp;lt;code&amp;gt;#phys=&amp;lt;/code&amp;gt;.&lt;br /&gt;
: Example: &amp;lt;code&amp;gt;pbx.example.com#phys=slave&amp;lt;/code&amp;gt; (expands to &amp;lt;code&amp;gt;https://pbx.example.com/PBX0/APPCLIENT/appclient.htm#phys=slave&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Example 1: PBX pbx.example.com with standard configuration&lt;br /&gt;
 pbx.example.com&lt;br /&gt;
&lt;br /&gt;
Example 2: PBX slave.example with DynPBX module ID 1, HTTPS port 4444 and physical location master&lt;br /&gt;
 slave.example.com:4444/PBX0-1#phys=master&lt;br /&gt;
&lt;br /&gt;
=== HTTP proxy support ===&lt;br /&gt;
&lt;br /&gt;
myApps platform services do support operation via HTTP proxy now. If one or more proxies have been configured in the network settings of the operating system for the active network connection, HTTP CONNECT tunnels are established.&lt;br /&gt;
&lt;br /&gt;
On Windows user name and password can be specified for the tunnel servers as generic credentials in the credentials manager (Anmeldeinformationsverwaltung). The name of the credentials must be the tunnel server hostname.&lt;br /&gt;
&lt;br /&gt;
On Android user name and password can be specified through Android &#039;&#039;Settings, Accounts&#039;&#039; by adding a myApps &#039;&#039;HTTP Proxy Credentials&#039;&#039; account. The name of the account must be the tunnel server hostname.&lt;br /&gt;
&lt;br /&gt;
== Platform specific settings ==&lt;br /&gt;
When myApps runs under the myApps platform services, it will show various platform specific settings as part of its &#039;&#039;burger menu&#039;&#039;, so the user can set them.  See &#039;&#039;Advanced settings&#039;&#039; in [[#UI elements|UI elements]] above.&lt;br /&gt;
&lt;br /&gt;
Some options can also be set globally for all myApps clients in the PBX&#039;s [[{{NAMESPACE}}:PBX/Config/myApps#Client_Settings|PBX/Config/myApps &#039;&#039;Client Settings&#039;&#039;]]&lt;br /&gt;
{|&lt;br /&gt;
! style=&amp;quot;text-align: left; font-weight: bold&amp;quot; | Option&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;text-align: left; font-weight: bold&amp;quot; | Description&lt;br /&gt;
&lt;br /&gt;
! style=&amp;quot;text-align: left; font-weight: bold&amp;quot; | Where to set&lt;br /&gt;
&lt;br /&gt;
!&lt;br /&gt;
! style=&amp;quot;text-align: left; font-weight: bold&amp;quot;| Availability&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| || || User menu || PBX &#039;&#039;Client Settings&#039;&#039; || Windows || iOS || Android || macOS&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Autostart || Launch myApps on login || &amp;amp;#10004; ||&amp;amp;#10004; ||&amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10004;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Appear offline after || controls after which idle time a user is considered &#039;&#039;inactive&#039;&#039;. See [[#User activity|User activity]] above || &amp;amp;#10004; ||&amp;amp;#10004; ||&amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Hotkeys || Hotkeys for call dial, accept, reject. See [[#Hot keys|Hot keys]] above || &amp;amp;#10004; ||&amp;amp;#10004; ||&amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10004;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Docking || Docking mode (left, right, none). See [[#???|??]] above || &amp;amp;#10004; ||&amp;amp;#10004; ||&amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10007;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Desktop notifications|| Turn on/off platform notifications. See [[#Notifications|  Notifications]] above || &amp;amp;#10004; ||&amp;amp;#10004; ||&amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10004;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| VPN || Disable VPN address for ICE candidate selection. See [[#RTP ports| RTP ports]] above || &amp;amp;#10004; ||&amp;amp;#10004; ||&amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10004; || &amp;amp;#10004;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Show in taskbar|| Show myApps in the taskbar in addition to it&#039;s tray icon.  || &amp;amp;#10004; ||&amp;amp;#10007; ||&amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10007;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Log flags || turn on/off certain trace levels. See [[#Troubleshooting|Troubleshooting]] below.  || &amp;amp;#10004; ||&amp;amp;#10004; ||&amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004; || &amp;amp;#10004;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| External applications || define the applications available for Apps to be started. See [[#Call an external application for calls|Call an external application for calls]] above.  || &amp;amp;#10004; ||&amp;amp;#10007; ||&amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10004;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Ring in headset || send ring tone for incoming to headset instead of loudspeaker.  || &amp;amp;#10004; ||&amp;amp;#10007; ||&amp;amp;#10004; || &amp;amp;#10007; || &amp;amp;#10007; || &amp;amp;#10007;&lt;br /&gt;
|}&lt;br /&gt;
== Start parameters for Windows ==&lt;br /&gt;
&lt;br /&gt;
On Windows, it is not possible to pass start parameters from the [https://www.chromium.org/developers Chromium documentation] to the myApps process.&lt;br /&gt;
&lt;br /&gt;
== OS Settings for Windows ==&lt;br /&gt;
Windows settings can influence the display of &#039;&#039;Desktop notifications&#039;&#039;. See [https://support.microsoft.com/en-us/help/4028678/windows-10-change-notification-settings Change notification settings in Windows 10/11] for details.&lt;br /&gt;
&lt;br /&gt;
=== Windows 11 ===&lt;br /&gt;
&lt;br /&gt;
* Windows 11 has a feature &amp;quot;do not disturb&amp;quot;. This hides notifications if enabled.&lt;br /&gt;
* Windows 11 has a feature &amp;quot;focus&amp;quot;. This enables &amp;quot;do not disturb&amp;quot; and thus hides notifications too.&lt;br /&gt;
* Windows 11 has priority settings for notifications. Ensure that VoIP notifications for calls are allowed any maybe also include myApps as an App which is allowed to show notifications.&lt;br /&gt;
&lt;br /&gt;
== OS settings for Android ==&lt;br /&gt;
; Events : The appearance of notifications can be controlled here.&lt;br /&gt;
&lt;br /&gt;
; Call accounts : For proper incoming call signaling, the call account &#039;&#039;myApps&#039;&#039; needs to be enabled. Note that on Samsung smartphones the call account switch likely toggles back and a few tries may need to be done until it persists. Please double-check the state.&lt;br /&gt;
&lt;br /&gt;
; Preferred Calling Account : Choose which calling account (myApps/SIM/..) should be used for outgoing calls initiated from within the native phone app / phone book.&lt;br /&gt;
&lt;br /&gt;
; Background data, unlimited data usage : Grant background data use to enable &#039;&#039;myApps&#039;&#039; to connect to the PBX immediately on an incoming call.&lt;br /&gt;
&lt;br /&gt;
; Overlaying : This setting is not needed if call account &#039;&#039;myApps&#039;&#039; has been enabled. Should there be a reason for not enabling call account &#039;&#039;myApps&#039;&#039;, the permission for overlaying needs to be granted on Android 10 or higher for proper call signaling.&lt;br /&gt;
&lt;br /&gt;
Note: If no SIM card is installed some Android smartphones exhibit a problem dialing from the smartphone contacts. The contacts app shows a choice &#039;&#039;Select SIM card for this call&#039;&#039; but all possible dialers are greyed out. In this case make myApps the default phone app in Android settings &#039;&#039;Apps, Default apps, Telephony&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== OS settings for iOS ==&lt;br /&gt;
; Notifications : The appearance of notifications can be controlled in iOS &#039;&#039;Settings, myApps&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== OS settings for macOS ==&lt;br /&gt;
&lt;br /&gt;
; Notifications : The appearance of notifications can be controlled in macOS &#039;&#039;Preferences, Notifications, myApps&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
&lt;br /&gt;
myApps platform services can write various traces for debugging.  Trace can be turned on and off selectively in the [[#Advanced settings|Advanced settings]].&lt;br /&gt;
&lt;br /&gt;
The following trace flags can be set:&lt;br /&gt;
&lt;br /&gt;
(&#039;&#039;Recommended trace options are: &#039;&#039;&#039;App, Browser, ICE, TURN, Signaling and Audio&#039;&#039;&#039;. Please do not activate other flags unless innovaphone support says otherwise&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!style=&amp;quot;text-align: left; font-weight: bold&amp;quot; |  Abbreviation&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;text-align: left; font-weight: bold&amp;quot; |code&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;text-align: left; font-weight: bold&amp;quot; | description&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| App||0x000000001|| logs from the App Service itself&lt;br /&gt;
|-&lt;br /&gt;
| DNS||0x000000008|| logs DNS requests and results&lt;br /&gt;
|-&lt;br /&gt;
| HTTP client||0x000000080|| http client logs&lt;br /&gt;
|-&lt;br /&gt;
| TLS||0x000000400|| TLS logs&lt;br /&gt;
|-&lt;br /&gt;
| TCP||0x000000800|| TCP logs&lt;br /&gt;
|-&lt;br /&gt;
| LDS||0x000001000|| local domain sockets&lt;br /&gt;
|-&lt;br /&gt;
| WebSocket client||0x000004000|| logs outgoing websocket connections&lt;br /&gt;
|-&lt;br /&gt;
| App WebSocket||0x000008000|| logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)&lt;br /&gt;
|-&lt;br /&gt;
| UDP||0x000200000|| UDP logs&lt;br /&gt;
|-&lt;br /&gt;
| DTLS||0x000400000|| logs DTLS handshake and messages&lt;br /&gt;
|-&lt;br /&gt;
| Media||0x000800000|| logs media events&lt;br /&gt;
|-&lt;br /&gt;
| Media channel||0x001000000|| logs RTP/SCTP media connections&lt;br /&gt;
|-&lt;br /&gt;
| ICE||0x002000000|| logs ICE messages between peers&lt;br /&gt;
|-&lt;br /&gt;
| TURN||0x004000000|| logs TURN messages between peers&lt;br /&gt;
|-&lt;br /&gt;
| AppSharing||0x008000000|| logs AppSharing connection&lt;br /&gt;
|-&lt;br /&gt;
| Audio||0x010000000|| logs Audio connection and headset events&lt;br /&gt;
|-&lt;br /&gt;
| Video||0x020000000|| logs video connection and webcam events&lt;br /&gt;
|-&lt;br /&gt;
| Browser||0x040000000|| logs Chromium events&lt;br /&gt;
|-&lt;br /&gt;
| AppProxy||0x080000000|| logs requests which are proxied between the local webserver and the remote server&lt;br /&gt;
|-&lt;br /&gt;
| Webserver ||0x200000000|| enables webserver specific logs&lt;br /&gt;
|-&lt;br /&gt;
| Browser Console ||0x400000000|| logs browser console events&lt;br /&gt;
|-&lt;br /&gt;
| Signaling||0x800000000|| enables logs in the signaling module for debugging calls&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;code&#039;&#039; can be or&#039;ed and used as value for the &#039;&#039;Log flags&#039;&#039; field in [[{{NAMESPACE}}:PBX/Config/myApps#Client_Settings|PBX/Config/myApps/Client Settings]].&lt;br /&gt;
&lt;br /&gt;
; Windows :On Windows, traces are written to the &amp;lt;code&amp;gt;%LOCALAPPDATA%\innovaphone\myApps&amp;lt;/code&amp;gt; directory. If you start myApps with --log-size as parameter, you can define the maximum size of a log file (e.g. --log-size=100000000 would be 100MB for each file)&lt;br /&gt;
&lt;br /&gt;
:* myApps-&#039;&#039;date-time&#039;&#039;.txt : main log file for the platform services&lt;br /&gt;
&lt;br /&gt;
:* myAppsOutlookSearch-&#039;&#039;date-time&#039;&#039;.txt : log file for the Outlook phone book access&lt;br /&gt;
&lt;br /&gt;
:* myAppsHookController-&#039;&#039;date-time&#039;&#039;.txt : log file for the hot-key interceptor (see [[#Hot keys|Hot keys]])&lt;br /&gt;
&lt;br /&gt;
; :myApps update installation traces are written to the &amp;lt;code&amp;gt;%windir%\temp\&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
:* myAppsInstall.txt: MSI installation file&lt;br /&gt;
&lt;br /&gt;
; :myApps update service traces are written to the &amp;lt;code&amp;gt;%ProgramData%\innovaphone\myAppsUpdateService&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
:* myAppsUpdateService-&#039;&#039;date-time&#039;&#039;.txt: myApps update service traces&lt;br /&gt;
&lt;br /&gt;
;Android : traces can be sent by e-mail.&lt;br /&gt;
&lt;br /&gt;
: also, an Android device might also be connected to a PC via an USB cable to get the traces. The files can be found in &amp;lt;code&amp;gt;Android/data/com.innovaphone.clientandroid/files&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; iOS : traces can be sent by e-mail.&lt;br /&gt;
&lt;br /&gt;
; macOS : traces can be sent by e-mail.&lt;br /&gt;
&lt;br /&gt;
: also, the files can be found in &amp;lt;code&amp;gt;~/Library/Containers/com.innovaphone.client-ios/Data/Documents/&amp;lt;/code&amp;gt;. Press &#039;&#039;Alt+N&#039;&#039; followed by space to get tilde &#039;&#039;~&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Known Problems =&lt;br /&gt;
[[:Category:Problem myApps platform services|Known Problems]]&lt;br /&gt;
&lt;br /&gt;
= Related Articles =&lt;br /&gt;
* [[{{NAMESPACE}}:Concept_myApps]]&lt;br /&gt;
* [[{{NAMESPACE}}:Concept_myApps_Redundancy|Reference14r2:Concept_myApps_Redundancy]]&lt;br /&gt;
* [[{{NAMESPACE}}:Concept_myApps_Office_Integration|Reference14r2:Concept_myApps_Office_Integration]]&lt;br /&gt;
* [[{{NAMESPACE}}:Concept_myAPPs_Search_in_local-Outlook_Contacts|Reference14r2:Concept_myAPPs_Search_in_local-Outlook_Contacts]]&lt;br /&gt;
* [[{{NAMESPACE}}:Call_Detail_Record_CDR_PBX|Reference14r2:Call_Detail_Record_CDR_PBX]]&lt;br /&gt;
* [[{{NAMESPACE}}:Concept Push Notifications for myPBX iOS and Android|Reference14r2:Concept Push Notifications for myPBX iOS and Android]]&lt;br /&gt;
* [[Howto:Troubleshoot v13 Push with myApps for Android and iOS]]&lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/myApps]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Concept myApps platform services]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto14r2:Conferences,_Resources_and_Licenses&amp;diff=72523</id>
		<title>Howto14r2:Conferences, Resources and Licenses</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto14r2:Conferences,_Resources_and_Licenses&amp;diff=72523"/>
		<updated>2024-07-09T09:23:13Z</updated>

		<summary type="html">&lt;p&gt;Aza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Applies To==&lt;br /&gt;
This information applies to&lt;br /&gt;
&lt;br /&gt;
all innovaphone devices supporting a &#039;&#039;CONF&#039;&#039; or &#039;&#039;SCNF&#039;&#039; interface and hence &#039;&#039;Conference Channels&#039;&#039; (as shown in the devices home-page).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Keywords: Konferenzen, Lizenzen, 3PTY, 3er Konferenz 3erkonferenz, multi-party conference, mehrfachkonferenz, conferencing, conferences --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
Performing conferencing on a [[Reference10:Gateway/Interfaces#Conferencing_interface_.28CONF.29 | &#039;&#039;CONF or SCNF&#039;&#039; interface]] consumes both resources and licenses. Here is an overview of which and how much. &lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
First let us have a look at the overall scheme:&lt;br /&gt;
&lt;br /&gt;
[[Image:Conferences_Ressources_and_Licenses_-_Scheme2_G722.png]]&lt;br /&gt;
&lt;br /&gt;
==== Coder channels ====&lt;br /&gt;
Both the &#039;&#039;CONF&#039;&#039; and &#039;&#039;SCNF&#039;&#039; interface provides the mixing of 8KHz G711 PCM audio channels. &lt;br /&gt;
&lt;br /&gt;
If a call is done towards a CONF interface, it will allocate a &#039;&#039;Coder channel&#039;&#039; from the DSP coder channel bank for processing of the audio from the VoIP codec (e.g. G.711, G.722, OPUS) to PCM audio. &lt;br /&gt;
&lt;br /&gt;
The SCNF supports G.711a/u and G.722 coder. No &#039;&#039;Coder channel&#039;&#039; needs to be allocated for a call.&lt;br /&gt;
&lt;br /&gt;
==== (Soft) Conference Channels ====&lt;br /&gt;
Each call to a CONF interface consumes one of the &#039;&#039;Conference Channels&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Each call to an SCNF interface consumes one of the &#039;&#039;Soft Conference Channels&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Channels license ====&lt;br /&gt;
&lt;br /&gt;
In addition to that, a call to either the CONF or SCNF requires a &#039;&#039;Channel&#039;&#039; license. This license can be obtained from the PBX if the  &#039;&#039;PBX Channels licenses&#039;&#039; switch in the PBX [[Reference13r1:PBX/Objects/Conference | &#039;&#039;Conference&#039;&#039; object ]] is activated (if the call comes through such an object) or the &#039;&#039;Obtain Channels lic on outgoing call&#039;&#039; check-mark is ticked in a [[Reference13r1:PBX/Objects/Gateway | PBX &#039;&#039;Gateway&#039;&#039; object ]] (if the call comes through such an object).  For this, &#039;&#039;PBX Channels licenses&#039;&#039; must be installed on the PBX.&lt;br /&gt;
&lt;br /&gt;
This is the recommended configuration.  However, the &#039;&#039;Channel&#039;&#039; license can also be obtained locally from the gateway where the CONF/SCNF is located on. All innovaphone gateways have a number of &#039;&#039;Channel&#039;&#039; licenses built-in. The number of licenses available is equal to the number of &#039;&#039;Coder&#039;&#039; channels the box supports.  If no license is sent along with the call to the CONF or SCNF interface, the interface will try to obtain one from the pool of built-in licenses. This can save you some cost.  However, be aware that these licenses (as well as the corresponding &#039;&#039;Channel&#039;&#039; coders) are also required for calls through the ISDN BRI/PRI interfaces or for audio fax calls. Calls to CONF/SCNF interfaces which consume local &#039;&#039;Channel&#039;&#039; licenses may inhibit such calls therefor. &lt;br /&gt;
&lt;br /&gt;
The PBX-Channels License has order no. 02-00020-007 according to chapter &amp;quot;3.5 PBX Channels license&amp;quot; in the [https://www.innovaphone.com/content/downloads/innovaphone-Licensing%20Guidelines-V13r2-EN.pdf innovaphone license guide]. &lt;br /&gt;
&lt;br /&gt;
The [[Reference13r1:PBX/Config/General#License_Status|status of the PBX Licenses]] shows assigned PBX-Channel licenses:&lt;br /&gt;
&lt;br /&gt;
[[Image:Conferences,_Ressources_and_Licenses_-_pbx-channel_license_01.png]]&lt;br /&gt;
&lt;br /&gt;
==== Port license ====&lt;br /&gt;
The registration of the CONF and/or SCNF to the PBX Conference object does not require a Port license.&lt;br /&gt;
&lt;br /&gt;
Although this is not directly related to the CONF or SCNF interface, please note that a single &#039;&#039;Port&#039;&#039; license is required if any of the rooms defined in a PBX &#039;&#039;Conference&#039;&#039; object is accessed using the conference web access (from 13r3).&lt;br /&gt;
&lt;br /&gt;
==== CPU usage ====&lt;br /&gt;
For a calculation of CPU usage see [[Howto:V13_Firmware_Upgrade_V13r2_V13r3#Conferences]].&lt;br /&gt;
&lt;br /&gt;
===Example Scenarios===&lt;br /&gt;
&lt;br /&gt;
====Conference on hardware gateway with local ISDN====&lt;br /&gt;
Let us assume we have a conference running on a CONF interface with one PSTN and 3 VoIP participants.  In this case, we have &lt;br /&gt;
&lt;br /&gt;
{| border=1 &lt;br /&gt;
| ||Caller || DSP Coder Channel ||  Conference Channel || PBX Channel License&lt;br /&gt;
|-&lt;br /&gt;
| ||1 PSTN || 1 (CONF) + 1 (ISDN) **|| 1  ||  1 &lt;br /&gt;
|-&lt;br /&gt;
| ||3 VoIP || 3|| 3 || 3 &lt;br /&gt;
|-&lt;br /&gt;
| Total || 4 || 5 || 4 || 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;: {{FIXME|reason=do we need only one or would this require &#039;&#039;enable PCM&#039;&#039;?}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Looking at an IP411, it supports the following resources:&lt;br /&gt;
&lt;br /&gt;
[[Image:Conferences,_Ressources_and_Licenses_-_example_gateway_channels_IP411.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can see that our sample scenario will not work on an IP411 as there are no &#039;&#039;Conference Channels&#039;&#039; available.  However, if we change the scenario so that an SCNF is used instead of a CONF, it would look as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=1 &lt;br /&gt;
| ||Caller || DSP Coder Channel ||  Soft Conference Channel || PBX Channel License&lt;br /&gt;
|-&lt;br /&gt;
| ||1 PSTN || 1 (ISDN) **|| 1  ||  1 &lt;br /&gt;
|-&lt;br /&gt;
| ||3 VoIP || 3|| 3 || 3 &lt;br /&gt;
|-&lt;br /&gt;
| Total || 4 || 4 || 4 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will work on an IP411.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 3PTY Conferencing ===&lt;br /&gt;
3-way conferencing is special as it is usually implemented internally in the innovaphone IP phones.  That is, each user of an innovaphone IP phone (except the IP61) has internal conferencing resources built-in to allow for a 3-way conference.  No external &#039;&#039;CONF/SCNF&#039;&#039; interface is needed.&lt;br /&gt;
&lt;br /&gt;
However, on innovaphone DECT phones, no internal conferencing resource is present and hence no internal 3PTY is possible.  The DECT system can thus be [[Reference9:3pty conference on DECT phones|configured to use an external conferencing resource]] for 3PTY.  In this case, the rules above apply.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
* [[Reference9:Concept myPBX]]&lt;br /&gt;
* [[Reference10:Concept Innovaphone Virtual Appliance]]&lt;br /&gt;
* [[Reference9:3pty conference on DECT phones]]&lt;br /&gt;
* [[Reference10:Gateway/Interfaces#Conferencing_interface_.28CONF.29]]&lt;br /&gt;
* [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported]], lists DSP and CONF resources for the different gateway platforms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Concept_Conference]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:Conferences_Ressources_and_Licenses_-_Scheme2_G722.png&amp;diff=72522</id>
		<title>File:Conferences Ressources and Licenses - Scheme2 G722.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:Conferences_Ressources_and_Licenses_-_Scheme2_G722.png&amp;diff=72522"/>
		<updated>2024-07-09T09:22:26Z</updated>

		<summary type="html">&lt;p&gt;Aza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto14r2:Conferences,_Resources_and_Licenses&amp;diff=72521</id>
		<title>Howto14r2:Conferences, Resources and Licenses</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto14r2:Conferences,_Resources_and_Licenses&amp;diff=72521"/>
		<updated>2024-07-09T09:22:01Z</updated>

		<summary type="html">&lt;p&gt;Aza: Created page with &amp;quot;==Applies To== This information applies to  all innovaphone devices supporting a &amp;#039;&amp;#039;CONF&amp;#039;&amp;#039; or &amp;#039;&amp;#039;SCNF&amp;#039;&amp;#039; interface and hence &amp;#039;&amp;#039;Conference Channels&amp;#039;&amp;#039; (as shown in the devices home-page).  &amp;lt;!-- Keywords: Konferenzen, Lizenzen, 3PTY, 3er Konferenz 3erkonferenz, multi-party conference, mehrfachkonferenz, conferencing, conferences --&amp;gt;  ==More Information== Performing conferencing on a Reference10:Gateway/Interfaces#Conferencing_interface_.28CONF.29 | &amp;#039;&amp;#039;CONF or SCNF&amp;#039;&amp;#039; interface...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Applies To==&lt;br /&gt;
This information applies to&lt;br /&gt;
&lt;br /&gt;
all innovaphone devices supporting a &#039;&#039;CONF&#039;&#039; or &#039;&#039;SCNF&#039;&#039; interface and hence &#039;&#039;Conference Channels&#039;&#039; (as shown in the devices home-page).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Keywords: Konferenzen, Lizenzen, 3PTY, 3er Konferenz 3erkonferenz, multi-party conference, mehrfachkonferenz, conferencing, conferences --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
Performing conferencing on a [[Reference10:Gateway/Interfaces#Conferencing_interface_.28CONF.29 | &#039;&#039;CONF or SCNF&#039;&#039; interface]] consumes both resources and licenses. Here is an overview of which and how much. &lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
First let us have a look at the overall scheme:&lt;br /&gt;
&lt;br /&gt;
[[Image:Conferences_Ressources_and_Licenses_-_Scheme2_G722]]&lt;br /&gt;
&lt;br /&gt;
==== Coder channels ====&lt;br /&gt;
Both the &#039;&#039;CONF&#039;&#039; and &#039;&#039;SCNF&#039;&#039; interface provides the mixing of 8KHz G711 PCM audio channels. &lt;br /&gt;
&lt;br /&gt;
If a call is done towards a CONF interface, it will allocate a &#039;&#039;Coder channel&#039;&#039; from the DSP coder channel bank for processing of the audio from the VoIP codec (e.g. G.711, G.722, OPUS) to PCM audio. &lt;br /&gt;
&lt;br /&gt;
The SCNF supports G.711a/u and G.722 coder. No &#039;&#039;Coder channel&#039;&#039; needs to be allocated for a call.&lt;br /&gt;
&lt;br /&gt;
==== (Soft) Conference Channels ====&lt;br /&gt;
Each call to a CONF interface consumes one of the &#039;&#039;Conference Channels&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Each call to an SCNF interface consumes one of the &#039;&#039;Soft Conference Channels&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Channels license ====&lt;br /&gt;
&lt;br /&gt;
In addition to that, a call to either the CONF or SCNF requires a &#039;&#039;Channel&#039;&#039; license. This license can be obtained from the PBX if the  &#039;&#039;PBX Channels licenses&#039;&#039; switch in the PBX [[Reference13r1:PBX/Objects/Conference | &#039;&#039;Conference&#039;&#039; object ]] is activated (if the call comes through such an object) or the &#039;&#039;Obtain Channels lic on outgoing call&#039;&#039; check-mark is ticked in a [[Reference13r1:PBX/Objects/Gateway | PBX &#039;&#039;Gateway&#039;&#039; object ]] (if the call comes through such an object).  For this, &#039;&#039;PBX Channels licenses&#039;&#039; must be installed on the PBX.&lt;br /&gt;
&lt;br /&gt;
This is the recommended configuration.  However, the &#039;&#039;Channel&#039;&#039; license can also be obtained locally from the gateway where the CONF/SCNF is located on. All innovaphone gateways have a number of &#039;&#039;Channel&#039;&#039; licenses built-in. The number of licenses available is equal to the number of &#039;&#039;Coder&#039;&#039; channels the box supports.  If no license is sent along with the call to the CONF or SCNF interface, the interface will try to obtain one from the pool of built-in licenses. This can save you some cost.  However, be aware that these licenses (as well as the corresponding &#039;&#039;Channel&#039;&#039; coders) are also required for calls through the ISDN BRI/PRI interfaces or for audio fax calls. Calls to CONF/SCNF interfaces which consume local &#039;&#039;Channel&#039;&#039; licenses may inhibit such calls therefor. &lt;br /&gt;
&lt;br /&gt;
The PBX-Channels License has order no. 02-00020-007 according to chapter &amp;quot;3.5 PBX Channels license&amp;quot; in the [https://www.innovaphone.com/content/downloads/innovaphone-Licensing%20Guidelines-V13r2-EN.pdf innovaphone license guide]. &lt;br /&gt;
&lt;br /&gt;
The [[Reference13r1:PBX/Config/General#License_Status|status of the PBX Licenses]] shows assigned PBX-Channel licenses:&lt;br /&gt;
&lt;br /&gt;
[[Image:Conferences,_Ressources_and_Licenses_-_pbx-channel_license_01.png]]&lt;br /&gt;
&lt;br /&gt;
==== Port license ====&lt;br /&gt;
The registration of the CONF and/or SCNF to the PBX Conference object does not require a Port license.&lt;br /&gt;
&lt;br /&gt;
Although this is not directly related to the CONF or SCNF interface, please note that a single &#039;&#039;Port&#039;&#039; license is required if any of the rooms defined in a PBX &#039;&#039;Conference&#039;&#039; object is accessed using the conference web access (from 13r3).&lt;br /&gt;
&lt;br /&gt;
==== CPU usage ====&lt;br /&gt;
For a calculation of CPU usage see [[Howto:V13_Firmware_Upgrade_V13r2_V13r3#Conferences]].&lt;br /&gt;
&lt;br /&gt;
===Example Scenarios===&lt;br /&gt;
&lt;br /&gt;
====Conference on hardware gateway with local ISDN====&lt;br /&gt;
Let us assume we have a conference running on a CONF interface with one PSTN and 3 VoIP participants.  In this case, we have &lt;br /&gt;
&lt;br /&gt;
{| border=1 &lt;br /&gt;
| ||Caller || DSP Coder Channel ||  Conference Channel || PBX Channel License&lt;br /&gt;
|-&lt;br /&gt;
| ||1 PSTN || 1 (CONF) + 1 (ISDN) **|| 1  ||  1 &lt;br /&gt;
|-&lt;br /&gt;
| ||3 VoIP || 3|| 3 || 3 &lt;br /&gt;
|-&lt;br /&gt;
| Total || 4 || 5 || 4 || 4&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;: {{FIXME|reason=do we need only one or would this require &#039;&#039;enable PCM&#039;&#039;?}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Looking at an IP411, it supports the following resources:&lt;br /&gt;
&lt;br /&gt;
[[Image:Conferences,_Ressources_and_Licenses_-_example_gateway_channels_IP411.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can see that our sample scenario will not work on an IP411 as there are no &#039;&#039;Conference Channels&#039;&#039; available.  However, if we change the scenario so that an SCNF is used instead of a CONF, it would look as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=1 &lt;br /&gt;
| ||Caller || DSP Coder Channel ||  Soft Conference Channel || PBX Channel License&lt;br /&gt;
|-&lt;br /&gt;
| ||1 PSTN || 1 (ISDN) **|| 1  ||  1 &lt;br /&gt;
|-&lt;br /&gt;
| ||3 VoIP || 3|| 3 || 3 &lt;br /&gt;
|-&lt;br /&gt;
| Total || 4 || 4 || 4 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will work on an IP411.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 3PTY Conferencing ===&lt;br /&gt;
3-way conferencing is special as it is usually implemented internally in the innovaphone IP phones.  That is, each user of an innovaphone IP phone (except the IP61) has internal conferencing resources built-in to allow for a 3-way conference.  No external &#039;&#039;CONF/SCNF&#039;&#039; interface is needed.&lt;br /&gt;
&lt;br /&gt;
However, on innovaphone DECT phones, no internal conferencing resource is present and hence no internal 3PTY is possible.  The DECT system can thus be [[Reference9:3pty conference on DECT phones|configured to use an external conferencing resource]] for 3PTY.  In this case, the rules above apply.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
* [[Reference9:Concept myPBX]]&lt;br /&gt;
* [[Reference10:Concept Innovaphone Virtual Appliance]]&lt;br /&gt;
* [[Reference9:3pty conference on DECT phones]]&lt;br /&gt;
* [[Reference10:Gateway/Interfaces#Conferencing_interface_.28CONF.29]]&lt;br /&gt;
* [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported]], lists DSP and CONF resources for the different gateway platforms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Concept_Conference]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Update_innovaphone.com_Wildcard-Certificate_in_a_Device_Trustlist&amp;diff=70377</id>
		<title>Howto:Update innovaphone.com Wildcard-Certificate in a Device Trustlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Update_innovaphone.com_Wildcard-Certificate_in_a_Device_Trustlist&amp;diff=70377"/>
		<updated>2023-12-19T11:22:49Z</updated>

		<summary type="html">&lt;p&gt;Aza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Applies To==&lt;br /&gt;
This information applies to&lt;br /&gt;
&lt;br /&gt;
* All innovaphone IP-Phones and -Gateways with 12r2, 13r1, 13r2, 13r3 firmware&lt;br /&gt;
&amp;lt;!-- Keywords: 13r3 13r2 13r1 12r2 zertifikat trust list --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
&lt;br /&gt;
===Problem Details===&lt;br /&gt;
On 15.01.2024 the current certificate &amp;lt;code&amp;gt;*.innovaphone.com&amp;lt;/code&amp;gt; will expire. This is used in the PBX trust list to establish an encrypted connection between your PBX and the innovaphone push service.&lt;br /&gt;
To ensure that Push also works for your customers after 15.01.2024, this must be added to the trust list of the respective PBX.&lt;br /&gt;
After 15.01.2024 the old &amp;lt;code&amp;gt;*.innovaphone.com&amp;lt;/code&amp;gt; certificate can be deleted.&lt;br /&gt;
This certificate is currently only relevant for gateways on which Push is running. During the transition period up to and including 15.01.2024, both &amp;lt;code&amp;gt;*.innovaphone.com&amp;lt;/code&amp;gt; certificates are required.&lt;br /&gt;
&lt;br /&gt;
Additionally, every time an innovaphone devices is restarted the current  &amp;lt;code&amp;gt;*.innovaphone.com&amp;lt;/code&amp;gt; certificate generates a [[Reference9:Event/0x000c1001 | x509: A certificate has expired or will expire soon]] event. &lt;br /&gt;
&lt;br /&gt;
Since we can update the Push-service certificate only on 15.01.2024 (otherwise existing devices without an updated certificate will stop working), it is important to keep until 15.01.2024 both certificates in the Trustlist of devices running a PBX with Push-functionality.&lt;br /&gt;
&lt;br /&gt;
===Resolution===&lt;br /&gt;
Here are three ways to replace the certificate on all innovaphone devices.&lt;br /&gt;
&lt;br /&gt;
1. In the coming 13r3SR12, 13r2SR30 and 12r2SR65 the certificate will be added automatically during the update. &lt;br /&gt;
After 15.01.2024 the old certificate can be manually deleted. Also, current firmware includes a mechanism to prevent &#039;&#039;Certificate expiration events&#039;&#039; in case that a new certificate exists for the same CN. &lt;br /&gt;
Finally, devices with 13r3SR12, 13r2SR30 and 12r2SR65 firmware will have after a factory reset only the new *.innovaphone.com certificate. &lt;br /&gt;
&lt;br /&gt;
2. The certificate can be added manually on the PBX. It can be downloaded [[:Media:Star innovaphone cert 2023.zip|here]] and then be uploaded on the PBX under &amp;quot;General/Certificates/Trust list&amp;quot;. &lt;br /&gt;
After 15.01.2024, the old certificate can be manually deleted. &lt;br /&gt;
&lt;br /&gt;
3. The new certificate can be added, and the old certificate can be deleted via commands (which can be sent using an update server or the [[Reference13r3:Concept_App_Service_Devices#Expert_configuration | Expert configuration ]] in 13r3 &#039;&#039;Devices&#039;&#039;). This needs a reboot of the device. &lt;br /&gt;
Save the new certificate in the trust list:&lt;br /&gt;
     !vars create X509/TRUSTED pba 3082063d30820525a0030201020211008f6019717ee7577e0afec5f44e49d8de300d06092a864886f70d01010b050030818f310b3009060355040613024742311b30190603550408131247726561746572204d616e636865737465723110300e0603550407130753616c666f726431183016060355040a130f5365637469676f204c696d69746564313730350603550403132e5365637469676f2052534120446f6d61696e2056616c69646174696f6e2053656375726520536572766572204341301e170d3233313132393030303030305a170d3234313232393233353935395a301c311a301806035504030c112a2e696e6e6f766170686f6e652e636f6d30820122300d06092a864886f70d01010105000382010f003082010a0282010100d2be63142556c121a4ddc121b544ac063c5c6ac9d5a94468ff0b14d0c83618cb9a95409112daa62dc18053606eb9bc973cd1028383f09a67dca0fee9a9a8b897146ccfe55531a9999ba2ea1b473b2791f661bbbefd0eec14e541204d3fa932cea439ac32bbbb8b49efd815a6ed6af7614ddca01720bf44272842cf86062909d1d9be8b884a5a8930412ae71dbd5b28c06d0a4d82e59354c9a183029322e515b6c68a9158c996b61b224ab5c277ebffa7f027d7efb1484f452c94441cce6eed746b4ab9ff477cc45fddff100a5d652e2b675ab755e8c2e9d61542ba30caeb7962c6af5b1d74f3add0d8f7716675275028e2a966c1fc98e3190eac24f1c0e2ba6d0203010001a382030430820300301f0603551d230418301680148d8c5ec454ad8ae177e99bf99b05e1b8018d61e1301d0603551d0e0416041488f8ab525ac415080869d4802c69301c02f2711c300e0603551d0f0101ff0404030205a0300c0603551d130101ff04023000301d0603551d250416301406082b0601050507030106082b0601050507030230490603551d20044230403034060b2b06010401b231010202073025302306082b06010505070201161768747470733a2f2f7365637469676f2e636f6d2f4350533008060667810c01020130818406082b0601050507010104783076304f06082b060105050730028643687474703a2f2f6372742e7365637469676f2e636f6d2f5365637469676f525341446f6d61696e56616c69646174696f6e53656375726553657276657243412e637274302306082b060105050730018617687474703a2f2f6f6373702e7365637469676f2e636f6d302d0603551d110426302482112a2e696e6e6f766170686f6e652e636f6d820f696e6e6f766170686f6e652e636f6d3082017e060a2b06010401d6790204020482016e0482016a016800760076ff883f0ab6fb9551c261ccf587ba34b4a4cdbb29dc68420a9fe6674c5a3a740000018c1a8f6dc9000004030047304502207a7190a77e7a3aab5a4472a5d2c83dd0673488cd4c103985a84dae8448383d91022100f95d389e99f516e6c9320a87fdb3496910d8c430392459153515c4db98e886b50076003f174b4fd7224758941d651c84be0d12ed90377f1f856aebc1bf2885ecf8646e0000018c1a8f6df60000040300473045022021e05b0e5d47268d62aad878f303de581149daa557d0fc4647e4140eb51d9a98022100c760935eb4c420a090e5f495ccaa7acf0ef5170b8a85dac3d475f15c6e8c466f007600eecdd064d5db1acec55cb79db4cd13a23287467cbcecdec351485946711fb59b0000018c1a8f6df8000004030047304502210090e8364d361bf9d11c2d1505da6429ae0915d5bd4576f366ea8698fcd41d4332022044e35001cef19b5599a18adefb1870be0873c9087637bd1f3a707b2b21449e02300d06092a864886f70d01010b0500038201010062719ad3d28649310387ebd69a5062af5cdc7b58b3c9dc9489fb4d9bee003deb2bb9328c945e6ace50b1e57329622cf53fd3a177016a03e8b610c291d4e464363cd6c94b5c7c0fe5e48944654bac1409e3448c883ad7efa2bc84e7a60fb86072049108403be2fc7d56473aa412a357dc5901727488814ab1e224bd713daf2103853b9505e6e111159c31470ded8a3cc9da2ec2e78b641f9512f30a4330147504d7b087ec5aea520a806280c1929c3d97f5352c4ab7e78a19c46c6fca46dbb2d059f11e947b28d352e78ee82c5173e2372d67b682f522967a2e056bd2f570f483266f4e0897729f58b31462ba5d8aa7b4764566a0a3cf414c36b11b14ef618f4f&lt;br /&gt;
&lt;br /&gt;
Remove old certificate (optional):&lt;br /&gt;
     !mod cmd X509 form /item-trusted-bc935fbfe2f788ae7f8d087fefacadebba886fe0764f55510bf4de9dccb9588c26a9c9da on /trusted-delete Remove&lt;br /&gt;
&lt;br /&gt;
===Additional Recommendation===&lt;br /&gt;
&lt;br /&gt;
If you are using 13r2 or 13r3 firmware and are still connected to the &#039;&#039;old&#039;&#039; push-service (services.innovaphone.com), we recommend switching to the new push-service described in the [[Howto:V13_Firmware_Upgrade_V13r1_V13r2#Push | upgrading 13r1 13r2 article]]. We currently evaluate to change the certificate used on the push-service to an innovaphone CA-signed one, with a longer duration time.  This is possible because in 13r2 and 13r3 the PBXManager plugin for Push (i.e. your browser) does not connect to the push service and therefore does not need a certificate that is trusted by all browsers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Related Articles == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:IP62_WLAN_WiFi_Handset_-_innovaphone_-_H323_Testreport&amp;diff=68558</id>
		<title>Howto:IP62 WLAN WiFi Handset - innovaphone - H323 Testreport</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:IP62_WLAN_WiFi_Handset_-_innovaphone_-_H323_Testreport&amp;diff=68558"/>
		<updated>2023-09-18T10:43:25Z</updated>

		<summary type="html">&lt;p&gt;Aza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Summary==&lt;br /&gt;
&lt;br /&gt;
WLAN Phone IP62.&lt;br /&gt;
&lt;br /&gt;
The IP62 is a WLAN IP phone based on, but not identical to Ascom&#039;s i62 product.  In contrast to the old IP72 product, the IP62 has no innovaphone firmware running.  As such, typical innovaphone features (such as deployment with update server, innovaphone&#039;ish phone user interface including sophisticated function keys etc.) are not available.  At the same time, its feature set is not equivalent to the Ascom i62, namely because there are no software-licensable features present and no UNITE support is available (thus no mass deployment, for example).  Each IP62 must be configured and maintained with WinPDM.  Keep these limitations in mind when you evaluate customer requirements.  &lt;br /&gt;
&lt;br /&gt;
To setup the IP62 the programming charger (USB) (order number: 50-00060-021)(Model:DP1-UAAA/1A) and the [http://download.innovaphone.com/ice/9.00/#wireless WinPDM application] is needed. The IP62 can not be configured by using a web browser only, as it is with other innovaphone telephones. &lt;br /&gt;
 &lt;br /&gt;
It&#039;s possible to configure up to four different WLAN&#039;s. &lt;br /&gt;
&lt;br /&gt;
The IP62 supports both H.323 and SIP but the following test results relate only to H.323 (in other words, SIP has not been tested).&lt;br /&gt;
&lt;br /&gt;
With firmware 3.4.16 and up, the IP62 will work with myPBX, too.&lt;br /&gt;
&lt;br /&gt;
==Certification Status==&lt;br /&gt;
&amp;lt;!-- by inno&lt;br /&gt;
   - uncomment one of the stati below &lt;br /&gt;
   - update date below&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
{{Template:Compat Status &amp;quot;certified&amp;quot;|certificate=ASCOM_IP62_WLAN-_3rd_Party_Product_Desc-product-cert.pdf}}&lt;br /&gt;
&lt;br /&gt;
Testing of this product has been finalized December, 2012.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The testing of the Ascom i62 equivalent to innovaphone IP62 is also done by Ascom Wireless Solutions:&lt;br /&gt;
*[[Media:Innovaphone PBX and Ascom i62 certified by Ascom.pdf|Certificate]]&lt;br /&gt;
*[[Media:Innovaphone PBX and Ascom i62 Test Report by Ascom.pdf|Test Report]]&lt;br /&gt;
&lt;br /&gt;
==Test Setup==&lt;br /&gt;
PBX: IP800&lt;br /&gt;
&lt;br /&gt;
Phones: IP62, IP222, IP241&lt;br /&gt;
&lt;br /&gt;
[[image:IP62-WLAN-Phone_11.png]]&lt;br /&gt;
&lt;br /&gt;
==Certification Status==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--{{Template:Compat Status &amp;quot;tested&amp;quot;}}--&amp;gt;&lt;br /&gt;
&amp;lt;!-- {{Template:Compat Status &amp;quot;in progress&amp;quot;}} --&amp;gt;&lt;br /&gt;
&amp;lt;!-- {{Template:Compat_Status_&amp;quot;referral_prod.&amp;quot;|certificate=Tpl_sip.business_Toplink_SIP_Provider_-_product-cert.pdf}} --&amp;gt;&lt;br /&gt;
&amp;lt;!-- {{Template:Compat_Status_&amp;quot;engineered_prod.&amp;quot;|certificate=Tpl_sip.business_Toplink_SIP_Provider_-_product-cert.pdf}} --&amp;gt;&lt;br /&gt;
&amp;lt;!-- {{Template:Compat_Status_&amp;quot;rec._prod.&amp;quot;|certificate=Tpl_sip.business_Toplink_SIP_Provider_-_product-cert.pdf}} --&amp;gt;&lt;br /&gt;
&amp;lt;!-- {{Template:Compat Status &amp;quot;tested&amp;quot;}} --&amp;gt;&lt;br /&gt;
&amp;lt;!-- {{Template:Compat Status &amp;quot;rejected&amp;quot;}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Testing of this product has been finalized October 21th, 2007. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Version==&lt;br /&gt;
Firmware Version / Software:&lt;br /&gt;
 * IP62 3.4.6&lt;br /&gt;
 * WinPDM 3.9.4 (Win 7/Win XP)&lt;br /&gt;
&lt;br /&gt;
Hardware Version:&lt;br /&gt;
 * IP62 HW Type:902202, HW rev: G5, Production date:12w12&lt;br /&gt;
 * innovaphone WLAN Desktop Programming Charger (Model: DP1)&lt;br /&gt;
&lt;br /&gt;
innovaphone Firmware:&lt;br /&gt;
 * V9 Hotfix 15&lt;br /&gt;
&lt;br /&gt;
==Device Setup==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Result&lt;br /&gt;
|----&lt;br /&gt;
|Register Device w/o specific configuration (requires DHCP, GK detection and “magic” alias)&lt;br /&gt;
|No, it is required to use WinPDM.&lt;br /&gt;
|----&lt;br /&gt;
|DHCP is default&lt;br /&gt;
|Ok&lt;br /&gt;
|----&lt;br /&gt;
|DHCP yields timeserver and time displays correctly&lt;br /&gt;
|Takes time from PBX if no fixed NTP-IP is configured&lt;br /&gt;
|----&lt;br /&gt;
|SNTP config has TZ string for timezone/dst autoconfig&lt;br /&gt;
|Yes. Different time zones are choosable&lt;br /&gt;
|----&lt;br /&gt;
|DHCP yields correct default gateway&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Device supports magic registration (e.g. by serial)&lt;br /&gt;
|No&lt;br /&gt;
|----&lt;br /&gt;
|GK discovery works&lt;br /&gt;
|No. Numbers must configured in WinPDM and associate to devices. General settings as language, Network, GK-ID-IP can be deployed with templates, but device must fit in the (programmable)charger &lt;br /&gt;
|----&lt;br /&gt;
|Fixed GK registrations works&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|2nd GK is supported&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Changing registrations between GK1 and GK2&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Registrations supports GK-ID&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Device registers w/o Extension (just by name)&lt;br /&gt;
|No. Number is needed, too. Hardware-ID in User-Object must be the name&lt;br /&gt;
|----&lt;br /&gt;
|Device registers by name with non-latin1 characters (e.g. UserÄÖÜ)&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Device registers by extension&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Device registers with H.235 password&lt;br /&gt;
|Yes, but it&#039;s confusing in WinPDM. &#039;&#039;UserObject password&#039;&#039; can found in WinPDM in field &#039;&#039;gatekeeper password&#039;&#039;.&lt;br /&gt;
|----&lt;br /&gt;
|Device registers multiple identities&lt;br /&gt;
|No, not within the phone. It&#039;s possible to add identities in WinPDM and associate and change them to a phone (reboot after sync. required)&lt;br /&gt;
|----&lt;br /&gt;
|Device sends NAT - keepalive messages&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|PBX redirect (UserObject on Master/Phone at Slave registered)&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Physical Location (@PBX) correct?&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Device can configure IP address, GK attributes (gk-id, gk-ip, alias) from DHCP (vendor specific)&lt;br /&gt;
|No. Only domain name. 1stGK, 2ndGK, GK-Identifier where still empty. Codec must be set fix with WinPdm.&lt;br /&gt;
|----&lt;br /&gt;
|Device refreshes the PBX registration&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Device supports SRTP via SDES&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Device supports SRTP via DTLS&lt;br /&gt;
|No&lt;br /&gt;
|----&lt;br /&gt;
|Device supports HTTPS&lt;br /&gt;
|No&lt;br /&gt;
|----&lt;br /&gt;
|Device supports VAD (Voice activity detection)&lt;br /&gt;
|No&lt;br /&gt;
|----&lt;br /&gt;
|Supported menu languages&lt;br /&gt;
|18 languages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Test Results==&lt;br /&gt;
&lt;br /&gt;
=== Basic Call ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Result &lt;br /&gt;
|----&lt;br /&gt;
|call using g711a&lt;br /&gt;
|yes&lt;br /&gt;
|----&lt;br /&gt;
|call using g711u&lt;br /&gt;
|yes&lt;br /&gt;
|----&lt;br /&gt;
|call using g729&lt;br /&gt;
|yes&lt;br /&gt;
|----&lt;br /&gt;
|call using g722&lt;br /&gt;
|yes&lt;br /&gt;
|----&lt;br /&gt;
|Overlapped sending&lt;br /&gt;
|yes&lt;br /&gt;
|----&lt;br /&gt;
|Early media channel&lt;br /&gt;
|yes&lt;br /&gt;
|----&lt;br /&gt;
|Device shows called id number&lt;br /&gt;
|yes, if Name is not known or is not saved in contacts. Otherwise only name is displayed&lt;br /&gt;
|----&lt;br /&gt;
|Device shows called id name&lt;br /&gt;
|yes&lt;br /&gt;
|----&lt;br /&gt;
|Device shows called id display info&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|CGPN can be suppressed&lt;br /&gt;
|No&lt;br /&gt;
|----&lt;br /&gt;
|Reverse Media Negotiation&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Device shows CDPN/CGPN on incoming call&lt;br /&gt;
|NO! Internal calls=ObjectName and for external calls -extern- is displayed. But number is saved in call list (if editing the call) &lt;br /&gt;
|----&lt;br /&gt;
|Device shows CDPN/CGPN on outgoing call&lt;br /&gt;
|NO! Internal calls=ObjectName and for external calls -extern- is displayed. But number is saved in call list (if editing the call)&lt;br /&gt;
|----&lt;br /&gt;
|Device shows connected number&lt;br /&gt;
|Yes, if Name is not available. But not name and number.&lt;br /&gt;
|----&lt;br /&gt;
|Device shows diverting number&lt;br /&gt;
|No number. Shows only -redirecting- if call from CFU comes in. If CFU on IP62 is configured target number is displayed&lt;br /&gt;
|----&lt;br /&gt;
|Device supports distinctive ringing&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Device supports asymmetric codec negotiation&lt;br /&gt;
|n.a.&lt;br /&gt;
|----&lt;br /&gt;
|Device supports codec renegotiation during a conversation&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Device shows correct display message in case of busy CDPN&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Device shows correct display message in case of not existing CDPN&lt;br /&gt;
|Yes. -Invalid number- if number doesn&#039;t exist or -no response- if number exist but i.e. is not registered&lt;br /&gt;
|----&lt;br /&gt;
|Device shows correct display message in case that the call is declined&lt;br /&gt;
|Yes. Inclusive call back request.&lt;br /&gt;
|----&lt;br /&gt;
|SOAP Call works? &lt;br /&gt;
|Yes, with WH1_v4.1.12.pkg&lt;br /&gt;
|----&lt;br /&gt;
|Device supports display updates during call(needed for Directory Search object)&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Long Time Call (&amp;gt;30 min) works?&lt;br /&gt;
|yes. 45 min. tested.&lt;br /&gt;
|----&lt;br /&gt;
|Registration redirecting works?&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Incoming SRTP call (SDES) - SRTP not enabled on DUT&lt;br /&gt;
|Yes, call established without SRTP.&lt;br /&gt;
|----&lt;br /&gt;
|Incoming SRTP call (SDES) - SRTP enabled on DUT&lt;br /&gt;
|Yes, call established with SRTP.&lt;br /&gt;
|----&lt;br /&gt;
|Incoming SRTP call (DTLS) - SRTP not enabled on DUT&lt;br /&gt;
|Yes, call established without SRTP.&lt;br /&gt;
|----&lt;br /&gt;
|Incoming SRTP call (DTLS) - SRTP enabled on DUT&lt;br /&gt;
|Yes, call established without SRTP.&lt;br /&gt;
|----&lt;br /&gt;
|Voice Quality OK?&lt;br /&gt;
|Yes, with WH1_v4.1.12.pkg&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DTMF ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Result &lt;br /&gt;
|----&lt;br /&gt;
|DTMF tones sent correctly&lt;br /&gt;
|yes&lt;br /&gt;
|----&lt;br /&gt;
|DTMF tones received correctly&lt;br /&gt;
|Yes (RFC 2833 RTP Event)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Hold/Retrieve ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Result &lt;br /&gt;
|----&lt;br /&gt;
|Device handles incoming hold correctly&lt;br /&gt;
|Yes, with WH1_v4.1.12.pkg&lt;br /&gt;
|----&lt;br /&gt;
|Device can put a call on hold using correctly&lt;br /&gt;
|Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Transfer with consultation ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Voice Ok?&lt;br /&gt;
!MoH Ok?&lt;br /&gt;
|----&lt;br /&gt;
|inno1 calls inno2. inno2 transfers to testphone.&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
||inno1 calls inno2. inno1 transfers to testphone.&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|inno1 calls testphone. inno1 transfers to inno2.&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes, if U-APSD is disabled MOH is hearable without cuts.&lt;br /&gt;
|----&lt;br /&gt;
|inno1 calls testphone. testphone transfers to inno2.&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|testphone calls inno1. inno1 transfers to inno2.&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|testphone calls inno1. testphone transfers to inno2.&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Transfer with consultation (alerting only) ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Voice Ok?&lt;br /&gt;
!MoH Ok?&lt;br /&gt;
|----&lt;br /&gt;
|inno1 calls inno2. inno2 transfers to testphone.&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
||inno1 calls inno2. inno1 transfers to testphone.&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|inno1 calls testphone. inno1 transfers to inno2.&lt;br /&gt;
|Yes&lt;br /&gt;
|If U-APSD is disabled MOH and Ringback is hearable without cuts.&lt;br /&gt;
|----&lt;br /&gt;
|inno1 calls testphone. testphone transfers to inno2.&lt;br /&gt;
|No. Transfer with consultation must be connected to transfer. &lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|testphone calls inno1. inno1 transfers to inno2.&lt;br /&gt;
|Yes&lt;br /&gt;
|If U-APSD is disabled MOH and Ringback is hearable without cuts.&lt;br /&gt;
|----&lt;br /&gt;
|testphone calls inno1. testphone transfers to inno2.&lt;br /&gt;
|No. Transfer with consultation must be connected to transfer. 	&lt;br /&gt;
|Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Blind Transfer ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Voice Ok?&lt;br /&gt;
|----&lt;br /&gt;
|inno1 calls inno2. inno2 transfers to testphone.&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
||inno1 calls inno2. inno1 transfers to testphone.&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|inno1 calls testphone. inno1 transfers to inno2.&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|inno1 calls testphone. testphone transfers to inno2.&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|testphone calls inno1. inno1 transfers to inno2.&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|testphone calls inno1. testphone transfers to inno2.&lt;br /&gt;
|Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Blind Transfer (alerting only/deflection)===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Voice Ok?&lt;br /&gt;
|----&lt;br /&gt;
|inno1 calls inno2. inno2 transfers to testphone.&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|inno1 calls testphone. testphone transfers to inno2.&lt;br /&gt;
|No. Call must be established to transfer&lt;br /&gt;
|----&lt;br /&gt;
|testphone calls inno1. inno1 transfers to inno2.&lt;br /&gt;
|No ringback tone hearable on IP62 after inno1 blindtransfer to inno2 (#86202)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Broadcast Group &amp;amp; Waiting Queue ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Result &lt;br /&gt;
|----&lt;br /&gt;
|testphone makes call to a Broadcast Group. inno1 picks up.&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|inno1 makes call to a Broadcast Group. testphone picks up.&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|testphone makes call to a Waiting Queue. inno1 picks up before announcement is played.&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|testphone makes call to a Waiting Queue. inno1 picks up after announcement is played.&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
||inno1 makes call to a Waiting Queue. testphone picks up.&lt;br /&gt;
|Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DTMF Features ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Result &lt;br /&gt;
|----&lt;br /&gt;
|CFU Activate/Deactivate			&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|CFB Activate/Deactivate		&lt;br /&gt;
|Yes, but no icon/info for enabled CFB&lt;br /&gt;
|----&lt;br /&gt;
|CFNR Activate/Deactivate		&lt;br /&gt;
|Yes, but no icon/info for enabled CFB&lt;br /&gt;
|----&lt;br /&gt;
|Pickup Group &lt;br /&gt;
|Yes, but no pickup-key and/or Display Info for incoming call&lt;br /&gt;
|----&lt;br /&gt;
|Pickup Directed		&lt;br /&gt;
|Yes, but no pickup-key and/or Display Info for incoming call&lt;br /&gt;
|----&lt;br /&gt;
|Park/Unpark		&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Park To/Unpark From		&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Call Completion Busy&lt;br /&gt;
|Yes. But with *37*$# the call back number is not shown. Instead you see on IP62 Display &amp;quot;Extern&amp;quot;. You can use instead the call-back function from IP62 (shows correct name)&lt;br /&gt;
|----&lt;br /&gt;
|Call Completion Cancel&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Join Group/Leave Group&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Join All Groups/Leave All Groups&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Enable mobility/Disable mobility		&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Enable mobility cw/Disable mobility cw		&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Set presence&lt;br /&gt;
|Yes. Our phones can see the presence state of IP62. But, IP62 can&#039;t see presence state of our phones.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Other Features==&lt;br /&gt;
&lt;br /&gt;
===Directory===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Result &lt;br /&gt;
|----&lt;br /&gt;
|Device built-in directory exists&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Can be dialled from&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Does CLI resolution&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|display update if directory object is used?&lt;br /&gt;
|Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Result &lt;br /&gt;
|----&lt;br /&gt;
|External LDAP Server supported&lt;br /&gt;
|No&lt;br /&gt;
|----&lt;br /&gt;
|Can be dialled from&lt;br /&gt;
|No&lt;br /&gt;
|----&lt;br /&gt;
|Does CLI resolution&lt;br /&gt;
|No&lt;br /&gt;
|----&lt;br /&gt;
|display update if directory object is used?&lt;br /&gt;
|No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Keys===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Result &lt;br /&gt;
|----&lt;br /&gt;
|Device has speed dial keys&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Device has programmable function keys&lt;br /&gt;
|Yes&lt;br /&gt;
|----&lt;br /&gt;
|Device has partner keys&lt;br /&gt;
|No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===CTI Features (with SOAP / TAPI / myPBX) ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; &lt;br /&gt;
!Tested feature&lt;br /&gt;
!Result &lt;br /&gt;
|----&lt;br /&gt;
|User Call - outgoing call &lt;br /&gt;
|OK&lt;br /&gt;
|----&lt;br /&gt;
|User Connect - Answer incoming call&lt;br /&gt;
|NOK - Call it&#039;s not answered by the IP62.&lt;br /&gt;
|----&lt;br /&gt;
|User Reject - Reject alerting call&lt;br /&gt;
|OK&lt;br /&gt;
|----&lt;br /&gt;
|User Disconnect - Disconnect active call&lt;br /&gt;
|OK&lt;br /&gt;
|----&lt;br /&gt;
|User Hold - Put connected call on hold &lt;br /&gt;
|OK&lt;br /&gt;
|----&lt;br /&gt;
|User Hold Retrieve - Retrieve call on hold &lt;br /&gt;
|OK&lt;br /&gt;
|----&lt;br /&gt;
|User Transfer - Transfer with Consult &lt;br /&gt;
|NOK - Could not initiate second call.&lt;br /&gt;
|----&lt;br /&gt;
|User Transfer - Transfer with Consult (Alerting only)&lt;br /&gt;
|NOK - Could not initiate second call.&lt;br /&gt;
|----&lt;br /&gt;
|User Transfer - Blind Transfer&lt;br /&gt;
|OK&lt;br /&gt;
|----&lt;br /&gt;
|Switch Calls / Held Active Call automatically&lt;br /&gt;
|NOK - Could not initiate second call&lt;br /&gt;
|----&lt;br /&gt;
|3PTY - Make 3rd Party Call&lt;br /&gt;
|NOK - Could not initiate second call.&lt;br /&gt;
|----&lt;br /&gt;
|Park Call&lt;br /&gt;
|OK&lt;br /&gt;
|----&lt;br /&gt;
|Retrieve Parked Call&lt;br /&gt;
|NOK - Generates a second redirected call on the IP62.&lt;br /&gt;
|----&lt;br /&gt;
|Pickup Call&lt;br /&gt;
|NOK - Generates a second redirected call on the IP62.&lt;br /&gt;
|----&lt;br /&gt;
|Connected Number Update on Display&lt;br /&gt;
|OK&lt;br /&gt;
|----&lt;br /&gt;
|CFU indication on Display&lt;br /&gt;
|OK&lt;br /&gt;
|----&lt;br /&gt;
|Send DTMFs via CTI&lt;br /&gt;
|NOK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: CTI Features were tested with v11r1 Sr2 and IP 62 sw 5.1.30&lt;br /&gt;
&lt;br /&gt;
== Basic-Configuration ==&lt;br /&gt;
&lt;br /&gt;
This section describes how to configure the innovaphone PBX and WLAN Phone IP62 by using WinPDM and the WLAN programming charger.&lt;br /&gt;
To find out how to install the WinPDM software and the programming charger on a Windows PC, please take a look into the [[Media:IP62-WLAN-Phone_install_winpdm.pdf | WinPDM installation manual]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Push the IP62 in the programming charger. In the tab &amp;quot;Devices&amp;quot; it&#039;s marked as online now.&lt;br /&gt;
&lt;br /&gt;
[[Image:IP62-WLAN-Phone_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Change to the tab numbers. Here you can see that the IP62 is associated with number 202 at the moment and some other interesting things like; which template is used, last login, etc.&lt;br /&gt;
&lt;br /&gt;
[[Image:IP62-WLAN-Phone_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. How to assign a new number? Click on &amp;quot;New+&amp;quot; and a new window will open...&lt;br /&gt;
&lt;br /&gt;
[[Image:IP62-WLAN-Phone_3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. ...where you can set the number...&lt;br /&gt;
&lt;br /&gt;
[[Image:IP62-WLAN-Phone_5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. ...which you have configure in the PBX.&lt;br /&gt;
&lt;br /&gt;
[[Image:IP62-WLAN-Phone_4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Then right click on the line with the new number, in our example 204, and click on &amp;quot;Associate with device&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:IP62-WLAN-Phone_6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. In the new window choose you device and click on ok. After it, the IP62 will synchronise with the number and the settings (what we must do in the next steps) for this number &lt;br /&gt;
&lt;br /&gt;
[[Image:IP62-WLAN-Phone_7.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. Do a right click on our new number and choose &amp;quot;Edit parameters&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:IP62-WLAN-Phone_8.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. Set your WLAN configuration (four different networks are possible, the active one of the four can you set under &amp;quot;General&amp;quot;) and all other things what are necessary. There is no need to save the configuration as long as you set the configs. Changed settings are dark-blue and after a click on &amp;quot;ok&amp;quot; all saved settings are green. &lt;br /&gt;
&lt;br /&gt;
[[Image:IP62-WLAN-Phone_9.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. Under &amp;quot;VoIP&amp;quot; -&amp;gt; &amp;quot;H.323&amp;quot; -&amp;gt; &amp;quot;Gatekeeper password&amp;quot; means the password, which you configured at the user object in the PBX.&lt;br /&gt;
&lt;br /&gt;
[[Image:IP62-WLAN-Phone_10.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11. After you plug the IP62 out of the charger, it will restart automatically and the new configuration is active.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Maintenance ==&lt;br /&gt;
&lt;br /&gt;
There are additional tools and informations for analysing the IP62 in the &#039;&#039;admin menu&#039;&#039;.&lt;br /&gt;
You can reach the menu by entering the &#039;&#039;Settings menu&#039;&#039; and type in “&#039;&#039;&#039;40022&#039;&#039;&#039;” on the keypad.&lt;br /&gt;
&lt;br /&gt;
For example, to activate pcap tracing:&lt;br /&gt;
&lt;br /&gt;
* Enable pcap in the IP62 GUI: “Settings -&amp;gt; AdminMenu*  -&amp;gt; Logging -&amp;gt; Logging mode&lt;br /&gt;
* Choose what should be traced: “Settings -&amp;gt; AdminMenu*  -&amp;gt; Logging -&amp;gt; Extended logging&lt;br /&gt;
&lt;br /&gt;
For further configuration and available options take a look in the [[Media:IP62-WLAN-Phone_install_winpdm.pdf | Installation and Operation Manual of the Portable Device Manager]] (aka PDM)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
Latest firmware version  6.2.7 is based on innnovaphone&#039;s v12r1 firmware and is not compatible with v13 WebRTC endpoints (e.g. SoftphoneApp) which make use of RTCP-MUX.&lt;br /&gt;
&lt;br /&gt;
If you plan to use ip62 in a v13 environment media-relay should be enalbed for this device inside the user object.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:Show_cleartext_password.png.png&amp;diff=68496</id>
		<title>File:Show cleartext password.png.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:Show_cleartext_password.png.png&amp;diff=68496"/>
		<updated>2023-08-30T11:04:05Z</updated>

		<summary type="html">&lt;p&gt;Aza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Show cleartext password&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:Show_cleartext_password.png&amp;diff=68494</id>
		<title>File:Show cleartext password.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:Show_cleartext_password.png&amp;diff=68494"/>
		<updated>2023-08-30T10:59:24Z</updated>

		<summary type="html">&lt;p&gt;Aza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Show clear-text password&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Platform&amp;diff=67035</id>
		<title>Reference13r1:Concept App Platform</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Platform&amp;diff=67035"/>
		<updated>2023-04-13T09:07:09Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Reboot after an image update hangs (ARM gateway) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= General =&lt;br /&gt;
* V13 uses [https://buildroot.org/ buildroot]&lt;br /&gt;
* this is an own (innovaphone) collection of packages&lt;br /&gt;
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* V13 or up&lt;br /&gt;
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) &lt;br /&gt;
* Virtual (x86_64)&lt;br /&gt;
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)&lt;br /&gt;
** VMWare&lt;br /&gt;
&lt;br /&gt;
== Default credentials ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;During INSTALL, the default passwords are replaced with the global Admin PW!&#039;&#039;&#039;&lt;br /&gt;
* SSH-Login with &#039;&#039;&#039;admin&#039;&#039;&#039; and &#039;&#039;&#039;ipapps&#039;&#039;&#039;&lt;br /&gt;
* root login with &#039;&#039;&#039;root&#039;&#039;&#039; and &#039;&#039;&#039;iplinux&#039;&#039;&#039; (the root login is not directly possible, you have to login as admin first and use the command &#039;&#039;su root&#039;&#039;)&lt;br /&gt;
* manager App (web login) &#039;&#039;&#039;pwd&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= App Platform - arm (Gateway)=&lt;br /&gt;
&lt;br /&gt;
* The installation image has a size of ~50MB. During installation, the following partitions are created:&lt;br /&gt;
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)&lt;br /&gt;
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)&lt;br /&gt;
** /dev/sda3 ext4: 500MB (contains the rootfs)&lt;br /&gt;
** /dev/sda4 swap: 512MB&lt;br /&gt;
&lt;br /&gt;
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:&lt;br /&gt;
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10&lt;br /&gt;
* the available RAM for the AP (as specified in column &#039;&#039;RAM for LAP (GB) out of RAM&#039;&#039; in chapter &#039;&#039;Technical data and recommended number of users supported&#039;&#039; of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))&lt;br /&gt;
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings&lt;br /&gt;
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10&lt;br /&gt;
&lt;br /&gt;
While it is hard to predict the performance of the AP in a specific scenario, we see that in a real life environment an AP running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users.  Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).&lt;br /&gt;
&lt;br /&gt;
= App Platform - x86-64 (Virtual Machine 64bit) =&lt;br /&gt;
&lt;br /&gt;
* The default disk size is 16GB. It should be increased &#039;&#039;&#039;before&#039;&#039;&#039; the first start if needed!&lt;br /&gt;
&lt;br /&gt;
* Multiple CPUs are supported, default is one CPU&lt;br /&gt;
&lt;br /&gt;
* default RAM: 512MB&lt;br /&gt;
* static IP address, DNS, Gateway can be configured with the command &#039;&#039;&#039;setip&#039;&#039;&#039; on the console. Run &#039;&#039;&#039;setip --help&#039;&#039;&#039; to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) &lt;br /&gt;
* If you have permission problems change to su user (Password is iplinux or your new admin password)  &lt;br /&gt;
* To figure out your ip address you can use the command: &#039;&#039;ip address&#039;&#039; on the console.&lt;br /&gt;
* &#039;&#039;&#039;loadkeys de&#039;&#039;&#039; can be used to change to german keyboard layout (etc.)&lt;br /&gt;
&lt;br /&gt;
* partitions:&lt;br /&gt;
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)&lt;br /&gt;
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)&lt;br /&gt;
** /dev/sda3 ext4: 500MB (contains the rootfs)&lt;br /&gt;
** /dev/sda4 swap: 512MB&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
==ARM Gateway==&lt;br /&gt;
&lt;br /&gt;
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn&#039;t be blocked by any firewall.)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You can also install it manually:&lt;br /&gt;
* Open App Platform -&amp;gt; General and &#039;&#039;&#039;Enable Linux Support&#039;&#039;&#039;. Restart the gateway.&lt;br /&gt;
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.&lt;br /&gt;
* Open App Platform -&amp;gt; IP and configure the IP settings of the App Platform. Restart the Gateway.&lt;br /&gt;
* Open App Platform -&amp;gt; Installation and select the given version or enter an own path to the &#039;&#039;app-platform-armel.img&#039;&#039; image file.&lt;br /&gt;
* The installation runs without any further required step.&lt;br /&gt;
&lt;br /&gt;
==Virtual machine==&lt;br /&gt;
&lt;br /&gt;
* Import the image into your server environment.&lt;br /&gt;
* Edit the disk size, if needed.&lt;br /&gt;
* Start the machine and wait until it reboots and starts again.&lt;br /&gt;
* Note: If you need to access IP addresses available through a VPN connection from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]&lt;br /&gt;
&lt;br /&gt;
== Backup of the Apps ==&lt;br /&gt;
&lt;br /&gt;
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.&amp;lt;br&amp;gt;&lt;br /&gt;
There are no other files which need to be backuped.&amp;lt;br&amp;gt;&lt;br /&gt;
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
An alternate way is to use a command file which is similar to the command files from the firmware.&lt;br /&gt;
&lt;br /&gt;
===Commands===&lt;br /&gt;
* &#039;&#039;&#039;times&#039;&#039;&#039; 0,12 # backup only at 0 or 12 o&#039;clock&lt;br /&gt;
* &#039;&#039;&#039;backup-instances&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump PUT&lt;br /&gt;
** PUT and POST are supported, all instances including the manager itself are saved&lt;br /&gt;
* &#039;&#039;&#039;backup-instance&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT&lt;br /&gt;
** backup a single instance with instance name and instance domain&lt;br /&gt;
* &#039;&#039;&#039;backup-manager&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump&lt;br /&gt;
&lt;br /&gt;
===Hash parameters===&lt;br /&gt;
* #L App Platform label (neu), e.g. 10024&lt;br /&gt;
* #A App label (neu), e.g. 130004&lt;br /&gt;
* #I instance name (neu), e.g. reporting1&lt;br /&gt;
* #D instance domain (neu), e.g. innovaphone.com&lt;br /&gt;
* #m MAC address of the LAP, e.g. 00ab11eeff&lt;br /&gt;
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130&lt;br /&gt;
* #bn rolling backup index&lt;br /&gt;
* ## escapes a hash mark&lt;br /&gt;
&lt;br /&gt;
= App Platform Infrastructure and Concept =&lt;br /&gt;
== Webserver ==&lt;br /&gt;
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.&lt;br /&gt;
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.&lt;br /&gt;
&lt;br /&gt;
=== Import Custom SSL Certificate ===&lt;br /&gt;
You have to upload a PEM Certificate with the following chain structure and without password encoding.&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (certificate: your_domain_name.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (Intermediate certificate: DigiCertCA.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (Root certificate: TrustedRoot.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN RSA PRIVATE KEY-----&lt;br /&gt;
 (certificate Key: your_domain_name.key)&lt;br /&gt;
 -----END RSA PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
=== Known issues ===&lt;br /&gt;
*The app platform webserver can use only the default http/https ports 80/443.&lt;br /&gt;
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.&amp;lt;br /&amp;gt;&lt;br /&gt;
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:&lt;br /&gt;
**&#039;&#039;psql -d manager -c &amp;quot;DELETE FROM config WHERE name=&#039;webserverCertificate&#039;&amp;quot;&#039;&#039;&lt;br /&gt;
**&#039;&#039;/etc/init.d/S92manager restart&#039;&#039;&lt;br /&gt;
*The app platform webserver interprets URLs case-sensitive. In other words, &amp;lt;nowiki&amp;gt;http://&amp;lt;addr&amp;gt;/file.txt&amp;lt;/nowiki&amp;gt; is not the same as &amp;lt;nowiki&amp;gt;http://&amp;lt;addr&amp;gt;/FILE.TXT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Database ==&lt;br /&gt;
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.&lt;br /&gt;
&lt;br /&gt;
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.&lt;br /&gt;
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.&lt;br /&gt;
&lt;br /&gt;
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file &#039;&#039;/mnt/sda2/pgsql/pg_hba.conf&#039;&#039;.&lt;br /&gt;
After editing pg_hba.conf, the database-service has to be restarted with the command &amp;lt;code&amp;gt;/etc/init.d/S50postgresql restart&amp;lt;/code&amp;gt;&lt;br /&gt;
(Please think about it before you do it, because a better way is to create your own local app with local database access.)&lt;br /&gt;
&lt;br /&gt;
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/11/auth-pg-hba-conf.html&lt;br /&gt;
&lt;br /&gt;
 Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf &lt;br /&gt;
 and that you may break your database server if you do not know exactly what you do!&lt;br /&gt;
&lt;br /&gt;
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:&lt;br /&gt;
* stop the manager&lt;br /&gt;
** &amp;lt;code&amp;gt;/etc/init.d/S92manager stop&amp;lt;/code&amp;gt;&lt;br /&gt;
* restart the database-service (maybe not really necessary, but makes a good feeling)&lt;br /&gt;
**&amp;lt;code&amp;gt;/etc/init.d/S50postgresql restart&amp;lt;/code&amp;gt;&lt;br /&gt;
* start the manager&lt;br /&gt;
** &amp;lt;code&amp;gt;/etc/init.d/S92manager start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== App Platform Manager ==&lt;br /&gt;
The App Platform Manager is the central component of the App Platform. It does the following:&lt;br /&gt;
* Installing app services by downloading the binaries from an app store.&lt;br /&gt;
* Running and monitoring app services. If an app service crashes it is restarted, automatically.&lt;br /&gt;
* Management of app instances and providing them with the environment they need:&lt;br /&gt;
** A database&lt;br /&gt;
** A webserver path&lt;br /&gt;
** A password for authentication&lt;br /&gt;
* Backup and restore of app instances.&lt;br /&gt;
* Collecting debug information like tracing and crash dumps.&lt;br /&gt;
* System monitoring (CPU usage, memory usage, etc).&lt;br /&gt;
&lt;br /&gt;
== App Services ==&lt;br /&gt;
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.&lt;br /&gt;
&lt;br /&gt;
== App Instances ==&lt;br /&gt;
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.&lt;br /&gt;
&lt;br /&gt;
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.&amp;lt;br&amp;gt;&lt;br /&gt;
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.&amp;lt;br&amp;gt;&lt;br /&gt;
The database password must be just known to the manager and not outside of the App Platform.&lt;br /&gt;
&lt;br /&gt;
== Relationship between app instances and app objects in the PBX ==&lt;br /&gt;
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:&lt;br /&gt;
* URL&lt;br /&gt;
* Password&lt;br /&gt;
The password is used by the PBX for authenticating itself, users and services against the app instance.&lt;br /&gt;
&lt;br /&gt;
Some apps need a websocket connection with the PBX. When &amp;quot;websocket&amp;quot; is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.&lt;br /&gt;
&lt;br /&gt;
=== Supported scenarios ===&lt;br /&gt;
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have&lt;br /&gt;
* One AP for one customer&lt;br /&gt;
* One AP for many customers&lt;br /&gt;
* Many APs for one customer&lt;br /&gt;
* Many APs for many customers&lt;br /&gt;
&lt;br /&gt;
Attention: The V13 installer can only configure the scenario &amp;quot;&#039;&#039;One AP for one customer&#039;&#039;&amp;quot;. If you want to have a different scenario, you have to configure it manually.&lt;br /&gt;
&lt;br /&gt;
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.&lt;br /&gt;
&lt;br /&gt;
=== Restrictions ===&lt;br /&gt;
Currently we don&#039;t have redundancy for app instances or APs.&lt;br /&gt;
&lt;br /&gt;
== Update of the App Platform itself ==&lt;br /&gt;
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can update the used build inside the Manager App by using the &#039;&#039;&#039;Update&#039;&#039;&#039; button at the top.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!&lt;br /&gt;
&lt;br /&gt;
== App services and multi-threading ==&lt;br /&gt;
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+&#039;&#039;n&#039;&#039;  threads (where &#039;&#039;n&#039;&#039; is the number of instances).  All communication between app service instances and their clients must pass the single-threaded web server.  On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + &#039;&#039;m&#039;&#039; + &#039;&#039;m&#039;&#039; * &#039;&#039;n&#039;&#039; (with &#039;&#039;m&#039;&#039; being the number of Apps and &#039;&#039;n&#039;&#039; the number of instances per App) threads can be utilized.&lt;br /&gt;
&lt;br /&gt;
= Known Issues =&lt;br /&gt;
&lt;br /&gt;
== Reboot after an image update hangs (ARM gateway) ==&lt;br /&gt;
&lt;br /&gt;
If it happens, that the App Platform doesn&#039;t recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -&amp;gt; General.&amp;lt;br&amp;gt;&lt;br /&gt;
If &#039;&#039;&#039;Kernel command line&#039;&#039;&#039; is set to &#039;&#039;&#039;/dev/ram0&#039;&#039;&#039;, the App Platform booted the ramdisk.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Try to fetch the upgrade log file:&lt;br /&gt;
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If this doesn&#039;t work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;cat /apps/install_step1.log&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If this file contains &#039;&#039;&#039;finished&#039;&#039;&#039; at the end, you can reconfigure the settings under App Platform -&amp;gt; General:&amp;lt;br&amp;gt;&lt;br /&gt;
* press &#039;&#039;&#039;Stop&#039;&#039;&#039;&lt;br /&gt;
* Initrd file: empty&lt;br /&gt;
* Kernel command line: &#039;&#039;&#039;root=/dev/sda3&#039;&#039;&#039;&lt;br /&gt;
* Ramdisk size: empty&lt;br /&gt;
* press &#039;&#039;&#039;Start&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The App Platform should boot and run the already updated image.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;color: red; font-size:150%;&amp;quot;&amp;gt;---WARNING---&lt;br /&gt;
 If the file doesn&#039;t contain &amp;quot;finished&amp;quot; at the end, you may still need to wait, as an upgrade may take some time!&lt;br /&gt;
 Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won&#039;t run!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reboot after an image update doesn&#039;t start as update is already running ==&lt;br /&gt;
&lt;br /&gt;
If it happens, that the AP doesn&#039;t want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -&amp;gt; General.&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Shutdown&#039;&#039;&#039; the AP and &#039;&#039;&#039;Stop&#039;&#039;&#039; it.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Kernel command line&#039;&#039;&#039; to &#039;&#039;&#039;/dev/ram0&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Initrd file&#039;&#039;&#039; to &#039;&#039;&#039;ramdisk.ext2.xz&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Ramdisk size&#039;&#039;&#039; to &#039;&#039;&#039;100000&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Start&#039;&#039;&#039; the AP now.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The AP now either applies the image update or it reboots into the old image. Try the image update afterwards again.&lt;br /&gt;
&lt;br /&gt;
== Webserver doesn&#039;t respond after an image update ==&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the AP Manager from starting correctly:&lt;br /&gt;
* su root (become root)&lt;br /&gt;
* rm -f /mnt/sda2/log/core_dumps/*/*&lt;br /&gt;
* /etc/init.d/S92manager restart&lt;br /&gt;
&lt;br /&gt;
Check if you can now reach the AP again.&lt;br /&gt;
&lt;br /&gt;
= Tracing =&lt;br /&gt;
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.&amp;lt;br&amp;gt;&lt;br /&gt;
Each App Intance has its own trace flags. The following trace flags can be set:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Alarm client: used by the manager to send alarms to an alarm server&lt;br /&gt;
* App: logs from the App Service itself&lt;br /&gt;
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)&lt;br /&gt;
* AppSharing: just native clients&lt;br /&gt;
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server&lt;br /&gt;
* Audio: just native clients&lt;br /&gt;
* Browser: just native clients&lt;br /&gt;
* Command: the command interface is used to execute shell commands, e.g. used by the manager App&lt;br /&gt;
* Config: logs config changes of an App&lt;br /&gt;
* Database: database logs&lt;br /&gt;
* DB files: database file logs&lt;br /&gt;
* DNS: DNS request logging&lt;br /&gt;
* DTLS: just native clients, DTLS request logging&lt;br /&gt;
* Ethernet: interface to get ethernet adapater infos, just manager App&lt;br /&gt;
* File: logs for file system access (synchronous), e.g. manager App&lt;br /&gt;
* Files: logs for file system access (asynchronous)&lt;br /&gt;
* HTTP client: http client logs&lt;br /&gt;
* HTTP file: logs for static HTTP files&lt;br /&gt;
* ICE: just native clients&lt;br /&gt;
* LDS: local domain sockets &lt;br /&gt;
* Media: just native clients&lt;br /&gt;
* Media channel: just native clients&lt;br /&gt;
* Process: IProcess interface logs which is used for spawning, killing processes etc.&lt;br /&gt;
* SMTP: SMTP client logs&lt;br /&gt;
* TCP: TCP logs&lt;br /&gt;
* Time: ITime interface logs&lt;br /&gt;
* TLS: TLS logs&lt;br /&gt;
* TURN: just native clients&lt;br /&gt;
* UDP: UDP logs&lt;br /&gt;
* Video: just native clients&lt;br /&gt;
* WebSocket client: logs outgoing websocket connections&lt;br /&gt;
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App&lt;br /&gt;
* WebDAV service: logs WebDAV requests to the App&lt;br /&gt;
* Webserver: enables webserver specific logs&lt;br /&gt;
&lt;br /&gt;
== RPCAP ==&lt;br /&gt;
&lt;br /&gt;
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.&amp;lt;br&amp;gt;&lt;br /&gt;
You can add the interface in wireshark with the string:&lt;br /&gt;
 rpcap://&amp;lt;APP-Platform-IP&amp;gt;/eth0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please don&#039;t forget to disable RPCAP after your testing!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= How-Tos =&lt;br /&gt;
&lt;br /&gt;
== How to retrieve files from the AP ==&lt;br /&gt;
To retrieve files from the AP which can not be retrieved via the AP manager UI, you can connect to the AP using the SCP protocol on port 22.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
First copy files to /home/admin as root with Putty or another SSH client:&lt;br /&gt;
* use the &#039;&#039;DNS&#039;&#039; name or IP address of your AP (not the PBX)&lt;br /&gt;
* use user &#039;&#039;admin&#039;&#039; and the appropriate password (&#039;&#039;ipapps&#039;&#039; by default)&lt;br /&gt;
* use &#039;&#039;su root&#039;&#039; to be root (&#039;&#039;iplinux&#039;&#039; as default password)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can now copy files to &#039;&#039;/home/admin&#039;&#039; (e.g. from /var/log/apps/manager/...).&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can create a tar archive with all logs like this:&lt;br /&gt;
* cd /home/admin&lt;br /&gt;
* tar -cf - /var/log/* | xz -z - &amp;gt; log.tar.xz&lt;br /&gt;
** you may want to exclude coredumps (due to their size):&lt;br /&gt;
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - &amp;gt; log.tar.xz&lt;br /&gt;
* chown admin:admin /home/admin/log.tar.xz&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then copy the files to your local system, e.g. with WinSCP&amp;lt;br/&amp;gt;&lt;br /&gt;
* use &#039;&#039;SCP&#039;&#039; as protocol (NB: WebDAV is not supported on most of the directories on the AP)&lt;br /&gt;
* use the &#039;&#039;DNS&#039;&#039; name or IP address of your AP (not the PBX)&lt;br /&gt;
* use user &#039;&#039;admin&#039;&#039; and the appropriate password (&#039;&#039;ipapps&#039;&#039; by default)&lt;br /&gt;
* use &#039;&#039;/home/admin&#039;&#039; as start directory&lt;br /&gt;
* copy the needed files&lt;br /&gt;
&lt;br /&gt;
== App Platform/Apps app not online anymore due to full disk ==&lt;br /&gt;
If the apps app is not online anymore and you can&#039;t access any apps anymore, try to login with an SSH client to see if your disk is full.&lt;br /&gt;
Login as admin and afterwards as root (su root).&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* issue &#039;&#039;&#039;df -h&#039;&#039;&#039; and see the disk usage of /dev/sda2, if this is 100%, your disk is too full&lt;br /&gt;
* stop the manager&lt;br /&gt;
** /etc/init.d/S92manager stop&lt;br /&gt;
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)&lt;br /&gt;
** echo &amp;quot;&amp;quot; &amp;gt; /mnt/sda2/empty_if_no_space&lt;br /&gt;
* delete log files to recover some space&lt;br /&gt;
** rm /var/log/apps/*/*&lt;br /&gt;
** rm /var/log/core_dumps/*/*&lt;br /&gt;
* restart the postgresql server (see the output if this worked or not)&lt;br /&gt;
** /etc/init.d/S50postgresql restart&lt;br /&gt;
* restart the manager&lt;br /&gt;
** /etc/init.d/S92manager restart&lt;br /&gt;
* wait until everything is online again&lt;br /&gt;
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it&lt;br /&gt;
** you may want to stop all app services first to prevent more writes to the database&lt;br /&gt;
** if not possible, you can delete this instance, but you&#039;ll loose all data from this instance then!&lt;br /&gt;
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space&lt;br /&gt;
** If this does not work you can create a backup from the database, delete the database and import the database again.&lt;br /&gt;
* free up at least 500 MB so that the manager can create the file again&lt;br /&gt;
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:&lt;br /&gt;
** rm /mnt/sda2/empty_if_no_space&lt;br /&gt;
** /etc/init.d/S92manager restart&lt;br /&gt;
** the manager restart automatically recreates the empty_if_no_space file if this file doesn&#039;t exist&lt;br /&gt;
&lt;br /&gt;
 Make sure, that you do &#039;&#039;&#039;not&#039;&#039;&#039; have backups configured to a local files instance while this files instance is not excluded from backups.&lt;br /&gt;
 An instance can be excluded from backups in the instance settings in the AP Manager.&lt;br /&gt;
&lt;br /&gt;
If all of this doesn&#039;t help, you can resize the file system on a VM:&lt;br /&gt;
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]&lt;br /&gt;
&lt;br /&gt;
== Resizing the disk of a Virtual machine ==&lt;br /&gt;
&lt;br /&gt;
 Do &#039;&#039;&#039;NOT&#039;&#039;&#039; resize if you&#039;re running an App Platform version higher than &#039;&#039;&#039;110000&#039;&#039;&#039; and lower than &#039;&#039;&#039;110027&#039;&#039;&#039; or your data will be lost!&lt;br /&gt;
 Please update your App Platform to version 110027 or higher before you start resizing your disk.&lt;br /&gt;
&lt;br /&gt;
* stop the VM&lt;br /&gt;
* expand the disk using your VM utilities&lt;br /&gt;
* start the VM and boot from the first boot entry &#039;&#039;&#039;rescue/setup&#039;&#039;&#039;&lt;br /&gt;
* login with &#039;&#039;&#039;root&#039;&#039;&#039; and &#039;&#039;&#039;iplinux&#039;&#039;&#039;&lt;br /&gt;
* execute this command: &#039;&#039;&#039;/home/root/install_step1.sh log.txt resize&#039;&#039;&#039;&lt;br /&gt;
* the VM reboots automatically after a successful resize&lt;br /&gt;
&lt;br /&gt;
== Shrink the physically size of PostgreSQL database files ==&lt;br /&gt;
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. &lt;br /&gt;
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important: You are operating on the Database, you have to make a Backup of your Database before you do this!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Login via SSH to the APPlatform with the &#039;&#039;admin&#039;&#039; User&lt;br /&gt;
 su root&lt;br /&gt;
 /etc/init.d/S92manager stop  # not always needed, but in case of database errors recommended, of course no app is online then&lt;br /&gt;
 sudo -u postgres reindexdb -a&lt;br /&gt;
 sudo -u postgres vacuumdb -a -f&lt;br /&gt;
 /etc/init.d/S92manager restart # just execute if the manager has been stopped above&lt;br /&gt;
&lt;br /&gt;
 sudo -u postgres reindexdb -d dbname # for a single database with dbname&lt;br /&gt;
 sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname&lt;br /&gt;
&lt;br /&gt;
Note: This may take some time and CDRs (or other data written to a DB) won&#039;t be received during this time. &lt;br /&gt;
&lt;br /&gt;
After the process you can check the free dispace via &amp;lt;code&amp;gt;df -h&amp;lt;/code&amp;gt;. You can check the claimed space from the database file with the command &amp;lt;code&amp;gt;du -sh /mnt/sda2/pgsql/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Change IP Addresses / DNS Names / System Name ==&lt;br /&gt;
&lt;br /&gt;
If you want to change the System Name or the DNS Name of the PBX and/or AP Platform you must change records manually &#039;&#039;&#039;in the described order&#039;&#039;&#039;!&lt;br /&gt;
You have to know the Admin password to directly Login to the AP-Plattform.&lt;br /&gt;
&lt;br /&gt;
=== App Platform ===&lt;br /&gt;
; Settings - General&lt;br /&gt;
* &#039;&#039;Devices app URL&#039;&#039;&lt;br /&gt;
* &#039;&#039;App platform DNS name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; Settings - Alarms and Events&lt;br /&gt;
* &#039;&#039;URL&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; All Instances&lt;br /&gt;
* &#039;&#039;Domain&#039;&#039;&lt;br /&gt;
* &#039;&#039;Webserver path&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== PBX ===&lt;br /&gt;
Download the configuration and &#039;&#039;search/replace&#039;&#039; in the config file. Upload the config file and reboot.&lt;br /&gt;
&lt;br /&gt;
Manual:&lt;br /&gt;
* &#039;&#039;URL&#039;&#039; in all PBX Object (Apps, Voicemail ...)&lt;br /&gt;
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]&lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] &lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]&lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]&lt;br /&gt;
&lt;br /&gt;
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]&lt;br /&gt;
&lt;br /&gt;
=== Additional Devices / Steps ===&lt;br /&gt;
* &#039;&#039;Devices Registration URL&#039;&#039;&lt;br /&gt;
* &#039;&#039;Alarm server&#039;&#039;&lt;br /&gt;
* Reverse Proxy configuration&lt;br /&gt;
* Change &#039;&#039;Domain Name&#039;&#039; in Devices if you have also changed the system name&lt;br /&gt;
&lt;br /&gt;
== How to recover from a broken File System ==&lt;br /&gt;
Sometimes you may find messages in the &#039;&#039;messages&#039;&#039; log file (in &#039;&#039;var/log&#039;&#039;) like&lt;br /&gt;
&lt;br /&gt;
 initial error at 1500329378: ext4_journal_start_sb:328&lt;br /&gt;
 last error at 1500329378: ext4_journal_start_sb:328&lt;br /&gt;
&lt;br /&gt;
Or you get events like &amp;quot;Broken file system&amp;quot; from your AP.&lt;br /&gt;
&lt;br /&gt;
This indicates a file system failure on the Linux Installation.&lt;br /&gt;
&lt;br /&gt;
When the Linux file system is broken, you can try to repair it using some command line Linux tools.&lt;br /&gt;
&lt;br /&gt;
If this doesn&#039;t fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.&lt;br /&gt;
&lt;br /&gt;
=== Gateway ===&lt;br /&gt;
&lt;br /&gt;
* Open the WebGUI of the gateway running your LAP and proceed to &#039;&#039;App Platform/General&#039;&#039;&lt;br /&gt;
** terminate Linux (&#039;&#039;Status/Stop&#039;&#039;)&lt;br /&gt;
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0&lt;br /&gt;
** modify the Initrd file to ramdisk.ext2.xz&lt;br /&gt;
** modify the ramdisk size to 100000&lt;br /&gt;
** start Linux again&lt;br /&gt;
:: This will run Linux on another (hopefully sane) partition.&lt;br /&gt;
&lt;br /&gt;
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP&#039;s command line (user: root, pw: iplinux)&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda2&amp;lt;/code&amp;gt;&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
:: this should fix any issue on the file system&lt;br /&gt;
&lt;br /&gt;
* go back to the WebGUI of the gateway running your LAP and proceed to &#039;&#039;App Platform/General&#039;&#039;&lt;br /&gt;
** terminate Linux (&#039;&#039;Status/Stop&#039;&#039;)&lt;br /&gt;
** modify the &#039;&#039;Kernel command line&#039;&#039; from &#039;&#039;root=/dev/ram0&#039;&#039; to &amp;lt;code&amp;gt;root=/dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
** clear the Initrd file field&lt;br /&gt;
** clear the ramdisk size field&lt;br /&gt;
** start Linux again&lt;br /&gt;
:: This will run Linux on the original partition.&lt;br /&gt;
&lt;br /&gt;
=== VM ===&lt;br /&gt;
&lt;br /&gt;
Restart the VM and select the first entry in the boot menu from grub.&lt;br /&gt;
&lt;br /&gt;
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP&#039;s command line&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda2&amp;lt;/code&amp;gt;&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
:: this should fix any issue on the file system&lt;br /&gt;
* Reboot your VM&lt;br /&gt;
[[Category:Concept]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r2:Concept_App_Platform&amp;diff=67034</id>
		<title>Reference13r2:Concept App Platform</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r2:Concept_App_Platform&amp;diff=67034"/>
		<updated>2023-04-13T09:06:55Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Reboot after an image update hangs (ARM gateway) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= General =&lt;br /&gt;
* V13 uses [https://buildroot.org/ buildroot]&lt;br /&gt;
* this is an own (innovaphone) collection of packages&lt;br /&gt;
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* V13 or up&lt;br /&gt;
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) &lt;br /&gt;
* Gateway (arm64): IPx13 (with m2 SSD)&lt;br /&gt;
* Virtual (x86_64)&lt;br /&gt;
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)&lt;br /&gt;
** VMWare&lt;br /&gt;
&lt;br /&gt;
== Default credentials ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;During INSTALL, the default passwords are replaced with the global Admin PW!&#039;&#039;&#039;&lt;br /&gt;
* SSH-Login with &#039;&#039;&#039;admin&#039;&#039;&#039; and &#039;&#039;&#039;ipapps&#039;&#039;&#039;&lt;br /&gt;
* root login with &#039;&#039;&#039;root&#039;&#039;&#039; and &#039;&#039;&#039;iplinux&#039;&#039;&#039; (the root login is not directly possible, you have to login as admin first and use the command &#039;&#039;su root&#039;&#039;)&lt;br /&gt;
* manager App (web login) &#039;&#039;&#039;pwd&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= App Platform - arm/arm64 (Gateway)=&lt;br /&gt;
&lt;br /&gt;
* The installation image has a size of ~50MB. During installation, the following partitions are created:&lt;br /&gt;
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)&lt;br /&gt;
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)&lt;br /&gt;
** /dev/sda3 ext4: 500MB (contains the rootfs)&lt;br /&gt;
** /dev/sda4 swap: 512MB&lt;br /&gt;
&lt;br /&gt;
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:&lt;br /&gt;
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10&lt;br /&gt;
* the available RAM for the AP (as specified in column &#039;&#039;RAM for LAP (GB) out of RAM&#039;&#039; in chapter &#039;&#039;Technical data and recommended number of users supported&#039;&#039; of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))&lt;br /&gt;
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings&lt;br /&gt;
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10&lt;br /&gt;
&lt;br /&gt;
While it is hard to predict the performance of the AP in a specific scenario, we see that in a real life environment an AP running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users.  Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).&lt;br /&gt;
&lt;br /&gt;
= App Platform - x86-64 (Virtual Machine 64bit) =&lt;br /&gt;
&lt;br /&gt;
* The default disk size is 16GB. It should be increased &#039;&#039;&#039;before&#039;&#039;&#039; the first start if needed!&lt;br /&gt;
&lt;br /&gt;
* Multiple CPUs are supported, default is one CPU&lt;br /&gt;
&lt;br /&gt;
* default RAM: 512MB&lt;br /&gt;
* static IP address, DNS, Gateway can be configured with the command &#039;&#039;&#039;setip&#039;&#039;&#039; on the console. Run &#039;&#039;&#039;setip --help&#039;&#039;&#039; to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) &lt;br /&gt;
* If you have permission problems change to su user (Password is iplinux or your new admin password)  &lt;br /&gt;
* To figure out your ip address you can use the command: &#039;&#039;ip address&#039;&#039; on the console.&lt;br /&gt;
* &#039;&#039;&#039;loadkeys de&#039;&#039;&#039; can be used to change to german keyboard layout (etc.)&lt;br /&gt;
&lt;br /&gt;
* partitions:&lt;br /&gt;
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)&lt;br /&gt;
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)&lt;br /&gt;
** /dev/sda3 ext4: 500MB (contains the rootfs)&lt;br /&gt;
** /dev/sda4 swap: 512MB&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
==ARM Gateway==&lt;br /&gt;
&lt;br /&gt;
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn&#039;t be blocked by any firewall.)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You can also install it manually:&lt;br /&gt;
* Open App Platform -&amp;gt; General and &#039;&#039;&#039;Enable Linux Support&#039;&#039;&#039;. Restart the gateway.&lt;br /&gt;
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.&lt;br /&gt;
* Open App Platform -&amp;gt; IP and configure the IP settings of the App Platform. Restart the Gateway.&lt;br /&gt;
* Open App Platform -&amp;gt; Installation and select the given version or enter an own path to the &#039;&#039;app-platform-armel.img&#039;&#039; image file.&lt;br /&gt;
* The installation runs without any further required step.&lt;br /&gt;
&lt;br /&gt;
==ARM64 Gateway==&lt;br /&gt;
&lt;br /&gt;
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn&#039;t be blocked by any firewall.)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You can also install it manually:&lt;br /&gt;
* Open App Platform -&amp;gt; General and &#039;&#039;&#039;Enable Linux Support&#039;&#039;&#039;. Restart the gateway.&lt;br /&gt;
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.&lt;br /&gt;
* Open App Platform -&amp;gt; IP and configure the IP settings of the App Platform. Restart the Gateway.&lt;br /&gt;
* Open App Platform -&amp;gt; Installation and select the given version or enter an own path to the &#039;&#039;app-platform-arm64.img&#039;&#039; image file.&lt;br /&gt;
* The installation runs without any further required step.&lt;br /&gt;
&lt;br /&gt;
==Virtual machine==&lt;br /&gt;
&lt;br /&gt;
* Import the image into your server environment.&lt;br /&gt;
* Edit the disk size, if needed.&lt;br /&gt;
* Start the machine and wait until it reboots and starts again.&lt;br /&gt;
* Note: If you need to access an IP addresses available through a VPN connection from from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]&lt;br /&gt;
&lt;br /&gt;
== Backup of the Apps ==&lt;br /&gt;
&lt;br /&gt;
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.&amp;lt;br&amp;gt;&lt;br /&gt;
There are no other files which need to be backuped.&amp;lt;br&amp;gt;&lt;br /&gt;
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
An alternate way is to use a command file which is similar to the command files from the firmware.&lt;br /&gt;
&lt;br /&gt;
===Commands===&lt;br /&gt;
* &#039;&#039;&#039;times&#039;&#039;&#039; 0,12 # backup only at 0 or 12 o&#039;clock&lt;br /&gt;
* &#039;&#039;&#039;backup-instances&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump PUT&lt;br /&gt;
** PUT and POST are supported, all instances including the manager itself are saved&lt;br /&gt;
* &#039;&#039;&#039;backup-instance&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT&lt;br /&gt;
** backup a single instance with instance name and instance domain&lt;br /&gt;
* &#039;&#039;&#039;backup-manager&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump&lt;br /&gt;
&lt;br /&gt;
===Hash parameters===&lt;br /&gt;
* #L App Platform label (neu), e.g. 10024&lt;br /&gt;
* #A App label (neu), e.g. 130004&lt;br /&gt;
* #I instance name (neu), e.g. reporting1&lt;br /&gt;
* #D instance domain (neu), e.g. innovaphone.com&lt;br /&gt;
* #m MAC address of the LAP, e.g. 00ab11eeff&lt;br /&gt;
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130&lt;br /&gt;
* #bn rolling backup index&lt;br /&gt;
* ## escapes a hash mark&lt;br /&gt;
&lt;br /&gt;
= App Platform Infrastructure and Concept =&lt;br /&gt;
== Webserver ==&lt;br /&gt;
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.&lt;br /&gt;
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.&lt;br /&gt;
&lt;br /&gt;
=== Import Custom SSL Certificate ===&lt;br /&gt;
You have to upload a PEM Certificate with the following chain structure and without password encoding.&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (certificate: your_domain_name.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (Intermediate certificate: DigiCertCA.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (Root certificate: TrustedRoot.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN RSA PRIVATE KEY-----&lt;br /&gt;
 (certificate Key: your_domain_name.key)&lt;br /&gt;
 -----END RSA PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
=== Known issues ===&lt;br /&gt;
*The app platform webserver can use only the default http/https ports 80/443.&lt;br /&gt;
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.&amp;lt;br /&amp;gt;&lt;br /&gt;
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:&lt;br /&gt;
**&#039;&#039;psql -d manager -c &amp;quot;DELETE FROM config WHERE name=&#039;webserverCertificate&#039;&amp;quot;&#039;&#039;&lt;br /&gt;
**&#039;&#039;/etc/init.d/S92manager restart&#039;&#039;&lt;br /&gt;
*The app platform webserver interprets URLs case-sensitive. In other words, &amp;lt;nowiki&amp;gt;http://&amp;lt;addr&amp;gt;/file.txt&amp;lt;/nowiki&amp;gt; is not the same as &amp;lt;nowiki&amp;gt;http://&amp;lt;addr&amp;gt;/FILE.TXT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Database ==&lt;br /&gt;
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.&lt;br /&gt;
&lt;br /&gt;
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.&lt;br /&gt;
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.&lt;br /&gt;
&lt;br /&gt;
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file &#039;&#039;/mnt/sda2/pgsql/pg_hba.conf&#039;&#039;.&lt;br /&gt;
After editing pg_hba.conf, the database-service has to be restarted with the command &amp;lt;code&amp;gt;/etc/init.d/S50postgresql restart&amp;lt;/code&amp;gt;&lt;br /&gt;
(Please think about it before you do it, because a better way is to create your own local app with local database access.)&lt;br /&gt;
&lt;br /&gt;
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/11/auth-pg-hba-conf.html&lt;br /&gt;
&lt;br /&gt;
 Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf &lt;br /&gt;
 and that you may break your database server if you do not know exactly what you do!&lt;br /&gt;
&lt;br /&gt;
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:&lt;br /&gt;
* stop the manager&lt;br /&gt;
** &amp;lt;code&amp;gt;/etc/init.d/S92manager stop&amp;lt;/code&amp;gt;&lt;br /&gt;
* restart the database-service (maybe not really necessary, but makes a good feeling)&lt;br /&gt;
**&amp;lt;code&amp;gt;/etc/init.d/S50postgresql restart&amp;lt;/code&amp;gt;&lt;br /&gt;
* start the manager&lt;br /&gt;
** &amp;lt;code&amp;gt;/etc/init.d/S92manager start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== App Platform Manager ==&lt;br /&gt;
The App Platform Manager is the central component of the App Platform. It does the following:&lt;br /&gt;
* Installing app services by downloading the binaries from an app store.&lt;br /&gt;
* Running and monitoring app services. If an app service crashes it is restarted, automatically.&lt;br /&gt;
* Management of app instances and providing them with the environment they need:&lt;br /&gt;
** A database&lt;br /&gt;
** A webserver path&lt;br /&gt;
** A password for authentication&lt;br /&gt;
* Backup and restore of app instances.&lt;br /&gt;
* Collecting debug information like tracing and crash dumps.&lt;br /&gt;
* System monitoring (CPU usage, memory usage, etc).&lt;br /&gt;
&lt;br /&gt;
== App Services ==&lt;br /&gt;
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.&lt;br /&gt;
&lt;br /&gt;
== App Instances ==&lt;br /&gt;
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.&lt;br /&gt;
&lt;br /&gt;
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.&amp;lt;br&amp;gt;&lt;br /&gt;
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.&amp;lt;br&amp;gt;&lt;br /&gt;
The database password must be just known to the manager and not outside of the App Platform.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Database name&#039;&#039; and &#039;&#039;Database user&#039;&#039; are both limited to a length of 63 characters.  By default, the App Manager would create &#039;&#039;&amp;lt;domain&amp;gt;&#039;&#039;_&#039;&#039;&amp;lt;instance-name&amp;gt;&#039;&#039; as value for both.  This is why it is recommended to use instance names so that length(name) + length(domain) is less than 63 characters.  However, if this is not possible, you can manually shorten the suggested values (both must still be unique on your App Platform).&lt;br /&gt;
&lt;br /&gt;
=== Cleanup database ===&lt;br /&gt;
You can cleanup the instance database inside the instance settings. This starts the vacuumdb process for the instance database which frees disk space of deleted rows.&lt;br /&gt;
 Note that this process locks the database and that sufficient disk space is needed to complete it!&lt;br /&gt;
&lt;br /&gt;
=== External database host ===&lt;br /&gt;
You can optionally configure an external database host, if the database shall be hosted on an external host.&amp;lt;br/&amp;gt;&lt;br /&gt;
Note that the AP Manager still creates a local database, which is then not used as long as the external host is configured.&lt;br /&gt;
&lt;br /&gt;
What are external databases useful for?:&lt;br /&gt;
* User data is too large (files are stored as BLOB in the database)&lt;br /&gt;
* Other (non-innovaphone) database servers are to be used due to other regulations&lt;br /&gt;
* There is already an external database cluster with its own backup/restore processes which should be used&lt;br /&gt;
* More performance is required (please note that a local UNIX socket provides much faster results than a remote database server). Depending on the app and the task of the app, it can still be useful to use a separate server if it is faster.&lt;br /&gt;
&lt;br /&gt;
==== Supported database types ====&lt;br /&gt;
In principle, &#039;&#039;PostgreSQL&#039;&#039; and &#039;&#039;MySQL&#039;&#039; are supported. However, please note that the respective app must be designed for the target database server type. If an app has been developed for PostgreSQL, it cannot be operated on a MySQL server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note:&#039;&#039;&#039; All innovaphone apps are developed exclusively as PostgreSQL apps.&lt;br /&gt;
&lt;br /&gt;
MySQL therefore only makes sense if own apps are developed and MySQL or certain MySQL features are to be used. For such apps, it is very important to deactivate the automatic Application Platform APP-Backup.&lt;br /&gt;
The database backup process of the AP uses PostgreSQL backup commands, which is why the backup would fail, so the app must be excluded from the backup, and you must take care of the backup yourself.&lt;br /&gt;
&lt;br /&gt;
==== Database creation ====&lt;br /&gt;
If you use an external database, you have to create the database itself.&lt;br /&gt;
The AP Manager itself creates a PostgreSQL database like this (you may respect this on your database host to be compatible with the database implementation inside the Apps):&lt;br /&gt;
* CREATE DATABASE &amp;quot;dbname&amp;quot; ENCODING &#039;UTF8&#039;;&lt;br /&gt;
* CREATE USER &amp;quot;dbuser&amp;quot;;&lt;br /&gt;
* ALTER USER &amp;quot;dbuser&amp;quot; WITH PASSWORD &#039;dbpassword&#039;;&lt;br /&gt;
* GRANT ALL PRIVILEGES ON DATABASE &amp;quot;dbname&amp;quot; TO &amp;quot;dbuser&amp;quot;;&lt;br /&gt;
* ALTER DATABASE &amp;quot;dbname&amp;quot; OWNER TO &amp;quot;dbuser&amp;quot;;&lt;br /&gt;
* REVOKE CONNECT ON DATABASE &amp;quot;dbname&amp;quot; FROM public;&lt;br /&gt;
&lt;br /&gt;
==== Database connection ====&lt;br /&gt;
There are different possibilities to specify the host. You can use a DNS-Name, IPv4 or IPv6. A port can be optionally added with a colon.&lt;br /&gt;
&lt;br /&gt;
Our PostgreSQL implementation sets sslmode=prefer, so SSL is used by default if enabled on the server.&lt;br /&gt;
&lt;br /&gt;
==== Backup/Restore ====&lt;br /&gt;
External databases are still backuped as normal, but you can&#039;t restore such a database with the AP Manager on the external host! You must restore such a dump manually on your database host.&lt;br /&gt;
&lt;br /&gt;
==== Database redundancy ====&lt;br /&gt;
In principle, it is possible to create redundancies for failure scenarios through this function.&lt;br /&gt;
&lt;br /&gt;
However, there are different scenarios that need to be evaluated on a case-by-case basis:&lt;br /&gt;
&lt;br /&gt;
* One database, multiple APs (primary online / secondary &#039;&#039;&#039;offline&#039;&#039;&#039;) where multiple apps access the same database.&lt;br /&gt;
** This mode of operation is legal as long as you can really ensure that only one AP is active at a time.&lt;br /&gt;
&lt;br /&gt;
* One database, multiple APs (primary online / secondary &#039;&#039;&#039;online&#039;&#039;&#039;) with multiple apps accessing the same database.&lt;br /&gt;
** This operating mode cannot be used for innovaphone apps, as the app itself would have to be developed for such a mode, which it is not.&lt;br /&gt;
&lt;br /&gt;
However, we advise great caution here! The use of the same databases from different nodes may only be used if you can ensure that the databases or runtime environments of apps cannot get into a &#039;&#039;split-brain&#039;&#039; mode.&lt;br /&gt;
&lt;br /&gt;
== Relationship between app instances and app objects in the PBX ==&lt;br /&gt;
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:&lt;br /&gt;
* URL&lt;br /&gt;
* Password&lt;br /&gt;
The password is used by the PBX for authenticating itself, users and services against the app instance.&lt;br /&gt;
&lt;br /&gt;
Some apps need a websocket connection with the PBX. When &amp;quot;websocket&amp;quot; is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.&lt;br /&gt;
&lt;br /&gt;
=== Supported scenarios ===&lt;br /&gt;
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have&lt;br /&gt;
* One AP for one customer&lt;br /&gt;
* One AP for many customers&lt;br /&gt;
* Many APs for one customer&lt;br /&gt;
* Many APs for many customers&lt;br /&gt;
&lt;br /&gt;
Attention: The V13 installer can only configure the scenario &amp;quot;&#039;&#039;One AP for one customer&#039;&#039;&amp;quot;. If you want to have a different scenario, you have to configure it manually.&lt;br /&gt;
&lt;br /&gt;
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.&lt;br /&gt;
&lt;br /&gt;
=== Restrictions ===&lt;br /&gt;
Currently we don&#039;t have redundancy for app instances or APs.&lt;br /&gt;
&lt;br /&gt;
== Update of the App Platform itself ==&lt;br /&gt;
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can update the used build inside the Manager App by using the &#039;&#039;&#039;Update&#039;&#039;&#039; button at the top.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!&lt;br /&gt;
&lt;br /&gt;
== App services and multi-threading ==&lt;br /&gt;
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+&#039;&#039;n&#039;&#039;  threads (where &#039;&#039;n&#039;&#039; is the number of instances).  All communication between app service instances and their clients must pass the single-threaded web server.  On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + &#039;&#039;m&#039;&#039; + &#039;&#039;m&#039;&#039; * &#039;&#039;n&#039;&#039; (with &#039;&#039;m&#039;&#039; being the number of Apps and &#039;&#039;n&#039;&#039; the number of instances per App) threads can be utilized.&lt;br /&gt;
&lt;br /&gt;
= AP Manager settings =&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
* &#039;&#039;Enable Developer mode&#039;&#039;: in developer mode, apps can be manually uploaded without an App Store&lt;br /&gt;
* &#039;&#039;Disable App security&#039;&#039;: each App has an own unix user and if this flag is set, the user can login with SSH for debugging&lt;br /&gt;
* &#039;&#039;App Store URL&#039;&#039;: the URL to the App Store where Apps are searched and also an update of the AP image itself&lt;br /&gt;
* &#039;&#039;Devices app URL&#039;&#039;: the URL to the Devices App to manage the AP through Devices&lt;br /&gt;
* &#039;&#039;Devices app URL 2&#039;&#039;: don&#039;t use!&lt;br /&gt;
* &#039;&#039;App Platform DNS name&#039;&#039;: currently not used&lt;br /&gt;
* &#039;&#039;NTP server 1/2&#039;&#039;: NTP servers for this AP (in addition to NTP servers retrieved by DHCP)&lt;br /&gt;
* &#039;&#039;Timezone string&#039;&#039;: &lt;br /&gt;
* &#039;&#039;DNS server 1/2&#039;&#039;: DNS servers for this AP (in addition to DNS servers retrieved by DHCP)&lt;br /&gt;
* &#039;&#039;Database optimization time&#039;&#039;: The database optimization process will be started at this hour (local time), with a random offset of up to 7 hours&lt;br /&gt;
* &#039;&#039;Command file&#039;&#039;: obsolete, use the Devices App for backups!&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
* &#039;&#039;Webserver certificate&#039;&#039;: upload a webserver certificate in PEM format&lt;br /&gt;
* &#039;&#039;AP Manager password&#039;&#039;: the password to the web interface of the AP Manager (normally set through Devices)&lt;br /&gt;
* &#039;&#039;Linux root user&#039;&#039;: password of the root user (normally set through Devices)&lt;br /&gt;
* &#039;&#039;Linux admin user&#039;&#039;: password of the admin user (normally set through Devices)&lt;br /&gt;
&lt;br /&gt;
== Alarms and events ==&lt;br /&gt;
* &#039;&#039;URL&#039;&#039;: URL to the Events app&lt;br /&gt;
* &#039;&#039;Username/Password&#039;&#039;: HTTP credentials of the Events app&lt;br /&gt;
* &#039;&#039;Email address&#039;&#039;: an email address which will get emails on full disk alarms/warnings&lt;br /&gt;
* &#039;&#039;Threshold&#039;&#039;: All Apps will be stopped and an hourly email sent on reaching this threshold. An alarm is generated 10% before reaching this threshold and an email is sent every 24 hours.&lt;br /&gt;
&lt;br /&gt;
== SMTP ==&lt;br /&gt;
SMTP server settings for sending emails from within the AP Manager.&lt;br /&gt;
&lt;br /&gt;
== Registered Access Domains ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Known Issues =&lt;br /&gt;
&lt;br /&gt;
== Reboot after an image update hangs (ARM gateway) ==&lt;br /&gt;
&lt;br /&gt;
If it happens, that the App Platform doesn&#039;t recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -&amp;gt; General.&amp;lt;br&amp;gt;&lt;br /&gt;
If &#039;&#039;&#039;Kernel command line&#039;&#039;&#039; is set to &#039;&#039;&#039;/dev/ram0&#039;&#039;&#039;, the App Platform booted the ramdisk.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Try to fetch the upgrade log file:&lt;br /&gt;
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If this doesn&#039;t work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;cat /apps/install_step1.log&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If this file contains &#039;&#039;&#039;finished&#039;&#039;&#039; at the end, you can reconfigure the settings under App Platform -&amp;gt; General:&amp;lt;br&amp;gt;&lt;br /&gt;
* press &#039;&#039;&#039;Stop&#039;&#039;&#039;&lt;br /&gt;
* Initrd file: empty&lt;br /&gt;
* Kernel command line: &#039;&#039;&#039;root=/dev/sda3&#039;&#039;&#039;&lt;br /&gt;
* Ramdisk size: empty&lt;br /&gt;
* press &#039;&#039;&#039;Start&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The App Platform should boot and run the already updated image.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;color: red; font-size:150%;&amp;quot;&amp;gt;---WARNING---&lt;br /&gt;
 If the file doesn&#039;t contain &amp;quot;finished&amp;quot; at the end, you may still need to wait, as an upgrade may take some time!&lt;br /&gt;
 Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won&#039;t run!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reboot after an image update doesn&#039;t start as update is already running ==&lt;br /&gt;
&lt;br /&gt;
If it happens, that the AP doesn&#039;t want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -&amp;gt; General.&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Shutdown&#039;&#039;&#039; the AP and &#039;&#039;&#039;Stop&#039;&#039;&#039; it.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Kernel command line&#039;&#039;&#039; to &#039;&#039;&#039;/dev/ram0&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Initrd file&#039;&#039;&#039; to &#039;&#039;&#039;ramdisk.ext2.xz&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Ramdisk size&#039;&#039;&#039; to &#039;&#039;&#039;100000&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Start&#039;&#039;&#039; the AP now.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The AP now either applies the image update or it reboots into the old image. Try the image update afterwards again.&lt;br /&gt;
&lt;br /&gt;
== Webserver doesn&#039;t respond after an image update ==&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the AP Manager from starting correctly:&lt;br /&gt;
* su root (become root)&lt;br /&gt;
* rm -f /mnt/sda2/log/core_dumps/*/*&lt;br /&gt;
* /etc/init.d/S92manager restart&lt;br /&gt;
&lt;br /&gt;
Check if you can now reach the AP again.&lt;br /&gt;
&lt;br /&gt;
= Tracing =&lt;br /&gt;
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.&amp;lt;br&amp;gt;&lt;br /&gt;
Each App Intance has its own trace flags. The following trace flags can be set:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Alarm client: used by the manager to send alarms to an alarm server&lt;br /&gt;
* App: logs from the App Service itself&lt;br /&gt;
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)&lt;br /&gt;
* AppSharing: just native clients&lt;br /&gt;
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server&lt;br /&gt;
* Audio: just native clients&lt;br /&gt;
* Browser: just native clients&lt;br /&gt;
* Command: the command interface is used to execute shell commands, e.g. used by the manager App&lt;br /&gt;
* Config: logs config changes of an App&lt;br /&gt;
* Database: database logs&lt;br /&gt;
* DB files: database file logs&lt;br /&gt;
* DNS: DNS request logging&lt;br /&gt;
* DTLS: just native clients, DTLS request logging&lt;br /&gt;
* Ethernet: interface to get ethernet adapater infos, just manager App&lt;br /&gt;
* File: logs for file system access (synchronous), e.g. manager App&lt;br /&gt;
* Files: logs for file system access (asynchronous)&lt;br /&gt;
* HTTP client: http client logs&lt;br /&gt;
* HTTP file: logs for static HTTP files&lt;br /&gt;
* ICE: just native clients&lt;br /&gt;
* LDS: local domain sockets &lt;br /&gt;
* Media: just native clients&lt;br /&gt;
* Media channel: just native clients&lt;br /&gt;
* Process: IProcess interface logs which is used for spawning, killing processes etc.&lt;br /&gt;
* SMTP: SMTP client logs&lt;br /&gt;
* TCP: TCP logs&lt;br /&gt;
* Time: ITime interface logs&lt;br /&gt;
* TLS: TLS logs&lt;br /&gt;
* TURN: just native clients&lt;br /&gt;
* UDP: UDP logs&lt;br /&gt;
* Video: just native clients&lt;br /&gt;
* WebSocket client: logs outgoing websocket connections&lt;br /&gt;
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App&lt;br /&gt;
* WebDAV service: logs WebDAV requests to the App&lt;br /&gt;
* Webserver: enables webserver specific logs&lt;br /&gt;
&lt;br /&gt;
== RPCAP ==&lt;br /&gt;
&lt;br /&gt;
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.&amp;lt;br&amp;gt;&lt;br /&gt;
You can add the interface in wireshark with the string:&lt;br /&gt;
 rpcap://&amp;lt;APP-Platform-IP&amp;gt;/eth0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please don&#039;t forget to disable RPCAP after your testing!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= How-Tos =&lt;br /&gt;
&lt;br /&gt;
== How to retrieve files from the AP ==&lt;br /&gt;
To retrieve files from the AP which can not be retrieved via the AP manager UI, you can connect to the AP using the SCP protocol on port 22.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
First copy files to /home/admin as root with Putty or another SSH client:&lt;br /&gt;
* use the &#039;&#039;DNS&#039;&#039; name or IP address of your AP (not the PBX)&lt;br /&gt;
* use user &#039;&#039;admin&#039;&#039; and the appropriate password (&#039;&#039;ipapps&#039;&#039; by default)&lt;br /&gt;
* use &#039;&#039;su root&#039;&#039; to be root (&#039;&#039;iplinux&#039;&#039; as default password)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can now copy files to &#039;&#039;/home/admin&#039;&#039; (e.g. from /var/log/apps/manager/...).&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can create a tar archive with all logs like this:&lt;br /&gt;
* cd /home/admin&lt;br /&gt;
* tar -cf - /var/log/* | xz -z - &amp;gt; log.tar.xz&lt;br /&gt;
** you may want to exclude coredumps (due to their size):&lt;br /&gt;
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - &amp;gt; log.tar.xz&lt;br /&gt;
* chown admin:admin /home/admin/log.tar.xz&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then copy the files to your local system, e.g. with WinSCP&amp;lt;br/&amp;gt;&lt;br /&gt;
* use &#039;&#039;SCP&#039;&#039; as protocol (NB: WebDAV is not supported on most of the directories on the AP)&lt;br /&gt;
* use the &#039;&#039;DNS&#039;&#039; name or IP address of your AP (not the PBX)&lt;br /&gt;
* use user &#039;&#039;admin&#039;&#039; and the appropriate password (&#039;&#039;ipapps&#039;&#039; by default)&lt;br /&gt;
* use &#039;&#039;/home/admin&#039;&#039; as start directory&lt;br /&gt;
* copy the needed files&lt;br /&gt;
&lt;br /&gt;
== App Platform disk space warning ==&lt;br /&gt;
&lt;br /&gt;
If the configured threshold is reached, all Apps are stopped inside the AP. You must then free disk space somehow.&lt;br /&gt;
&lt;br /&gt;
=== Find large instances ===&lt;br /&gt;
Click through your apps in the tree on the left side and take a look at the database size of each instance.&lt;br /&gt;
&lt;br /&gt;
=== Delete data inside an instance ===&lt;br /&gt;
It depends on the type of app if you can delete data or not. E.g. you can start the Files app and delete files inside this app.&amp;lt;br&amp;gt;&lt;br /&gt;
This won&#039;t reclaim disk space though due to the way how PostgreSQL databases work, so you need to follow this guide to reclaim the disk space:&lt;br /&gt;
&lt;br /&gt;
* start the corresponding App&lt;br /&gt;
* delete data inside the App&lt;br /&gt;
* stop the corresponding App again&lt;br /&gt;
* download a backup of the instance (backup button at the top), this backup contains the whole instance data, also the password of the instance&lt;br /&gt;
* delete this specific instance&lt;br /&gt;
* restore the downloaded backup (restore button at the top)&lt;br /&gt;
&lt;br /&gt;
 Depending on the hardware and the size of the instance, this process may take hours to complete!&lt;br /&gt;
&lt;br /&gt;
=== Resize the disk ===&lt;br /&gt;
The resizing of a disk is just possible for virtual machines, see [[#Resizing the disk of a Virtual machine|Resizing the disk of a Virtual machine]].&lt;br /&gt;
&lt;br /&gt;
=== Delete the whole instance ===&lt;br /&gt;
If there is no other possibility, you can delete the whole instance. Afterwards you recreate the instance with the same values and a new random password. Don&#039;t forget to set this password in the corresponding PBX App objects though!&lt;br /&gt;
&lt;br /&gt;
=== Restart the Apps or the AP ===&lt;br /&gt;
If you have enough disk space again, you must either restart the whole App Platform or you manually start all Apps again.&lt;br /&gt;
&lt;br /&gt;
== App Platform/Apps app not online anymore due to full disk ==&lt;br /&gt;
If the apps app is not online anymore and you can&#039;t access any apps anymore, try to login with an SSH client to see if your disk is full.&lt;br /&gt;
Login as admin and afterwards as root (su root).&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* issue &#039;&#039;&#039;df -h&#039;&#039;&#039; and see the disk usage of /dev/sda2, if this is 100%, your disk is too full&lt;br /&gt;
* stop the manager&lt;br /&gt;
** /etc/init.d/S92manager stop&lt;br /&gt;
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)&lt;br /&gt;
** echo &amp;quot;&amp;quot; &amp;gt; /mnt/sda2/empty_if_no_space&lt;br /&gt;
* delete log files to recover some space&lt;br /&gt;
** rm /var/log/apps/*/*&lt;br /&gt;
** rm /var/log/core_dumps/*/*&lt;br /&gt;
* restart the postgresql server (see the output if this worked or not)&lt;br /&gt;
** /etc/init.d/S50postgresql restart&lt;br /&gt;
* restart the manager&lt;br /&gt;
** /etc/init.d/S92manager restart&lt;br /&gt;
* wait until everything is online again&lt;br /&gt;
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it&lt;br /&gt;
** you may want to stop all app services first to prevent more writes to the database&lt;br /&gt;
** if not possible, you can delete this instance, but you&#039;ll loose all data from this instance then!&lt;br /&gt;
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space&lt;br /&gt;
** If this does not work you can create a backup from the database, delete the database and import the database again.&lt;br /&gt;
* free up at least 500 MB so that the manager can create the file again&lt;br /&gt;
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:&lt;br /&gt;
** rm /mnt/sda2/empty_if_no_space&lt;br /&gt;
** /etc/init.d/S92manager restart&lt;br /&gt;
** the manager restart automatically recreates the empty_if_no_space file if this file doesn&#039;t exist&lt;br /&gt;
&lt;br /&gt;
 Make sure, that you do &#039;&#039;&#039;not&#039;&#039;&#039; have backups configured to a local files instance while this files instance is not excluded from backups.&lt;br /&gt;
 An instance can be excluded from backups in the instance settings in the AP Manager.&lt;br /&gt;
&lt;br /&gt;
If all of this doesn&#039;t help, you can resize the file system on a VM:&lt;br /&gt;
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]&lt;br /&gt;
&lt;br /&gt;
== Resizing the disk of a Virtual machine ==&lt;br /&gt;
&lt;br /&gt;
 Do &#039;&#039;&#039;NOT&#039;&#039;&#039; resize if you&#039;re running an App Platform version higher than &#039;&#039;&#039;110000&#039;&#039;&#039; and lower than &#039;&#039;&#039;110027&#039;&#039;&#039; or your data will be lost!&lt;br /&gt;
 Please update your App Platform to version 110027 or higher before you start resizing your disk.&lt;br /&gt;
&lt;br /&gt;
* stop the VM&lt;br /&gt;
* expand the disk using your VM utilities&lt;br /&gt;
* start the VM and boot from the first boot entry &#039;&#039;&#039;rescue/setup&#039;&#039;&#039;&lt;br /&gt;
* login with &#039;&#039;&#039;root&#039;&#039;&#039; and &#039;&#039;&#039;iplinux&#039;&#039;&#039;&lt;br /&gt;
* execute this command: &#039;&#039;&#039;/home/root/install_step1.sh log.txt resize&#039;&#039;&#039;&lt;br /&gt;
* the VM reboots automatically after a successful resize&lt;br /&gt;
&lt;br /&gt;
== Shrink the physically size of PostgreSQL database files ==&lt;br /&gt;
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. &lt;br /&gt;
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.&lt;br /&gt;
&lt;br /&gt;
 You can also start this process through the instance settings as long as the AP Manager is still running.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important: You are operating on the Database, you have to make a Backup of your Database before you do this!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Login via SSH to the APPlatform with the &#039;&#039;admin&#039;&#039; User&lt;br /&gt;
 su root&lt;br /&gt;
 /etc/init.d/S92manager stop  # not always needed, but in case of database errors recommended, of course no app is online then&lt;br /&gt;
 sudo -u postgres reindexdb -a&lt;br /&gt;
 sudo -u postgres vacuumdb -a -f&lt;br /&gt;
 /etc/init.d/S92manager restart # just execute if the manager has been stopped above&lt;br /&gt;
&lt;br /&gt;
 sudo -u postgres reindexdb -d dbname # for a single database with dbname&lt;br /&gt;
 sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname&lt;br /&gt;
&lt;br /&gt;
Note: This may take some time and CDRs (or other data written to a DB) won&#039;t be received during this time. &lt;br /&gt;
&lt;br /&gt;
After the process you can check the free dispace via &amp;lt;code&amp;gt;df -h&amp;lt;/code&amp;gt;. You can check the claimed space from the database file with the command &amp;lt;code&amp;gt;du -sh /mnt/sda2/pgsql/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Change IP Addresses / DNS Names / System Name ==&lt;br /&gt;
&lt;br /&gt;
If you want to change the System Name or the DNS Name of the PBX and/or AP Platform you must change records manually &#039;&#039;&#039;in the described order&#039;&#039;&#039;!&lt;br /&gt;
You have to know the Admin password to directly Login to the AP-Plattform.&lt;br /&gt;
&lt;br /&gt;
=== App Platform ===&lt;br /&gt;
; Settings - General&lt;br /&gt;
* &#039;&#039;Devices app URL&#039;&#039;&lt;br /&gt;
* &#039;&#039;App platform DNS name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; Settings - Alarms and Events&lt;br /&gt;
* &#039;&#039;URL&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; All Instances&lt;br /&gt;
* &#039;&#039;Domain&#039;&#039;&lt;br /&gt;
* &#039;&#039;Webserver path&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== PBX ===&lt;br /&gt;
Download the configuration and &#039;&#039;search/replace&#039;&#039; in the config file. Upload the config file and reboot.&lt;br /&gt;
&lt;br /&gt;
Manual:&lt;br /&gt;
* &#039;&#039;URL&#039;&#039; in all PBX Object (Apps, Voicemail ...)&lt;br /&gt;
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]&lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] &lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]&lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]&lt;br /&gt;
&lt;br /&gt;
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]&lt;br /&gt;
&lt;br /&gt;
=== Additional Devices / Steps ===&lt;br /&gt;
* &#039;&#039;Devices Registration URL&#039;&#039;&lt;br /&gt;
** There is no automatism to change the URL on all devices in your setup.&lt;br /&gt;
** If you have the option to use DHCP, you can temporarily overwrite the [[{{NAMESPACE}}:Services/Update|Update URL]] and execute a [[{{NAMESPACE}}:Concept_Update_Server|custom update script]] to change the &#039;&#039;Device Registration URL&#039;&#039;&lt;br /&gt;
* &#039;&#039;Alarm server&#039;&#039;&lt;br /&gt;
* Reverse Proxy configuration&lt;br /&gt;
* Change &#039;&#039;Domain Name&#039;&#039; in Devices if you have also changed the system name&lt;br /&gt;
&lt;br /&gt;
== How to recover from a broken File System ==&lt;br /&gt;
Sometimes you may find messages in the &#039;&#039;messages&#039;&#039; log file (in &#039;&#039;var/log&#039;&#039;) like&lt;br /&gt;
&lt;br /&gt;
 initial error at 1500329378: ext4_journal_start_sb:328&lt;br /&gt;
 last error at 1500329378: ext4_journal_start_sb:328&lt;br /&gt;
&lt;br /&gt;
Or you get events like &amp;quot;Broken file system&amp;quot; from your AP.&lt;br /&gt;
&lt;br /&gt;
This indicates a file system failure on the Linux Installation.&lt;br /&gt;
&lt;br /&gt;
When the Linux file system is broken, you can try to repair it using some command line Linux tools.&lt;br /&gt;
&lt;br /&gt;
If this doesn&#039;t fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.&lt;br /&gt;
&lt;br /&gt;
=== Gateway ===&lt;br /&gt;
&lt;br /&gt;
* Open the WebGUI of the gateway running your LAP and proceed to &#039;&#039;App Platform/General&#039;&#039;&lt;br /&gt;
** terminate Linux (&#039;&#039;Status/Stop&#039;&#039;)&lt;br /&gt;
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0&lt;br /&gt;
** modify the Initrd file to ramdisk.ext2.xz&lt;br /&gt;
** modify the ramdisk size to 100000&lt;br /&gt;
** start Linux again&lt;br /&gt;
:: This will run Linux on another (hopefully sane) partition.&lt;br /&gt;
&lt;br /&gt;
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP&#039;s command line (user: root, pw: iplinux)&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda2&amp;lt;/code&amp;gt;&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
:: this should fix any issue on the file system&lt;br /&gt;
&lt;br /&gt;
* go back to the WebGUI of the gateway running your LAP and proceed to &#039;&#039;App Platform/General&#039;&#039;&lt;br /&gt;
** terminate Linux (&#039;&#039;Status/Stop&#039;&#039;)&lt;br /&gt;
** modify the &#039;&#039;Kernel command line&#039;&#039; from &#039;&#039;root=/dev/ram0&#039;&#039; to &amp;lt;code&amp;gt;root=/dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
** clear the Initrd file field&lt;br /&gt;
** clear the ramdisk size field&lt;br /&gt;
** start Linux again&lt;br /&gt;
:: This will run Linux on the original partition.&lt;br /&gt;
&lt;br /&gt;
=== VM ===&lt;br /&gt;
&lt;br /&gt;
Restart the VM and select the first entry in the boot menu from grub.&lt;br /&gt;
&lt;br /&gt;
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP&#039;s command line&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda2&amp;lt;/code&amp;gt;&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
:: this should fix any issue on the file system&lt;br /&gt;
* Reboot your VM&lt;br /&gt;
[[Category:Concept]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_App_Platform&amp;diff=67033</id>
		<title>Reference13r3:Concept App Platform</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_App_Platform&amp;diff=67033"/>
		<updated>2023-04-13T09:06:38Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Reboot after an image update hangs (ARM gateway) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= General =&lt;br /&gt;
* V13 uses [https://buildroot.org/ buildroot]&lt;br /&gt;
* this is an own (innovaphone) collection of packages&lt;br /&gt;
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* V13 or up&lt;br /&gt;
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) &lt;br /&gt;
* Gateway (arm64): IPx13 (with m2 SSD)&lt;br /&gt;
* Virtual (x86_64)&lt;br /&gt;
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)&lt;br /&gt;
** VMWare&lt;br /&gt;
&lt;br /&gt;
== Default credentials ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;During INSTALL, the default passwords are replaced with the global Admin PW!&#039;&#039;&#039;&lt;br /&gt;
* SSH-Login with &#039;&#039;&#039;admin&#039;&#039;&#039; and &#039;&#039;&#039;ipapps&#039;&#039;&#039;&lt;br /&gt;
* root login with &#039;&#039;&#039;root&#039;&#039;&#039; and &#039;&#039;&#039;iplinux&#039;&#039;&#039; (the root login is not directly possible, you have to login as admin first and use the command &#039;&#039;su root&#039;&#039;)&lt;br /&gt;
* manager App (web login) &#039;&#039;&#039;pwd&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= App Platform - arm/arm64 (Gateway)=&lt;br /&gt;
&lt;br /&gt;
* The installation image has a size of ~50MB. During installation, the following partitions are created:&lt;br /&gt;
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)&lt;br /&gt;
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)&lt;br /&gt;
** /dev/sda3 ext4: 500MB (contains the rootfs)&lt;br /&gt;
** /dev/sda4 swap: 512MB&lt;br /&gt;
&lt;br /&gt;
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:&lt;br /&gt;
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10&lt;br /&gt;
* the available RAM for the App Platform (as specified in column &#039;&#039;RAM for LAP (GB) out of RAM&#039;&#039; in chapter &#039;&#039;Technical data and recommended number of users supported&#039;&#039; of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))&lt;br /&gt;
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings&lt;br /&gt;
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10&lt;br /&gt;
&lt;br /&gt;
While it is hard to predict the performance of the App Platform in a specific scenario, we see that in a real life environment an App Platform running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users.  Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).&lt;br /&gt;
&lt;br /&gt;
= App Platform - x86-64 (Virtual Machine 64bit) =&lt;br /&gt;
&lt;br /&gt;
* The default disk size is 16GB. It should be increased &#039;&#039;&#039;before&#039;&#039;&#039; the first start if needed!&lt;br /&gt;
* Multiple CPUs are supported, default is one CPU&lt;br /&gt;
* default RAM: 512MB&lt;br /&gt;
* static IP address, DNS, Gateway can be configured with the command &#039;&#039;&#039;setip&#039;&#039;&#039; on the console. Run &#039;&#039;&#039;setip --help&#039;&#039;&#039; to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) &lt;br /&gt;
* If you have permission problems change to su user (Password is iplinux or your new admin password)  &lt;br /&gt;
* To figure out your ip address you can use the command: &#039;&#039;ip address&#039;&#039; on the console.&lt;br /&gt;
* &#039;&#039;&#039;loadkeys de&#039;&#039;&#039; can be used to change to german keyboard layout (etc.)&lt;br /&gt;
* partitions:&lt;br /&gt;
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)&lt;br /&gt;
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)&lt;br /&gt;
** /dev/sda3 ext4: 500MB (contains the rootfs)&lt;br /&gt;
** /dev/sda4 swap: 512MB&lt;br /&gt;
* VMWare Tools: Open VM Tools are installed&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
==ARM Gateway==&lt;br /&gt;
&lt;br /&gt;
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn&#039;t be blocked by any firewall.)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You can also install it manually:&lt;br /&gt;
* Open App Platform -&amp;gt; General and &#039;&#039;&#039;Enable Linux Support&#039;&#039;&#039;. Restart the gateway.&lt;br /&gt;
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.&lt;br /&gt;
* Open App Platform -&amp;gt; IP and configure the IP settings of the App Platform. Restart the Gateway.&lt;br /&gt;
* Open App Platform -&amp;gt; Installation and select the given version or enter an own path to the &#039;&#039;app-platform-armel.img&#039;&#039; image file.&lt;br /&gt;
* The installation runs without any further required step.&lt;br /&gt;
&lt;br /&gt;
==ARM64 Gateway==&lt;br /&gt;
&lt;br /&gt;
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn&#039;t be blocked by any firewall.)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You can also install it manually:&lt;br /&gt;
* Open App Platform -&amp;gt; General and &#039;&#039;&#039;Enable Linux Support&#039;&#039;&#039;. Restart the gateway.&lt;br /&gt;
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.&lt;br /&gt;
* Open App Platform -&amp;gt; IP and configure the IP settings of the App Platform. Restart the Gateway.&lt;br /&gt;
* Open App Platform -&amp;gt; Installation and select the given version or enter an own path to the &#039;&#039;app-platform-arm64.img&#039;&#039; image file.&lt;br /&gt;
* The installation runs without any further required step.&lt;br /&gt;
&lt;br /&gt;
==Virtual machine==&lt;br /&gt;
&lt;br /&gt;
* Import the image into your server environment.&lt;br /&gt;
* Edit the disk size, if needed.&lt;br /&gt;
* Start the machine and wait until it reboots and starts again.&lt;br /&gt;
* Note: If you need to access an IP addresses available through a VPN connection from from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]&lt;br /&gt;
&lt;br /&gt;
== Backup of the Apps ==&lt;br /&gt;
&lt;br /&gt;
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.&amp;lt;br&amp;gt;&lt;br /&gt;
There are no other files which need to be backuped.&amp;lt;br&amp;gt;&lt;br /&gt;
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
An alternate way is to use a command file which is similar to the command files from the firmware.&lt;br /&gt;
&lt;br /&gt;
===Commands===&lt;br /&gt;
* &#039;&#039;&#039;times&#039;&#039;&#039; 0,12 # backup only at 0 or 12 o&#039;clock&lt;br /&gt;
* &#039;&#039;&#039;backup-instances&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump PUT&lt;br /&gt;
** PUT and POST are supported, all instances including the manager itself are saved&lt;br /&gt;
* &#039;&#039;&#039;backup-instance&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT&lt;br /&gt;
** backup a single instance with instance name and instance domain&lt;br /&gt;
* &#039;&#039;&#039;backup-manager&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump&lt;br /&gt;
&lt;br /&gt;
===Hash parameters===&lt;br /&gt;
* #L App Platform label (neu), e.g. 10024&lt;br /&gt;
* #A App label (neu), e.g. 130004&lt;br /&gt;
* #I instance name (neu), e.g. reporting1&lt;br /&gt;
* #D instance domain (neu), e.g. innovaphone.com&lt;br /&gt;
* #m MAC address of the LAP, e.g. 00ab11eeff&lt;br /&gt;
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130&lt;br /&gt;
* #bn rolling backup index&lt;br /&gt;
* ## escapes a hash mark&lt;br /&gt;
&lt;br /&gt;
= App Platform Infrastructure and Concept =&lt;br /&gt;
== Webserver ==&lt;br /&gt;
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.&lt;br /&gt;
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.&lt;br /&gt;
&lt;br /&gt;
=== Import Custom SSL Certificate ===&lt;br /&gt;
You have to upload a PEM Certificate with the following chain structure and without password encoding.&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (certificate: your_domain_name.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (Intermediate certificate: DigiCertCA.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (Root certificate: TrustedRoot.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN RSA PRIVATE KEY-----&lt;br /&gt;
 (certificate Key: your_domain_name.key)&lt;br /&gt;
 -----END RSA PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
=== Known issues ===&lt;br /&gt;
*The app platform webserver can use only the default http/https ports 80/443.&lt;br /&gt;
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.&amp;lt;br /&amp;gt;&lt;br /&gt;
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:&lt;br /&gt;
**&#039;&#039;psql -d manager -c &amp;quot;DELETE FROM config WHERE name=&#039;webserverCertificate&#039;&amp;quot;&#039;&#039;&lt;br /&gt;
**&#039;&#039;/etc/init.d/S92manager restart&#039;&#039;&lt;br /&gt;
*The app platform webserver interprets URLs case-sensitive. In other words, &amp;lt;nowiki&amp;gt;http://&amp;lt;addr&amp;gt;/file.txt&amp;lt;/nowiki&amp;gt; is not the same as &amp;lt;nowiki&amp;gt;http://&amp;lt;addr&amp;gt;/FILE.TXT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Database ==&lt;br /&gt;
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.&lt;br /&gt;
&lt;br /&gt;
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.&lt;br /&gt;
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.&lt;br /&gt;
&lt;br /&gt;
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file &#039;&#039;/mnt/sda2/pgsql/pg_hba.conf&#039;&#039;.&lt;br /&gt;
After editing pg_hba.conf, the database-service has to be restarted with the command &amp;lt;code&amp;gt;/etc/init.d/S50postgresql restart&amp;lt;/code&amp;gt;&lt;br /&gt;
(Please think about it before you do it, because a better way is to create your own local app with local database access.)&lt;br /&gt;
&lt;br /&gt;
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/14/auth-pg-hba-conf.html&lt;br /&gt;
&lt;br /&gt;
 Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf &lt;br /&gt;
 and that you may break your database server if you do not know exactly what you do!&lt;br /&gt;
&lt;br /&gt;
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:&lt;br /&gt;
* stop the manager&lt;br /&gt;
** &amp;lt;code&amp;gt;/etc/init.d/S92manager stop&amp;lt;/code&amp;gt;&lt;br /&gt;
* restart the database-service (maybe not really necessary, but makes a good feeling)&lt;br /&gt;
**&amp;lt;code&amp;gt;/etc/init.d/S50postgresql restart&amp;lt;/code&amp;gt;&lt;br /&gt;
* start the manager&lt;br /&gt;
** &amp;lt;code&amp;gt;/etc/init.d/S92manager start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== App Platform Manager ==&lt;br /&gt;
The App Platform Manager is the central component of the App Platform. It does the following:&lt;br /&gt;
* Installing app services by downloading the binaries from an app store.&lt;br /&gt;
* Running and monitoring app services. If an app service crashes it is restarted, automatically.&lt;br /&gt;
* Management of app instances and providing them with the environment they need:&lt;br /&gt;
** A database&lt;br /&gt;
** A webserver path&lt;br /&gt;
** A password for authentication&lt;br /&gt;
* Backup and restore of app instances.&lt;br /&gt;
* Collecting debug information like tracing and crash dumps.&lt;br /&gt;
* System monitoring (CPU usage, memory usage, etc).&lt;br /&gt;
&lt;br /&gt;
== App Services ==&lt;br /&gt;
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.&lt;br /&gt;
&lt;br /&gt;
== App Instances ==&lt;br /&gt;
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.&lt;br /&gt;
&lt;br /&gt;
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.&amp;lt;br&amp;gt;&lt;br /&gt;
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.&amp;lt;br&amp;gt;&lt;br /&gt;
The database password must be just known to the manager and not outside of the App Platform.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Database name&#039;&#039; and &#039;&#039;Database user&#039;&#039; are both limited to a length of 63 characters.  By default, the App Manager would create &#039;&#039;&amp;lt;domain&amp;gt;&#039;&#039;_&#039;&#039;&amp;lt;instance-name&amp;gt;&#039;&#039; as value for both.  This is why it is recommended to use instance names so that length(name) + length(domain) is less than 63 characters.  However, if this is not possible, you can manually shorten the suggested values (both must still be unique on your App Platform).&lt;br /&gt;
&lt;br /&gt;
=== Cleanup database ===&lt;br /&gt;
You can cleanup the instance database inside the instance settings. This starts the vacuumdb process for the instance database which frees disk space of deleted rows.&lt;br /&gt;
 Note that this process locks the database and that sufficient disk space is needed to complete it!&lt;br /&gt;
&lt;br /&gt;
=== External database host ===&lt;br /&gt;
You can optionally configure an external database host, if the database shall be hosted on an external host.&amp;lt;br/&amp;gt;&lt;br /&gt;
Note that the App Platform Manager still creates a local database, which is then not used as long as the external host is configured.&lt;br /&gt;
&lt;br /&gt;
What are external databases useful for?:&lt;br /&gt;
* User data is too large (files are stored as BLOB in the database)&lt;br /&gt;
* Other (non-innovaphone) database servers are to be used due to other regulations&lt;br /&gt;
* There is already an external database cluster with its own backup/restore processes which should be used&lt;br /&gt;
* More performance is required (please note that a local UNIX socket provides much faster results than a remote database server). Depending on the app and the task of the app, it can still be useful to use a separate server if it is faster.&lt;br /&gt;
&lt;br /&gt;
==== Supported database types ====&lt;br /&gt;
In principle, &#039;&#039;PostgreSQL&#039;&#039; and &#039;&#039;MySQL&#039;&#039; are supported. However, please note that the respective app must be designed for the target database server type. If an app has been developed for PostgreSQL, it cannot be operated on a MySQL server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note:&#039;&#039;&#039; All innovaphone apps are developed exclusively as PostgreSQL apps.&lt;br /&gt;
&lt;br /&gt;
MySQL therefore only makes sense if own apps are developed and MySQL or certain MySQL features are to be used. For such apps, it is very important to deactivate the automatic Application Platform APP-Backup.&lt;br /&gt;
The database backup process of the App Platform uses PostgreSQL backup commands, which is why the backup would fail, so the app must be excluded from the backup, and you must take care of the backup yourself.&lt;br /&gt;
&lt;br /&gt;
==== Database creation ====&lt;br /&gt;
If you use an external database, you have to create the database itself.&lt;br /&gt;
The App Platform Manager itself creates a PostgreSQL database like this (you may respect this on your database host to be compatible with the database implementation inside the Apps):&lt;br /&gt;
* CREATE DATABASE &amp;quot;dbname&amp;quot; ENCODING &#039;UTF8&#039;;&lt;br /&gt;
* CREATE USER &amp;quot;dbuser&amp;quot;;&lt;br /&gt;
* ALTER USER &amp;quot;dbuser&amp;quot; WITH PASSWORD &#039;dbpassword&#039;;&lt;br /&gt;
* GRANT ALL PRIVILEGES ON DATABASE &amp;quot;dbname&amp;quot; TO &amp;quot;dbuser&amp;quot;;&lt;br /&gt;
* ALTER DATABASE &amp;quot;dbname&amp;quot; OWNER TO &amp;quot;dbuser&amp;quot;;&lt;br /&gt;
* REVOKE CONNECT ON DATABASE &amp;quot;dbname&amp;quot; FROM public;&lt;br /&gt;
&lt;br /&gt;
==== Database connection ====&lt;br /&gt;
There are different possibilities to specify the host. You can use a DNS-Name, IPv4 or IPv6. A port can be optionally added with a colon.&lt;br /&gt;
&lt;br /&gt;
Our PostgreSQL implementation sets sslmode=prefer, so SSL is used by default if enabled on the server.&lt;br /&gt;
&lt;br /&gt;
==== Backup/Restore ====&lt;br /&gt;
External databases are still backuped as normal, but you can&#039;t restore such a database with the App Platform Manager on the external host! You must restore such a dump manually on your database host.&lt;br /&gt;
&lt;br /&gt;
==== Database redundancy ====&lt;br /&gt;
In principle, it is possible to create redundancies for failure scenarios through this function.&lt;br /&gt;
&lt;br /&gt;
However, there are different scenarios that need to be evaluated on a case-by-case basis:&lt;br /&gt;
&lt;br /&gt;
* One database, multiple App Platforms (primary online / secondary &#039;&#039;&#039;offline&#039;&#039;&#039;) where multiple apps access the same database.&lt;br /&gt;
** This mode of operation is legal as long as you can really ensure that only one App Platform is active at a time.&lt;br /&gt;
&lt;br /&gt;
* One database, multiple App Platforms (primary online / secondary &#039;&#039;&#039;online&#039;&#039;&#039;) with multiple apps accessing the same database.&lt;br /&gt;
** This operating mode cannot be used for innovaphone apps, as the app itself would have to be developed for such a mode, which it is not.&lt;br /&gt;
&lt;br /&gt;
However, we advise great caution here! The use of the same databases from different nodes may only be used if you can ensure that the databases or runtime environments of apps cannot get into a &#039;&#039;split-brain&#039;&#039; mode.&lt;br /&gt;
&lt;br /&gt;
== Relationship between app instances and app objects in the PBX ==&lt;br /&gt;
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:&lt;br /&gt;
* URL&lt;br /&gt;
* Password&lt;br /&gt;
The password is used by the PBX for authenticating itself, users and services against the app instance.&lt;br /&gt;
&lt;br /&gt;
Some apps need a websocket connection with the PBX. When &amp;quot;websocket&amp;quot; is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.&lt;br /&gt;
&lt;br /&gt;
=== Supported scenarios ===&lt;br /&gt;
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have&lt;br /&gt;
* One App Platform for one customer&lt;br /&gt;
* One App Platform for many customers&lt;br /&gt;
* Many App Platforms for one customer&lt;br /&gt;
* Many App Platforms for many customers&lt;br /&gt;
&lt;br /&gt;
Attention: The V13 installer can only configure the scenario &amp;quot;&#039;&#039;One App Platform for one customer&#039;&#039;&amp;quot;. If you want to have a different scenario, you have to configure it manually.&lt;br /&gt;
&lt;br /&gt;
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.&lt;br /&gt;
&lt;br /&gt;
=== Restrictions ===&lt;br /&gt;
Currently we don&#039;t have redundancy for app instances or App Platforms.&lt;br /&gt;
&lt;br /&gt;
== Update of the App Platform itself ==&lt;br /&gt;
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can update the used build inside the Manager App by using the &#039;&#039;&#039;Update&#039;&#039;&#039; button at the top.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!&lt;br /&gt;
&lt;br /&gt;
== App services and multi-threading ==&lt;br /&gt;
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+&#039;&#039;n&#039;&#039;  threads (where &#039;&#039;n&#039;&#039; is the number of instances).  All communication between app service instances and their clients must pass the single-threaded web server.  On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + &#039;&#039;m&#039;&#039; + &#039;&#039;m&#039;&#039; * &#039;&#039;n&#039;&#039; (with &#039;&#039;m&#039;&#039; being the number of Apps and &#039;&#039;n&#039;&#039; the number of instances per App) threads can be utilized.&lt;br /&gt;
&lt;br /&gt;
= App Platform replication =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* 13r3 on both standby servers and the primary server&lt;br /&gt;
* at least an App Platform image starting with version 110002 (otherwise postgresql is too old)&lt;br /&gt;
* standby and primary servers must have the same system architecture&lt;br /&gt;
** arm gateways (IPx11) just with arm gateways (IPx11)&lt;br /&gt;
** arm64 gateways (IPx13) just with arm64 gateways (IPx13)&lt;br /&gt;
** x86_64 virtual machines just with x86_64 virtual machines&lt;br /&gt;
* the disk size on standby servers must be at least equal as the disk size on the primary server&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
The configuration is done within the App Platform Manager next to the settings button under &amp;quot;Replication&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Off ===&lt;br /&gt;
No replication is done at all.&lt;br /&gt;
&lt;br /&gt;
=== Primary ===&lt;br /&gt;
The App Platform acts as primary server for one or multiple standby servers.&amp;lt;br/&amp;gt;&lt;br /&gt;
Max 8 standby servers can be configured.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Every standby server must get a unique name on the primary server which is then also configured on the standby server itself. This is due to the fact, that the primary server preserves data for every standby server while it&#039;s not reachable.&amp;lt;br/&amp;gt;&lt;br /&gt;
A standby server name must be a valid domain name, although this name is currently not used as DNS name (but might be used in the future).&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The password is randomly pregenerated and must be used as handed by the App Platform Manager.&lt;br /&gt;
&lt;br /&gt;
==== PostgreSQL port ====&lt;br /&gt;
The default PostgreSQL port is 5432 and can&#039;t be changed on the primary. It must be reachable through your firewall or at least forwarded on a different port towards this App Platform on port 5432.&lt;br /&gt;
&lt;br /&gt;
=== Standby ===&lt;br /&gt;
Configure the password from the primary and one of the not yet used standby server names.&amp;lt;br/&amp;gt;&lt;br /&gt;
The host and port must be reachable through the network. You can specify a non default port which then must be forwarded somewhere else to port 5432 on your primary.&lt;br /&gt;
&lt;br /&gt;
*Note: Do &#039;&#039;&#039;not&#039;&#039;&#039; configure the same standby name on different standby servers, as this will break the replication on at least one standby!&amp;lt;br&amp;gt;&lt;br /&gt;
*Note: On a standby, all &#039;&#039;&#039;locally installed apps are removed&#039;&#039;&#039; during installation&lt;br /&gt;
&lt;br /&gt;
== Failure detection ==&lt;br /&gt;
&lt;br /&gt;
The replication state on both primary and standby servers are continuously monitored.&amp;lt;br/&amp;gt;&lt;br /&gt;
In case of a broken connection, an alarm is triggered at once and just cleared if the failure goes away.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
If such an alarm lasts for 5 minutes an email is send. The recipient address must be configured in the App Platform Manager settings under &amp;quot;Alarms and Events&amp;quot; and you must also provide a valid SMTP configuration.&lt;br /&gt;
&lt;br /&gt;
== Failover ==&lt;br /&gt;
&lt;br /&gt;
There is no automatic failover procedure. If you detect the failure state, you must get active yourself.&lt;br /&gt;
&lt;br /&gt;
=== Standby down ===&lt;br /&gt;
&lt;br /&gt;
Fix the standby server and see if the replication comes up again. If not, setup a new standby server which will replicate the whole database cluster from scratch.&lt;br /&gt;
&lt;br /&gt;
=== Primary down ===&lt;br /&gt;
&lt;br /&gt;
If the primary is down and cannot be brought into life again, you must take the following steps, depending on your configuration:&lt;br /&gt;
&lt;br /&gt;
==== One standby server ====&lt;br /&gt;
&lt;br /&gt;
* Disable the replication in the replication configuration. You will then have a standalone App Platform afterwards.&lt;br /&gt;
&lt;br /&gt;
==== Multiple standby servers ====&lt;br /&gt;
&lt;br /&gt;
* Change the replication type on one of the standby servers from standby to primary. Please note that the other standby entries must still exist here (they are automatically offered)!&lt;br /&gt;
* Change the host entry on the other standby servers to the new standby server. The standby server will sync the whole database cluster again, which will take time.&lt;br /&gt;
&lt;br /&gt;
==== Configuration changes ====&lt;br /&gt;
&lt;br /&gt;
You must also tell the PBXes and other tools to use the new primary server.&lt;br /&gt;
&lt;br /&gt;
* You may simply change the IP address behind the DNS of your primary server to point to the new primary server.&lt;br /&gt;
* Without DNS, you must currently modify the configuration by replacing the IP address of the old primary with the new address. &lt;br /&gt;
** This must be done in every master PBX configuration.&lt;br /&gt;
** This must be done in every App configuration which may use this IP address, e.g. Devices which rolls out an alarm server configuration&lt;br /&gt;
&lt;br /&gt;
== Technical backgrounds ==&lt;br /&gt;
&lt;br /&gt;
=== Streaming replication ===&lt;br /&gt;
&lt;br /&gt;
We use the asynchronous [https://www.postgresql.org/docs/9.3/warm-standby.html#STREAMING-REPLICATION streaming replication of PostgreSQL]. A transaction thus just waits for a commit on the primary server. Standby servers will receive the transaction asynchronously afterwards to avoid a reduced writing performance.&amp;lt;br/&amp;gt;&lt;br /&gt;
A primary server keeps the neccessary WAL files for every standby server until the standby fetched the neccessary information.&amp;lt;br/&amp;gt;&lt;br /&gt;
This fact can lead to higher disk space usage on the primary if one or multiple standby servers are offline for a while.&lt;br /&gt;
&lt;br /&gt;
 Take care to fix broken replications as soon as possible to avoid a full disk on the primary server!&lt;br /&gt;
&lt;br /&gt;
=== What is replicated ===&lt;br /&gt;
The whole database cluster of an app platform is replicated. This includes every database of every instance and the database of the App Platform Manager itself.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== App Services on standbys ===&lt;br /&gt;
The database of the App Platform Manager itself also contains the App service binaries to be able to restore applications in a failover case.&amp;lt;br/&amp;gt;&lt;br /&gt;
You do not have to install App services on the standby if you install them on the primary.&amp;lt;br/&amp;gt;&lt;br /&gt;
App Platform Manager and Webserver can be updated as usual through the App Store or the Devices App if the standby is connected to Devices.&lt;br /&gt;
&lt;br /&gt;
=== App Platform Manager configuration of the standby server ===&lt;br /&gt;
The App Platform Manager configuration of the standby server cannot be stored inside the database, as the database is readonly. So it is stored inside a configuration JSON file under &#039;&#039;/home/root/standby.conf&#039;&#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
This configuration is backed up as usual by a Devices backup job and can be also manually restored on a standby (not on a primary though!).&lt;br /&gt;
&lt;br /&gt;
=== No automatic failover ===&lt;br /&gt;
&lt;br /&gt;
There is currently no automatic failover mechanism. PostgreSQL doesn&#039;t offer multi master replication, so writing is just possible on the primary itself. Standby servers have a readonly database.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Let&#039;s consider the following use case if we would implement an automatic failover with the current technical possibilities:&amp;lt;br/&amp;gt;&lt;br /&gt;
* The primary server is connected to a master PBX.&lt;br /&gt;
* A slave PBX is also connected to the primary server in another location.&lt;br /&gt;
* A standby server is in this location and replicates from the primary.&lt;br /&gt;
* The internet connection between primary and standby fails.&lt;br /&gt;
* The standby promotes itself to primary, so that the master PBX now writes to the old primary and the slave PBX now writes to the &amp;quot;new&amp;quot; primary.&lt;br /&gt;
* The internet connection comes up again and both primary and standby servers now have databases which are out of sync and which cannot be merged.&lt;br /&gt;
&lt;br /&gt;
=== Security ===&lt;br /&gt;
&lt;br /&gt;
* port 5432 must be reachable on the App Platform &lt;br /&gt;
* For every standby a PostgreSQL user is created with the REPLICATION role on the primary. Just this user has access to the database server from non localhost connections.&lt;br /&gt;
* You cannot establish a standard connection with such a user and modify/read from tables.&lt;br /&gt;
* The replication connection is established over TLS by default.&lt;br /&gt;
&lt;br /&gt;
= Known Issues =&lt;br /&gt;
&lt;br /&gt;
== Reboot after an image update hangs (ARM gateway) ==&lt;br /&gt;
&lt;br /&gt;
If it happens, that the App Platform doesn&#039;t recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -&amp;gt; General.&amp;lt;br&amp;gt;&lt;br /&gt;
If &#039;&#039;&#039;Kernel command line&#039;&#039;&#039; is set to &#039;&#039;&#039;/dev/ram0&#039;&#039;&#039;, the App Platform booted the ramdisk.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Try to fetch the upgrade log file:&lt;br /&gt;
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If this doesn&#039;t work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;cat /apps/install_step1.log&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If this file contains &#039;&#039;&#039;finished&#039;&#039;&#039; at the end, you can reconfigure the settings under App Platform -&amp;gt; General:&amp;lt;br&amp;gt;&lt;br /&gt;
* press &#039;&#039;&#039;Stop&#039;&#039;&#039;&lt;br /&gt;
* Initrd file: empty&lt;br /&gt;
* Kernel command line: &#039;&#039;&#039;root=/dev/sda3&#039;&#039;&#039;&lt;br /&gt;
* Ramdisk size: empty&lt;br /&gt;
* press &#039;&#039;&#039;Start&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The App Platform should boot and run the already updated image.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;color: red; font-size:150%;&amp;quot;&amp;gt;---WARNING---&lt;br /&gt;
 If the file doesn&#039;t contain &amp;quot;finished&amp;quot; at the end, you may still need to wait, as an upgrade may take some time!&lt;br /&gt;
 Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won&#039;t run!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reboot after an image update doesn&#039;t start as update is already running ==&lt;br /&gt;
&lt;br /&gt;
If it happens, that the App Platform doesn&#039;t want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -&amp;gt; General.&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Shutdown&#039;&#039;&#039; the App Platform and &#039;&#039;&#039;Stop&#039;&#039;&#039; it.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Kernel command line&#039;&#039;&#039; to &#039;&#039;&#039;/dev/ram0&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Initrd file&#039;&#039;&#039; to &#039;&#039;&#039;ramdisk.ext2.xz&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Ramdisk size&#039;&#039;&#039; to &#039;&#039;&#039;100000&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Start&#039;&#039;&#039; the App Platform now.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The App Platform now either applies the image update or it reboots into the old image. Try the image update afterwards again.&lt;br /&gt;
&lt;br /&gt;
== Webserver doesn&#039;t respond after an image update ==&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the App Platform Manager from starting correctly:&lt;br /&gt;
* su root (become root)&lt;br /&gt;
* rm -f /mnt/sda2/log/core_dumps/*/*&lt;br /&gt;
* /etc/init.d/S92manager restart&lt;br /&gt;
&lt;br /&gt;
Check if you can now reach the App Platform again.&lt;br /&gt;
&lt;br /&gt;
= Tracing =&lt;br /&gt;
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.&amp;lt;br&amp;gt;&lt;br /&gt;
Each App Intance has its own trace flags. The following trace flags can be set:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Alarm client: used by the manager to send alarms to an alarm server&lt;br /&gt;
* App: logs from the App Service itself&lt;br /&gt;
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)&lt;br /&gt;
* AppSharing: just native clients&lt;br /&gt;
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server&lt;br /&gt;
* Audio: just native clients&lt;br /&gt;
* Browser: just native clients&lt;br /&gt;
* Command: the command interface is used to execute shell commands, e.g. used by the manager App&lt;br /&gt;
* Config: logs config changes of an App&lt;br /&gt;
* Database: database logs&lt;br /&gt;
* DB files: database file logs&lt;br /&gt;
* DNS: DNS request logging&lt;br /&gt;
* DTLS: just native clients, DTLS request logging&lt;br /&gt;
* Ethernet: interface to get ethernet adapater infos, just manager App&lt;br /&gt;
* File: logs for file system access (synchronous), e.g. manager App&lt;br /&gt;
* Files: logs for file system access (asynchronous)&lt;br /&gt;
* HTTP client: http client logs&lt;br /&gt;
* HTTP file: logs for static HTTP files&lt;br /&gt;
* ICE: just native clients&lt;br /&gt;
* LDS: local domain sockets &lt;br /&gt;
* Media: just native clients&lt;br /&gt;
* Media channel: just native clients&lt;br /&gt;
* Process: IProcess interface logs which is used for spawning, killing processes etc.&lt;br /&gt;
* SMTP: SMTP client logs&lt;br /&gt;
* TCP: TCP logs&lt;br /&gt;
* Time: ITime interface logs&lt;br /&gt;
* TLS: TLS logs&lt;br /&gt;
* TURN: just native clients&lt;br /&gt;
* UDP: UDP logs&lt;br /&gt;
* Video: just native clients&lt;br /&gt;
* WebSocket client: logs outgoing websocket connections&lt;br /&gt;
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App&lt;br /&gt;
* WebDAV service: logs WebDAV requests to the App&lt;br /&gt;
* Webserver: enables webserver specific logs&lt;br /&gt;
&lt;br /&gt;
== RPCAP ==&lt;br /&gt;
&lt;br /&gt;
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.&amp;lt;br&amp;gt;&lt;br /&gt;
You can add the interface in wireshark with the string:&lt;br /&gt;
 rpcap://&amp;lt;APP-Platform-IP&amp;gt;/eth0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please don&#039;t forget to disable RPCAP after your testing!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= How-Tos =&lt;br /&gt;
&lt;br /&gt;
== How to retrieve files from the App Platform ==&lt;br /&gt;
To retrieve files from the App Platform which can not be retrieved via the App Platform manager UI, you can connect to the App Platform using the SCP protocol on port 22.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
First copy files to /home/admin as root with Putty or another SSH client:&lt;br /&gt;
* use the &#039;&#039;DNS&#039;&#039; name or IP address of your App Platform (not the PBX)&lt;br /&gt;
* use user &#039;&#039;admin&#039;&#039; and the appropriate password (&#039;&#039;ipapps&#039;&#039; by default)&lt;br /&gt;
* use &#039;&#039;su root&#039;&#039; to be root (&#039;&#039;iplinux&#039;&#039; as default password)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can now copy files to &#039;&#039;/home/admin&#039;&#039; (e.g. from /var/log/apps/manager/...).&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can create a tar archive with all logs like this:&lt;br /&gt;
* cd /home/admin&lt;br /&gt;
* tar -cf - /var/log/* | xz -z - &amp;gt; log.tar.xz&lt;br /&gt;
** you may want to exclude coredumps (due to their size):&lt;br /&gt;
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - &amp;gt; log.tar.xz&lt;br /&gt;
* chown admin:admin /home/admin/log.tar.xz&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then copy the files to your local system, e.g. with WinSCP&amp;lt;br/&amp;gt;&lt;br /&gt;
* use &#039;&#039;SCP&#039;&#039; as protocol (NB: WebDAV is not supported on most of the directories on the App Platform )&lt;br /&gt;
* use the &#039;&#039;DNS&#039;&#039; name or IP address of your App Platform (not the PBX)&lt;br /&gt;
* use user &#039;&#039;admin&#039;&#039; and the appropriate password (&#039;&#039;ipapps&#039;&#039; by default)&lt;br /&gt;
* use &#039;&#039;/home/admin&#039;&#039; as start directory&lt;br /&gt;
* copy the needed files&lt;br /&gt;
&lt;br /&gt;
== App Platform disk space warning ==&lt;br /&gt;
&lt;br /&gt;
If the configured threshold is reached, all Apps are stopped inside the App Platform . You must then free disk space somehow.&lt;br /&gt;
&lt;br /&gt;
=== Find large instances ===&lt;br /&gt;
Click through your apps in the tree on the left side and take a look at the database size of each instance.&lt;br /&gt;
&lt;br /&gt;
=== Delete data inside an instance ===&lt;br /&gt;
It depends on the type of app if you can delete data or not. E.g. you can start the Files app and delete files inside this app.&amp;lt;br&amp;gt;&lt;br /&gt;
This won&#039;t reclaim disk space though due to the way how PostgreSQL databases work, so you need to follow this guide to reclaim the disk space:&lt;br /&gt;
&lt;br /&gt;
* start the corresponding App&lt;br /&gt;
* delete data inside the App&lt;br /&gt;
* stop the corresponding App again&lt;br /&gt;
* download a backup of the instance (backup button at the top), this backup contains the whole instance data, also the password of the instance&lt;br /&gt;
* delete this specific instance&lt;br /&gt;
* restore the downloaded backup (restore button at the top)&lt;br /&gt;
&lt;br /&gt;
 Depending on the hardware and the size of the instance, this process may take hours to complete!&lt;br /&gt;
&lt;br /&gt;
=== Resize the disk ===&lt;br /&gt;
The resizing of a disk is just possible for virtual machines, see [[#Resizing the disk of a Virtual machine|Resizing the disk of a Virtual machine]].&lt;br /&gt;
&lt;br /&gt;
=== Delete the whole instance ===&lt;br /&gt;
If there is no other possibility, you can delete the whole instance. Afterwards you recreate the instance with the same values and a new random password. Don&#039;t forget to set this password in the corresponding PBX App objects though!&lt;br /&gt;
&lt;br /&gt;
=== Restart the Apps or the App Platform ===&lt;br /&gt;
If you have enough disk space again, you must either restart the whole App Platform or you manually start all Apps again.&lt;br /&gt;
&lt;br /&gt;
== App Platform/Apps app not online anymore due to full disk ==&lt;br /&gt;
If the apps app is not online anymore and you can&#039;t access any apps anymore, try to login with an SSH client to see if your disk is full.&lt;br /&gt;
Login as admin and afterwards as root (su root).&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* issue &#039;&#039;&#039;df -h&#039;&#039;&#039; and see the disk usage of /dev/sda2, if this is 100%, your disk is too full&lt;br /&gt;
* stop the manager&lt;br /&gt;
** /etc/init.d/S92manager stop&lt;br /&gt;
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)&lt;br /&gt;
** echo &amp;quot;&amp;quot; &amp;gt; /mnt/sda2/empty_if_no_space&lt;br /&gt;
* delete log files to recover some space&lt;br /&gt;
** rm /var/log/apps/*/*&lt;br /&gt;
** rm /var/log/core_dumps/*/*&lt;br /&gt;
* restart the postgresql server (see the output if this worked or not)&lt;br /&gt;
** /etc/init.d/S50postgresql restart&lt;br /&gt;
* restart the manager&lt;br /&gt;
** /etc/init.d/S92manager restart&lt;br /&gt;
* wait until everything is online again&lt;br /&gt;
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it&lt;br /&gt;
** you may want to stop all app services first to prevent more writes to the database&lt;br /&gt;
** if not possible, you can delete this instance, but you&#039;ll loose all data from this instance then!&lt;br /&gt;
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space&lt;br /&gt;
** If this does not work you can create a backup from the database, delete the database and import the database again.&lt;br /&gt;
* free up at least 500 MB so that the manager can create the file again&lt;br /&gt;
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:&lt;br /&gt;
** rm /mnt/sda2/empty_if_no_space&lt;br /&gt;
** /etc/init.d/S92manager restart&lt;br /&gt;
** the manager restart automatically recreates the empty_if_no_space file if this file doesn&#039;t exist&lt;br /&gt;
&lt;br /&gt;
 Make sure, that you do &#039;&#039;&#039;not&#039;&#039;&#039; have backups configured to a local files instance while this files instance is not excluded from backups.&lt;br /&gt;
 An instance can be excluded from backups in the instance settings in the App Platform Manager.&lt;br /&gt;
&lt;br /&gt;
If all of this doesn&#039;t help, you can resize the file system on a VM:&lt;br /&gt;
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]&lt;br /&gt;
&lt;br /&gt;
== Resizing the disk of a Virtual machine ==&lt;br /&gt;
&lt;br /&gt;
 Do &#039;&#039;&#039;NOT&#039;&#039;&#039; resize if you&#039;re running an App Platform version higher than &#039;&#039;&#039;110000&#039;&#039;&#039; and lower than &#039;&#039;&#039;110027&#039;&#039;&#039; or your data will be lost!&lt;br /&gt;
 Please update your App Platform to version 110027 or higher before you start resizing your disk.&lt;br /&gt;
&lt;br /&gt;
* stop the VM&lt;br /&gt;
* expand the disk using your VM utilities&lt;br /&gt;
* start the VM and boot from the first boot entry &#039;&#039;&#039;rescue/setup&#039;&#039;&#039;&lt;br /&gt;
* login with &#039;&#039;&#039;root&#039;&#039;&#039; and &#039;&#039;&#039;iplinux&#039;&#039;&#039;&lt;br /&gt;
* execute this command: &#039;&#039;&#039;/home/root/install_step1.sh log.txt resize&#039;&#039;&#039;&lt;br /&gt;
* the VM reboots automatically after a successful resize&lt;br /&gt;
&lt;br /&gt;
== Shrink the physically size of PostgreSQL database files ==&lt;br /&gt;
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. &lt;br /&gt;
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.&lt;br /&gt;
&lt;br /&gt;
 You can also start this process through the instance settings as long as the App Platform Manager is still running.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important: You are operating on the Database, you have to make a Backup of your Database before you do this!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Login via SSH to the APPlatform with the &#039;&#039;admin&#039;&#039; User&lt;br /&gt;
 su root&lt;br /&gt;
 /etc/init.d/S92manager stop  # not always needed, but in case of database errors recommended, of course no app is online then&lt;br /&gt;
 sudo -u postgres reindexdb -a&lt;br /&gt;
 sudo -u postgres vacuumdb -a -f&lt;br /&gt;
 /etc/init.d/S92manager restart # just execute if the manager has been stopped above&lt;br /&gt;
&lt;br /&gt;
 sudo -u postgres reindexdb -d dbname # for a single database with dbname&lt;br /&gt;
 sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname&lt;br /&gt;
&lt;br /&gt;
Note: This may take some time and CDRs (or other data written to a DB) won&#039;t be received during this time. &lt;br /&gt;
&lt;br /&gt;
After the process you can check the free dispace via &amp;lt;code&amp;gt;df -h&amp;lt;/code&amp;gt;. You can check the claimed space from the database file with the command &amp;lt;code&amp;gt;du -sh /mnt/sda2/pgsql/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Change IP Addresses / DNS Names / System Name ==&lt;br /&gt;
&lt;br /&gt;
If you want to change the System Name or the DNS Name of the PBX and/or App Platform Platform you must change records manually &#039;&#039;&#039;in the described order&#039;&#039;&#039;!&lt;br /&gt;
You have to know the Admin password to directly Login to the App Platform .&lt;br /&gt;
&lt;br /&gt;
=== App Platform ===&lt;br /&gt;
; Settings - General&lt;br /&gt;
* &#039;&#039;Devices app URL&#039;&#039;&lt;br /&gt;
* &#039;&#039;App platform DNS name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; Settings - Alarms and Events&lt;br /&gt;
* &#039;&#039;URL&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; All Instances&lt;br /&gt;
* &#039;&#039;Domain&#039;&#039;&lt;br /&gt;
* &#039;&#039;Webserver path&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== PBX ===&lt;br /&gt;
Download the configuration and &#039;&#039;search/replace&#039;&#039; in the config file. Upload the config file and reboot.&lt;br /&gt;
&lt;br /&gt;
Manual:&lt;br /&gt;
* &#039;&#039;URL&#039;&#039; in all PBX Object (Apps, Voicemail ...)&lt;br /&gt;
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]&lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] &lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]&lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]&lt;br /&gt;
&lt;br /&gt;
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]&lt;br /&gt;
&lt;br /&gt;
=== Additional Devices / Steps ===&lt;br /&gt;
* &#039;&#039;Devices Registration URL&#039;&#039;&lt;br /&gt;
** There is no automatism to change the URL on all devices in your setup.&lt;br /&gt;
** If you have the option to use DHCP, you can temporarily overwrite the [[{{NAMESPACE}}:Services/Update|Update URL]] and execute a [[{{NAMESPACE}}:Concept_Update_Server|custom update script]] to change the &#039;&#039;Device Registration URL&#039;&#039;&lt;br /&gt;
* &#039;&#039;Alarm server&#039;&#039;&lt;br /&gt;
* Reverse Proxy configuration&lt;br /&gt;
* Change &#039;&#039;Domain Name&#039;&#039; in Devices if you have also changed the system name&lt;br /&gt;
&lt;br /&gt;
== How to recover from a broken File System ==&lt;br /&gt;
Sometimes you may find messages in the &#039;&#039;messages&#039;&#039; log file (in &#039;&#039;var/log&#039;&#039;) like&lt;br /&gt;
&lt;br /&gt;
 initial error at 1500329378: ext4_journal_start_sb:328&lt;br /&gt;
 last error at 1500329378: ext4_journal_start_sb:328&lt;br /&gt;
&lt;br /&gt;
Or you get events like &amp;quot;Broken file system&amp;quot; from your App Platform .&lt;br /&gt;
&lt;br /&gt;
This indicates a file system failure on the Linux Installation.&lt;br /&gt;
&lt;br /&gt;
When the Linux file system is broken, you can try to repair it using some command line Linux tools.&lt;br /&gt;
&lt;br /&gt;
If this doesn&#039;t fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.&lt;br /&gt;
&lt;br /&gt;
=== Gateway ===&lt;br /&gt;
&lt;br /&gt;
* Open the WebGUI of the gateway running your LAP and proceed to &#039;&#039;App Platform/General&#039;&#039;&lt;br /&gt;
** terminate Linux (&#039;&#039;Status/Stop&#039;&#039;)&lt;br /&gt;
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0&lt;br /&gt;
** modify the Initrd file to ramdisk.ext2.xz&lt;br /&gt;
** modify the ramdisk size to 100000&lt;br /&gt;
** start Linux again&lt;br /&gt;
:: This will run Linux on another (hopefully sane) partition.&lt;br /&gt;
&lt;br /&gt;
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP&#039;s command line (user: root, pw: iplinux)&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda2&amp;lt;/code&amp;gt;&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
:: this should fix any issue on the file system&lt;br /&gt;
&lt;br /&gt;
* go back to the WebGUI of the gateway running your LAP and proceed to &#039;&#039;App Platform/General&#039;&#039;&lt;br /&gt;
** terminate Linux (&#039;&#039;Status/Stop&#039;&#039;)&lt;br /&gt;
** modify the &#039;&#039;Kernel command line&#039;&#039; from &#039;&#039;root=/dev/ram0&#039;&#039; to &amp;lt;code&amp;gt;root=/dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
** clear the Initrd file field&lt;br /&gt;
** clear the ramdisk size field&lt;br /&gt;
** start Linux again&lt;br /&gt;
:: This will run Linux on the original partition.&lt;br /&gt;
&lt;br /&gt;
=== VM ===&lt;br /&gt;
&lt;br /&gt;
Restart the VM and select the first entry in the boot menu from grub.&lt;br /&gt;
&lt;br /&gt;
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP&#039;s command line.  (user: root, pw: iplinux)&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda2&amp;lt;/code&amp;gt;&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
:: this should fix any issue on the file system&lt;br /&gt;
* Reboot your VM&lt;br /&gt;
[[Category:Concept]]&lt;br /&gt;
&lt;br /&gt;
== How to create a memory dump of a running process ==&lt;br /&gt;
&lt;br /&gt;
Sometimes it&#039;s usefull to have a memory dump of a running process to investigate certain issues.&lt;br /&gt;
&lt;br /&gt;
* login with SSH and become root&lt;br /&gt;
* find out the PID of the relevant process, e.g. with &#039;&#039;ps aux | grep /apps/manager/manager | grep -v grep&#039;&#039;&lt;br /&gt;
* gdb --pid PID -ex gcore --batch&lt;br /&gt;
* this creates a core file core.PID&lt;br /&gt;
* download this core file with WinSCP or similar tools&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r2:Concept_App_Platform&amp;diff=67031</id>
		<title>Reference13r2:Concept App Platform</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r2:Concept_App_Platform&amp;diff=67031"/>
		<updated>2023-04-13T09:06:13Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Reboot after an image update hangs (ARM gateway) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= General =&lt;br /&gt;
* V13 uses [https://buildroot.org/ buildroot]&lt;br /&gt;
* this is an own (innovaphone) collection of packages&lt;br /&gt;
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* V13 or up&lt;br /&gt;
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) &lt;br /&gt;
* Gateway (arm64): IPx13 (with m2 SSD)&lt;br /&gt;
* Virtual (x86_64)&lt;br /&gt;
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)&lt;br /&gt;
** VMWare&lt;br /&gt;
&lt;br /&gt;
== Default credentials ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;During INSTALL, the default passwords are replaced with the global Admin PW!&#039;&#039;&#039;&lt;br /&gt;
* SSH-Login with &#039;&#039;&#039;admin&#039;&#039;&#039; and &#039;&#039;&#039;ipapps&#039;&#039;&#039;&lt;br /&gt;
* root login with &#039;&#039;&#039;root&#039;&#039;&#039; and &#039;&#039;&#039;iplinux&#039;&#039;&#039; (the root login is not directly possible, you have to login as admin first and use the command &#039;&#039;su root&#039;&#039;)&lt;br /&gt;
* manager App (web login) &#039;&#039;&#039;pwd&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= App Platform - arm/arm64 (Gateway)=&lt;br /&gt;
&lt;br /&gt;
* The installation image has a size of ~50MB. During installation, the following partitions are created:&lt;br /&gt;
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)&lt;br /&gt;
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)&lt;br /&gt;
** /dev/sda3 ext4: 500MB (contains the rootfs)&lt;br /&gt;
** /dev/sda4 swap: 512MB&lt;br /&gt;
&lt;br /&gt;
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:&lt;br /&gt;
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10&lt;br /&gt;
* the available RAM for the AP (as specified in column &#039;&#039;RAM for LAP (GB) out of RAM&#039;&#039; in chapter &#039;&#039;Technical data and recommended number of users supported&#039;&#039; of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))&lt;br /&gt;
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings&lt;br /&gt;
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10&lt;br /&gt;
&lt;br /&gt;
While it is hard to predict the performance of the AP in a specific scenario, we see that in a real life environment an AP running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users.  Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).&lt;br /&gt;
&lt;br /&gt;
= App Platform - x86-64 (Virtual Machine 64bit) =&lt;br /&gt;
&lt;br /&gt;
* The default disk size is 16GB. It should be increased &#039;&#039;&#039;before&#039;&#039;&#039; the first start if needed!&lt;br /&gt;
&lt;br /&gt;
* Multiple CPUs are supported, default is one CPU&lt;br /&gt;
&lt;br /&gt;
* default RAM: 512MB&lt;br /&gt;
* static IP address, DNS, Gateway can be configured with the command &#039;&#039;&#039;setip&#039;&#039;&#039; on the console. Run &#039;&#039;&#039;setip --help&#039;&#039;&#039; to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) &lt;br /&gt;
* If you have permission problems change to su user (Password is iplinux or your new admin password)  &lt;br /&gt;
* To figure out your ip address you can use the command: &#039;&#039;ip address&#039;&#039; on the console.&lt;br /&gt;
* &#039;&#039;&#039;loadkeys de&#039;&#039;&#039; can be used to change to german keyboard layout (etc.)&lt;br /&gt;
&lt;br /&gt;
* partitions:&lt;br /&gt;
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)&lt;br /&gt;
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)&lt;br /&gt;
** /dev/sda3 ext4: 500MB (contains the rootfs)&lt;br /&gt;
** /dev/sda4 swap: 512MB&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
==ARM Gateway==&lt;br /&gt;
&lt;br /&gt;
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn&#039;t be blocked by any firewall.)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You can also install it manually:&lt;br /&gt;
* Open App Platform -&amp;gt; General and &#039;&#039;&#039;Enable Linux Support&#039;&#039;&#039;. Restart the gateway.&lt;br /&gt;
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.&lt;br /&gt;
* Open App Platform -&amp;gt; IP and configure the IP settings of the App Platform. Restart the Gateway.&lt;br /&gt;
* Open App Platform -&amp;gt; Installation and select the given version or enter an own path to the &#039;&#039;app-platform-armel.img&#039;&#039; image file.&lt;br /&gt;
* The installation runs without any further required step.&lt;br /&gt;
&lt;br /&gt;
==ARM64 Gateway==&lt;br /&gt;
&lt;br /&gt;
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn&#039;t be blocked by any firewall.)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You can also install it manually:&lt;br /&gt;
* Open App Platform -&amp;gt; General and &#039;&#039;&#039;Enable Linux Support&#039;&#039;&#039;. Restart the gateway.&lt;br /&gt;
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.&lt;br /&gt;
* Open App Platform -&amp;gt; IP and configure the IP settings of the App Platform. Restart the Gateway.&lt;br /&gt;
* Open App Platform -&amp;gt; Installation and select the given version or enter an own path to the &#039;&#039;app-platform-arm64.img&#039;&#039; image file.&lt;br /&gt;
* The installation runs without any further required step.&lt;br /&gt;
&lt;br /&gt;
==Virtual machine==&lt;br /&gt;
&lt;br /&gt;
* Import the image into your server environment.&lt;br /&gt;
* Edit the disk size, if needed.&lt;br /&gt;
* Start the machine and wait until it reboots and starts again.&lt;br /&gt;
* Note: If you need to access an IP addresses available through a VPN connection from from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]&lt;br /&gt;
&lt;br /&gt;
== Backup of the Apps ==&lt;br /&gt;
&lt;br /&gt;
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.&amp;lt;br&amp;gt;&lt;br /&gt;
There are no other files which need to be backuped.&amp;lt;br&amp;gt;&lt;br /&gt;
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
An alternate way is to use a command file which is similar to the command files from the firmware.&lt;br /&gt;
&lt;br /&gt;
===Commands===&lt;br /&gt;
* &#039;&#039;&#039;times&#039;&#039;&#039; 0,12 # backup only at 0 or 12 o&#039;clock&lt;br /&gt;
* &#039;&#039;&#039;backup-instances&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump PUT&lt;br /&gt;
** PUT and POST are supported, all instances including the manager itself are saved&lt;br /&gt;
* &#039;&#039;&#039;backup-instance&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT&lt;br /&gt;
** backup a single instance with instance name and instance domain&lt;br /&gt;
* &#039;&#039;&#039;backup-manager&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump&lt;br /&gt;
&lt;br /&gt;
===Hash parameters===&lt;br /&gt;
* #L App Platform label (neu), e.g. 10024&lt;br /&gt;
* #A App label (neu), e.g. 130004&lt;br /&gt;
* #I instance name (neu), e.g. reporting1&lt;br /&gt;
* #D instance domain (neu), e.g. innovaphone.com&lt;br /&gt;
* #m MAC address of the LAP, e.g. 00ab11eeff&lt;br /&gt;
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130&lt;br /&gt;
* #bn rolling backup index&lt;br /&gt;
* ## escapes a hash mark&lt;br /&gt;
&lt;br /&gt;
= App Platform Infrastructure and Concept =&lt;br /&gt;
== Webserver ==&lt;br /&gt;
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.&lt;br /&gt;
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.&lt;br /&gt;
&lt;br /&gt;
=== Import Custom SSL Certificate ===&lt;br /&gt;
You have to upload a PEM Certificate with the following chain structure and without password encoding.&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (certificate: your_domain_name.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (Intermediate certificate: DigiCertCA.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (Root certificate: TrustedRoot.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN RSA PRIVATE KEY-----&lt;br /&gt;
 (certificate Key: your_domain_name.key)&lt;br /&gt;
 -----END RSA PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
=== Known issues ===&lt;br /&gt;
*The app platform webserver can use only the default http/https ports 80/443.&lt;br /&gt;
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.&amp;lt;br /&amp;gt;&lt;br /&gt;
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:&lt;br /&gt;
**&#039;&#039;psql -d manager -c &amp;quot;DELETE FROM config WHERE name=&#039;webserverCertificate&#039;&amp;quot;&#039;&#039;&lt;br /&gt;
**&#039;&#039;/etc/init.d/S92manager restart&#039;&#039;&lt;br /&gt;
*The app platform webserver interprets URLs case-sensitive. In other words, &amp;lt;nowiki&amp;gt;http://&amp;lt;addr&amp;gt;/file.txt&amp;lt;/nowiki&amp;gt; is not the same as &amp;lt;nowiki&amp;gt;http://&amp;lt;addr&amp;gt;/FILE.TXT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Database ==&lt;br /&gt;
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.&lt;br /&gt;
&lt;br /&gt;
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.&lt;br /&gt;
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.&lt;br /&gt;
&lt;br /&gt;
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file &#039;&#039;/mnt/sda2/pgsql/pg_hba.conf&#039;&#039;.&lt;br /&gt;
After editing pg_hba.conf, the database-service has to be restarted with the command &amp;lt;code&amp;gt;/etc/init.d/S50postgresql restart&amp;lt;/code&amp;gt;&lt;br /&gt;
(Please think about it before you do it, because a better way is to create your own local app with local database access.)&lt;br /&gt;
&lt;br /&gt;
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/11/auth-pg-hba-conf.html&lt;br /&gt;
&lt;br /&gt;
 Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf &lt;br /&gt;
 and that you may break your database server if you do not know exactly what you do!&lt;br /&gt;
&lt;br /&gt;
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:&lt;br /&gt;
* stop the manager&lt;br /&gt;
** &amp;lt;code&amp;gt;/etc/init.d/S92manager stop&amp;lt;/code&amp;gt;&lt;br /&gt;
* restart the database-service (maybe not really necessary, but makes a good feeling)&lt;br /&gt;
**&amp;lt;code&amp;gt;/etc/init.d/S50postgresql restart&amp;lt;/code&amp;gt;&lt;br /&gt;
* start the manager&lt;br /&gt;
** &amp;lt;code&amp;gt;/etc/init.d/S92manager start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== App Platform Manager ==&lt;br /&gt;
The App Platform Manager is the central component of the App Platform. It does the following:&lt;br /&gt;
* Installing app services by downloading the binaries from an app store.&lt;br /&gt;
* Running and monitoring app services. If an app service crashes it is restarted, automatically.&lt;br /&gt;
* Management of app instances and providing them with the environment they need:&lt;br /&gt;
** A database&lt;br /&gt;
** A webserver path&lt;br /&gt;
** A password for authentication&lt;br /&gt;
* Backup and restore of app instances.&lt;br /&gt;
* Collecting debug information like tracing and crash dumps.&lt;br /&gt;
* System monitoring (CPU usage, memory usage, etc).&lt;br /&gt;
&lt;br /&gt;
== App Services ==&lt;br /&gt;
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.&lt;br /&gt;
&lt;br /&gt;
== App Instances ==&lt;br /&gt;
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.&lt;br /&gt;
&lt;br /&gt;
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.&amp;lt;br&amp;gt;&lt;br /&gt;
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.&amp;lt;br&amp;gt;&lt;br /&gt;
The database password must be just known to the manager and not outside of the App Platform.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Database name&#039;&#039; and &#039;&#039;Database user&#039;&#039; are both limited to a length of 63 characters.  By default, the App Manager would create &#039;&#039;&amp;lt;domain&amp;gt;&#039;&#039;_&#039;&#039;&amp;lt;instance-name&amp;gt;&#039;&#039; as value for both.  This is why it is recommended to use instance names so that length(name) + length(domain) is less than 63 characters.  However, if this is not possible, you can manually shorten the suggested values (both must still be unique on your App Platform).&lt;br /&gt;
&lt;br /&gt;
=== Cleanup database ===&lt;br /&gt;
You can cleanup the instance database inside the instance settings. This starts the vacuumdb process for the instance database which frees disk space of deleted rows.&lt;br /&gt;
 Note that this process locks the database and that sufficient disk space is needed to complete it!&lt;br /&gt;
&lt;br /&gt;
=== External database host ===&lt;br /&gt;
You can optionally configure an external database host, if the database shall be hosted on an external host.&amp;lt;br/&amp;gt;&lt;br /&gt;
Note that the AP Manager still creates a local database, which is then not used as long as the external host is configured.&lt;br /&gt;
&lt;br /&gt;
What are external databases useful for?:&lt;br /&gt;
* User data is too large (files are stored as BLOB in the database)&lt;br /&gt;
* Other (non-innovaphone) database servers are to be used due to other regulations&lt;br /&gt;
* There is already an external database cluster with its own backup/restore processes which should be used&lt;br /&gt;
* More performance is required (please note that a local UNIX socket provides much faster results than a remote database server). Depending on the app and the task of the app, it can still be useful to use a separate server if it is faster.&lt;br /&gt;
&lt;br /&gt;
==== Supported database types ====&lt;br /&gt;
In principle, &#039;&#039;PostgreSQL&#039;&#039; and &#039;&#039;MySQL&#039;&#039; are supported. However, please note that the respective app must be designed for the target database server type. If an app has been developed for PostgreSQL, it cannot be operated on a MySQL server.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note:&#039;&#039;&#039; All innovaphone apps are developed exclusively as PostgreSQL apps.&lt;br /&gt;
&lt;br /&gt;
MySQL therefore only makes sense if own apps are developed and MySQL or certain MySQL features are to be used. For such apps, it is very important to deactivate the automatic Application Platform APP-Backup.&lt;br /&gt;
The database backup process of the AP uses PostgreSQL backup commands, which is why the backup would fail, so the app must be excluded from the backup, and you must take care of the backup yourself.&lt;br /&gt;
&lt;br /&gt;
==== Database creation ====&lt;br /&gt;
If you use an external database, you have to create the database itself.&lt;br /&gt;
The AP Manager itself creates a PostgreSQL database like this (you may respect this on your database host to be compatible with the database implementation inside the Apps):&lt;br /&gt;
* CREATE DATABASE &amp;quot;dbname&amp;quot; ENCODING &#039;UTF8&#039;;&lt;br /&gt;
* CREATE USER &amp;quot;dbuser&amp;quot;;&lt;br /&gt;
* ALTER USER &amp;quot;dbuser&amp;quot; WITH PASSWORD &#039;dbpassword&#039;;&lt;br /&gt;
* GRANT ALL PRIVILEGES ON DATABASE &amp;quot;dbname&amp;quot; TO &amp;quot;dbuser&amp;quot;;&lt;br /&gt;
* ALTER DATABASE &amp;quot;dbname&amp;quot; OWNER TO &amp;quot;dbuser&amp;quot;;&lt;br /&gt;
* REVOKE CONNECT ON DATABASE &amp;quot;dbname&amp;quot; FROM public;&lt;br /&gt;
&lt;br /&gt;
==== Database connection ====&lt;br /&gt;
There are different possibilities to specify the host. You can use a DNS-Name, IPv4 or IPv6. A port can be optionally added with a colon.&lt;br /&gt;
&lt;br /&gt;
Our PostgreSQL implementation sets sslmode=prefer, so SSL is used by default if enabled on the server.&lt;br /&gt;
&lt;br /&gt;
==== Backup/Restore ====&lt;br /&gt;
External databases are still backuped as normal, but you can&#039;t restore such a database with the AP Manager on the external host! You must restore such a dump manually on your database host.&lt;br /&gt;
&lt;br /&gt;
==== Database redundancy ====&lt;br /&gt;
In principle, it is possible to create redundancies for failure scenarios through this function.&lt;br /&gt;
&lt;br /&gt;
However, there are different scenarios that need to be evaluated on a case-by-case basis:&lt;br /&gt;
&lt;br /&gt;
* One database, multiple APs (primary online / secondary &#039;&#039;&#039;offline&#039;&#039;&#039;) where multiple apps access the same database.&lt;br /&gt;
** This mode of operation is legal as long as you can really ensure that only one AP is active at a time.&lt;br /&gt;
&lt;br /&gt;
* One database, multiple APs (primary online / secondary &#039;&#039;&#039;online&#039;&#039;&#039;) with multiple apps accessing the same database.&lt;br /&gt;
** This operating mode cannot be used for innovaphone apps, as the app itself would have to be developed for such a mode, which it is not.&lt;br /&gt;
&lt;br /&gt;
However, we advise great caution here! The use of the same databases from different nodes may only be used if you can ensure that the databases or runtime environments of apps cannot get into a &#039;&#039;split-brain&#039;&#039; mode.&lt;br /&gt;
&lt;br /&gt;
== Relationship between app instances and app objects in the PBX ==&lt;br /&gt;
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:&lt;br /&gt;
* URL&lt;br /&gt;
* Password&lt;br /&gt;
The password is used by the PBX for authenticating itself, users and services against the app instance.&lt;br /&gt;
&lt;br /&gt;
Some apps need a websocket connection with the PBX. When &amp;quot;websocket&amp;quot; is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.&lt;br /&gt;
&lt;br /&gt;
=== Supported scenarios ===&lt;br /&gt;
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have&lt;br /&gt;
* One AP for one customer&lt;br /&gt;
* One AP for many customers&lt;br /&gt;
* Many APs for one customer&lt;br /&gt;
* Many APs for many customers&lt;br /&gt;
&lt;br /&gt;
Attention: The V13 installer can only configure the scenario &amp;quot;&#039;&#039;One AP for one customer&#039;&#039;&amp;quot;. If you want to have a different scenario, you have to configure it manually.&lt;br /&gt;
&lt;br /&gt;
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.&lt;br /&gt;
&lt;br /&gt;
=== Restrictions ===&lt;br /&gt;
Currently we don&#039;t have redundancy for app instances or APs.&lt;br /&gt;
&lt;br /&gt;
== Update of the App Platform itself ==&lt;br /&gt;
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can update the used build inside the Manager App by using the &#039;&#039;&#039;Update&#039;&#039;&#039; button at the top.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!&lt;br /&gt;
&lt;br /&gt;
== App services and multi-threading ==&lt;br /&gt;
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+&#039;&#039;n&#039;&#039;  threads (where &#039;&#039;n&#039;&#039; is the number of instances).  All communication between app service instances and their clients must pass the single-threaded web server.  On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + &#039;&#039;m&#039;&#039; + &#039;&#039;m&#039;&#039; * &#039;&#039;n&#039;&#039; (with &#039;&#039;m&#039;&#039; being the number of Apps and &#039;&#039;n&#039;&#039; the number of instances per App) threads can be utilized.&lt;br /&gt;
&lt;br /&gt;
= AP Manager settings =&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
* &#039;&#039;Enable Developer mode&#039;&#039;: in developer mode, apps can be manually uploaded without an App Store&lt;br /&gt;
* &#039;&#039;Disable App security&#039;&#039;: each App has an own unix user and if this flag is set, the user can login with SSH for debugging&lt;br /&gt;
* &#039;&#039;App Store URL&#039;&#039;: the URL to the App Store where Apps are searched and also an update of the AP image itself&lt;br /&gt;
* &#039;&#039;Devices app URL&#039;&#039;: the URL to the Devices App to manage the AP through Devices&lt;br /&gt;
* &#039;&#039;Devices app URL 2&#039;&#039;: don&#039;t use!&lt;br /&gt;
* &#039;&#039;App Platform DNS name&#039;&#039;: currently not used&lt;br /&gt;
* &#039;&#039;NTP server 1/2&#039;&#039;: NTP servers for this AP (in addition to NTP servers retrieved by DHCP)&lt;br /&gt;
* &#039;&#039;Timezone string&#039;&#039;: &lt;br /&gt;
* &#039;&#039;DNS server 1/2&#039;&#039;: DNS servers for this AP (in addition to DNS servers retrieved by DHCP)&lt;br /&gt;
* &#039;&#039;Database optimization time&#039;&#039;: The database optimization process will be started at this hour (local time), with a random offset of up to 7 hours&lt;br /&gt;
* &#039;&#039;Command file&#039;&#039;: obsolete, use the Devices App for backups!&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
* &#039;&#039;Webserver certificate&#039;&#039;: upload a webserver certificate in PEM format&lt;br /&gt;
* &#039;&#039;AP Manager password&#039;&#039;: the password to the web interface of the AP Manager (normally set through Devices)&lt;br /&gt;
* &#039;&#039;Linux root user&#039;&#039;: password of the root user (normally set through Devices)&lt;br /&gt;
* &#039;&#039;Linux admin user&#039;&#039;: password of the admin user (normally set through Devices)&lt;br /&gt;
&lt;br /&gt;
== Alarms and events ==&lt;br /&gt;
* &#039;&#039;URL&#039;&#039;: URL to the Events app&lt;br /&gt;
* &#039;&#039;Username/Password&#039;&#039;: HTTP credentials of the Events app&lt;br /&gt;
* &#039;&#039;Email address&#039;&#039;: an email address which will get emails on full disk alarms/warnings&lt;br /&gt;
* &#039;&#039;Threshold&#039;&#039;: All Apps will be stopped and an hourly email sent on reaching this threshold. An alarm is generated 10% before reaching this threshold and an email is sent every 24 hours.&lt;br /&gt;
&lt;br /&gt;
== SMTP ==&lt;br /&gt;
SMTP server settings for sending emails from within the AP Manager.&lt;br /&gt;
&lt;br /&gt;
== Registered Access Domains ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Known Issues =&lt;br /&gt;
&lt;br /&gt;
== Reboot after an image update hangs (ARM gateway) ==&lt;br /&gt;
&lt;br /&gt;
If it happens, that the App Platform doesn&#039;t recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -&amp;gt; General.&amp;lt;br&amp;gt;&lt;br /&gt;
If &#039;&#039;&#039;Kernel command line&#039;&#039;&#039; is set to &#039;&#039;&#039;/dev/ram0&#039;&#039;&#039;, the App Platform booted the ramdisk.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Try to fetch the upgrade log file:&lt;br /&gt;
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If this doesn&#039;t work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;cat /apps/install_step1.log&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If this file contains &#039;&#039;&#039;finished&#039;&#039;&#039; at the end, you can reconfigure the settings under App Platform -&amp;gt; General:&amp;lt;br&amp;gt;&lt;br /&gt;
* press &#039;&#039;&#039;Stop&#039;&#039;&#039;&lt;br /&gt;
* Initrd file: empty&lt;br /&gt;
* Kernel command line: &#039;&#039;&#039;root=/dev/sda3&#039;&#039;&#039;&lt;br /&gt;
* Ramdisk size: empty&lt;br /&gt;
* press &#039;&#039;&#039;Start&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The App Platform should boot and run the already updated image.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;color: red; font-size:150%;&amp;quot;&amp;gt;---WARNING---&lt;br /&gt;
 If the file doesn&#039;t contain &amp;quot;finished&amp;quot; at the end, you may still need to wait, as an upgrade may take some time!&lt;br /&gt;
 Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won&#039;t run!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reboot after an image update doesn&#039;t start as update is already running ==&lt;br /&gt;
&lt;br /&gt;
If it happens, that the AP doesn&#039;t want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -&amp;gt; General.&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Shutdown&#039;&#039;&#039; the AP and &#039;&#039;&#039;Stop&#039;&#039;&#039; it.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Kernel command line&#039;&#039;&#039; to &#039;&#039;&#039;/dev/ram0&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Initrd file&#039;&#039;&#039; to &#039;&#039;&#039;ramdisk.ext2.xz&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Ramdisk size&#039;&#039;&#039; to &#039;&#039;&#039;100000&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Start&#039;&#039;&#039; the AP now.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The AP now either applies the image update or it reboots into the old image. Try the image update afterwards again.&lt;br /&gt;
&lt;br /&gt;
== Webserver doesn&#039;t respond after an image update ==&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the AP Manager from starting correctly:&lt;br /&gt;
* su root (become root)&lt;br /&gt;
* rm -f /mnt/sda2/log/core_dumps/*/*&lt;br /&gt;
* /etc/init.d/S92manager restart&lt;br /&gt;
&lt;br /&gt;
Check if you can now reach the AP again.&lt;br /&gt;
&lt;br /&gt;
= Tracing =&lt;br /&gt;
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.&amp;lt;br&amp;gt;&lt;br /&gt;
Each App Intance has its own trace flags. The following trace flags can be set:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Alarm client: used by the manager to send alarms to an alarm server&lt;br /&gt;
* App: logs from the App Service itself&lt;br /&gt;
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)&lt;br /&gt;
* AppSharing: just native clients&lt;br /&gt;
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server&lt;br /&gt;
* Audio: just native clients&lt;br /&gt;
* Browser: just native clients&lt;br /&gt;
* Command: the command interface is used to execute shell commands, e.g. used by the manager App&lt;br /&gt;
* Config: logs config changes of an App&lt;br /&gt;
* Database: database logs&lt;br /&gt;
* DB files: database file logs&lt;br /&gt;
* DNS: DNS request logging&lt;br /&gt;
* DTLS: just native clients, DTLS request logging&lt;br /&gt;
* Ethernet: interface to get ethernet adapater infos, just manager App&lt;br /&gt;
* File: logs for file system access (synchronous), e.g. manager App&lt;br /&gt;
* Files: logs for file system access (asynchronous)&lt;br /&gt;
* HTTP client: http client logs&lt;br /&gt;
* HTTP file: logs for static HTTP files&lt;br /&gt;
* ICE: just native clients&lt;br /&gt;
* LDS: local domain sockets &lt;br /&gt;
* Media: just native clients&lt;br /&gt;
* Media channel: just native clients&lt;br /&gt;
* Process: IProcess interface logs which is used for spawning, killing processes etc.&lt;br /&gt;
* SMTP: SMTP client logs&lt;br /&gt;
* TCP: TCP logs&lt;br /&gt;
* Time: ITime interface logs&lt;br /&gt;
* TLS: TLS logs&lt;br /&gt;
* TURN: just native clients&lt;br /&gt;
* UDP: UDP logs&lt;br /&gt;
* Video: just native clients&lt;br /&gt;
* WebSocket client: logs outgoing websocket connections&lt;br /&gt;
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App&lt;br /&gt;
* WebDAV service: logs WebDAV requests to the App&lt;br /&gt;
* Webserver: enables webserver specific logs&lt;br /&gt;
&lt;br /&gt;
== RPCAP ==&lt;br /&gt;
&lt;br /&gt;
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.&amp;lt;br&amp;gt;&lt;br /&gt;
You can add the interface in wireshark with the string:&lt;br /&gt;
 rpcap://&amp;lt;APP-Platform-IP&amp;gt;/eth0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please don&#039;t forget to disable RPCAP after your testing!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= How-Tos =&lt;br /&gt;
&lt;br /&gt;
== How to retrieve files from the AP ==&lt;br /&gt;
To retrieve files from the AP which can not be retrieved via the AP manager UI, you can connect to the AP using the SCP protocol on port 22.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
First copy files to /home/admin as root with Putty or another SSH client:&lt;br /&gt;
* use the &#039;&#039;DNS&#039;&#039; name or IP address of your AP (not the PBX)&lt;br /&gt;
* use user &#039;&#039;admin&#039;&#039; and the appropriate password (&#039;&#039;ipapps&#039;&#039; by default)&lt;br /&gt;
* use &#039;&#039;su root&#039;&#039; to be root (&#039;&#039;iplinux&#039;&#039; as default password)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can now copy files to &#039;&#039;/home/admin&#039;&#039; (e.g. from /var/log/apps/manager/...).&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can create a tar archive with all logs like this:&lt;br /&gt;
* cd /home/admin&lt;br /&gt;
* tar -cf - /var/log/* | xz -z - &amp;gt; log.tar.xz&lt;br /&gt;
** you may want to exclude coredumps (due to their size):&lt;br /&gt;
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - &amp;gt; log.tar.xz&lt;br /&gt;
* chown admin:admin /home/admin/log.tar.xz&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then copy the files to your local system, e.g. with WinSCP&amp;lt;br/&amp;gt;&lt;br /&gt;
* use &#039;&#039;SCP&#039;&#039; as protocol (NB: WebDAV is not supported on most of the directories on the AP)&lt;br /&gt;
* use the &#039;&#039;DNS&#039;&#039; name or IP address of your AP (not the PBX)&lt;br /&gt;
* use user &#039;&#039;admin&#039;&#039; and the appropriate password (&#039;&#039;ipapps&#039;&#039; by default)&lt;br /&gt;
* use &#039;&#039;/home/admin&#039;&#039; as start directory&lt;br /&gt;
* copy the needed files&lt;br /&gt;
&lt;br /&gt;
== App Platform disk space warning ==&lt;br /&gt;
&lt;br /&gt;
If the configured threshold is reached, all Apps are stopped inside the AP. You must then free disk space somehow.&lt;br /&gt;
&lt;br /&gt;
=== Find large instances ===&lt;br /&gt;
Click through your apps in the tree on the left side and take a look at the database size of each instance.&lt;br /&gt;
&lt;br /&gt;
=== Delete data inside an instance ===&lt;br /&gt;
It depends on the type of app if you can delete data or not. E.g. you can start the Files app and delete files inside this app.&amp;lt;br&amp;gt;&lt;br /&gt;
This won&#039;t reclaim disk space though due to the way how PostgreSQL databases work, so you need to follow this guide to reclaim the disk space:&lt;br /&gt;
&lt;br /&gt;
* start the corresponding App&lt;br /&gt;
* delete data inside the App&lt;br /&gt;
* stop the corresponding App again&lt;br /&gt;
* download a backup of the instance (backup button at the top), this backup contains the whole instance data, also the password of the instance&lt;br /&gt;
* delete this specific instance&lt;br /&gt;
* restore the downloaded backup (restore button at the top)&lt;br /&gt;
&lt;br /&gt;
 Depending on the hardware and the size of the instance, this process may take hours to complete!&lt;br /&gt;
&lt;br /&gt;
=== Resize the disk ===&lt;br /&gt;
The resizing of a disk is just possible for virtual machines, see [[#Resizing the disk of a Virtual machine|Resizing the disk of a Virtual machine]].&lt;br /&gt;
&lt;br /&gt;
=== Delete the whole instance ===&lt;br /&gt;
If there is no other possibility, you can delete the whole instance. Afterwards you recreate the instance with the same values and a new random password. Don&#039;t forget to set this password in the corresponding PBX App objects though!&lt;br /&gt;
&lt;br /&gt;
=== Restart the Apps or the AP ===&lt;br /&gt;
If you have enough disk space again, you must either restart the whole App Platform or you manually start all Apps again.&lt;br /&gt;
&lt;br /&gt;
== App Platform/Apps app not online anymore due to full disk ==&lt;br /&gt;
If the apps app is not online anymore and you can&#039;t access any apps anymore, try to login with an SSH client to see if your disk is full.&lt;br /&gt;
Login as admin and afterwards as root (su root).&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* issue &#039;&#039;&#039;df -h&#039;&#039;&#039; and see the disk usage of /dev/sda2, if this is 100%, your disk is too full&lt;br /&gt;
* stop the manager&lt;br /&gt;
** /etc/init.d/S92manager stop&lt;br /&gt;
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)&lt;br /&gt;
** echo &amp;quot;&amp;quot; &amp;gt; /mnt/sda2/empty_if_no_space&lt;br /&gt;
* delete log files to recover some space&lt;br /&gt;
** rm /var/log/apps/*/*&lt;br /&gt;
** rm /var/log/core_dumps/*/*&lt;br /&gt;
* restart the postgresql server (see the output if this worked or not)&lt;br /&gt;
** /etc/init.d/S50postgresql restart&lt;br /&gt;
* restart the manager&lt;br /&gt;
** /etc/init.d/S92manager restart&lt;br /&gt;
* wait until everything is online again&lt;br /&gt;
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it&lt;br /&gt;
** you may want to stop all app services first to prevent more writes to the database&lt;br /&gt;
** if not possible, you can delete this instance, but you&#039;ll loose all data from this instance then!&lt;br /&gt;
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space&lt;br /&gt;
** If this does not work you can create a backup from the database, delete the database and import the database again.&lt;br /&gt;
* free up at least 500 MB so that the manager can create the file again&lt;br /&gt;
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:&lt;br /&gt;
** rm /mnt/sda2/empty_if_no_space&lt;br /&gt;
** /etc/init.d/S92manager restart&lt;br /&gt;
** the manager restart automatically recreates the empty_if_no_space file if this file doesn&#039;t exist&lt;br /&gt;
&lt;br /&gt;
 Make sure, that you do &#039;&#039;&#039;not&#039;&#039;&#039; have backups configured to a local files instance while this files instance is not excluded from backups.&lt;br /&gt;
 An instance can be excluded from backups in the instance settings in the AP Manager.&lt;br /&gt;
&lt;br /&gt;
If all of this doesn&#039;t help, you can resize the file system on a VM:&lt;br /&gt;
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]&lt;br /&gt;
&lt;br /&gt;
== Resizing the disk of a Virtual machine ==&lt;br /&gt;
&lt;br /&gt;
 Do &#039;&#039;&#039;NOT&#039;&#039;&#039; resize if you&#039;re running an App Platform version higher than &#039;&#039;&#039;110000&#039;&#039;&#039; and lower than &#039;&#039;&#039;110027&#039;&#039;&#039; or your data will be lost!&lt;br /&gt;
 Please update your App Platform to version 110027 or higher before you start resizing your disk.&lt;br /&gt;
&lt;br /&gt;
* stop the VM&lt;br /&gt;
* expand the disk using your VM utilities&lt;br /&gt;
* start the VM and boot from the first boot entry &#039;&#039;&#039;rescue/setup&#039;&#039;&#039;&lt;br /&gt;
* login with &#039;&#039;&#039;root&#039;&#039;&#039; and &#039;&#039;&#039;iplinux&#039;&#039;&#039;&lt;br /&gt;
* execute this command: &#039;&#039;&#039;/home/root/install_step1.sh log.txt resize&#039;&#039;&#039;&lt;br /&gt;
* the VM reboots automatically after a successful resize&lt;br /&gt;
&lt;br /&gt;
== Shrink the physically size of PostgreSQL database files ==&lt;br /&gt;
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. &lt;br /&gt;
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.&lt;br /&gt;
&lt;br /&gt;
 You can also start this process through the instance settings as long as the AP Manager is still running.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important: You are operating on the Database, you have to make a Backup of your Database before you do this!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Login via SSH to the APPlatform with the &#039;&#039;admin&#039;&#039; User&lt;br /&gt;
 su root&lt;br /&gt;
 /etc/init.d/S92manager stop  # not always needed, but in case of database errors recommended, of course no app is online then&lt;br /&gt;
 sudo -u postgres reindexdb -a&lt;br /&gt;
 sudo -u postgres vacuumdb -a -f&lt;br /&gt;
 /etc/init.d/S92manager restart # just execute if the manager has been stopped above&lt;br /&gt;
&lt;br /&gt;
 sudo -u postgres reindexdb -d dbname # for a single database with dbname&lt;br /&gt;
 sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname&lt;br /&gt;
&lt;br /&gt;
Note: This may take some time and CDRs (or other data written to a DB) won&#039;t be received during this time. &lt;br /&gt;
&lt;br /&gt;
After the process you can check the free dispace via &amp;lt;code&amp;gt;df -h&amp;lt;/code&amp;gt;. You can check the claimed space from the database file with the command &amp;lt;code&amp;gt;du -sh /mnt/sda2/pgsql/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Change IP Addresses / DNS Names / System Name ==&lt;br /&gt;
&lt;br /&gt;
If you want to change the System Name or the DNS Name of the PBX and/or AP Platform you must change records manually &#039;&#039;&#039;in the described order&#039;&#039;&#039;!&lt;br /&gt;
You have to know the Admin password to directly Login to the AP-Plattform.&lt;br /&gt;
&lt;br /&gt;
=== App Platform ===&lt;br /&gt;
; Settings - General&lt;br /&gt;
* &#039;&#039;Devices app URL&#039;&#039;&lt;br /&gt;
* &#039;&#039;App platform DNS name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; Settings - Alarms and Events&lt;br /&gt;
* &#039;&#039;URL&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; All Instances&lt;br /&gt;
* &#039;&#039;Domain&#039;&#039;&lt;br /&gt;
* &#039;&#039;Webserver path&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== PBX ===&lt;br /&gt;
Download the configuration and &#039;&#039;search/replace&#039;&#039; in the config file. Upload the config file and reboot.&lt;br /&gt;
&lt;br /&gt;
Manual:&lt;br /&gt;
* &#039;&#039;URL&#039;&#039; in all PBX Object (Apps, Voicemail ...)&lt;br /&gt;
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]&lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] &lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]&lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]&lt;br /&gt;
&lt;br /&gt;
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]&lt;br /&gt;
&lt;br /&gt;
=== Additional Devices / Steps ===&lt;br /&gt;
* &#039;&#039;Devices Registration URL&#039;&#039;&lt;br /&gt;
** There is no automatism to change the URL on all devices in your setup.&lt;br /&gt;
** If you have the option to use DHCP, you can temporarily overwrite the [[{{NAMESPACE}}:Services/Update|Update URL]] and execute a [[{{NAMESPACE}}:Concept_Update_Server|custom update script]] to change the &#039;&#039;Device Registration URL&#039;&#039;&lt;br /&gt;
* &#039;&#039;Alarm server&#039;&#039;&lt;br /&gt;
* Reverse Proxy configuration&lt;br /&gt;
* Change &#039;&#039;Domain Name&#039;&#039; in Devices if you have also changed the system name&lt;br /&gt;
&lt;br /&gt;
== How to recover from a broken File System ==&lt;br /&gt;
Sometimes you may find messages in the &#039;&#039;messages&#039;&#039; log file (in &#039;&#039;var/log&#039;&#039;) like&lt;br /&gt;
&lt;br /&gt;
 initial error at 1500329378: ext4_journal_start_sb:328&lt;br /&gt;
 last error at 1500329378: ext4_journal_start_sb:328&lt;br /&gt;
&lt;br /&gt;
Or you get events like &amp;quot;Broken file system&amp;quot; from your AP.&lt;br /&gt;
&lt;br /&gt;
This indicates a file system failure on the Linux Installation.&lt;br /&gt;
&lt;br /&gt;
When the Linux file system is broken, you can try to repair it using some command line Linux tools.&lt;br /&gt;
&lt;br /&gt;
If this doesn&#039;t fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.&lt;br /&gt;
&lt;br /&gt;
=== Gateway ===&lt;br /&gt;
&lt;br /&gt;
* Open the WebGUI of the gateway running your LAP and proceed to &#039;&#039;App Platform/General&#039;&#039;&lt;br /&gt;
** terminate Linux (&#039;&#039;Status/Stop&#039;&#039;)&lt;br /&gt;
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0&lt;br /&gt;
** modify the Initrd file to ramdisk.ext2.xz&lt;br /&gt;
** modify the ramdisk size to 100000&lt;br /&gt;
** start Linux again&lt;br /&gt;
:: This will run Linux on another (hopefully sane) partition.&lt;br /&gt;
&lt;br /&gt;
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP&#039;s command line (user: root, pw: iplinux)&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda2&amp;lt;/code&amp;gt;&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
:: this should fix any issue on the file system&lt;br /&gt;
&lt;br /&gt;
* go back to the WebGUI of the gateway running your LAP and proceed to &#039;&#039;App Platform/General&#039;&#039;&lt;br /&gt;
** terminate Linux (&#039;&#039;Status/Stop&#039;&#039;)&lt;br /&gt;
** modify the &#039;&#039;Kernel command line&#039;&#039; from &#039;&#039;root=/dev/ram0&#039;&#039; to &amp;lt;code&amp;gt;root=/dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
** clear the Initrd file field&lt;br /&gt;
** clear the ramdisk size field&lt;br /&gt;
** start Linux again&lt;br /&gt;
:: This will run Linux on the original partition.&lt;br /&gt;
&lt;br /&gt;
=== VM ===&lt;br /&gt;
&lt;br /&gt;
Restart the VM and select the first entry in the boot menu from grub.&lt;br /&gt;
&lt;br /&gt;
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP&#039;s command line&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda2&amp;lt;/code&amp;gt;&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
:: this should fix any issue on the file system&lt;br /&gt;
* Reboot your VM&lt;br /&gt;
[[Category:Concept]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Platform&amp;diff=67025</id>
		<title>Reference13r1:Concept App Platform</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Platform&amp;diff=67025"/>
		<updated>2023-04-13T09:02:54Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Reboot after an image update hangs (ARM gateway) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= General =&lt;br /&gt;
* V13 uses [https://buildroot.org/ buildroot]&lt;br /&gt;
* this is an own (innovaphone) collection of packages&lt;br /&gt;
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* V13 or up&lt;br /&gt;
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) &lt;br /&gt;
* Virtual (x86_64)&lt;br /&gt;
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)&lt;br /&gt;
** VMWare&lt;br /&gt;
&lt;br /&gt;
== Default credentials ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;During INSTALL, the default passwords are replaced with the global Admin PW!&#039;&#039;&#039;&lt;br /&gt;
* SSH-Login with &#039;&#039;&#039;admin&#039;&#039;&#039; and &#039;&#039;&#039;ipapps&#039;&#039;&#039;&lt;br /&gt;
* root login with &#039;&#039;&#039;root&#039;&#039;&#039; and &#039;&#039;&#039;iplinux&#039;&#039;&#039; (the root login is not directly possible, you have to login as admin first and use the command &#039;&#039;su root&#039;&#039;)&lt;br /&gt;
* manager App (web login) &#039;&#039;&#039;pwd&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= App Platform - arm (Gateway)=&lt;br /&gt;
&lt;br /&gt;
* The installation image has a size of ~50MB. During installation, the following partitions are created:&lt;br /&gt;
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)&lt;br /&gt;
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)&lt;br /&gt;
** /dev/sda3 ext4: 500MB (contains the rootfs)&lt;br /&gt;
** /dev/sda4 swap: 512MB&lt;br /&gt;
&lt;br /&gt;
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:&lt;br /&gt;
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10&lt;br /&gt;
* the available RAM for the AP (as specified in column &#039;&#039;RAM for LAP (GB) out of RAM&#039;&#039; in chapter &#039;&#039;Technical data and recommended number of users supported&#039;&#039; of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))&lt;br /&gt;
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings&lt;br /&gt;
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10&lt;br /&gt;
&lt;br /&gt;
While it is hard to predict the performance of the AP in a specific scenario, we see that in a real life environment an AP running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users.  Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).&lt;br /&gt;
&lt;br /&gt;
= App Platform - x86-64 (Virtual Machine 64bit) =&lt;br /&gt;
&lt;br /&gt;
* The default disk size is 16GB. It should be increased &#039;&#039;&#039;before&#039;&#039;&#039; the first start if needed!&lt;br /&gt;
&lt;br /&gt;
* Multiple CPUs are supported, default is one CPU&lt;br /&gt;
&lt;br /&gt;
* default RAM: 512MB&lt;br /&gt;
* static IP address, DNS, Gateway can be configured with the command &#039;&#039;&#039;setip&#039;&#039;&#039; on the console. Run &#039;&#039;&#039;setip --help&#039;&#039;&#039; to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) &lt;br /&gt;
* If you have permission problems change to su user (Password is iplinux or your new admin password)  &lt;br /&gt;
* To figure out your ip address you can use the command: &#039;&#039;ip address&#039;&#039; on the console.&lt;br /&gt;
* &#039;&#039;&#039;loadkeys de&#039;&#039;&#039; can be used to change to german keyboard layout (etc.)&lt;br /&gt;
&lt;br /&gt;
* partitions:&lt;br /&gt;
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)&lt;br /&gt;
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)&lt;br /&gt;
** /dev/sda3 ext4: 500MB (contains the rootfs)&lt;br /&gt;
** /dev/sda4 swap: 512MB&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
==ARM Gateway==&lt;br /&gt;
&lt;br /&gt;
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn&#039;t be blocked by any firewall.)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You can also install it manually:&lt;br /&gt;
* Open App Platform -&amp;gt; General and &#039;&#039;&#039;Enable Linux Support&#039;&#039;&#039;. Restart the gateway.&lt;br /&gt;
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.&lt;br /&gt;
* Open App Platform -&amp;gt; IP and configure the IP settings of the App Platform. Restart the Gateway.&lt;br /&gt;
* Open App Platform -&amp;gt; Installation and select the given version or enter an own path to the &#039;&#039;app-platform-armel.img&#039;&#039; image file.&lt;br /&gt;
* The installation runs without any further required step.&lt;br /&gt;
&lt;br /&gt;
==Virtual machine==&lt;br /&gt;
&lt;br /&gt;
* Import the image into your server environment.&lt;br /&gt;
* Edit the disk size, if needed.&lt;br /&gt;
* Start the machine and wait until it reboots and starts again.&lt;br /&gt;
* Note: If you need to access IP addresses available through a VPN connection from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]&lt;br /&gt;
&lt;br /&gt;
== Backup of the Apps ==&lt;br /&gt;
&lt;br /&gt;
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.&amp;lt;br&amp;gt;&lt;br /&gt;
There are no other files which need to be backuped.&amp;lt;br&amp;gt;&lt;br /&gt;
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
An alternate way is to use a command file which is similar to the command files from the firmware.&lt;br /&gt;
&lt;br /&gt;
===Commands===&lt;br /&gt;
* &#039;&#039;&#039;times&#039;&#039;&#039; 0,12 # backup only at 0 or 12 o&#039;clock&lt;br /&gt;
* &#039;&#039;&#039;backup-instances&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump PUT&lt;br /&gt;
** PUT and POST are supported, all instances including the manager itself are saved&lt;br /&gt;
* &#039;&#039;&#039;backup-instance&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT&lt;br /&gt;
** backup a single instance with instance name and instance domain&lt;br /&gt;
* &#039;&#039;&#039;backup-manager&#039;&#039;&#039; http://user:pw@ip/path/#I-#D.dump&lt;br /&gt;
&lt;br /&gt;
===Hash parameters===&lt;br /&gt;
* #L App Platform label (neu), e.g. 10024&lt;br /&gt;
* #A App label (neu), e.g. 130004&lt;br /&gt;
* #I instance name (neu), e.g. reporting1&lt;br /&gt;
* #D instance domain (neu), e.g. innovaphone.com&lt;br /&gt;
* #m MAC address of the LAP, e.g. 00ab11eeff&lt;br /&gt;
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130&lt;br /&gt;
* #bn rolling backup index&lt;br /&gt;
* ## escapes a hash mark&lt;br /&gt;
&lt;br /&gt;
= App Platform Infrastructure and Concept =&lt;br /&gt;
== Webserver ==&lt;br /&gt;
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.&lt;br /&gt;
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.&lt;br /&gt;
&lt;br /&gt;
=== Import Custom SSL Certificate ===&lt;br /&gt;
You have to upload a PEM Certificate with the following chain structure and without password encoding.&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (certificate: your_domain_name.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (Intermediate certificate: DigiCertCA.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 (Root certificate: TrustedRoot.crt)&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN RSA PRIVATE KEY-----&lt;br /&gt;
 (certificate Key: your_domain_name.key)&lt;br /&gt;
 -----END RSA PRIVATE KEY-----&lt;br /&gt;
&lt;br /&gt;
=== Known issues ===&lt;br /&gt;
*The app platform webserver can use only the default http/https ports 80/443.&lt;br /&gt;
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.&amp;lt;br /&amp;gt;&lt;br /&gt;
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:&lt;br /&gt;
**&#039;&#039;psql -d manager -c &amp;quot;DELETE FROM config WHERE name=&#039;webserverCertificate&#039;&amp;quot;&#039;&#039;&lt;br /&gt;
**&#039;&#039;/etc/init.d/S92manager restart&#039;&#039;&lt;br /&gt;
*The app platform webserver interprets URLs case-sensitive. In other words, &amp;lt;nowiki&amp;gt;http://&amp;lt;addr&amp;gt;/file.txt&amp;lt;/nowiki&amp;gt; is not the same as &amp;lt;nowiki&amp;gt;http://&amp;lt;addr&amp;gt;/FILE.TXT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Database ==&lt;br /&gt;
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.&lt;br /&gt;
&lt;br /&gt;
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.&lt;br /&gt;
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.&lt;br /&gt;
&lt;br /&gt;
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file &#039;&#039;/mnt/sda2/pgsql/pg_hba.conf&#039;&#039;.&lt;br /&gt;
After editing pg_hba.conf, the database-service has to be restarted with the command &amp;lt;code&amp;gt;/etc/init.d/S50postgresql restart&amp;lt;/code&amp;gt;&lt;br /&gt;
(Please think about it before you do it, because a better way is to create your own local app with local database access.)&lt;br /&gt;
&lt;br /&gt;
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/11/auth-pg-hba-conf.html&lt;br /&gt;
&lt;br /&gt;
 Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf &lt;br /&gt;
 and that you may break your database server if you do not know exactly what you do!&lt;br /&gt;
&lt;br /&gt;
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:&lt;br /&gt;
* stop the manager&lt;br /&gt;
** &amp;lt;code&amp;gt;/etc/init.d/S92manager stop&amp;lt;/code&amp;gt;&lt;br /&gt;
* restart the database-service (maybe not really necessary, but makes a good feeling)&lt;br /&gt;
**&amp;lt;code&amp;gt;/etc/init.d/S50postgresql restart&amp;lt;/code&amp;gt;&lt;br /&gt;
* start the manager&lt;br /&gt;
** &amp;lt;code&amp;gt;/etc/init.d/S92manager start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== App Platform Manager ==&lt;br /&gt;
The App Platform Manager is the central component of the App Platform. It does the following:&lt;br /&gt;
* Installing app services by downloading the binaries from an app store.&lt;br /&gt;
* Running and monitoring app services. If an app service crashes it is restarted, automatically.&lt;br /&gt;
* Management of app instances and providing them with the environment they need:&lt;br /&gt;
** A database&lt;br /&gt;
** A webserver path&lt;br /&gt;
** A password for authentication&lt;br /&gt;
* Backup and restore of app instances.&lt;br /&gt;
* Collecting debug information like tracing and crash dumps.&lt;br /&gt;
* System monitoring (CPU usage, memory usage, etc).&lt;br /&gt;
&lt;br /&gt;
== App Services ==&lt;br /&gt;
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.&lt;br /&gt;
&lt;br /&gt;
== App Instances ==&lt;br /&gt;
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.&lt;br /&gt;
&lt;br /&gt;
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.&amp;lt;br&amp;gt;&lt;br /&gt;
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.&amp;lt;br&amp;gt;&lt;br /&gt;
The database password must be just known to the manager and not outside of the App Platform.&lt;br /&gt;
&lt;br /&gt;
== Relationship between app instances and app objects in the PBX ==&lt;br /&gt;
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:&lt;br /&gt;
* URL&lt;br /&gt;
* Password&lt;br /&gt;
The password is used by the PBX for authenticating itself, users and services against the app instance.&lt;br /&gt;
&lt;br /&gt;
Some apps need a websocket connection with the PBX. When &amp;quot;websocket&amp;quot; is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.&lt;br /&gt;
&lt;br /&gt;
=== Supported scenarios ===&lt;br /&gt;
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have&lt;br /&gt;
* One AP for one customer&lt;br /&gt;
* One AP for many customers&lt;br /&gt;
* Many APs for one customer&lt;br /&gt;
* Many APs for many customers&lt;br /&gt;
&lt;br /&gt;
Attention: The V13 installer can only configure the scenario &amp;quot;&#039;&#039;One AP for one customer&#039;&#039;&amp;quot;. If you want to have a different scenario, you have to configure it manually.&lt;br /&gt;
&lt;br /&gt;
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.&lt;br /&gt;
&lt;br /&gt;
=== Restrictions ===&lt;br /&gt;
Currently we don&#039;t have redundancy for app instances or APs.&lt;br /&gt;
&lt;br /&gt;
== Update of the App Platform itself ==&lt;br /&gt;
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can update the used build inside the Manager App by using the &#039;&#039;&#039;Update&#039;&#039;&#039; button at the top.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!&lt;br /&gt;
&lt;br /&gt;
== App services and multi-threading ==&lt;br /&gt;
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+&#039;&#039;n&#039;&#039;  threads (where &#039;&#039;n&#039;&#039; is the number of instances).  All communication between app service instances and their clients must pass the single-threaded web server.  On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + &#039;&#039;m&#039;&#039; + &#039;&#039;m&#039;&#039; * &#039;&#039;n&#039;&#039; (with &#039;&#039;m&#039;&#039; being the number of Apps and &#039;&#039;n&#039;&#039; the number of instances per App) threads can be utilized.&lt;br /&gt;
&lt;br /&gt;
= Known Issues =&lt;br /&gt;
&lt;br /&gt;
== Reboot after an image update hangs (ARM gateway) ==&lt;br /&gt;
&lt;br /&gt;
If it happens, that the App Platform doesn&#039;t recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -&amp;gt; General.&amp;lt;br&amp;gt;&lt;br /&gt;
If &#039;&#039;&#039;Kernel command line&#039;&#039;&#039; is set to &#039;&#039;&#039;/dev/ram0&#039;&#039;&#039;, the App Platform booted the ramdisk.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Try to fetch the upgrade log file:&lt;br /&gt;
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If this doesn&#039;t work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;cat /apps/install_step1.log&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If this file contains &#039;&#039;&#039;finished&#039;&#039;&#039; at the end, you can reconfigure the settings under App Platform -&amp;gt; General:&amp;lt;br&amp;gt;&lt;br /&gt;
* press &#039;&#039;&#039;Stop&#039;&#039;&#039;&lt;br /&gt;
* Initrd file: empty&lt;br /&gt;
* Kernel command line: &#039;&#039;&#039;root=/dev/sda3&#039;&#039;&#039;&lt;br /&gt;
* Ramdisk size: empty&lt;br /&gt;
* press &#039;&#039;&#039;Start&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The App Platform should boot and run the already updated image.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;color: red; font-size:150%;&amp;quot;&amp;gt;---WARNING---&lt;br /&gt;
 If the file doesn&#039;t contain &amp;quot;finished&amp;quot; at the end, you may still need to wait, as an upgrade may take some time!&lt;br /&gt;
 Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won&#039;t run!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reboot after an image update doesn&#039;t start as update is already running ==&lt;br /&gt;
&lt;br /&gt;
If it happens, that the AP doesn&#039;t want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -&amp;gt; General.&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Shutdown&#039;&#039;&#039; the AP and &#039;&#039;&#039;Stop&#039;&#039;&#039; it.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Kernel command line&#039;&#039;&#039; to &#039;&#039;&#039;/dev/ram0&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Initrd file&#039;&#039;&#039; to &#039;&#039;&#039;ramdisk.ext2.xz&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* Set &#039;&#039;&#039;Ramdisk size&#039;&#039;&#039; to &#039;&#039;&#039;100000&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Start&#039;&#039;&#039; the AP now.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The AP now either applies the image update or it reboots into the old image. Try the image update afterwards again.&lt;br /&gt;
&lt;br /&gt;
== Webserver doesn&#039;t respond after an image update ==&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the AP Manager from starting correctly:&lt;br /&gt;
* su root (become root)&lt;br /&gt;
* rm -f /mnt/sda2/log/core_dumps/*/*&lt;br /&gt;
* /etc/init.d/S92manager restart&lt;br /&gt;
&lt;br /&gt;
Check if you can now reach the AP again.&lt;br /&gt;
&lt;br /&gt;
= Tracing =&lt;br /&gt;
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.&amp;lt;br&amp;gt;&lt;br /&gt;
Each App Intance has its own trace flags. The following trace flags can be set:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Alarm client: used by the manager to send alarms to an alarm server&lt;br /&gt;
* App: logs from the App Service itself&lt;br /&gt;
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)&lt;br /&gt;
* AppSharing: just native clients&lt;br /&gt;
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server&lt;br /&gt;
* Audio: just native clients&lt;br /&gt;
* Browser: just native clients&lt;br /&gt;
* Command: the command interface is used to execute shell commands, e.g. used by the manager App&lt;br /&gt;
* Config: logs config changes of an App&lt;br /&gt;
* Database: database logs&lt;br /&gt;
* DB files: database file logs&lt;br /&gt;
* DNS: DNS request logging&lt;br /&gt;
* DTLS: just native clients, DTLS request logging&lt;br /&gt;
* Ethernet: interface to get ethernet adapater infos, just manager App&lt;br /&gt;
* File: logs for file system access (synchronous), e.g. manager App&lt;br /&gt;
* Files: logs for file system access (asynchronous)&lt;br /&gt;
* HTTP client: http client logs&lt;br /&gt;
* HTTP file: logs for static HTTP files&lt;br /&gt;
* ICE: just native clients&lt;br /&gt;
* LDS: local domain sockets &lt;br /&gt;
* Media: just native clients&lt;br /&gt;
* Media channel: just native clients&lt;br /&gt;
* Process: IProcess interface logs which is used for spawning, killing processes etc.&lt;br /&gt;
* SMTP: SMTP client logs&lt;br /&gt;
* TCP: TCP logs&lt;br /&gt;
* Time: ITime interface logs&lt;br /&gt;
* TLS: TLS logs&lt;br /&gt;
* TURN: just native clients&lt;br /&gt;
* UDP: UDP logs&lt;br /&gt;
* Video: just native clients&lt;br /&gt;
* WebSocket client: logs outgoing websocket connections&lt;br /&gt;
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App&lt;br /&gt;
* WebDAV service: logs WebDAV requests to the App&lt;br /&gt;
* Webserver: enables webserver specific logs&lt;br /&gt;
&lt;br /&gt;
== RPCAP ==&lt;br /&gt;
&lt;br /&gt;
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.&amp;lt;br&amp;gt;&lt;br /&gt;
You can add the interface in wireshark with the string:&lt;br /&gt;
 rpcap://&amp;lt;APP-Platform-IP&amp;gt;/eth0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please don&#039;t forget to disable RPCAP after your testing!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= How-Tos =&lt;br /&gt;
&lt;br /&gt;
== How to retrieve files from the AP ==&lt;br /&gt;
To retrieve files from the AP which can not be retrieved via the AP manager UI, you can connect to the AP using the SCP protocol on port 22.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
First copy files to /home/admin as root with Putty or another SSH client:&lt;br /&gt;
* use the &#039;&#039;DNS&#039;&#039; name or IP address of your AP (not the PBX)&lt;br /&gt;
* use user &#039;&#039;admin&#039;&#039; and the appropriate password (&#039;&#039;ipapps&#039;&#039; by default)&lt;br /&gt;
* use &#039;&#039;su root&#039;&#039; to be root (&#039;&#039;iplinux&#039;&#039; as default password)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can now copy files to &#039;&#039;/home/admin&#039;&#039; (e.g. from /var/log/apps/manager/...).&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can create a tar archive with all logs like this:&lt;br /&gt;
* cd /home/admin&lt;br /&gt;
* tar -cf - /var/log/* | xz -z - &amp;gt; log.tar.xz&lt;br /&gt;
** you may want to exclude coredumps (due to their size):&lt;br /&gt;
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - &amp;gt; log.tar.xz&lt;br /&gt;
* chown admin:admin /home/admin/log.tar.xz&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Then copy the files to your local system, e.g. with WinSCP&amp;lt;br/&amp;gt;&lt;br /&gt;
* use &#039;&#039;SCP&#039;&#039; as protocol (NB: WebDAV is not supported on most of the directories on the AP)&lt;br /&gt;
* use the &#039;&#039;DNS&#039;&#039; name or IP address of your AP (not the PBX)&lt;br /&gt;
* use user &#039;&#039;admin&#039;&#039; and the appropriate password (&#039;&#039;ipapps&#039;&#039; by default)&lt;br /&gt;
* use &#039;&#039;/home/admin&#039;&#039; as start directory&lt;br /&gt;
* copy the needed files&lt;br /&gt;
&lt;br /&gt;
== App Platform/Apps app not online anymore due to full disk ==&lt;br /&gt;
If the apps app is not online anymore and you can&#039;t access any apps anymore, try to login with an SSH client to see if your disk is full.&lt;br /&gt;
Login as admin and afterwards as root (su root).&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* issue &#039;&#039;&#039;df -h&#039;&#039;&#039; and see the disk usage of /dev/sda2, if this is 100%, your disk is too full&lt;br /&gt;
* stop the manager&lt;br /&gt;
** /etc/init.d/S92manager stop&lt;br /&gt;
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)&lt;br /&gt;
** echo &amp;quot;&amp;quot; &amp;gt; /mnt/sda2/empty_if_no_space&lt;br /&gt;
* delete log files to recover some space&lt;br /&gt;
** rm /var/log/apps/*/*&lt;br /&gt;
** rm /var/log/core_dumps/*/*&lt;br /&gt;
* restart the postgresql server (see the output if this worked or not)&lt;br /&gt;
** /etc/init.d/S50postgresql restart&lt;br /&gt;
* restart the manager&lt;br /&gt;
** /etc/init.d/S92manager restart&lt;br /&gt;
* wait until everything is online again&lt;br /&gt;
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it&lt;br /&gt;
** you may want to stop all app services first to prevent more writes to the database&lt;br /&gt;
** if not possible, you can delete this instance, but you&#039;ll loose all data from this instance then!&lt;br /&gt;
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space&lt;br /&gt;
** If this does not work you can create a backup from the database, delete the database and import the database again.&lt;br /&gt;
* free up at least 500 MB so that the manager can create the file again&lt;br /&gt;
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:&lt;br /&gt;
** rm /mnt/sda2/empty_if_no_space&lt;br /&gt;
** /etc/init.d/S92manager restart&lt;br /&gt;
** the manager restart automatically recreates the empty_if_no_space file if this file doesn&#039;t exist&lt;br /&gt;
&lt;br /&gt;
 Make sure, that you do &#039;&#039;&#039;not&#039;&#039;&#039; have backups configured to a local files instance while this files instance is not excluded from backups.&lt;br /&gt;
 An instance can be excluded from backups in the instance settings in the AP Manager.&lt;br /&gt;
&lt;br /&gt;
If all of this doesn&#039;t help, you can resize the file system on a VM:&lt;br /&gt;
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]&lt;br /&gt;
&lt;br /&gt;
== Resizing the disk of a Virtual machine ==&lt;br /&gt;
&lt;br /&gt;
 Do &#039;&#039;&#039;NOT&#039;&#039;&#039; resize if you&#039;re running an App Platform version higher than &#039;&#039;&#039;110000&#039;&#039;&#039; and lower than &#039;&#039;&#039;110027&#039;&#039;&#039; or your data will be lost!&lt;br /&gt;
 Please update your App Platform to version 110027 or higher before you start resizing your disk.&lt;br /&gt;
&lt;br /&gt;
* stop the VM&lt;br /&gt;
* expand the disk using your VM utilities&lt;br /&gt;
* start the VM and boot from the first boot entry &#039;&#039;&#039;rescue/setup&#039;&#039;&#039;&lt;br /&gt;
* login with &#039;&#039;&#039;root&#039;&#039;&#039; and &#039;&#039;&#039;iplinux&#039;&#039;&#039;&lt;br /&gt;
* execute this command: &#039;&#039;&#039;/home/root/install_step1.sh log.txt resize&#039;&#039;&#039;&lt;br /&gt;
* the VM reboots automatically after a successful resize&lt;br /&gt;
&lt;br /&gt;
== Shrink the physically size of PostgreSQL database files ==&lt;br /&gt;
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. &lt;br /&gt;
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important: You are operating on the Database, you have to make a Backup of your Database before you do this!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Login via SSH to the APPlatform with the &#039;&#039;admin&#039;&#039; User&lt;br /&gt;
 su root&lt;br /&gt;
 /etc/init.d/S92manager stop  # not always needed, but in case of database errors recommended, of course no app is online then&lt;br /&gt;
 sudo -u postgres reindexdb -a&lt;br /&gt;
 sudo -u postgres vacuumdb -a -f&lt;br /&gt;
 /etc/init.d/S92manager restart # just execute if the manager has been stopped above&lt;br /&gt;
&lt;br /&gt;
 sudo -u postgres reindexdb -d dbname # for a single database with dbname&lt;br /&gt;
 sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname&lt;br /&gt;
&lt;br /&gt;
Note: This may take some time and CDRs (or other data written to a DB) won&#039;t be received during this time. &lt;br /&gt;
&lt;br /&gt;
After the process you can check the free dispace via &amp;lt;code&amp;gt;df -h&amp;lt;/code&amp;gt;. You can check the claimed space from the database file with the command &amp;lt;code&amp;gt;du -sh /mnt/sda2/pgsql/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Change IP Addresses / DNS Names / System Name ==&lt;br /&gt;
&lt;br /&gt;
If you want to change the System Name or the DNS Name of the PBX and/or AP Platform you must change records manually &#039;&#039;&#039;in the described order&#039;&#039;&#039;!&lt;br /&gt;
You have to know the Admin password to directly Login to the AP-Plattform.&lt;br /&gt;
&lt;br /&gt;
=== App Platform ===&lt;br /&gt;
; Settings - General&lt;br /&gt;
* &#039;&#039;Devices app URL&#039;&#039;&lt;br /&gt;
* &#039;&#039;App platform DNS name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; Settings - Alarms and Events&lt;br /&gt;
* &#039;&#039;URL&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; All Instances&lt;br /&gt;
* &#039;&#039;Domain&#039;&#039;&lt;br /&gt;
* &#039;&#039;Webserver path&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== PBX ===&lt;br /&gt;
Download the configuration and &#039;&#039;search/replace&#039;&#039; in the config file. Upload the config file and reboot.&lt;br /&gt;
&lt;br /&gt;
Manual:&lt;br /&gt;
* &#039;&#039;URL&#039;&#039; in all PBX Object (Apps, Voicemail ...)&lt;br /&gt;
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]&lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] &lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]&lt;br /&gt;
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]&lt;br /&gt;
&lt;br /&gt;
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]&lt;br /&gt;
&lt;br /&gt;
=== Additional Devices / Steps ===&lt;br /&gt;
* &#039;&#039;Devices Registration URL&#039;&#039;&lt;br /&gt;
* &#039;&#039;Alarm server&#039;&#039;&lt;br /&gt;
* Reverse Proxy configuration&lt;br /&gt;
* Change &#039;&#039;Domain Name&#039;&#039; in Devices if you have also changed the system name&lt;br /&gt;
&lt;br /&gt;
== How to recover from a broken File System ==&lt;br /&gt;
Sometimes you may find messages in the &#039;&#039;messages&#039;&#039; log file (in &#039;&#039;var/log&#039;&#039;) like&lt;br /&gt;
&lt;br /&gt;
 initial error at 1500329378: ext4_journal_start_sb:328&lt;br /&gt;
 last error at 1500329378: ext4_journal_start_sb:328&lt;br /&gt;
&lt;br /&gt;
Or you get events like &amp;quot;Broken file system&amp;quot; from your AP.&lt;br /&gt;
&lt;br /&gt;
This indicates a file system failure on the Linux Installation.&lt;br /&gt;
&lt;br /&gt;
When the Linux file system is broken, you can try to repair it using some command line Linux tools.&lt;br /&gt;
&lt;br /&gt;
If this doesn&#039;t fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.&lt;br /&gt;
&lt;br /&gt;
=== Gateway ===&lt;br /&gt;
&lt;br /&gt;
* Open the WebGUI of the gateway running your LAP and proceed to &#039;&#039;App Platform/General&#039;&#039;&lt;br /&gt;
** terminate Linux (&#039;&#039;Status/Stop&#039;&#039;)&lt;br /&gt;
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0&lt;br /&gt;
** modify the Initrd file to ramdisk.ext2.xz&lt;br /&gt;
** modify the ramdisk size to 100000&lt;br /&gt;
** start Linux again&lt;br /&gt;
:: This will run Linux on another (hopefully sane) partition.&lt;br /&gt;
&lt;br /&gt;
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP&#039;s command line (user: root, pw: iplinux)&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda2&amp;lt;/code&amp;gt;&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
:: this should fix any issue on the file system&lt;br /&gt;
&lt;br /&gt;
* go back to the WebGUI of the gateway running your LAP and proceed to &#039;&#039;App Platform/General&#039;&#039;&lt;br /&gt;
** terminate Linux (&#039;&#039;Status/Stop&#039;&#039;)&lt;br /&gt;
** modify the &#039;&#039;Kernel command line&#039;&#039; from &#039;&#039;root=/dev/ram0&#039;&#039; to &amp;lt;code&amp;gt;root=/dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
** clear the Initrd file field&lt;br /&gt;
** clear the ramdisk size field&lt;br /&gt;
** start Linux again&lt;br /&gt;
:: This will run Linux on the original partition.&lt;br /&gt;
&lt;br /&gt;
=== VM ===&lt;br /&gt;
&lt;br /&gt;
Restart the VM and select the first entry in the boot menu from grub.&lt;br /&gt;
&lt;br /&gt;
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP&#039;s command line&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda2&amp;lt;/code&amp;gt;&lt;br /&gt;
** on the command prompt, use &amp;lt;code&amp;gt;e2fsck -p -f /dev/sda3&amp;lt;/code&amp;gt;&lt;br /&gt;
:: this should fix any issue on the file system&lt;br /&gt;
* Reboot your VM&lt;br /&gt;
[[Category:Concept]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_Chat&amp;diff=63285</id>
		<title>Reference13r3:Concept Chat</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_Chat&amp;diff=63285"/>
		<updated>2022-09-07T10:54:46Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Additional Features with license */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Chat]]&lt;br /&gt;
Instant Messaging is a standard functionality of the innovaphone PBX. The messages are sent using instant messages calls with standard SIP method or proprietary H.323/H.450 facilities. The myApps Chat App is provided by the PBX as a user interface for chat. The PBX itself only provides the instant messaging calls and forwarding of the messages. No storing of the messages is provided.&lt;br /&gt;
&lt;br /&gt;
To add additional functionality to chat like storing of chats, group chats or file attachments, the PBX provides an API with the Messages App Object, so that this functionality can be added by an additional App Service. Access to this functionality is also provided to the Chat App by an API. The Chat App can detect the presence of this API. The use of this API must be enabled by a license.&lt;br /&gt;
&lt;br /&gt;
== The Chat App ==&lt;br /&gt;
&lt;br /&gt;
The Chat App is the client App for instant messaging. It is provided by the PBX itself. No external App Service is required. A user can be granted acccess to the Chat App by setting the &#039;chat&#039; checkmark in the Apps Tab of the Advanced UI.&lt;br /&gt;
&lt;br /&gt;
=== Features without license ===&lt;br /&gt;
&lt;br /&gt;
The Chat App works without license. Features without license include the following:&lt;br /&gt;
&lt;br /&gt;
;volatile chat: Chat to other users, if these other users are online and respond to the incoming chat call&lt;br /&gt;
;emojiis: Some emojiis can be seleceted to be included in the message. The emojiis are sent as standard unicode characters&lt;br /&gt;
&lt;br /&gt;
=== Additional Features with license ===&lt;br /&gt;
&lt;br /&gt;
If the user has a chat license, additional features are available, which need the external Messages service:&lt;br /&gt;
&lt;br /&gt;
;Storing of Chats: No need to the destination of a chat to be online. The message can be sent and read asynchronously&lt;br /&gt;
;Badge Count: A badge count is displayed for unread messages. To clear the badgcount the chats containing new messages must be opened&lt;br /&gt;
;Group Chats: Groups can be defined and Messages sent to these groups&lt;br /&gt;
;File Attachments: File attachments can be added to chat messages&lt;br /&gt;
&lt;br /&gt;
=== The Badge Count ===&lt;br /&gt;
&lt;br /&gt;
The Badge Count on the Chat App inside myApps is used to indicate the number of unread incoming chat messages. A chat message is considered read if the chat discussion is already open and the input field for a new message has the focus when the chat message arrives or if the chat discussion is opened. If a discussion inside the Chat App is opened all messages of this discussion are considered read. If the Chat App is opened, but the discussion with unread messages is not opened, the badge count will not be reset to make sure this message is not overlooked.&lt;br /&gt;
These rules result in the following sequences, when a chat message arrives:&lt;br /&gt;
;Chat App closed: The Chat App is loaded (if set as default chat app) and a badge count is set. When the Chat App is opened a badge count is displayed at the respective discussion. The badge count is cleared when the chat app and the respective discussion inside the chat app is opened.&lt;br /&gt;
;The Chat App is opened with a different dicussion: A badge count is set at the Chat App and at the respective discussion. The badge count is cleared when the discussion is opened.&lt;br /&gt;
;The Chat App is opened with the same discussion but message input does not have focus: Badge Count is set at the Chat App and at the discussion. The badge count is reset as soon as the message input gets the focus&lt;br /&gt;
;The Chat App is opened with the same discussion and message input has focus: No badge count is set&lt;br /&gt;
;Chat message is read on a different device: Badge count is reset on Chat App and on the respective discussion&lt;br /&gt;
&lt;br /&gt;
== Technical Details ==&lt;br /&gt;
&lt;br /&gt;
=== Client APIs ===&lt;br /&gt;
&lt;br /&gt;
The client uses published PBX APIs to provide the service.&lt;br /&gt;
&lt;br /&gt;
;PbxSignal: This is the API for signaling using Websocket/Json protocol. The Chat App uses the flag &#039;NO_MEDIA_CALL&#039; when doing the register, so that no media call is sent to the Chat App. To mark a call as instant messaging call the facility &#039;im_setup&#039; is used. Messages are transfered with the facility &#039;im_message&#039;&lt;br /&gt;
;PbxMessages: This API provides access to an external Messages App Service. If a chat licenses is assigned to the user, the Chat App established a Session on the PbxMessages API.&lt;br /&gt;
&lt;br /&gt;
=== API of Messages App Service ===&lt;br /&gt;
&lt;br /&gt;
The PBX Objekt Messages establishes a AppWebsocket connection to the external Messages App Service. Documeneted messages on this connection are used for the additional services.&lt;br /&gt;
&lt;br /&gt;
=== File Attachments ===&lt;br /&gt;
&lt;br /&gt;
To attach a files to a chat message, the client uses a method &#039;CreateFileBuffer&#039; of &#039;PbxMessages&#039; to create a temporariy buffer for a file in the Messages App Service. The file is sent via HTTP POST to this buffer and a URL to the file is included in the im_message facility. The recepient of the message can read the file from this buffer, if online while the message was sent. After the message was sent, the file attachments are copied into permanent buffers on the sender and on the received side. To access these buffers other URLs then the URLs for the temporariy buffers are used.&lt;br /&gt;
&lt;br /&gt;
=== Text Format ===&lt;br /&gt;
&lt;br /&gt;
The texts are sent as plain HTML coded as UTF-8. Plain HTML means that no attributes for HTML elements may be used. This is enforced by the PBX to make sure no malicious content can be sent. The styling of the HTML is up to the receiver of the message.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:IQM_Server&amp;diff=60765</id>
		<title>Howto:IQM Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:IQM_Server&amp;diff=60765"/>
		<updated>2022-01-13T12:53:17Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Wrap-Up Time */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See first the related article.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The innovaphone PBX-Queue Monitor (iQM) is an application to monitor a Waiting Queue (WQ) and agents in an innovaphone PBX. &lt;br /&gt;
Many real time indicators and counters are combined with statistic counters, threshold alarm and warnings and also the status of the agents are displayed to give an overview of the actives around a waiting queue.&lt;br /&gt;
iQM supervise one single WQ but many agents on it; anyway it is possible to view also many WQs on the same PC starting more iQM sessions.&lt;br /&gt;
&lt;br /&gt;
A iQM client software (iQMagent) can be installed on each agent workplace. This client will reproduce on the agent workplace the major counters and allows additional features like logging in/out or automatic detection of Agent activity.&lt;br /&gt;
&lt;br /&gt;
The iQM client can also run in Dashboard mode and display graphic real-time information’s.&lt;br /&gt;
&lt;br /&gt;
iQMagent and iQM is therefore a client-server application. In this section is explained in detail how the server is working while a description of the iQMagent client you can find following the link in the section &amp;quot;Related Articles&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Please check in &amp;quot;Related Articles&amp;quot; new and additional features!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Keywords: iQM, Queuemonitor, callcenter, client iqmclient, iqmagent, agent, conference, conf viewer, conference view, board monitor, Dashboard, call center monitor, board client --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Applies To==&lt;br /&gt;
iQM is a SOAP application and communicate with the innovaphone PBX. The PBX-Queue Monitor runs on a PC with windows OS. The software has to be licensed and run without license for 20 minutes (evaluation mode), after that period iQM can be started again for a trial period. The license is stored in the innovaphone PBX, each iQM require one license, innovaphone article number 02-00027-004. &lt;br /&gt;
&lt;br /&gt;
Demo license for the PBX can be created in myinnovaphone and downloaded as usual.&lt;br /&gt;
&lt;br /&gt;
Developed and tested on Version 9 and Win7, works also with Version 8 adn Windows 10. (no Windows XP support!). Even the client software run just on window OS.&lt;br /&gt;
The Server works also on Windows Server 2008 R2 (server versions not recommended). &lt;br /&gt;
&lt;br /&gt;
Please note that the „iQM Sever” has not to be a real Server, a normal PC is sufficient.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The description refer to iQM Hotfix 12 &lt;br /&gt;
&lt;br /&gt;
The monitor of the server must have at least a resolution of 1152x864 pixel, recommended are 1360x768 or higher. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Keywords: iQM,queue monitor,monitor,queue,PBX-Queue,call center,contact center,waiting queue,agent,wrap-up,wrap up,wrapup,innovaphone queue monitor,queuemonitor,queue-monitor,queue_monitor,Queue Monitor--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
&lt;br /&gt;
===Basics===&lt;br /&gt;
The innovaphone PBX can handle Waiting Queues (WQs). Those WQs are used for many different innovaphone scenarios, but to understand the basic idea let’s see how the “normal” usage works in a contact center. &lt;br /&gt;
Remember that this manual describes the iQM and not the possibilities of the innovaphone PBX and the WQ, there are a lot of articles about that.  &lt;br /&gt;
&lt;br /&gt;
In order to understand better the argument some preliminary basic items have to be cleared. &lt;br /&gt;
&lt;br /&gt;
In the figure below you see a new call coming in a WQ of the innovaphone PBX. The WQ distribute all calls to the agents, typically in a round robin mode. &lt;br /&gt;
iQM supervises the WQ and the agent activities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:IQM010.png‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
“Agent” is normal a PBX-user but in the same group than the WQ and so called if available. Therefore the system is very flexible and every size will fit. iQM supports single straight group as indicated in the picture, but also a primary WQ and a second (=overflow) agent group.&lt;br /&gt;
&lt;br /&gt;
The “iQM” is not just a PC communication with the PBX but act also as a server for clients. So the iQM- server is the platform for the supervisor of the callcenter. Agents can install on the local PC a client software. The iQM client will communicate with the iQM server and display the status of the WQ on the desktop of the agent and offer also some additional features. In the following picture you can the principle:&lt;br /&gt;
&lt;br /&gt;
[[image:IQM021.png‎]]&lt;br /&gt;
&lt;br /&gt;
The common basic operating questions for a supervisor (and/or the agents) are:&lt;br /&gt;
&lt;br /&gt;
*How many calls are in the Queue?&lt;br /&gt;
*How long is waiting the “oldest” call?&lt;br /&gt;
*How many callers give up, typically because annoyed waiting? &lt;br /&gt;
&lt;br /&gt;
Depending on those parameters agents will hurry up or not and a supervisor can add agent ore shorten the wrap-up time. So the parameters “waiting time of the oldest call”, “number of calls waiting” and “number of abandoned calls” are important and displayed in real time.&lt;br /&gt;
&lt;br /&gt;
Next interesting questions are:&lt;br /&gt;
*How many agents are in the system and how many of them are logged to the service?&lt;br /&gt;
*How many agents are free/busy and ringing?&lt;br /&gt;
*How many agents are in wrap-up time and so available soon?&lt;br /&gt;
&lt;br /&gt;
Depending in those parameters additional agents can be logged or wrap-up time modified. Observing the real-time indicators a supervisor will see instantly if a situation becomes critical.&lt;br /&gt;
&lt;br /&gt;
In managing agents statistical counters are even an important issue:&lt;br /&gt;
&lt;br /&gt;
*How many call where processed this hour/today/ this month?&lt;br /&gt;
*How long did the caller wait this hour/day/month&lt;br /&gt;
*How many calls are abandoned this hour/day/month&lt;br /&gt;
&lt;br /&gt;
And it would also be interesting to know the peak and average value of all that. &lt;br /&gt;
A supervisor could also have the problem to measure those values in a defined time period. &lt;br /&gt;
All this real time questions are of cause interesting if comparable with stored periods. Therefore iQM displays always also the stored values, so for example the counters of the last hour, day and month. Historic counters allowed to see immediately how the contact center is working compared to previous periods.&lt;br /&gt;
&lt;br /&gt;
In some cases the requests are not so stressed and real time depending. For example a customer want just understand if and when calls are going lost or if and when there are a lot of calls. This can be done using warning and alarming thresholds.&lt;br /&gt;
&lt;br /&gt;
And of cause all those counters and events should be stored even in a file for post-processing. Post processing of stored call data could be done with any external tool like Excel or Access.&lt;br /&gt;
&lt;br /&gt;
===System Overview===&lt;br /&gt;
iQM can be displayed in two sizes: Large and small. But all views and setups con also be displayed on a iQM client if configured as dashboard an iQM admin. The following picture shows the large ans small iQM server display and the dashboard view, please note the tab “iQM” (appears if iQM admin flag in the iQM client is switched on).&lt;br /&gt;
&lt;br /&gt;
[[image:IQM N 01.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iQM can also be minimized and executed in a task bar:&lt;br /&gt;
    &lt;br /&gt;
The large window shows the following areas:&lt;br /&gt;
 &lt;br /&gt;
[[image:IQM002.png‎]]&lt;br /&gt;
&lt;br /&gt;
Please note that all main counters and panels have a short reference name. In this description those labels help to indicate the exact element.&lt;br /&gt;
&lt;br /&gt;
The positions on the screen of all Windows in the iQM world (except the setup ones) are stored and therefore when the application is started again you will always find the windows where you leave them.&lt;br /&gt;
&lt;br /&gt;
The storage is done when you close the application or you drop them on a new position. iQM also detect if a second screen is active or not.&lt;br /&gt;
&lt;br /&gt;
If you start iQM on a extended desktop and after a reboot you will not switch on the second monitor iQM will appear on the main, and not on the extended screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: Different software versions could have also some minor modifications in user layout: we do not always renew the pictures, just if significant layout change is done or the describe function is not in the picture.&lt;br /&gt;
&lt;br /&gt;
===Real Time Call Indicator===&lt;br /&gt;
&lt;br /&gt;
The most important issue are the real time status counter:&lt;br /&gt;
&lt;br /&gt;
[[image:IQM005.png‎]]&lt;br /&gt;
&lt;br /&gt;
“waiting” : indicate the time of the oldest call in the queue. In the example there are 2 calls in the WQ and the oldest one is waiting for 10 seconds. If a call is processed or the oldest caller gives up this counter is immediately updated with the waiting time of the next caller. So for example a display “waiting 03:20 calls 02” can be immediately followed by a display like “waiting 01:20 calls 01”; the first call in the WQ was processed after 3 minutes and 20 seconds and the next one waits for 1 Minute and 20 seconds.&lt;br /&gt;
&lt;br /&gt;
“calls” : indicate the number of calls in the WQ. A call is in the WQ until the caller gives up or an agents answers (or an external event like a CFNR takes place). So if for example there are 5 calls and two agent and both phones are ringing the display will show “calls 05”, if the agent answer the call the display will show “calls 03”.&lt;br /&gt;
&lt;br /&gt;
“abandoned” : Shows the number of calls dropped during waiting in the Queue. Call drop in a WQ could have many reasons, but it is essentially a warning signal: apparently waiting time is too long.&lt;br /&gt;
&lt;br /&gt;
If there is no more call in the WQ all counters go to zero.&lt;br /&gt;
You will find those 3 basic counters (waiting time, calls, abandoned calls) anywhere in iQM.&lt;br /&gt;
&lt;br /&gt;
In Threshold panel  can be defined warning threshold (see also section “Thresholds”) for each of the real time call indicator. If a threshold is exceed the relative counter is displayed with a red frame:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:IQM006.png‎]]&lt;br /&gt;
&lt;br /&gt;
In the example the warning time threshold was set and surpassed.&lt;br /&gt;
&lt;br /&gt;
Please note that if a threshold is below again the frame switch back to the original color. If for example a duration threshold is set to 20 seconds in the 21th second the frame “calls” become red; if one call is proceed and the counter is going under 20 seconds the frame is grey again.&lt;br /&gt;
&lt;br /&gt;
===Counters===&lt;br /&gt;
&lt;br /&gt;
iQM is full with real time and statistic counters. There are displayed over 70 of them, but all panels are identical. &lt;br /&gt;
&lt;br /&gt;
Basically on the iQM server windows shows counter counting in real-time, like the one showing the actual hour or the actual month. Others, like the past hour or last month, can be considerate “statistical” one.&lt;br /&gt;
&lt;br /&gt;
Anyway al Panels the have all the same number of counters.&lt;br /&gt;
&lt;br /&gt;
All counters shows in the headline the measuring time period, “actual hour” in our example. On top some counters shows in the headline additional information like the actual day (from 1 to 31) or the actual month (form 1 to 12).&lt;br /&gt;
&lt;br /&gt;
Therefore the description of one counter panel describes all of them; the following example and description is done using the today counter panel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:IQM N 02.png‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The matrix consists of three lines and three columns. A certain counter is therefore described from its position: the first counter in the upper left corner is therefore the “Total Duration” Counter. &lt;br /&gt;
&lt;br /&gt;
The columns show the Total, Peak and the Average value. &lt;br /&gt;
&lt;br /&gt;
The three lines follow basically the tree main counters: Duration, Calls and Average.&lt;br /&gt;
&lt;br /&gt;
Line Duration: Displays the time in seconds accuracy (days, hours, minutes, seconds for the sum, minutes, and seconds for peak and average value).&lt;br /&gt;
&lt;br /&gt;
Line Calls: number of calls, peak = number of concurrent calls in the Queue, average = number of average calls in the Queue.&lt;br /&gt;
&lt;br /&gt;
Line Abandon:  Displays the number of abandon calls. This line is slightly different to the first two, the first counter shows the number of abandon calls and nearby the percent number of abandoned calls to number of calls (abandoned/calls *100). Please note that the percent number of abandoned calls is indicated with 99% if 100% is reached. The following counter is the peak counter for abandoned calls while the last one is the average waiting time for abandon calls. In other words this counter shows how long caller waits in average before they hang up.&lt;br /&gt;
&lt;br /&gt;
Once understood how a counter panel is designed let’s look again to the entire panel.&lt;br /&gt;
&lt;br /&gt;
The feed for counter are the three main conters:&lt;br /&gt;
&lt;br /&gt;
[[image:IQM N 03.png‎]]&lt;br /&gt;
&lt;br /&gt;
Many times the Abandon Counter is the one not really clear to the customer, even if his behaviour is quite simple: each time a caller gives up this counter will increase. “giving up” or “abandon” means that the remote calling party release before the call was answered by an agent. Please note that the iQM does not distinguish if the caller gives up waiting in the Queue or in the situation where a phone was ringing: in both cases the counter of not served calls will increase. Also in the Queue statistic CSV counters (see relative article) the abandoned calls are the one “not served”. In the Agent Statistic however the “abandoned calls” are the one not served of this agent, so his phone was ringing but he did not answer and the caller gives up.&lt;br /&gt;
&lt;br /&gt;
While these concepts are simple and easy to understand the real time online counter is tricky. Imagine there is just one call, the number of calls is therefore one and the time is counting up. Now the caller gives up, therefore the counter of abandoned calls is increased. But the online real time counter is still zero:&lt;br /&gt;
&lt;br /&gt;
[[image:IQM N 04.png‎]]&lt;br /&gt;
&lt;br /&gt;
Now there are two calls in the queue and one gives up. Again the abandoned calls counter is increased while the real time abandoned counter shows one call abandoned. If also the second call terminate (caller gives up or the call was answered) the abandoned realtime counter shows zero.&lt;br /&gt;
&lt;br /&gt;
[[image:IQM N 05.png‎]]&lt;br /&gt;
&lt;br /&gt;
In summary one can say that the realtime abandoned counter will show zero if there are no calls in the queue while he shows abandoned calls during calls in queue. In fact there is no logical reason to show “storical” abandoned data in a realtime counter. &lt;br /&gt;
&lt;br /&gt;
Please note that the agent view will show “storical “ abandoned calls in an abandoned call list where the caller can be called back. See relative article for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Reset panel===&lt;br /&gt;
A particular counter is on the reset panel; this counter works similar to the trip counter in a car. The reset panel is working like the other panels, but the counter are cleared any time the “reset” button in pressed. The example shows the panel immediately after pressing the reset button.&lt;br /&gt;
&lt;br /&gt;
[[image:IQM N 06.png‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the panel headline is displayed date and time of the reset. After a reset subsequent calls are counted immediately again. &lt;br /&gt;
&lt;br /&gt;
With the reset panel it is possible measure time periods, like for example a shift of agents or a part of an hour (remember: the hour counter start counting from the beginning of an hour) or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Thresholds===&lt;br /&gt;
&lt;br /&gt;
Thresholds are a useful tool to understand and analyze critical situation in the contact center. Thresholds are necessary because for example the peak counter shows you that there was a peak - but not exactly when and how often. &lt;br /&gt;
&lt;br /&gt;
Like for counters also for thresholds the type of events are the same:&lt;br /&gt;
&lt;br /&gt;
•	“time” means “longer than xx seconds waiting time”&lt;br /&gt;
&lt;br /&gt;
•	“calls” means “more that xx calls in the WQ” &lt;br /&gt;
&lt;br /&gt;
•	“abandoned” means “more than xx calls abandoned (during calls are waiting). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each event (time/calls/abandoned) has a warning and an alarm threshold. The behavior is completely different. A warning is just a optical issue to advice agents that a critical situation is in progress. A alarm will write al log file, advice playing a warning tone and send a e-mail if requested.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:IQM N 07.png‎]]&lt;br /&gt;
&lt;br /&gt;
The input field “warning” on the right hand is used to define the warning thresholds. As jet described in the section “Real timer call indicator”, the warning threshold act just on the color of the real time call indicator. If the threshold is exceeded the real time call indicator is displayed with a red border, if the value goes again below the threshold the border is displayed in grey color again. &lt;br /&gt;
&lt;br /&gt;
The warning threshold is on anytime, to disable this option just put high values in the warning fields (“999” for time and “99” for calls and abandoned).  &lt;br /&gt;
&lt;br /&gt;
Note that it is possible to modify the warning threshold just if “ARM” is displayed on the relative button.&lt;br /&gt;
&lt;br /&gt;
The button “ARM” activates the alarm thresholds. The counter (“cnt”) will count up each time an alarm trigger and shows so how many times the alarm happened since the alarm was activated. The threshold for alarms can be defined using the input filed “alarm” (in case of time in seconds, in case of calls and abandoned in numbers). In the next column is displayed date and time of the last alarm event.&lt;br /&gt;
&lt;br /&gt;
Note: each of this setting will be saved if you stop iQM correct and restored after start-up. &lt;br /&gt;
&lt;br /&gt;
Once armed a threshold the tooltip of the button will no longer show the help text but the timestamp of activation. If the alarm is disabled the timestamp of the off switch is displayed in the tooltip (Example: “Armed at 12.1.2012 12:44”).&lt;br /&gt;
&lt;br /&gt;
To activate an alarm threshold press the “ARM” button, the button becomes red color; the alarm threshold now is armed and ready to fire. The counter “cnt” is cleared and the setting fields are disabled; armed threshold counter value could not be modified. If you want modify the threshold press the button again, the color changes to gray and the input fields are enabled again.&lt;br /&gt;
&lt;br /&gt;
If an alarm threshold is detected the following actions are executed:&lt;br /&gt;
&lt;br /&gt;
•	The label of the button changes from “Set” to “Alarm”&lt;br /&gt;
•	The button begin to flash (in case of restart if iQM just after a new alarm)&lt;br /&gt;
•	The counter “cnt” increase&lt;br /&gt;
•	The field “last” shows date and time of the event &lt;br /&gt;
•	A record is written in an alarm log file&lt;br /&gt;
•	If configured the innovaphone MOH as acoustic advice is played. &lt;br /&gt;
•	If configured a e-mail is send to the system or call-center administrator&lt;br /&gt;
&lt;br /&gt;
In case of calls and abandoned calls each call further the threshold will cause a new record and update. &lt;br /&gt;
&lt;br /&gt;
Please note that each alarm event will be handled, the “last” field is updated and a new record is written in the alarm log file. See section data logging for details.&lt;br /&gt;
&lt;br /&gt;
In the setup can be switched on a flag named “PC sound if alarm”. Please note that this flag will work immediately (not just after restart). If checked in case of alarm the PC will play the innovaphone music on hold to signal the event and catch attention. The MOH music is embedded in iQM and not an external file, this simplified delivery and setup. If the play starts it can be stopped quitting the alarm. If played an additional “mute” button appears in the system set-up area as show in the example above.&lt;br /&gt;
&lt;br /&gt;
The mute button stops the music without cancel the alarm. After pressing the mute button it will disappear and the music stops to play. Event canceling the alarm by pressing the relative alarm key will hide the mute button and stop the music.&lt;br /&gt;
&lt;br /&gt;
It is also possible to play any wave file instead of the build in MOH. In the setup can be defined the file to play, blank = default=MOH. If iQM is not able to play the file a relative error message is recorded in the iQM log file.&lt;br /&gt;
&lt;br /&gt;
Alarms can also be cleared automatically after a timeout. To activate automatic alarm clearing open the setup and put a timeout in seconds in the field “Alarm auto reset”. If left blank the feature is switched off. Automatic alarm reset quit the alarm (the label of the alarm button will be again “set”), switch of the blinking mode and stops the reproduction of the audio file if played. The follwing picture shows the relative setup in the iQM setup.&lt;br /&gt;
&lt;br /&gt;
[[image:IQM N 08.png‎]]&lt;br /&gt;
&lt;br /&gt;
Alarm events are stored in the same directory than the other counters and also the fields are separated by the value indicated in the setup, if no indication is done space will separate the field. &lt;br /&gt;
&lt;br /&gt;
The name of the threshold alarm file is &#039;&#039;&#039;“iQMAlarm.txt”&#039;&#039;&#039;. The following example shows the format of the records:&lt;br /&gt;
&lt;br /&gt;
23.02.2011 15:49:50 alarm:time cnt:0001 thshld:001 val:01&lt;br /&gt;
&lt;br /&gt;
23.02.2011 15:50:02 alarm:call cnt:0002 thshld:01 val: 1&lt;br /&gt;
&lt;br /&gt;
23.02.2011 15:50:05 alarm:aban cnt:0007 thshld:01 val:01&lt;br /&gt;
&lt;br /&gt;
Description: After date and time follows the type of alarm, possible field values are “time” (for time alarms), “call” (for call alarms) and “aban” (for abandoned calls). The next value is the alarm counter. In this way it is possible evaluate for example how many threshold events occurs from arming. “thshld” indicate the threshold value and the last field “val” the number of calls in that moment.&lt;br /&gt;
&lt;br /&gt;
The following picture shows the source of the data in the logfile.&lt;br /&gt;
&lt;br /&gt;
[[image:IQM N 09.png‎]]&lt;br /&gt;
&lt;br /&gt;
A mail alarm message will have the same format.&lt;br /&gt;
The following example shows the alarm e-mail transmitted because the threshold of 1 call was reached.&lt;br /&gt;
&lt;br /&gt;
 Object: iQM-Report thresholds&lt;br /&gt;
 Contend:&lt;br /&gt;
 26.08.2011 17:28:18 alarm:time cnt:0001 thshld:001 val:01&lt;br /&gt;
 Automatic generated report - Do NOT answer!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Data logging===&lt;br /&gt;
&lt;br /&gt;
Please note that CSV Data logging of Agent activity and Queue Data is describied in a separate article, se links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iQM writes different Log and configuration files. The filename of all those files starts with “iQM” (for example “iQM_Event_Log.txt” for the event log file.&lt;br /&gt;
&lt;br /&gt;
The directory (the path) of those files can be indicated in the setup, if not indicated (blank) all those data will be saved in the windows system environment folder path. Typically that directory is “user/AppData/Roaming”, anyway in the setup the actual path for log files is displayed.&lt;br /&gt;
&lt;br /&gt;
Actual day counter:&lt;br /&gt;
&lt;br /&gt;
iQM store automatically the content of the actual day counter (AH07) at midnight in a log file called “iQMDayData xxxx.txt”, where “xxxx” is the running year. For example “iQMDatData 2011.txt” is the daily data log file for the year 2011. If always online in one year 365 records will be done.&lt;br /&gt;
Actual hour counter:&lt;br /&gt;
&lt;br /&gt;
iQM can also store the hour data panel if the log button is switched on (see picture in section “Counters” where hourly log is on). The log file is named “iQMHourData xxxx.txt” where “xxxx” is the running year. For example “iQMHourData 2011.txt” is the hour data log file for the year 2011. If always online in one year 8.760 records will be done.&lt;br /&gt;
Reset counter:&lt;br /&gt;
&lt;br /&gt;
Each time the reset button is pressed the counters of the panel are saved in an annual reset log file.\ The reset log file is named “iQMResetData xxxx.txt” where xxxx is the year. For example “iQMResetData 2011.txt” contains all the reset data of the year 2011.&lt;br /&gt;
&lt;br /&gt;
As you see from the extension the files are plain text files and can be read with an editor or imported in external application like Excel, Access etc. &lt;br /&gt;
&lt;br /&gt;
Each line or record starts with date and time followed by the counter data. The counter data are written in fields, each field is separated with a character defined in setup. If there is no character defined each field is separated from the next one with space. &lt;br /&gt;
&lt;br /&gt;
In the following example you can see one record of the daily log file (CSV = |) :&lt;br /&gt;
&lt;br /&gt;
 19.10.2016 17:00:00|0000.00:03:50|00:44|00:16|000014|002|001|00014|002|99|00:12&lt;br /&gt;
&lt;br /&gt;
The fields are:&lt;br /&gt;
&lt;br /&gt;
• Timestamp (19.10.2016 17:00:00)&lt;br /&gt;
&lt;br /&gt;
• Total waiting time(0000.00:03:50)&lt;br /&gt;
&lt;br /&gt;
• Peak waiting (00:44)&lt;br /&gt;
&lt;br /&gt;
• Average waiting (00:16) &lt;br /&gt;
&lt;br /&gt;
• Total calls(000014)&lt;br /&gt;
&lt;br /&gt;
• Peak calls(002)&lt;br /&gt;
&lt;br /&gt;
• Average calls (001)&lt;br /&gt;
&lt;br /&gt;
• Total abandoned calls(00014)&lt;br /&gt;
&lt;br /&gt;
• Peak abandoned(002)&lt;br /&gt;
&lt;br /&gt;
• Percent number of abandoned calls(99)&lt;br /&gt;
&lt;br /&gt;
•Average waiting time for abandon calls(00:12)&lt;br /&gt;
&lt;br /&gt;
See counter chapter for description of meaning of the single counters (fields).&lt;br /&gt;
&lt;br /&gt;
The following picture shows the source of the data in the logfile.&lt;br /&gt;
&lt;br /&gt;
[[image:IQM N 10.png‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;System Log file:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
iQM report in a log file all major system events like start-up, errors etc.&lt;br /&gt;
The file is a text file in the directory where iQM is running named “iQM_Event_Log.txt”. This file is not used for normal operation.&lt;br /&gt;
&lt;br /&gt;
Other operational files:&lt;br /&gt;
&lt;br /&gt;
You will see also other iQM files where are stored the following data:&lt;br /&gt;
&lt;br /&gt;
iQM_Regional: contain language data (see chapter “localization”).&lt;br /&gt;
&lt;br /&gt;
iQM_Setup: contain the xml-setup data.&lt;br /&gt;
&lt;br /&gt;
iQMAH: contain all xml counter data (saved in case off shut down to resume after startup).&lt;br /&gt;
&lt;br /&gt;
iQMParameter: xml alarm parameter and data.&lt;br /&gt;
&lt;br /&gt;
iQMPos: Position of the iQM window on the screen, updated each time the window is moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: All files concerning Agent data (client) will start with “iQMagent”.&lt;br /&gt;
&lt;br /&gt;
===e-mail===&lt;br /&gt;
&lt;br /&gt;
iQM can transmit to a e-mail account the following messages:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	each hour at xx:00 the hourly counter data &lt;br /&gt;
&lt;br /&gt;
•	each day at 00:00:00 the daily counter data &lt;br /&gt;
&lt;br /&gt;
•	if the reset button is pressed with the reset data &lt;br /&gt;
&lt;br /&gt;
•	a warning e-mail if an alarm is fired&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Therefore exchange (or your e-mail system) can be used to archive data, but also as an alerting platform.&lt;br /&gt;
&lt;br /&gt;
“From” will be always “iQM”+@your_mail_system.&lt;br /&gt;
&lt;br /&gt;
This is default if you leave blank the field iQM ID in the setup.&lt;br /&gt;
&lt;br /&gt;
Some customer runs more than one single iQM and so they have to distinguish between the iQM’s also in the e-mail.&lt;br /&gt;
&lt;br /&gt;
If you indicate in the setup  under iQM ID an alphanumeric ID (in the example in the section installation is indicated a “3”, but it is also possible put in for example “Sales”) it will be also indicated in the e-mail: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:IQM051.png‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Object field will be for example:&lt;br /&gt;
&lt;br /&gt;
“iQM-Report from Reset – 26.08.2011 11:51:21”&lt;br /&gt;
&lt;br /&gt;
Note that the indicated date/time in this case is not the actual one but the one displayed in the headline of the counter.&lt;br /&gt;
&lt;br /&gt;
Here a example of the content of that e-mail:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 time          	26.08.2011 17:05:37&lt;br /&gt;
 waiting total 	0000.00:02:44&lt;br /&gt;
 peak          	00:23&lt;br /&gt;
 average       	00:06&lt;br /&gt;
 calls         	029&lt;br /&gt;
 peak          	02&lt;br /&gt;
 average       	01&lt;br /&gt;
 abandoned     	027&lt;br /&gt;
 peak          	02&lt;br /&gt;
 average       	93%&lt;br /&gt;
 average       	00:04&lt;br /&gt;
 Automatic generated report - Do NOT answer!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Basically are transmitted the relative Counters.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
===Data processing===&lt;br /&gt;
&lt;br /&gt;
Customers require all type of reports from the raw CSV data.&lt;br /&gt;
&lt;br /&gt;
All csv data can be easily imported in a Excel sheet and processed. The only thing to observe is never open a iQM CSV file in the iQM storage directory. Excel will look the imported or opened file and therefore all writing in those file form that moment on will fail. The iQM server will report that in the log file, but the damage is done and data will be lost. There are two ways to access to the iQM CSV and Log file: &lt;br /&gt;
&lt;br /&gt;
• Transmit data via mail, in this case you can open the attached file without thinking further.&lt;br /&gt;
&lt;br /&gt;
• Copy the file in a working directory and work on that copy file.&lt;br /&gt;
&lt;br /&gt;
Excel allows you to import files and in the import definition you can define the CSV character. If you use space Excel will use that as default.&lt;br /&gt;
Once imported you can add formulas, hide ore delete rows and perform any type of analysis, doing graphs and more.&lt;br /&gt;
Excel has a macro recorder working, so a specific setup can be stored and played again. A text file can reloaded and then start the macro and all the calculations, markings and any  action will be performed automatically. In this way it is not necessary repeat each month manual dat.&lt;br /&gt;
&lt;br /&gt;
Here the copy from the MS Help:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Applies To: Excel 2016 , Word 2016 , Outlook 2016 , PowerPoint 2016 , More...&lt;br /&gt;
&lt;br /&gt;
The Developer tab is not displayed by default, but you can add it to the ribbon when you want to do or use the following:&lt;br /&gt;
&lt;br /&gt;
•Write macros.&lt;br /&gt;
&lt;br /&gt;
•Run macros that you previously recorded.&lt;br /&gt;
&lt;br /&gt;
•Use form controls in Microsoft Excel.&lt;br /&gt;
&lt;br /&gt;
After you show the tab, it stays visible, unless you clear the check box or have to reinstall a Microsoft Office program.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Show the Developer tab&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
•Click the File tab.&lt;br /&gt;
&lt;br /&gt;
•Click Options.&lt;br /&gt;
&lt;br /&gt;
•Click Customize Ribbon.&lt;br /&gt;
&lt;br /&gt;
Under Customize the Ribbon and under Main Tabs, select the Developer check box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following Excel Sample shows how it works (on win10, Excel 2010, no clue what or how other versions works or not). &lt;br /&gt;
&lt;br /&gt;
[[Media:IQMHourDataMarcoSample.zip]]&lt;br /&gt;
&lt;br /&gt;
Unzip and open the Excel and allow the execution of Macro. Then import an iQMHoutData CSV File, use separator to put all data in single columns.&lt;br /&gt;
&lt;br /&gt;
After importing the raw data the Excel sheet shows for example like this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:IQM N 12.png‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Select now developer tab and Macro, select Macro1 and play. &lt;br /&gt;
&lt;br /&gt;
The Marco performs the following steps:&lt;br /&gt;
&lt;br /&gt;
• Insert 3 header lines&lt;br /&gt;
&lt;br /&gt;
• Format cells width and text alignment&lt;br /&gt;
&lt;br /&gt;
• Write cell header&lt;br /&gt;
&lt;br /&gt;
• Put in sum (total) in header &lt;br /&gt;
&lt;br /&gt;
• Put in a Filter in Date&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The output of the Excel file is immediately as described with one single click.&lt;br /&gt;
&lt;br /&gt;
If for example just October is selected in the filter the result could be like shown the following picture&lt;br /&gt;
&lt;br /&gt;
[[image:IQM N 11.png‎]]&lt;br /&gt;
&lt;br /&gt;
Using Excel and the Macro tools also the CSV Agent and Queue Data can be shown and displayed in any way and added al type of additional calculations, lines and columns.&lt;br /&gt;
&lt;br /&gt;
Feel free to add keys or enter code in Visual Basic to adapt the output to the result your customer want.&lt;br /&gt;
&lt;br /&gt;
For additional information see relative documentation an Excel in the Web or Microsoft.&lt;br /&gt;
&lt;br /&gt;
===Real time agent indicator===&lt;br /&gt;
&lt;br /&gt;
The agent indicators show at a glance how many resources are available and handles the wrap-up function.&lt;br /&gt;
&lt;br /&gt;
[[image:IQM015A.png‎]]&lt;br /&gt;
&lt;br /&gt;
“agents” shows how many agents are defined in the system. This value will be loaded only during start-up; typically agents are not added during operation. Do not confuse “agents” with “logged”. Agents are all users in the same calling group of the queue, but they not necessarily active in the group. For more information about dynamic groups see the configuration section.&lt;br /&gt;
&lt;br /&gt;
Please note also that user in the secondary group of a WQ are also counted as “agents” (but the usually are never “logged”.&lt;br /&gt;
&lt;br /&gt;
“logged” indicate the number of the actual in the call group logged agents.&lt;br /&gt;
&lt;br /&gt;
“ready” indicate the number of the not busy (free) agents. If in the example view above a user log out from the group both, the logged counter and the ready counter, switch from 02 to 01.&lt;br /&gt;
&lt;br /&gt;
“busy” indicate the number of agents logged but not ready (handset lifted, in call or in ringing).&lt;br /&gt;
&lt;br /&gt;
“ringing”  indicate the number of all agent (logged or not) in ringing status.  “in wrap-up” (AG05) indicate the number of agents in the wrap-up period. This counter gives a good idea how many agents will be available soon. Please note that a manual login of an agent during wrap-up will not decrease this counter. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Agents can be displayed also in detail pressing the agent key (visible only if the large screen is open):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:IQM022.png‎]]&lt;br /&gt;
&lt;br /&gt;
Do not confuse that view with the iQMagent client view, even if similar it has nothing to do with client. In fact that display is viewed on the iQM server and cannot be modified (see Client section for details on the iQM client).&lt;br /&gt;
&lt;br /&gt;
The agents are displayed in a table and the size of the window will be adapted automatically. Counter ready (AG03), waiting (TC01), calls (CW01) and abandoned (CA01) are replicated form the iQM main window. The table shows is real time the status of each agent, his name (cn in the PBX), if he is logged to the primary group of the WQ, his status and if there is a present status on. The key “min” will just close that window. &lt;br /&gt;
&lt;br /&gt;
===Wrap-Up Time===&lt;br /&gt;
An important issue for some contact center is wrap-up, but not everyone has a clear idea what that expression means. Wrap-up time (also called Post -Processing Time) is a time period after closing the call, typically some seconds, where a agent is considered “busy” form the system even if he is “free”. Normally that time is used to close files and folders or complete report ore similar things.&lt;br /&gt;
&lt;br /&gt;
Some customer wants a fix wrap-up time for all agents. Other likes individual values for each working stations. Other again wants both, therefore IQM can handle both. &lt;br /&gt;
&lt;br /&gt;
The wrap-up panel (WP01) shows status and actual general wrap-up time. To activate general wrap up insert the wrap-up time in seconds and press the “ON” button in the general line:&lt;br /&gt;
&lt;br /&gt;
[[image:IQM016.png‎]]&lt;br /&gt;
&lt;br /&gt;
The button will switch to a red color and the input field is disabled. To change the value switch first off the general wrap-up, change the value and switch the wrap on again.&lt;br /&gt;
&lt;br /&gt;
It is also possible define individual wrap-up in the PBX time for each agent (please note that anyway without iQM those values have no effect). The individual values for agents are written just during start of iQM and not during operation.&lt;br /&gt;
&lt;br /&gt;
If iQM detect individual warp-up timer for at least one agent the button “ind. override” is enabled.&lt;br /&gt;
&lt;br /&gt;
Individual wrap-up timers have priority to the general one. In this way it is possible for example set some agent with fix particularly short or long wrap-up time and modify in real time the general one for all the other agents. &lt;br /&gt;
&lt;br /&gt;
If the button “individual override” is pressed the individual wrap-up time is ignored and for all agents are applied the general one. &lt;br /&gt;
&lt;br /&gt;
That could be usefully if in particular emergency situations where all agents should have the same (mostly short) wrap-up. Please not that the value 0 is equal to disable wrap-up, even for the agents with individual wrap-up timers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:IQM017.png‎]]&lt;br /&gt;
&lt;br /&gt;
If the general wrap-up is switched off also the individual override is automatically switched off.&lt;br /&gt;
&lt;br /&gt;
Do not confuse this feature with the same one realized directly in the WQ (innovaphone PBX version 9 or higher). That wrap up is based using the presence status. If a presence status is on no calls will be processed and the WQ can set automatically a presence status if a user received a call. So what is the difference?&lt;br /&gt;
&lt;br /&gt;
Using the innovaphone PBX wrap-up feature instead of the iQM one means:&lt;br /&gt;
&lt;br /&gt;
•	wrap-up time even if iQM is not running.&lt;br /&gt;
&lt;br /&gt;
•	wrap-up just if a call is incoming from the WQ (but not if the agent is doing outbound or other calls).&lt;br /&gt;
&lt;br /&gt;
•	Just one general wrap up time for all agents.&lt;br /&gt;
&lt;br /&gt;
•	Wrap up cannot be modified from the user.&lt;br /&gt;
&lt;br /&gt;
•	No realtime indication how many user are in wrap-up.&lt;br /&gt;
&lt;br /&gt;
•	works only if IQM monitors one queue, no [[Howto:IQM_Second_Waiting_Queue | 2nd queue monitoring]].&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
In some cases it could be better use the build-in wrap-up and in other not: at the end depends just on the customer, both methods can be used without restriction and even combined.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT NOTE&#039;&#039;&#039;: If you want to use the WQ Round Robin property then you should use the WQ built-in wrap-up (&amp;quot;Presence disables Operator&amp;quot; and &amp;quot;Set Operator Presence/Clear after&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Running iQM===&lt;br /&gt;
&lt;br /&gt;
Pressing the “close” button iQM can be ended. Please note that in that case no statistic or real-time data is anymore collected and even the wrap-up function is not available. Before closing definitely iQM warns you about that and you have to confirm the shutdown. If for any reason you have to stop iQM (for example because the PC has to be restarted) do it in this way (and not using the task manager or just switching off the PC). Shut down iQM as described is usefully because before stopping iQM will save all data. All counters of the panels are saved in a XML file called “iQMAH.xml”, the setup values (like threshold, the display size etc.) are stored in a file called “iQMParameter.xml”. The counters are saved anymore even during normal operation each second, but the setup values just if the iQM is closed.&lt;br /&gt;
 &lt;br /&gt;
With data correctly saved iQM will start up again with the counter values and the entire setup identically as leaved. Even after a power fail or PC boot at least the counter values are restored.&lt;br /&gt;
&lt;br /&gt;
On the other hand if for maintenance reasons you delete one or both files all counters and setups are cleared and you can start again with fresh values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iQM saved even his position on the display if stopped correctly. So if started again the window will be placed exactly where it was before closing. That could be particularly important if you display for example iQM with a beamer using the extended Desktop function. The position data are stored in the file “iQMpos.txt”, if you clear that file iQM will start up in the windows default screen position. That could be necessary if for example the beamer is down and you cannot see or catch iQM: just stop iQM, delete the file “iQMpos.txt” and start iQM again.&lt;br /&gt;
&lt;br /&gt;
If in the setup (panel “Layout”) is flagged “Always in foreground” the window of iQM will be always in foreground and all other windows automatically in the background. Minimized execution is any way possible.&lt;br /&gt;
&lt;br /&gt;
Note: If the iQM (server) is stopped also all clients will stop working!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From the system set-up area of the iQM can be accessed to the setup of iQM (“setup” button, see relative section), switch between the large and small display mode (“min” button, if small display is on it will toggle to “max”), the “close” button stops iQM. &lt;br /&gt;
&lt;br /&gt;
[[image:IQM009.png‎]]&lt;br /&gt;
&lt;br /&gt;
The red “Mute” button stops sound warning (this button will appear automatically only if applicable. See description in section “thresholds”).  &lt;br /&gt;
In a bottom line are displayed communication parameters: ip-address and port pointing on, the running session number and the queue name in the innovaphone PBX.  &lt;br /&gt;
&lt;br /&gt;
Please note that after start-up and in any case where iQM lose the connection with the PBX in this line will appear “try to connect xxxx”, where xxxx is the ip-address of the PBX, all other indicated parameter are given for SOAP sessions. &lt;br /&gt;
&lt;br /&gt;
A connection between iQM and PBX could be down for many reasons, for example the PBX restarts or there are network problems (starting from the simplest one like no plug in the PC to any other communication problems). If such a disconnection happened iQM will continuously try to start up a new communication session. This could require some seconds even after resolving the network or system problems. During this period it is possible that the headline of iQM shows “DEMO-MODE” because iQM is unable to check in the PBX if there is a valid license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===About===&lt;br /&gt;
&lt;br /&gt;
If you click on the innovaphone logo on the iQM Window the about info is displayed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
If the PBX is not reachable, for example because you fail the IP-address, it could happen that iQM becomes very slow because continuously trying to connect. If that happened maybe it is simpler delete the configuration file and start again the setup of iQM. The configuration file is a XML file named “iQM_setup.XML” in the directory of iQM.&lt;br /&gt;
Please note that if you start iQM for the very first time (or with an empty configuration file) no connection is tried to establish and the configuration window is displayed automatically. Do your setups and start iQM again.&lt;br /&gt;
Do not assign a password to a agent user, because iqm can not take information ore change usersl with a pw.&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
&lt;br /&gt;
[[Reference9:Concept_iQM_QueueMonitor]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference9:Concept_Operator&amp;diff=58542</id>
		<title>Reference9:Concept Operator</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference9:Concept_Operator&amp;diff=58542"/>
		<updated>2021-04-27T11:06:13Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Contacts search: missing contacts on Full Text search */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- keywords: operator, vermittlungsplatz, vermittlung, cbc, switchboard --&amp;gt;&lt;br /&gt;
[[Category:Concept9|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Concept|{{PAGENAME}}]]&lt;br /&gt;
=Applies To=&lt;br /&gt;
This information applies to&lt;br /&gt;
* innovaphone Operator V9&lt;br /&gt;
&lt;br /&gt;
The article&#039;s intent is to serve as the Operator 9 information center. The addressed audience is administrators, partners, resellers.&lt;br /&gt;
&lt;br /&gt;
=Requirements=&lt;br /&gt;
*at least Windows 7 (and higher) - Windows Vista &amp;amp; Windows XP &#039;&#039;&#039;may&#039;&#039;&#039; work&lt;br /&gt;
*Windows Terminal Server&lt;br /&gt;
*1.5 GHz CPU (32-bit, or 64-bit), Dual-Core is recommended&lt;br /&gt;
*2 GB of RAM&lt;br /&gt;
*DirectX 9 capable graphics adapter&lt;br /&gt;
&lt;br /&gt;
=More Information=&lt;br /&gt;
The innovaphone Operator 9 succeeds the innovaphone Operator 8. &lt;br /&gt;
*A busy lamp field(busy field, BLF) is the main addendum to the application. &lt;br /&gt;
**Condensed user information: Display Name, Number, PBX&lt;br /&gt;
**An entry&#039;s context menu allows to reveal detailed user informations for an entry&lt;br /&gt;
**Colored User status: available(registered &amp;amp; not engaged in a call), engaged in a call, not registered&lt;br /&gt;
**Symbolized presence status: presence activity, presence note(as tooltip)&lt;br /&gt;
**Display options for the BLF window &lt;br /&gt;
***within the main window &lt;br /&gt;
***within a separate window &lt;br /&gt;
***within a separate window on a 2nd monitor&lt;br /&gt;
**Two different entry layouts can be selected in three different sizes(small, medium, large)&lt;br /&gt;
**Freely placeable labels&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
*Simplified usage&lt;br /&gt;
**Drag&amp;amp;Drop or keyboard-only usage possible&lt;br /&gt;
**main functionalities (accept call, initiate call) just with ENTER&lt;br /&gt;
**direct dialing without search / just use number&lt;br /&gt;
**Blind transfer eased - just use &#039;+&#039;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
*Search&lt;br /&gt;
**Full text search&lt;br /&gt;
***Fast, now the application default&lt;br /&gt;
***Targets large-scale installations&lt;br /&gt;
***Indexing: Long Name, Name, Number, Groups, PBX/Location&lt;br /&gt;
**Ldap search&lt;br /&gt;
***Support for Active Directory&#039;s attributes &amp;quot;department&amp;quot;, &amp;quot;description&amp;quot;&lt;br /&gt;
***&amp;quot;department&amp;quot; offers button to search for alternative destinations within a department&lt;br /&gt;
**Pbx search&lt;br /&gt;
***&amp;quot;group&amp;quot; offers button to search for alternative destinations within a group&lt;br /&gt;
***Email integration, send notification on missed calls&lt;br /&gt;
**Individual PBX can be excluded/barred from the operator&#039;s search view&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
*Call Switching&lt;br /&gt;
**Symbol indicating external calls&lt;br /&gt;
**Park+Wait functionality for blind-transferred calls towards busy internal destinations.&lt;br /&gt;
**Allows for operator procedure: &#039;&#039;The extension is busy. Do you want to wait?..&#039;&#039;&lt;br /&gt;
**Blinking indicator for parked and muted calls&lt;br /&gt;
**Outgoing calls can be placed without paying attention to call diversions&lt;br /&gt;
**Call diversions can be manipulated from operator (if access right is granted)&lt;br /&gt;
**Call journal with simplified and detailed representation (successful, missed, transferred, etc.). Cyclic storage of max. 300 calls.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
*Miscellaneous&lt;br /&gt;
**Alternative layout&lt;br /&gt;
**Nightswitch supported in GUI&lt;br /&gt;
**Secured access (HTTPS/TLS)&lt;br /&gt;
**Call context for currently active incoming call.&lt;br /&gt;
&lt;br /&gt;
=Download=&lt;br /&gt;
* The software can be downloaded from the &#039;&#039;apps&#039;&#039; section: http://download.innovaphone.com/ice/9.00/#apps&lt;br /&gt;
&lt;br /&gt;
=Application History=&lt;br /&gt;
The hotfix history can be found [[Reference9:Release_Notes_Operator_V9|in the operator 9 release notes]]&lt;br /&gt;
&lt;br /&gt;
=Full Text Index=&lt;br /&gt;
One shortcoming of the predecessor application was the confinement to search for PBX users either &#039;&#039;by name&#039;&#039; or &#039;&#039;by long name&#039;&#039; only. The Operator 9 therefore offers the new search capability &#039;&#039;by full text index&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The full text index was implemented application-local. That is, that index is not going to be maintained by the PBX, but by the Operator application itself in-RAM. Thus, making full text queries lightning fast.&lt;br /&gt;
&lt;br /&gt;
The full text indexed is supposed to scale well within large installations. In contrast the busy lamp field is expected to be operable with up to ~300 pbx users.&lt;br /&gt;
&lt;br /&gt;
Administrators must keep control of what is going to be fed into the index. This task must be accomplished by configuration of regular group memberships within a PBX. As a quick exemplary rule of thumb: &lt;br /&gt;
*Make the operator&#039;s PBX object an active member of a group e.g. &amp;quot;soap&amp;quot;. Make all other user objects that shall be indexed (non-active) members of the same group &amp;quot;soap&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is indexed?&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
*Name&lt;br /&gt;
*Long Name&lt;br /&gt;
*Display Name&lt;br /&gt;
*Number&lt;br /&gt;
*Node number + number&lt;br /&gt;
*Groups&lt;br /&gt;
*PBX&lt;br /&gt;
&lt;br /&gt;
=Busy-Field=&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
A screenshot featuring some numbered screen elements, explains the BLF&#039;s makeup.&lt;br /&gt;
[[Image:op9-bf-overview.jpg|center|thumb|200px|Overview, Operator 9]]&lt;br /&gt;
*1)BLF entry&lt;br /&gt;
*2)BLF label&lt;br /&gt;
*3)Thumb for menu panel&lt;br /&gt;
*4)Menu panel(slid out)&lt;br /&gt;
*5)Selector for BLF display as separate window or within main window&lt;br /&gt;
*6)Selector for the layout of BLF entries&lt;br /&gt;
*7)Erase button for selected BLF entries/labels&lt;br /&gt;
*8)Button to initially show the BLF&lt;br /&gt;
*9)Example of a BLF entry with a presence symbol&lt;br /&gt;
&lt;br /&gt;
==Arranging Entries==&lt;br /&gt;
&lt;br /&gt;
*Create a free line&lt;br /&gt;
**Select 2x entries&lt;br /&gt;
**Drag the selected entries onto some other entries&lt;br /&gt;
**All entries within the target line and all lines below are going to be moved downwards.&lt;br /&gt;
[[Image:op9-bf-edit-freeline.jpg|center|thumb|200px|Create a free line]]&lt;br /&gt;
&lt;br /&gt;
*Adding a label&lt;br /&gt;
**Right-Click into a free location&lt;br /&gt;
**A context menu appears - select &#039;&#039;Add Label&#039;&#039;&lt;br /&gt;
**A label is going to be placed.&lt;br /&gt;
**Left-Click into the label, in order to edit the label&#039;s text.&lt;br /&gt;
[[Image:Op9-bf-add-label.jpg|center|thumb|200px|Adding a label]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Changing the position of a single entry&lt;br /&gt;
**Left-Click the entry and keep the left mouse button pressed.&lt;br /&gt;
**Drag the entry into its new position.&lt;br /&gt;
**Drop the entry by releasing the mouse button.&lt;br /&gt;
In case of an entry already occupying the new position, the two entries are going to exchange their positions.&lt;br /&gt;
[[Image:op9-bf-xchng-entries.jpg|center|thumb|200px|Changing the position of a single entry]]&lt;br /&gt;
&lt;br /&gt;
*Changing the position of multiple entries&lt;br /&gt;
**Left-Click into a free position and keep the left mouse button pressed.&lt;br /&gt;
**Open up a selection rectangle. Entries intersecting with the rectangle are going to be selected.&lt;br /&gt;
**Release the left mouse button.&lt;br /&gt;
**Left-Click onto one of the selected entries and keep the left mouse button pressed.&lt;br /&gt;
**Drag the entries into their new position.&lt;br /&gt;
**Drop the entries by releasing the mouse button.&lt;br /&gt;
In case of one or more entries already occupying the new position, the entire lines containing those entries and the lines below are going to be moved downwards.&lt;br /&gt;
[[Image:Op9-bf-xchng-bulk.jpg|center|thumb|200px|Changing the position of multiple entries]]&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
This section hilights a few key concepts of the Operator configuration. A few prerequisites must be considered.&lt;br /&gt;
*The operator&#039;s phone must be configured, such that &#039;&#039;call waiting&#039;&#039; is enabled. This is important, because of situations whith more than one call being active at the phone. Some such scenarios may be obvious: operator user is engaged in a call while an internal caller is trying to directly call through to the operator&#039;s desk. Some such scenarios aren&#039;t obvious. For instance the operation to unpark a call may often coincide with a call just being signalled by a waiting queue towards the operator&#039;s phone.&lt;br /&gt;
*Within the PBX the value &#039;&#039;&#039;PBX/Configuration/General/Recall Timeout&#039;&#039;&#039; should be set to a value greater than 0 seconds. Otherwise the call list &#039;&#039;Transferred Calls&#039;&#039; will remain empty and unaccepted blind transferred calls will never fallback to the operator.&lt;br /&gt;
==General==&lt;br /&gt;
The application is going to establish at least two Soap sessions. One for the operator user&#039;s identity. And one for the query user&#039;s identity.&lt;br /&gt;
&lt;br /&gt;
The first session is needed in order to receive call informations for the operator user&#039;s phone. This session will be established only at the PBX configured under &#039;&#039;&#039;IP Address&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The second session is needed to receive user informations for all PBX user objects that shall be full text indexed. It is also needed for all PBX user objects that shall appear within the busy field. The Operator is going to establish this session type at every known PBX.&lt;br /&gt;
*&#039;&#039;&#039;Query User&#039;&#039;&#039; As a rule of thumb&lt;br /&gt;
**Create a user object &#039;&#039;_TAPI_&#039;&#039; (or &#039;&#039;SOAP&#039;&#039;) on all PBXs within the network of PBXs (if Slaves are replicated from a Master, just create this user at Master without assigning it to a PBX).&lt;br /&gt;
***The user &#039;&#039;_TAPI_&#039;&#039; must be an active member of a group &#039;&#039;tapi&#039;&#039;(or &#039;&#039;soap&#039;&#039;).&lt;br /&gt;
**All other users (also the ones at Slave PBXes) that shall be full text indexed must become a non-active member in the group &#039;&#039;tapi&#039;&#039;.&lt;br /&gt;
**In case of slave scenarios, the slavePBX object at Master itself needs to be part of that group. &#039;&#039;&#039;Note&#039;&#039;&#039;: This will not work when having &amp;quot;sub-slaves&amp;quot; being registered to slaves itself.&lt;br /&gt;
**A dedicated PBX as search base can be selected via the drop down menu in the search area. Typing &amp;quot;.&amp;quot; in the search field opens a pop-up field containing all PBXes.&lt;br /&gt;
&lt;br /&gt;
==WQ (Waiting Queue)==&lt;br /&gt;
A WQ teams-up with an operator&#039;s phone by a group membership.&lt;br /&gt;
*A waiting queue &#039;&#039;wq-reception&#039;&#039; may exist.&lt;br /&gt;
*The WQ is an active member of a group &#039;&#039;reception&#039;&#039;.&lt;br /&gt;
*The operator user is a non-active member of the group &#039;&#039;reception&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Calls for the WQ are from now on also signalled towards the operator.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Nightswitch&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The nightswitch configuration is just a front-end for the PBX &#039;&#039;Boolean object&#039;&#039;. Its actual purpose is to provide a means for a diversion. A diversion that leads callers into an out-of-business-hour announcement. Here is the idea behind:&lt;br /&gt;
*A waiting queue &#039;&#039;wq-reception&#039;&#039; may exist and is configured under &#039;&#039;&#039;WQ&#039;&#039;&#039;.&lt;br /&gt;
*Enter the number (55 in this example) towards the out-of-business-hour announcement under &#039;&#039;&#039;Diversion&#039;&#039;&#039;. It may be the number of a dedicated voicemail object.&lt;br /&gt;
*Configure the time definitions for the regular business hours.&lt;br /&gt;
**1st: Start 9:00, End 17:00, Mon-Fri&lt;br /&gt;
**2nd: Start 0:00, End 0:00, Sat-Sun &lt;br /&gt;
**As Mode select Automatic &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: The automatic mode may be overridden by selecting &#039;&#039;Manual On&#039;&#039; or &#039;&#039;Manual Off&#039;&#039; as mode. &#039;&#039;Manual On&#039;&#039; causes the CFU (see below) to become active immediately and permanently.&lt;br /&gt;
&lt;br /&gt;
What happens behind the curtain is as follows:&lt;br /&gt;
*A new boolean object &#039;&#039;wq-reception-nightswitch&#039;&#039; will be created automatically by the Operator app&#039;.&lt;br /&gt;
*The boolean object is configured with the time definitions from above.&lt;br /&gt;
*A CFU is configured at the WQ &#039;&#039;wq-reception&#039;&#039;.&lt;br /&gt;
*The CFU will have the number 55 from above as destination.&lt;br /&gt;
*The CFU references the Boolean object &#039;&#039;wq-reception-nightswitch&#039;&#039; from above.&lt;br /&gt;
&lt;br /&gt;
The mode selector for the boolean object will be available for the user. Watch out for the WQ calls list.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
===Configuration of the Phone&#039;s Conference Facility (Recording-/Greeting Function)===&lt;br /&gt;
Every innovaphone telephone offers a tiny conference function. Besides its apparent use, the conference function may be utilized to realize audio recording.&lt;br /&gt;
The corresponding configuration page can be found within the phone&#039;s web UI under &#039;&#039;Configuration/RegistrationX/Recording&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Within the context of the innovaphone Operator it may also be used to provide the means for a personal audio greeting. A greeting that is about to played right after an incoming call was connected. For each incoming call over the course of a working-day.&lt;br /&gt;
&lt;br /&gt;
Both scenarios require a voicemail script.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Only one of the two possibilities can be configured. Either the audio recording or the greeting function. The two cannot be used concurrently.&lt;br /&gt;
&lt;br /&gt;
The following two sub-sections are going to explain the required configuration steps for both scenarios.&lt;br /&gt;
&lt;br /&gt;
===Greeting Function===&lt;br /&gt;
A few assumptions are taken into consideration.&lt;br /&gt;
*The PBX box offers a CF-card that is up and running. &lt;br /&gt;
*A voicemail object is going to listen on number 77.&lt;br /&gt;
&lt;br /&gt;
Deploy the following voicemail script (audio menu in english)&lt;br /&gt;
* download [[Media:Greeting.zip]]&lt;br /&gt;
* copy onto a CF-card underneath a directory &#039;&#039;greeting&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At the PBX create a new voicemail object&lt;br /&gt;
* Proceed to &#039;&#039;PBX/Objects/New Voicemail&#039;&#039; &lt;br /&gt;
* Enter &#039;&#039;Long Name, Name, Number&#039;&#039; as eg.: &#039;&#039;vm-greet, vm-greet, 77&#039;&#039;&lt;br /&gt;
* Enter the &#039;&#039;Script URL&#039;&#039; as http://127.0.0.1/drive/CF0/greeting/greet.xml&lt;br /&gt;
&lt;br /&gt;
Configure the recording function at the operator user&#039;s telephone&lt;br /&gt;
* Proceed to &#039;&#039;Configuration/RegistrationX/Recording&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;manual&#039;&#039; as &#039;&#039;Mode&#039;&#039;&lt;br /&gt;
* Enter &#039;&#039;77&#039;&#039; as &#039;&#039;Number&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Within the innovaphone Operator proceed to &#039;&#039;File/Configuration/Misc.&#039;&#039;&lt;br /&gt;
*&#039;&#039;Assignment of the Recording-function&#039;&#039;: Choose &#039;&#039;Greeting&#039;&#039;&lt;br /&gt;
*&#039;&#039;Destination Number&#039;&#039;: Enter the number (&#039;&#039;77&#039;&#039; in this example) that was configured in the phone&#039;s web UI underneath &#039;&#039;Configuration/RegistrationX/Recording&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The audio greeting will start automatically for incoming external calls. The decision which calls are treated as external calls is based on the configuration of &#039;&#039;File/Configuration/LDAP Location/External Line&#039;&#039; (Mostly &#039;&#039;0&#039;&#039;). A button will be displayed on-top of the list of incoming calls, if an audio greeting is played. The button allows to stop the greeting.&lt;br /&gt;
&lt;br /&gt;
The audio greeting won&#039;t be started for:&lt;br /&gt;
* a fallback call, i.e. a call that was blind-transferred, but never connected.&lt;br /&gt;
* a call that was unparked&lt;br /&gt;
* a call that was refetched from the list of blind-transferred calls&lt;br /&gt;
* internal calls&lt;br /&gt;
&lt;br /&gt;
In order to record a new audio greeting&lt;br /&gt;
*Just dial the number of the voicemail object (&#039;&#039;77&#039;&#039; in this example).&lt;br /&gt;
*The script will prompt for a key press on the telephone&lt;br /&gt;
*Record the new greeting and stop the recording with another key press on the telephone&lt;br /&gt;
*You will be prompted with the new greeting&lt;br /&gt;
*End the call (on-hook) - the new greeting will be active from now on.&lt;br /&gt;
&lt;br /&gt;
===Recording Function===&lt;br /&gt;
This functionality is actually a reuse of a solution being available since firmware version 6. Please read through the following article:&lt;br /&gt;
*[[Howto:A Simple Recording Solution On-Top of The innovaphone Voicemail|A Simple Recording Solution On-Top of The innovaphone Voicemail]]&lt;br /&gt;
&lt;br /&gt;
All that&#039;s needed to be configured within the innovaphone Operator can be found underneath &#039;&#039;File/Configuration/Misc.&#039;&#039;.&lt;br /&gt;
*&#039;&#039;Assignment of the Recording-function&#039;&#039;: Choose &#039;&#039;Recording&#039;&#039;&lt;br /&gt;
*&#039;&#039;Destination Number&#039;&#039;: Enter the number that was configured in the phone&#039;s web UI underneath &#039;&#039;Configuration/RegistrationX/Recording&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A recording button will then be offered on-top of the list of incoming calls. The button allows to start/stop recording and serves as an indicator lamp.&lt;br /&gt;
&lt;br /&gt;
== External LDAP-database access ==&lt;br /&gt;
&lt;br /&gt;
innovaphone Operator offers possibility to connect external databases for adress search via LDAP.&lt;br /&gt;
&lt;br /&gt;
Setup is done at File/Configuration tab &#039;LDAP&#039; by filling appropriate fields for connection data and ldap attributes.&lt;br /&gt;
&lt;br /&gt;
The questionmark-icon opens a help page with some predefined LDAP-profiles for&lt;br /&gt;
* innovaphone Contacts (available from operator version 90236)&lt;br /&gt;
* Estos MetaDir&lt;br /&gt;
&lt;br /&gt;
Use radio buttons to fill fields.&lt;br /&gt;
Connection specific data like server, user and password need to be filled manually.&lt;br /&gt;
&lt;br /&gt;
[[image:operator_ldap_profile.png]]&lt;br /&gt;
&lt;br /&gt;
=== Special settings for LDAP Profile: Estos MetaDirectory 3.5===&lt;br /&gt;
&lt;br /&gt;
This article section will explain how to configure the MetaDirectory to enable full-text search by means of a single LDAP attribue. &lt;br /&gt;
&lt;br /&gt;
In a standard configuration the search within the Operator application is performed according the edit field &#039;&#039;&#039;Configuration/LDAP/Name Attributes&#039;&#039;&#039;.  The list of name attributes defaulted previously to &#039;&#039;&#039;company,sn,givenName&#039;&#039;&#039; and could be set by means of a profile button within the LDAP inline-help.&lt;br /&gt;
&lt;br /&gt;
A second profile button &#039;&#039;&#039;Estos MetaDirectory 3.5&#039;&#039;&#039; was added into the inline-help. If that button was clicked, it sets the list of name attributes to a single attribute &#039;&#039;&#039;searchContact&#039;&#039;&#039;. The &#039;&#039;searchContact&#039;&#039; attribute is kind of a meta attribute, that doesn&#039;t physically exist within the LDAP database. It rather serves as a vehicle realizing a full-text query processing whereby multiple physical attributes will be considered by the MetaDirectory.&lt;br /&gt;
&lt;br /&gt;
Which physical attributes are getting queried is subject of an administrative task. As the following screenshot illustrates, the MetaDirectoy&#039;s &#039;&#039;&#039;Search Assistant&#039;&#039;&#039; is the place where an administrator controls the behaviour of the full-text search triggered by the &#039;&#039;searchContact&#039;&#039; attribute. The search assistant allows to check multiple database fields within the column &#039;&#039;&#039;Contact search&#039;&#039;&#039;. All database fields enabled are going to be considered for the &#039;&#039;searchContact&#039;&#039;-related full-text search.&lt;br /&gt;
[[Image:Howto fulltext search screen 01.png]]&lt;br /&gt;
&lt;br /&gt;
As can be seen right next to the column &#039;&#039;Contact search&#039;&#039; resides the column &#039;&#039;&#039;Number search&#039;&#039;&#039;. The same principle applies. However, it is not targeting the attribute &#039;&#039;searchContact&#039;&#039;, but the attribute &#039;&#039;&#039;searchNumber&#039;&#039;&#039;. This is why the edit field &#039;&#039;&#039;Configuration/LDAP/Number Attributes&#039;&#039;&#039; will be set to &#039;&#039;&#039;searchNumber&#039;&#039;&#039; when clicking the profile button mentioned above.&lt;br /&gt;
&lt;br /&gt;
*Benefits&lt;br /&gt;
**Short and concise LDAP filters are sent towards the MetaDirectory&lt;br /&gt;
**Indexed search increases overall query performance&lt;br /&gt;
&lt;br /&gt;
=Configuration, Specialties=&lt;br /&gt;
This section covers somewhat advanced configuration aspects.&lt;br /&gt;
==Suppress Call Display==&lt;br /&gt;
A privacy list may be administrated manually within the operator&#039;s configuration file. The purpose is to provide a means for privacy, such that call details won&#039;t be visible from within the application. &lt;br /&gt;
*Click on the button &#039;&#039;&#039;File/Configuration/Misc/AppData&#039;&#039;&#039;.&lt;br /&gt;
**A Windows Explorer is going to come up, showing the contents of &#039;&#039;C:\Users\&amp;lt;your user directory&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator\&#039;&#039;.&lt;br /&gt;
*Terminate the operator.&lt;br /&gt;
*Open &#039;&#039;&#039;swconfig.xml&#039;&#039;&#039; witin a text editor&lt;br /&gt;
*Enter the list as in the following excerpt (&#039;&#039;name=&amp;quot;..&amp;quot;&#039;&#039; corresponds to the user&#039;s short name)&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;privacy&amp;gt;&lt;br /&gt;
	   &amp;lt;hide name=&amp;quot;mst&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/privacy&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It&#039;s also possible to add all objects to a privacy list by adapting the config part as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;privacy&amp;gt;&lt;br /&gt;
	   &amp;lt;hide hide-all=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/privacy&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Restart the app&#039;.&lt;br /&gt;
&lt;br /&gt;
==Suppress Presence Display==&lt;br /&gt;
(From on hotifx16)A privacy list may be administrated manually within the operator&#039;s configuration file. The purpose is to provide a means for privacy, such that presence details won&#039;t be visible from within the application. &lt;br /&gt;
*Click on the button &#039;&#039;&#039;File/Configuration/Misc/AppData&#039;&#039;&#039;.&lt;br /&gt;
**A Windows Explorer is going to come up, showing the contents of &#039;&#039;C:\Users\&amp;lt;your user directory&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator\&#039;&#039;.&lt;br /&gt;
*Terminate the operator.&lt;br /&gt;
*Open &#039;&#039;&#039;swconfig.xml&#039;&#039;&#039; witin a text editor&lt;br /&gt;
*Enter the list as in the following excerpt (&#039;&#039;name=&amp;quot;..&amp;quot;&#039;&#039; corresponds to the user&#039;s short name)&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;privacy&amp;gt;&lt;br /&gt;
	   &amp;lt;hide-presence name=&amp;quot;mst&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/privacy&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It&#039;s also possible to add all objects to a privacy list by adapting the config part as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;privacy&amp;gt;&lt;br /&gt;
	   &amp;lt;hide-presence hide-all=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/privacy&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Restart the app&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Suppress PBX search==&lt;br /&gt;
A special configuration option within the configsw.xml file deactivates display of the PBX search. Valid for Operator version 9.0211 onwards.&lt;br /&gt;
&lt;br /&gt;
*Terminate the operator.&lt;br /&gt;
*Open &#039;&#039;&#039;swconfig.xml&#039;&#039;&#039; witin a text editor&lt;br /&gt;
*Add the new command line as in the following excerpt&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
  &amp;lt;config&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;hide-search&amp;gt;pbx&amp;lt;/hide-search&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*store swconfig.xml&lt;br /&gt;
*Restart the application.&lt;br /&gt;
&lt;br /&gt;
==Unattended Installation==&lt;br /&gt;
The following command line for the MS Installer program msiexec&amp;lt;ref&amp;gt;Windows Installer, Command Line Options: http://msdn.microsoft.com/en-us/library/aa367988%28v=vs.85%29.aspx&amp;lt;/ref&amp;gt; has been reported to be working with the &#039;&#039;All Users&#039;&#039; installation setting.&lt;br /&gt;
&amp;lt;code type=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
msiexec /i innovaphone.operator.setup.msi /passive /l* &amp;quot;Logdatei.txt&amp;quot; INSTALLDIR=&amp;quot;C:\Program Files\innovaphone AG\innovaphone® Operator\&amp;quot; ALLUSERS=1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Start With A Disctinct UI Culture==&lt;br /&gt;
The system culture controls the UI culture. The Operator appears in english on an english OS.&lt;br /&gt;
&lt;br /&gt;
To force a different culture&lt;br /&gt;
*&#039;&#039;&#039;Win Explorer&#039;&#039;&#039; Browse to &#039;&#039;C:\Program Files (x86)\innovaphone AG\innovaphone® Operator&#039;&#039;&lt;br /&gt;
*Right-Click on innovaphone.operator&lt;br /&gt;
*A context menu opens. Select &#039;&#039;&#039;Send To Desktop As Shortcut&#039;&#039;&#039;.&lt;br /&gt;
*Locate the newly created shortcut/link on the desktop and click on &#039;&#039;&#039;Properties&#039;&#039;&#039;.&lt;br /&gt;
*Modify the target from&lt;br /&gt;
&amp;lt;code type=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;C:\Program Files (x86)\innovaphone AG\innovaphone® Operator\innovaphone.operator.exe&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Into&lt;br /&gt;
&amp;lt;code type=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;C:\Program Files (x86)\innovaphone AG\innovaphone® Operator\innovaphone.operator.exe&amp;quot; /culture de-DE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Possible cultures are&lt;br /&gt;
*&#039;&#039;&#039;english&#039;&#039;&#039; en-GB&lt;br /&gt;
*&#039;&#039;&#039;czech&#039;&#039;&#039; cs-CZ&lt;br /&gt;
*&#039;&#039;&#039;german&#039;&#039;&#039; de-DE&lt;br /&gt;
*&#039;&#039;&#039;italian&#039;&#039;&#039; it-IT&lt;br /&gt;
*&#039;&#039;&#039;dutch&#039;&#039;&#039; nl-NL&lt;br /&gt;
*&#039;&#039;&#039;french&#039;&#039;&#039; fr-FR&lt;br /&gt;
*&#039;&#039;&#039;norwegian&#039;&#039;&#039; nb-NO&lt;br /&gt;
*&#039;&#039;&#039;polish&#039;&#039;&#039; pl-PL&lt;br /&gt;
*&#039;&#039;&#039;swedish&#039;&#039;&#039; se-SE&lt;br /&gt;
*&#039;&#039;&#039;spanish&#039;&#039;&#039; es-ES&lt;br /&gt;
*&#039;&#039;&#039;russian&#039;&#039;&#039; ru-RU&lt;br /&gt;
&lt;br /&gt;
An alternative to the shortcut object vehicle is configuration file &#039;&#039;swconfig.xml&#039;&#039;. The format is as follows&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
        &amp;lt;culture&amp;gt;de-DE&amp;lt;/culture&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==swconfig.xml into /AppData/Local/==&lt;br /&gt;
The default directory for configuration data(swconfig.xml) is &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To keep the configuration not roaming, but PC-local, the operator application can be forced to look into &#039;&#039;Local&#039;&#039; instead:&lt;br /&gt;
*Click the button &#039;&#039;&#039;File/Configuration/Misc/AppData&#039;&#039;&#039; (Datei/Konfiguration/Diverses/AppData)&lt;br /&gt;
*WinExplore starts and displays &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator&#039;&#039;.&lt;br /&gt;
*Terminate the operator application&lt;br /&gt;
*Within the WinExplorer move to &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Local\&#039;&#039;&lt;br /&gt;
*Under &#039;Local&#039; create the directory &#039;&#039;innovaphone AG&#039;&#039;&lt;br /&gt;
*Under &#039;innovaphone AG&#039; create the directory &#039;&#039;innovaphone Operator&#039;&#039;&lt;br /&gt;
*Copy swconfig.xml from &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator&#039;&#039; into the new location &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Local\innovaphone AG\innovaphone Operator&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When starting the operator it is now referencing swconfig.xml from the newly created directory &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Local\innovaphone AG\innovaphone Operator&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Hosted PBX (Slave with license only)==&lt;br /&gt;
If you connect to a slave with &#039;&#039;license only&#039;&#039; activated you also have to activate the configuration &#039;&#039;Configuration :: Various :: Do not search at the master&#039;&#039;.&lt;br /&gt;
Otherwise the Opeartor will search or try configuration on the license master which will not work.&lt;br /&gt;
&lt;br /&gt;
=Addressing Large Scale Installations=&lt;br /&gt;
One of the lengthy discussions throughout the product design phase concerned large installations. Say, installations with more than 300 pbx users, up to a few thousand of them.&lt;br /&gt;
&lt;br /&gt;
To make a long story short - eventually it turned out the main gimmick, the new busy lamp field, wasn&#039;t suitable. With a BLF the need for a search function would have emerged which was deemed contradictory to the intended purpose of a BLF.&lt;br /&gt;
&lt;br /&gt;
Hence, the existing PBX search function received a major overhaul by adding the new [[#Full_Text_Index | Full Text Index]]. The goal of the full text index was to provide a search function being perceived as fast and superior to the one of the predecessor application. The BLF was left as-is without an extra search capability.&lt;br /&gt;
&lt;br /&gt;
Finally, a checklist aiding planning of large scale installations&lt;br /&gt;
*Make the operator an active member of a group e.g. &amp;quot;soap&amp;quot;.&lt;br /&gt;
*Make all other pbx users, that shall be searchable non-active members of the same group &amp;quot;soap&amp;quot;.&lt;br /&gt;
**Per PBX not more than 2000&amp;lt;ref&amp;gt;The PBX has a hard-coded limit of 2000 group members&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;If more than 2000 users are required, those must be distributed on multiple PBXs with 2000 &amp;quot;soap&amp;quot; members each&amp;lt;/ref&amp;gt;&lt;br /&gt;
*Ensure the Operator 9&#039;s PBX search is configured for &#039;&#039;&#039;Full Text/Volltext&#039;&#039;&#039;&lt;br /&gt;
*On the PC running the Operator 9 watch out for resource consumption.&lt;br /&gt;
**A countermeasure against too much of memory consumption is to completely disable the BLF&amp;lt;ref&amp;gt;Calculate with 80KB per BLF entry&amp;lt;/ref&amp;gt;. See the checkmark &#039;&#039;&#039;Configuration/Misc/BLF Deactivate&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
==How to obtain logs with Operator Application==&lt;br /&gt;
&lt;br /&gt;
When an error occurs the Operator Application will give an alert on status bar and we can click on &amp;quot;save trace&amp;quot; button to retrieve the log. However we can force the trace on Operator Application that will generate always the trace file.&lt;br /&gt;
&lt;br /&gt;
To do so, we need to go File-&amp;gt;Configuration then Misc-tab and enable &amp;quot;trace&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
[[Image:Concept_Operator_Version_9_trace.png]]&lt;br /&gt;
&lt;br /&gt;
=Known Issues=&lt;br /&gt;
==Application Won&#039;t Start On Windows XP==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The application doesn&#039;t start properly on Windows XP. An error text file is going to be generated comprising the following content:&lt;br /&gt;
&amp;lt;code text&amp;gt;&lt;br /&gt;
31.07.2009 16:40:46,innovaphone Operator,8.0.38.0&lt;br /&gt;
&lt;br /&gt;
OS: Microsoft Windows NT 5.1.2600 Service Pack 2&lt;br /&gt;
CLR:    2.0.50727.1433&lt;br /&gt;
&lt;br /&gt;
An internal error occurred&lt;br /&gt;
&lt;br /&gt;
Alarms:&lt;br /&gt;
Exception, date=31.07.2009 16:40:45, info=unhandled exception&lt;br /&gt;
================================================================&lt;br /&gt;
&#039;System.Windows.Controls.ToolTip&#039; value cannot be assigned to property &#039;Value&#039; of object &#039;System.Windows.Setter&#039;.&lt;br /&gt;
&#039;System.Windows.Controls.ToolTip&#039; is not a valid value for &#039;Setter.Value&#039;; &lt;br /&gt;
values derived from Visual or ContentElement are not supported.  &lt;br /&gt;
Error at object &#039;System.Windows.Controls.ToolTip&#039; in markup file &#039;operator;component/activecallsincontrol.xaml&#039;.&lt;br /&gt;
at System.Windows.Markup.XamlParseException.ThrowException(String message, Exception innerException, Int32 lineNumber, Int32 linePosition, Uri baseUri, XamlObjectIds currentXamlObjectIds, XamlObjectIds contextXamlObjectIds, Type objectType)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Have a look into what Windows Update offers as optional components. If there&#039;s a cumulative update for .NET 2.0/3.0/3.5 you&#039;re asked to install said update (addendum: The update may also show up as &#039;&#039;.NET 3.5 SP1&#039;&#039;&amp;lt;ref&amp;gt;.Net 3.5 SP1: http://www.microsoft.com/en-us/download/details.aspx?id=22&amp;lt;/ref&amp;gt;). That update is going to upgrade the CLR onto the required version. Please note that Service Pack 3 is mandatory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The original .Net Common Language Runtime (CLR) is not suitable and too old.&lt;br /&gt;
&lt;br /&gt;
==Blind-Transferred Calls Don&#039;t Show Up in List of &amp;quot;Transferred Calls&amp;quot;==&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Calls that were blind-transferred by the Operator application may probably not appear in the respective call list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
*At the PBX browse to PBX/Config/General - Field &amp;quot;Recall Timeout&amp;quot;&lt;br /&gt;
*Enter something useful in seconds (30 or 60)&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
A blind-transferred call is going to fall-back after that amount of seconds if not accepted in-between.&lt;br /&gt;
&lt;br /&gt;
==Blind-Transferred Calls Don&#039;t Fall Back==&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Calls that were blind-transferred by the Operator application don&#039;t fall-back to the operator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
*The cause and solution are the same as in [[#Blind-Transferred Calls Don&#039;t Show Up in List of &amp;quot;Transferred Calls&amp;quot;|Blind-Transferred Calls Don&#039;t Show Up in List of &amp;quot;Transferred Calls&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==Operator Freezes On Startup==&lt;br /&gt;
The operator application was reported to get stuck on startup. The user interface turned white and did not respond to any input.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The application window looks as follows [[Image:screenshot-oppi-freeze.jpg|center|thumb|200px|Operator freezes on startup]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
This symptom can occur due to a corruption of the framework&#039;s font cache data file. Try the workaround:&lt;br /&gt;
*&#039;&#039;&#039;Start/Run&#039;&#039;&#039; of &#039;&#039;&#039;services.msc&#039;&#039;&#039;&lt;br /&gt;
*Stop the service &#039;&#039;Windows Presentation Foundation Font Cache 3.0.0.0&#039;&#039;/&#039;&#039;Windows Presentation Foundation-Schriftartcache 3.0.0.0&#039;&#039;&lt;br /&gt;
*Now delete the system file &#039;&#039;FontCache3.0.0.0.dat&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The file likely resides under Windows XP in&lt;br /&gt;
--&lt;br /&gt;
%systemdrive%\Documents and Settings\LocalService\Local Settings\Application Data&lt;br /&gt;
&lt;br /&gt;
The file likely resides under Windows Vista/7 in&lt;br /&gt;
--&lt;br /&gt;
%windir%\ServiceProfiles\LocalService\AppData\Local&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Reboot the machine&lt;br /&gt;
&lt;br /&gt;
==Operator Displays Corrupted Fonts==&lt;br /&gt;
After 2 years of service the operator application was reported to suddenly display corrupted fonts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The application window looks as follows [[Image:Operator_font_corrupted.jpg|center|thumb|200px|Operator displays corrupted fonts]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
This symptom occurred due to a corruption of the framework&#039;s font cache data file. Try the workaround:&lt;br /&gt;
*&#039;&#039;&#039;Start/Run&#039;&#039;&#039; of &#039;&#039;&#039;services.msc&#039;&#039;&#039;&lt;br /&gt;
*Stop the service &#039;&#039;Windows Presentation Foundation Font Cache 3.0.0.0&#039;&#039;/&#039;&#039;Windows Presentation Foundation-Schriftartcache 3.0.0.0&#039;&#039;&lt;br /&gt;
*Now delete the system file &#039;&#039;FontCache3.0.0.0.dat&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The file likely resides under Windows XP in&lt;br /&gt;
--&lt;br /&gt;
%systemdrive%\Documents and Settings\LocalService\Local Settings\Application Data&lt;br /&gt;
&lt;br /&gt;
The file likely resides under Windows Vista/7 in&lt;br /&gt;
--&lt;br /&gt;
%windir%\ServiceProfiles\LocalService\AppData\Local&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Reboot the machine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
It is the same root cause as above in [[#Operator_Freezes_On_Startup|Operator Freezes On Startup]].&lt;br /&gt;
&lt;br /&gt;
==Pickup Of WQ Calls==&lt;br /&gt;
From on build 90112 the pickup of WQ calls is only possible for calls not in the CONNECT state. &lt;br /&gt;
*Activate the checkmark &#039;&#039;&#039;PBX/Objects/&amp;lt;WQ Object&amp;gt;/Queue/Operator connect for SOAP&#039;&#039;&#039;&lt;br /&gt;
**this setting guarantees that a WQ call is displayed as CONNECTed only in case of an operator actively talking to the caller party A.&lt;br /&gt;
&lt;br /&gt;
==Not Working: &#039;&#039;Focus on incoming call&#039;&#039;==&lt;br /&gt;
The configuration dialog offers an auto-focus checkmark &#039;&#039;&#039;File/Configuration/Misc/Focus on inc. call&#039;&#039;&#039;. Customers reported that the application manages getting into the foreground. However, without catching the keyboard focus. A final click into the application was necessary.&lt;br /&gt;
&lt;br /&gt;
Instead, the application icon within the taskbar starts flashing, indicating that further user interaction is required.&lt;br /&gt;
The application window looks as follows &lt;br /&gt;
[[Image:Set-foreground-waiting.PNG|center|thumb|200px|Operator waiting for a click]].&lt;br /&gt;
&lt;br /&gt;
This behaviour is by-design and cannot be circumvented in a common manner. An MS statement&amp;lt;ref&amp;gt;Set Foreground Window: http://msdn.microsoft.com/en-us/library/ms633539%28VS.85%29.aspx&amp;lt;/ref&amp;gt; clarifies this OS-behaviour:&lt;br /&gt;
*&#039;&#039;An application cannot force a window to the foreground while the user is working with another window. Instead, Windows flashes the taskbar button of the window to notify the user.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The only reliable way to have the auto-focus feature working is by minimizing the application to the tray area. See the following menu button. &lt;br /&gt;
[[Image:Op-minimize-to-tray.png|center|thumb|200px|Button: Minimize to tray area]]&lt;br /&gt;
Auto-focusing from that window-state/application-state is supposed to be more reliable in getting the application into the foreground and assigning it the keyboard focus.&lt;br /&gt;
&lt;br /&gt;
==Application Crash: Methode nicht gefunden/Method Not Found==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The application crashes - e.g. when searching - and prompts an exception labeled &#039;&#039;&#039;Methode nicht gefunden/Method Not Found&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;code text&amp;gt;&lt;br /&gt;
Exception, date=12.06.2013 16:35:52, info=unhandled exception&lt;br /&gt;
================================================================&lt;br /&gt;
Methode nicht gefunden: &amp;quot;System.Object[] innovaphone.idx.IFulltextIndex.Query(Char, System.String[])&amp;quot;.&lt;br /&gt;
   bei switchboard.Index.FtIndexQueryVlv(Char equalityTerminator, String[] terms, Int32 pageSize, VlvCursor&amp;amp; cursor)&lt;br /&gt;
   bei switchboard.SearchPbxControl.PbxSearchFullTextExecute(String[] terms)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
De-install and afterwards re-install the application(The configuration won&#039;t be deleted, i.e. will remain.).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The root-cause is a DLL versioning problem. The problem may occur after an update-install took place. That is, where a newer Operator was installed over an older, existing installation.&lt;br /&gt;
&lt;br /&gt;
==Inbound Calls Appear Doubled==&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The upper-left list of calls titled &#039;&#039;Incoming calls for..&#039;&#039; displays a single call as two or even more calls.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Configure a distinct &#039;&#039;&#039;Hardware ID&#039;&#039;&#039; of one of the operator&#039;s phones under &#039;&#039;&#039;File/Configuration/General/Hardware ID&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The operator is likely to have multiple registrations active, originating from multiple endpoint devices. Only one of those devices shall be selected as the operator&#039;s active phone.&lt;br /&gt;
&lt;br /&gt;
== Multiple Operator Instances and Nightswitch settings ==&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Time settings will be empty or are not saved if more than one operator instance is used.&lt;br /&gt;
&lt;br /&gt;
== Installation on Windows 10 ==&lt;br /&gt;
An installation was tested on Windows 10 (Microsoft Windows NT 6.2.9200.0). The installation stopped with a hint for a missing, but required .NET framework version 3.x. Just follow the offered download link for .NET 3.5 SP1 and retry the installation afterwards. This procedure provided a successful installation of the application.&lt;br /&gt;
[[Image:Screenshot-op9-install-win10.png|center|thumb|200px|Button: Download .Net 3.5 SP1]]&lt;br /&gt;
&lt;br /&gt;
Other reports from the field show that this error might be omitted by removing the PC from its domain before installation and put it back afterwards.&lt;br /&gt;
&lt;br /&gt;
==Application cannot Initialize at PBX==&lt;br /&gt;
The application may fail to initialize at a PBX.&lt;br /&gt;
&lt;br /&gt;
Symptom:&lt;br /&gt;
* The application repeatedly prompts a red-colored error message onto the status line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
info=&#039;PBX Setup Completed:&#039;, error=&#039;Initialize failed!&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cause:&lt;br /&gt;
* The Windows proxy settings interfere&lt;br /&gt;
Solution:&lt;br /&gt;
* Alter the proxy configuration within &#039;&#039;&#039;Internet Options/Connections(/LAN Settings)&#039;&#039;&#039;. Those are accessible either via the Windows System Settings or from within the IE. Ensure that either the proxy-configuration is correct or deactivate it completely. It has been reported that the checkmark-activation of &#039;&#039;Internet Options/Connections/LAN-Settings/Bypass proxy server for local addresses&#039;&#039; also helped to solve the proxy-related problem.&lt;br /&gt;
&lt;br /&gt;
==Installation Operator failed==&lt;br /&gt;
Exception, date=02.12.2015 13:20:44, info=unhandled exception&lt;br /&gt;
&lt;br /&gt;
Cause:&lt;br /&gt;
* http://code.logos.com/blog/2009/11/how_to_crash_every_wpf_application.html&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
* Open the control panel from Windows and take a look into the logs. There should be a hint.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Contacts search: missing contacts on Full Text search==&lt;br /&gt;
&lt;br /&gt;
Symptom:&lt;br /&gt;
*Sometimes the operator cannot find existing contacts when performing a search, this only seems to happen when &amp;quot;Full Text&amp;quot; method is used.&lt;br /&gt;
&lt;br /&gt;
Cause:&lt;br /&gt;
*This occurs when the _TAPI_ group has more than 2048 (firmware limit) members.&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
*To workaround this issue we suggest to split the users over two groups and make the _TAPI_ user an active member of both groups.&lt;br /&gt;
&lt;br /&gt;
=Localization=&lt;br /&gt;
The article [[Howto:Assist_In_Localization_Of_Operator_Version_9|Howto:Assist In Localization Of Operator Version 9]] serves as a starting point, if you are interested in helping to localize the application.&lt;br /&gt;
&lt;br /&gt;
=Uninstall=&lt;br /&gt;
&lt;br /&gt;
When we uninstall the Operator application on Windows the user configuration it&#039;s not deleted from the Roaming folder, so if we wish to do an reinstallation of the application with a new config we must delete manually the configuration data (swconfig.xml) from the Roaming folder: C:\Users\&amp;lt;user&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator.&lt;br /&gt;
&lt;br /&gt;
=Notes=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference9:Concept_Operator&amp;diff=58541</id>
		<title>Reference9:Concept Operator</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference9:Concept_Operator&amp;diff=58541"/>
		<updated>2021-04-27T11:05:36Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Contacts search: missing contacts on Full Text search */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- keywords: operator, vermittlungsplatz, vermittlung, cbc, switchboard --&amp;gt;&lt;br /&gt;
[[Category:Concept9|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Concept|{{PAGENAME}}]]&lt;br /&gt;
=Applies To=&lt;br /&gt;
This information applies to&lt;br /&gt;
* innovaphone Operator V9&lt;br /&gt;
&lt;br /&gt;
The article&#039;s intent is to serve as the Operator 9 information center. The addressed audience is administrators, partners, resellers.&lt;br /&gt;
&lt;br /&gt;
=Requirements=&lt;br /&gt;
*at least Windows 7 (and higher) - Windows Vista &amp;amp; Windows XP &#039;&#039;&#039;may&#039;&#039;&#039; work&lt;br /&gt;
*Windows Terminal Server&lt;br /&gt;
*1.5 GHz CPU (32-bit, or 64-bit), Dual-Core is recommended&lt;br /&gt;
*2 GB of RAM&lt;br /&gt;
*DirectX 9 capable graphics adapter&lt;br /&gt;
&lt;br /&gt;
=More Information=&lt;br /&gt;
The innovaphone Operator 9 succeeds the innovaphone Operator 8. &lt;br /&gt;
*A busy lamp field(busy field, BLF) is the main addendum to the application. &lt;br /&gt;
**Condensed user information: Display Name, Number, PBX&lt;br /&gt;
**An entry&#039;s context menu allows to reveal detailed user informations for an entry&lt;br /&gt;
**Colored User status: available(registered &amp;amp; not engaged in a call), engaged in a call, not registered&lt;br /&gt;
**Symbolized presence status: presence activity, presence note(as tooltip)&lt;br /&gt;
**Display options for the BLF window &lt;br /&gt;
***within the main window &lt;br /&gt;
***within a separate window &lt;br /&gt;
***within a separate window on a 2nd monitor&lt;br /&gt;
**Two different entry layouts can be selected in three different sizes(small, medium, large)&lt;br /&gt;
**Freely placeable labels&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
*Simplified usage&lt;br /&gt;
**Drag&amp;amp;Drop or keyboard-only usage possible&lt;br /&gt;
**main functionalities (accept call, initiate call) just with ENTER&lt;br /&gt;
**direct dialing without search / just use number&lt;br /&gt;
**Blind transfer eased - just use &#039;+&#039;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
*Search&lt;br /&gt;
**Full text search&lt;br /&gt;
***Fast, now the application default&lt;br /&gt;
***Targets large-scale installations&lt;br /&gt;
***Indexing: Long Name, Name, Number, Groups, PBX/Location&lt;br /&gt;
**Ldap search&lt;br /&gt;
***Support for Active Directory&#039;s attributes &amp;quot;department&amp;quot;, &amp;quot;description&amp;quot;&lt;br /&gt;
***&amp;quot;department&amp;quot; offers button to search for alternative destinations within a department&lt;br /&gt;
**Pbx search&lt;br /&gt;
***&amp;quot;group&amp;quot; offers button to search for alternative destinations within a group&lt;br /&gt;
***Email integration, send notification on missed calls&lt;br /&gt;
**Individual PBX can be excluded/barred from the operator&#039;s search view&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
*Call Switching&lt;br /&gt;
**Symbol indicating external calls&lt;br /&gt;
**Park+Wait functionality for blind-transferred calls towards busy internal destinations.&lt;br /&gt;
**Allows for operator procedure: &#039;&#039;The extension is busy. Do you want to wait?..&#039;&#039;&lt;br /&gt;
**Blinking indicator for parked and muted calls&lt;br /&gt;
**Outgoing calls can be placed without paying attention to call diversions&lt;br /&gt;
**Call diversions can be manipulated from operator (if access right is granted)&lt;br /&gt;
**Call journal with simplified and detailed representation (successful, missed, transferred, etc.). Cyclic storage of max. 300 calls.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
*Miscellaneous&lt;br /&gt;
**Alternative layout&lt;br /&gt;
**Nightswitch supported in GUI&lt;br /&gt;
**Secured access (HTTPS/TLS)&lt;br /&gt;
**Call context for currently active incoming call.&lt;br /&gt;
&lt;br /&gt;
=Download=&lt;br /&gt;
* The software can be downloaded from the &#039;&#039;apps&#039;&#039; section: http://download.innovaphone.com/ice/9.00/#apps&lt;br /&gt;
&lt;br /&gt;
=Application History=&lt;br /&gt;
The hotfix history can be found [[Reference9:Release_Notes_Operator_V9|in the operator 9 release notes]]&lt;br /&gt;
&lt;br /&gt;
=Full Text Index=&lt;br /&gt;
One shortcoming of the predecessor application was the confinement to search for PBX users either &#039;&#039;by name&#039;&#039; or &#039;&#039;by long name&#039;&#039; only. The Operator 9 therefore offers the new search capability &#039;&#039;by full text index&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The full text index was implemented application-local. That is, that index is not going to be maintained by the PBX, but by the Operator application itself in-RAM. Thus, making full text queries lightning fast.&lt;br /&gt;
&lt;br /&gt;
The full text indexed is supposed to scale well within large installations. In contrast the busy lamp field is expected to be operable with up to ~300 pbx users.&lt;br /&gt;
&lt;br /&gt;
Administrators must keep control of what is going to be fed into the index. This task must be accomplished by configuration of regular group memberships within a PBX. As a quick exemplary rule of thumb: &lt;br /&gt;
*Make the operator&#039;s PBX object an active member of a group e.g. &amp;quot;soap&amp;quot;. Make all other user objects that shall be indexed (non-active) members of the same group &amp;quot;soap&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is indexed?&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
*Name&lt;br /&gt;
*Long Name&lt;br /&gt;
*Display Name&lt;br /&gt;
*Number&lt;br /&gt;
*Node number + number&lt;br /&gt;
*Groups&lt;br /&gt;
*PBX&lt;br /&gt;
&lt;br /&gt;
=Busy-Field=&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
A screenshot featuring some numbered screen elements, explains the BLF&#039;s makeup.&lt;br /&gt;
[[Image:op9-bf-overview.jpg|center|thumb|200px|Overview, Operator 9]]&lt;br /&gt;
*1)BLF entry&lt;br /&gt;
*2)BLF label&lt;br /&gt;
*3)Thumb for menu panel&lt;br /&gt;
*4)Menu panel(slid out)&lt;br /&gt;
*5)Selector for BLF display as separate window or within main window&lt;br /&gt;
*6)Selector for the layout of BLF entries&lt;br /&gt;
*7)Erase button for selected BLF entries/labels&lt;br /&gt;
*8)Button to initially show the BLF&lt;br /&gt;
*9)Example of a BLF entry with a presence symbol&lt;br /&gt;
&lt;br /&gt;
==Arranging Entries==&lt;br /&gt;
&lt;br /&gt;
*Create a free line&lt;br /&gt;
**Select 2x entries&lt;br /&gt;
**Drag the selected entries onto some other entries&lt;br /&gt;
**All entries within the target line and all lines below are going to be moved downwards.&lt;br /&gt;
[[Image:op9-bf-edit-freeline.jpg|center|thumb|200px|Create a free line]]&lt;br /&gt;
&lt;br /&gt;
*Adding a label&lt;br /&gt;
**Right-Click into a free location&lt;br /&gt;
**A context menu appears - select &#039;&#039;Add Label&#039;&#039;&lt;br /&gt;
**A label is going to be placed.&lt;br /&gt;
**Left-Click into the label, in order to edit the label&#039;s text.&lt;br /&gt;
[[Image:Op9-bf-add-label.jpg|center|thumb|200px|Adding a label]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Changing the position of a single entry&lt;br /&gt;
**Left-Click the entry and keep the left mouse button pressed.&lt;br /&gt;
**Drag the entry into its new position.&lt;br /&gt;
**Drop the entry by releasing the mouse button.&lt;br /&gt;
In case of an entry already occupying the new position, the two entries are going to exchange their positions.&lt;br /&gt;
[[Image:op9-bf-xchng-entries.jpg|center|thumb|200px|Changing the position of a single entry]]&lt;br /&gt;
&lt;br /&gt;
*Changing the position of multiple entries&lt;br /&gt;
**Left-Click into a free position and keep the left mouse button pressed.&lt;br /&gt;
**Open up a selection rectangle. Entries intersecting with the rectangle are going to be selected.&lt;br /&gt;
**Release the left mouse button.&lt;br /&gt;
**Left-Click onto one of the selected entries and keep the left mouse button pressed.&lt;br /&gt;
**Drag the entries into their new position.&lt;br /&gt;
**Drop the entries by releasing the mouse button.&lt;br /&gt;
In case of one or more entries already occupying the new position, the entire lines containing those entries and the lines below are going to be moved downwards.&lt;br /&gt;
[[Image:Op9-bf-xchng-bulk.jpg|center|thumb|200px|Changing the position of multiple entries]]&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
This section hilights a few key concepts of the Operator configuration. A few prerequisites must be considered.&lt;br /&gt;
*The operator&#039;s phone must be configured, such that &#039;&#039;call waiting&#039;&#039; is enabled. This is important, because of situations whith more than one call being active at the phone. Some such scenarios may be obvious: operator user is engaged in a call while an internal caller is trying to directly call through to the operator&#039;s desk. Some such scenarios aren&#039;t obvious. For instance the operation to unpark a call may often coincide with a call just being signalled by a waiting queue towards the operator&#039;s phone.&lt;br /&gt;
*Within the PBX the value &#039;&#039;&#039;PBX/Configuration/General/Recall Timeout&#039;&#039;&#039; should be set to a value greater than 0 seconds. Otherwise the call list &#039;&#039;Transferred Calls&#039;&#039; will remain empty and unaccepted blind transferred calls will never fallback to the operator.&lt;br /&gt;
==General==&lt;br /&gt;
The application is going to establish at least two Soap sessions. One for the operator user&#039;s identity. And one for the query user&#039;s identity.&lt;br /&gt;
&lt;br /&gt;
The first session is needed in order to receive call informations for the operator user&#039;s phone. This session will be established only at the PBX configured under &#039;&#039;&#039;IP Address&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The second session is needed to receive user informations for all PBX user objects that shall be full text indexed. It is also needed for all PBX user objects that shall appear within the busy field. The Operator is going to establish this session type at every known PBX.&lt;br /&gt;
*&#039;&#039;&#039;Query User&#039;&#039;&#039; As a rule of thumb&lt;br /&gt;
**Create a user object &#039;&#039;_TAPI_&#039;&#039; (or &#039;&#039;SOAP&#039;&#039;) on all PBXs within the network of PBXs (if Slaves are replicated from a Master, just create this user at Master without assigning it to a PBX).&lt;br /&gt;
***The user &#039;&#039;_TAPI_&#039;&#039; must be an active member of a group &#039;&#039;tapi&#039;&#039;(or &#039;&#039;soap&#039;&#039;).&lt;br /&gt;
**All other users (also the ones at Slave PBXes) that shall be full text indexed must become a non-active member in the group &#039;&#039;tapi&#039;&#039;.&lt;br /&gt;
**In case of slave scenarios, the slavePBX object at Master itself needs to be part of that group. &#039;&#039;&#039;Note&#039;&#039;&#039;: This will not work when having &amp;quot;sub-slaves&amp;quot; being registered to slaves itself.&lt;br /&gt;
**A dedicated PBX as search base can be selected via the drop down menu in the search area. Typing &amp;quot;.&amp;quot; in the search field opens a pop-up field containing all PBXes.&lt;br /&gt;
&lt;br /&gt;
==WQ (Waiting Queue)==&lt;br /&gt;
A WQ teams-up with an operator&#039;s phone by a group membership.&lt;br /&gt;
*A waiting queue &#039;&#039;wq-reception&#039;&#039; may exist.&lt;br /&gt;
*The WQ is an active member of a group &#039;&#039;reception&#039;&#039;.&lt;br /&gt;
*The operator user is a non-active member of the group &#039;&#039;reception&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Calls for the WQ are from now on also signalled towards the operator.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Nightswitch&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The nightswitch configuration is just a front-end for the PBX &#039;&#039;Boolean object&#039;&#039;. Its actual purpose is to provide a means for a diversion. A diversion that leads callers into an out-of-business-hour announcement. Here is the idea behind:&lt;br /&gt;
*A waiting queue &#039;&#039;wq-reception&#039;&#039; may exist and is configured under &#039;&#039;&#039;WQ&#039;&#039;&#039;.&lt;br /&gt;
*Enter the number (55 in this example) towards the out-of-business-hour announcement under &#039;&#039;&#039;Diversion&#039;&#039;&#039;. It may be the number of a dedicated voicemail object.&lt;br /&gt;
*Configure the time definitions for the regular business hours.&lt;br /&gt;
**1st: Start 9:00, End 17:00, Mon-Fri&lt;br /&gt;
**2nd: Start 0:00, End 0:00, Sat-Sun &lt;br /&gt;
**As Mode select Automatic &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: The automatic mode may be overridden by selecting &#039;&#039;Manual On&#039;&#039; or &#039;&#039;Manual Off&#039;&#039; as mode. &#039;&#039;Manual On&#039;&#039; causes the CFU (see below) to become active immediately and permanently.&lt;br /&gt;
&lt;br /&gt;
What happens behind the curtain is as follows:&lt;br /&gt;
*A new boolean object &#039;&#039;wq-reception-nightswitch&#039;&#039; will be created automatically by the Operator app&#039;.&lt;br /&gt;
*The boolean object is configured with the time definitions from above.&lt;br /&gt;
*A CFU is configured at the WQ &#039;&#039;wq-reception&#039;&#039;.&lt;br /&gt;
*The CFU will have the number 55 from above as destination.&lt;br /&gt;
*The CFU references the Boolean object &#039;&#039;wq-reception-nightswitch&#039;&#039; from above.&lt;br /&gt;
&lt;br /&gt;
The mode selector for the boolean object will be available for the user. Watch out for the WQ calls list.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
===Configuration of the Phone&#039;s Conference Facility (Recording-/Greeting Function)===&lt;br /&gt;
Every innovaphone telephone offers a tiny conference function. Besides its apparent use, the conference function may be utilized to realize audio recording.&lt;br /&gt;
The corresponding configuration page can be found within the phone&#039;s web UI under &#039;&#039;Configuration/RegistrationX/Recording&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Within the context of the innovaphone Operator it may also be used to provide the means for a personal audio greeting. A greeting that is about to played right after an incoming call was connected. For each incoming call over the course of a working-day.&lt;br /&gt;
&lt;br /&gt;
Both scenarios require a voicemail script.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Only one of the two possibilities can be configured. Either the audio recording or the greeting function. The two cannot be used concurrently.&lt;br /&gt;
&lt;br /&gt;
The following two sub-sections are going to explain the required configuration steps for both scenarios.&lt;br /&gt;
&lt;br /&gt;
===Greeting Function===&lt;br /&gt;
A few assumptions are taken into consideration.&lt;br /&gt;
*The PBX box offers a CF-card that is up and running. &lt;br /&gt;
*A voicemail object is going to listen on number 77.&lt;br /&gt;
&lt;br /&gt;
Deploy the following voicemail script (audio menu in english)&lt;br /&gt;
* download [[Media:Greeting.zip]]&lt;br /&gt;
* copy onto a CF-card underneath a directory &#039;&#039;greeting&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At the PBX create a new voicemail object&lt;br /&gt;
* Proceed to &#039;&#039;PBX/Objects/New Voicemail&#039;&#039; &lt;br /&gt;
* Enter &#039;&#039;Long Name, Name, Number&#039;&#039; as eg.: &#039;&#039;vm-greet, vm-greet, 77&#039;&#039;&lt;br /&gt;
* Enter the &#039;&#039;Script URL&#039;&#039; as http://127.0.0.1/drive/CF0/greeting/greet.xml&lt;br /&gt;
&lt;br /&gt;
Configure the recording function at the operator user&#039;s telephone&lt;br /&gt;
* Proceed to &#039;&#039;Configuration/RegistrationX/Recording&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;manual&#039;&#039; as &#039;&#039;Mode&#039;&#039;&lt;br /&gt;
* Enter &#039;&#039;77&#039;&#039; as &#039;&#039;Number&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Within the innovaphone Operator proceed to &#039;&#039;File/Configuration/Misc.&#039;&#039;&lt;br /&gt;
*&#039;&#039;Assignment of the Recording-function&#039;&#039;: Choose &#039;&#039;Greeting&#039;&#039;&lt;br /&gt;
*&#039;&#039;Destination Number&#039;&#039;: Enter the number (&#039;&#039;77&#039;&#039; in this example) that was configured in the phone&#039;s web UI underneath &#039;&#039;Configuration/RegistrationX/Recording&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The audio greeting will start automatically for incoming external calls. The decision which calls are treated as external calls is based on the configuration of &#039;&#039;File/Configuration/LDAP Location/External Line&#039;&#039; (Mostly &#039;&#039;0&#039;&#039;). A button will be displayed on-top of the list of incoming calls, if an audio greeting is played. The button allows to stop the greeting.&lt;br /&gt;
&lt;br /&gt;
The audio greeting won&#039;t be started for:&lt;br /&gt;
* a fallback call, i.e. a call that was blind-transferred, but never connected.&lt;br /&gt;
* a call that was unparked&lt;br /&gt;
* a call that was refetched from the list of blind-transferred calls&lt;br /&gt;
* internal calls&lt;br /&gt;
&lt;br /&gt;
In order to record a new audio greeting&lt;br /&gt;
*Just dial the number of the voicemail object (&#039;&#039;77&#039;&#039; in this example).&lt;br /&gt;
*The script will prompt for a key press on the telephone&lt;br /&gt;
*Record the new greeting and stop the recording with another key press on the telephone&lt;br /&gt;
*You will be prompted with the new greeting&lt;br /&gt;
*End the call (on-hook) - the new greeting will be active from now on.&lt;br /&gt;
&lt;br /&gt;
===Recording Function===&lt;br /&gt;
This functionality is actually a reuse of a solution being available since firmware version 6. Please read through the following article:&lt;br /&gt;
*[[Howto:A Simple Recording Solution On-Top of The innovaphone Voicemail|A Simple Recording Solution On-Top of The innovaphone Voicemail]]&lt;br /&gt;
&lt;br /&gt;
All that&#039;s needed to be configured within the innovaphone Operator can be found underneath &#039;&#039;File/Configuration/Misc.&#039;&#039;.&lt;br /&gt;
*&#039;&#039;Assignment of the Recording-function&#039;&#039;: Choose &#039;&#039;Recording&#039;&#039;&lt;br /&gt;
*&#039;&#039;Destination Number&#039;&#039;: Enter the number that was configured in the phone&#039;s web UI underneath &#039;&#039;Configuration/RegistrationX/Recording&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A recording button will then be offered on-top of the list of incoming calls. The button allows to start/stop recording and serves as an indicator lamp.&lt;br /&gt;
&lt;br /&gt;
== External LDAP-database access ==&lt;br /&gt;
&lt;br /&gt;
innovaphone Operator offers possibility to connect external databases for adress search via LDAP.&lt;br /&gt;
&lt;br /&gt;
Setup is done at File/Configuration tab &#039;LDAP&#039; by filling appropriate fields for connection data and ldap attributes.&lt;br /&gt;
&lt;br /&gt;
The questionmark-icon opens a help page with some predefined LDAP-profiles for&lt;br /&gt;
* innovaphone Contacts (available from operator version 90236)&lt;br /&gt;
* Estos MetaDir&lt;br /&gt;
&lt;br /&gt;
Use radio buttons to fill fields.&lt;br /&gt;
Connection specific data like server, user and password need to be filled manually.&lt;br /&gt;
&lt;br /&gt;
[[image:operator_ldap_profile.png]]&lt;br /&gt;
&lt;br /&gt;
=== Special settings for LDAP Profile: Estos MetaDirectory 3.5===&lt;br /&gt;
&lt;br /&gt;
This article section will explain how to configure the MetaDirectory to enable full-text search by means of a single LDAP attribue. &lt;br /&gt;
&lt;br /&gt;
In a standard configuration the search within the Operator application is performed according the edit field &#039;&#039;&#039;Configuration/LDAP/Name Attributes&#039;&#039;&#039;.  The list of name attributes defaulted previously to &#039;&#039;&#039;company,sn,givenName&#039;&#039;&#039; and could be set by means of a profile button within the LDAP inline-help.&lt;br /&gt;
&lt;br /&gt;
A second profile button &#039;&#039;&#039;Estos MetaDirectory 3.5&#039;&#039;&#039; was added into the inline-help. If that button was clicked, it sets the list of name attributes to a single attribute &#039;&#039;&#039;searchContact&#039;&#039;&#039;. The &#039;&#039;searchContact&#039;&#039; attribute is kind of a meta attribute, that doesn&#039;t physically exist within the LDAP database. It rather serves as a vehicle realizing a full-text query processing whereby multiple physical attributes will be considered by the MetaDirectory.&lt;br /&gt;
&lt;br /&gt;
Which physical attributes are getting queried is subject of an administrative task. As the following screenshot illustrates, the MetaDirectoy&#039;s &#039;&#039;&#039;Search Assistant&#039;&#039;&#039; is the place where an administrator controls the behaviour of the full-text search triggered by the &#039;&#039;searchContact&#039;&#039; attribute. The search assistant allows to check multiple database fields within the column &#039;&#039;&#039;Contact search&#039;&#039;&#039;. All database fields enabled are going to be considered for the &#039;&#039;searchContact&#039;&#039;-related full-text search.&lt;br /&gt;
[[Image:Howto fulltext search screen 01.png]]&lt;br /&gt;
&lt;br /&gt;
As can be seen right next to the column &#039;&#039;Contact search&#039;&#039; resides the column &#039;&#039;&#039;Number search&#039;&#039;&#039;. The same principle applies. However, it is not targeting the attribute &#039;&#039;searchContact&#039;&#039;, but the attribute &#039;&#039;&#039;searchNumber&#039;&#039;&#039;. This is why the edit field &#039;&#039;&#039;Configuration/LDAP/Number Attributes&#039;&#039;&#039; will be set to &#039;&#039;&#039;searchNumber&#039;&#039;&#039; when clicking the profile button mentioned above.&lt;br /&gt;
&lt;br /&gt;
*Benefits&lt;br /&gt;
**Short and concise LDAP filters are sent towards the MetaDirectory&lt;br /&gt;
**Indexed search increases overall query performance&lt;br /&gt;
&lt;br /&gt;
=Configuration, Specialties=&lt;br /&gt;
This section covers somewhat advanced configuration aspects.&lt;br /&gt;
==Suppress Call Display==&lt;br /&gt;
A privacy list may be administrated manually within the operator&#039;s configuration file. The purpose is to provide a means for privacy, such that call details won&#039;t be visible from within the application. &lt;br /&gt;
*Click on the button &#039;&#039;&#039;File/Configuration/Misc/AppData&#039;&#039;&#039;.&lt;br /&gt;
**A Windows Explorer is going to come up, showing the contents of &#039;&#039;C:\Users\&amp;lt;your user directory&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator\&#039;&#039;.&lt;br /&gt;
*Terminate the operator.&lt;br /&gt;
*Open &#039;&#039;&#039;swconfig.xml&#039;&#039;&#039; witin a text editor&lt;br /&gt;
*Enter the list as in the following excerpt (&#039;&#039;name=&amp;quot;..&amp;quot;&#039;&#039; corresponds to the user&#039;s short name)&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;privacy&amp;gt;&lt;br /&gt;
	   &amp;lt;hide name=&amp;quot;mst&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/privacy&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It&#039;s also possible to add all objects to a privacy list by adapting the config part as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;privacy&amp;gt;&lt;br /&gt;
	   &amp;lt;hide hide-all=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/privacy&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Restart the app&#039;.&lt;br /&gt;
&lt;br /&gt;
==Suppress Presence Display==&lt;br /&gt;
(From on hotifx16)A privacy list may be administrated manually within the operator&#039;s configuration file. The purpose is to provide a means for privacy, such that presence details won&#039;t be visible from within the application. &lt;br /&gt;
*Click on the button &#039;&#039;&#039;File/Configuration/Misc/AppData&#039;&#039;&#039;.&lt;br /&gt;
**A Windows Explorer is going to come up, showing the contents of &#039;&#039;C:\Users\&amp;lt;your user directory&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator\&#039;&#039;.&lt;br /&gt;
*Terminate the operator.&lt;br /&gt;
*Open &#039;&#039;&#039;swconfig.xml&#039;&#039;&#039; witin a text editor&lt;br /&gt;
*Enter the list as in the following excerpt (&#039;&#039;name=&amp;quot;..&amp;quot;&#039;&#039; corresponds to the user&#039;s short name)&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;privacy&amp;gt;&lt;br /&gt;
	   &amp;lt;hide-presence name=&amp;quot;mst&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/privacy&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It&#039;s also possible to add all objects to a privacy list by adapting the config part as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;privacy&amp;gt;&lt;br /&gt;
	   &amp;lt;hide-presence hide-all=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/privacy&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Restart the app&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Suppress PBX search==&lt;br /&gt;
A special configuration option within the configsw.xml file deactivates display of the PBX search. Valid for Operator version 9.0211 onwards.&lt;br /&gt;
&lt;br /&gt;
*Terminate the operator.&lt;br /&gt;
*Open &#039;&#039;&#039;swconfig.xml&#039;&#039;&#039; witin a text editor&lt;br /&gt;
*Add the new command line as in the following excerpt&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
  &amp;lt;config&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;hide-search&amp;gt;pbx&amp;lt;/hide-search&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*store swconfig.xml&lt;br /&gt;
*Restart the application.&lt;br /&gt;
&lt;br /&gt;
==Unattended Installation==&lt;br /&gt;
The following command line for the MS Installer program msiexec&amp;lt;ref&amp;gt;Windows Installer, Command Line Options: http://msdn.microsoft.com/en-us/library/aa367988%28v=vs.85%29.aspx&amp;lt;/ref&amp;gt; has been reported to be working with the &#039;&#039;All Users&#039;&#039; installation setting.&lt;br /&gt;
&amp;lt;code type=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
msiexec /i innovaphone.operator.setup.msi /passive /l* &amp;quot;Logdatei.txt&amp;quot; INSTALLDIR=&amp;quot;C:\Program Files\innovaphone AG\innovaphone® Operator\&amp;quot; ALLUSERS=1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Start With A Disctinct UI Culture==&lt;br /&gt;
The system culture controls the UI culture. The Operator appears in english on an english OS.&lt;br /&gt;
&lt;br /&gt;
To force a different culture&lt;br /&gt;
*&#039;&#039;&#039;Win Explorer&#039;&#039;&#039; Browse to &#039;&#039;C:\Program Files (x86)\innovaphone AG\innovaphone® Operator&#039;&#039;&lt;br /&gt;
*Right-Click on innovaphone.operator&lt;br /&gt;
*A context menu opens. Select &#039;&#039;&#039;Send To Desktop As Shortcut&#039;&#039;&#039;.&lt;br /&gt;
*Locate the newly created shortcut/link on the desktop and click on &#039;&#039;&#039;Properties&#039;&#039;&#039;.&lt;br /&gt;
*Modify the target from&lt;br /&gt;
&amp;lt;code type=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;C:\Program Files (x86)\innovaphone AG\innovaphone® Operator\innovaphone.operator.exe&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Into&lt;br /&gt;
&amp;lt;code type=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;C:\Program Files (x86)\innovaphone AG\innovaphone® Operator\innovaphone.operator.exe&amp;quot; /culture de-DE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Possible cultures are&lt;br /&gt;
*&#039;&#039;&#039;english&#039;&#039;&#039; en-GB&lt;br /&gt;
*&#039;&#039;&#039;czech&#039;&#039;&#039; cs-CZ&lt;br /&gt;
*&#039;&#039;&#039;german&#039;&#039;&#039; de-DE&lt;br /&gt;
*&#039;&#039;&#039;italian&#039;&#039;&#039; it-IT&lt;br /&gt;
*&#039;&#039;&#039;dutch&#039;&#039;&#039; nl-NL&lt;br /&gt;
*&#039;&#039;&#039;french&#039;&#039;&#039; fr-FR&lt;br /&gt;
*&#039;&#039;&#039;norwegian&#039;&#039;&#039; nb-NO&lt;br /&gt;
*&#039;&#039;&#039;polish&#039;&#039;&#039; pl-PL&lt;br /&gt;
*&#039;&#039;&#039;swedish&#039;&#039;&#039; se-SE&lt;br /&gt;
*&#039;&#039;&#039;spanish&#039;&#039;&#039; es-ES&lt;br /&gt;
*&#039;&#039;&#039;russian&#039;&#039;&#039; ru-RU&lt;br /&gt;
&lt;br /&gt;
An alternative to the shortcut object vehicle is configuration file &#039;&#039;swconfig.xml&#039;&#039;. The format is as follows&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
        &amp;lt;culture&amp;gt;de-DE&amp;lt;/culture&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==swconfig.xml into /AppData/Local/==&lt;br /&gt;
The default directory for configuration data(swconfig.xml) is &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To keep the configuration not roaming, but PC-local, the operator application can be forced to look into &#039;&#039;Local&#039;&#039; instead:&lt;br /&gt;
*Click the button &#039;&#039;&#039;File/Configuration/Misc/AppData&#039;&#039;&#039; (Datei/Konfiguration/Diverses/AppData)&lt;br /&gt;
*WinExplore starts and displays &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator&#039;&#039;.&lt;br /&gt;
*Terminate the operator application&lt;br /&gt;
*Within the WinExplorer move to &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Local\&#039;&#039;&lt;br /&gt;
*Under &#039;Local&#039; create the directory &#039;&#039;innovaphone AG&#039;&#039;&lt;br /&gt;
*Under &#039;innovaphone AG&#039; create the directory &#039;&#039;innovaphone Operator&#039;&#039;&lt;br /&gt;
*Copy swconfig.xml from &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator&#039;&#039; into the new location &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Local\innovaphone AG\innovaphone Operator&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When starting the operator it is now referencing swconfig.xml from the newly created directory &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Local\innovaphone AG\innovaphone Operator&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Hosted PBX (Slave with license only)==&lt;br /&gt;
If you connect to a slave with &#039;&#039;license only&#039;&#039; activated you also have to activate the configuration &#039;&#039;Configuration :: Various :: Do not search at the master&#039;&#039;.&lt;br /&gt;
Otherwise the Opeartor will search or try configuration on the license master which will not work.&lt;br /&gt;
&lt;br /&gt;
=Addressing Large Scale Installations=&lt;br /&gt;
One of the lengthy discussions throughout the product design phase concerned large installations. Say, installations with more than 300 pbx users, up to a few thousand of them.&lt;br /&gt;
&lt;br /&gt;
To make a long story short - eventually it turned out the main gimmick, the new busy lamp field, wasn&#039;t suitable. With a BLF the need for a search function would have emerged which was deemed contradictory to the intended purpose of a BLF.&lt;br /&gt;
&lt;br /&gt;
Hence, the existing PBX search function received a major overhaul by adding the new [[#Full_Text_Index | Full Text Index]]. The goal of the full text index was to provide a search function being perceived as fast and superior to the one of the predecessor application. The BLF was left as-is without an extra search capability.&lt;br /&gt;
&lt;br /&gt;
Finally, a checklist aiding planning of large scale installations&lt;br /&gt;
*Make the operator an active member of a group e.g. &amp;quot;soap&amp;quot;.&lt;br /&gt;
*Make all other pbx users, that shall be searchable non-active members of the same group &amp;quot;soap&amp;quot;.&lt;br /&gt;
**Per PBX not more than 2000&amp;lt;ref&amp;gt;The PBX has a hard-coded limit of 2000 group members&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;If more than 2000 users are required, those must be distributed on multiple PBXs with 2000 &amp;quot;soap&amp;quot; members each&amp;lt;/ref&amp;gt;&lt;br /&gt;
*Ensure the Operator 9&#039;s PBX search is configured for &#039;&#039;&#039;Full Text/Volltext&#039;&#039;&#039;&lt;br /&gt;
*On the PC running the Operator 9 watch out for resource consumption.&lt;br /&gt;
**A countermeasure against too much of memory consumption is to completely disable the BLF&amp;lt;ref&amp;gt;Calculate with 80KB per BLF entry&amp;lt;/ref&amp;gt;. See the checkmark &#039;&#039;&#039;Configuration/Misc/BLF Deactivate&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
==How to obtain logs with Operator Application==&lt;br /&gt;
&lt;br /&gt;
When an error occurs the Operator Application will give an alert on status bar and we can click on &amp;quot;save trace&amp;quot; button to retrieve the log. However we can force the trace on Operator Application that will generate always the trace file.&lt;br /&gt;
&lt;br /&gt;
To do so, we need to go File-&amp;gt;Configuration then Misc-tab and enable &amp;quot;trace&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
[[Image:Concept_Operator_Version_9_trace.png]]&lt;br /&gt;
&lt;br /&gt;
=Known Issues=&lt;br /&gt;
==Application Won&#039;t Start On Windows XP==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The application doesn&#039;t start properly on Windows XP. An error text file is going to be generated comprising the following content:&lt;br /&gt;
&amp;lt;code text&amp;gt;&lt;br /&gt;
31.07.2009 16:40:46,innovaphone Operator,8.0.38.0&lt;br /&gt;
&lt;br /&gt;
OS: Microsoft Windows NT 5.1.2600 Service Pack 2&lt;br /&gt;
CLR:    2.0.50727.1433&lt;br /&gt;
&lt;br /&gt;
An internal error occurred&lt;br /&gt;
&lt;br /&gt;
Alarms:&lt;br /&gt;
Exception, date=31.07.2009 16:40:45, info=unhandled exception&lt;br /&gt;
================================================================&lt;br /&gt;
&#039;System.Windows.Controls.ToolTip&#039; value cannot be assigned to property &#039;Value&#039; of object &#039;System.Windows.Setter&#039;.&lt;br /&gt;
&#039;System.Windows.Controls.ToolTip&#039; is not a valid value for &#039;Setter.Value&#039;; &lt;br /&gt;
values derived from Visual or ContentElement are not supported.  &lt;br /&gt;
Error at object &#039;System.Windows.Controls.ToolTip&#039; in markup file &#039;operator;component/activecallsincontrol.xaml&#039;.&lt;br /&gt;
at System.Windows.Markup.XamlParseException.ThrowException(String message, Exception innerException, Int32 lineNumber, Int32 linePosition, Uri baseUri, XamlObjectIds currentXamlObjectIds, XamlObjectIds contextXamlObjectIds, Type objectType)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Have a look into what Windows Update offers as optional components. If there&#039;s a cumulative update for .NET 2.0/3.0/3.5 you&#039;re asked to install said update (addendum: The update may also show up as &#039;&#039;.NET 3.5 SP1&#039;&#039;&amp;lt;ref&amp;gt;.Net 3.5 SP1: http://www.microsoft.com/en-us/download/details.aspx?id=22&amp;lt;/ref&amp;gt;). That update is going to upgrade the CLR onto the required version. Please note that Service Pack 3 is mandatory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The original .Net Common Language Runtime (CLR) is not suitable and too old.&lt;br /&gt;
&lt;br /&gt;
==Blind-Transferred Calls Don&#039;t Show Up in List of &amp;quot;Transferred Calls&amp;quot;==&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Calls that were blind-transferred by the Operator application may probably not appear in the respective call list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
*At the PBX browse to PBX/Config/General - Field &amp;quot;Recall Timeout&amp;quot;&lt;br /&gt;
*Enter something useful in seconds (30 or 60)&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
A blind-transferred call is going to fall-back after that amount of seconds if not accepted in-between.&lt;br /&gt;
&lt;br /&gt;
==Blind-Transferred Calls Don&#039;t Fall Back==&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Calls that were blind-transferred by the Operator application don&#039;t fall-back to the operator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
*The cause and solution are the same as in [[#Blind-Transferred Calls Don&#039;t Show Up in List of &amp;quot;Transferred Calls&amp;quot;|Blind-Transferred Calls Don&#039;t Show Up in List of &amp;quot;Transferred Calls&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==Operator Freezes On Startup==&lt;br /&gt;
The operator application was reported to get stuck on startup. The user interface turned white and did not respond to any input.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The application window looks as follows [[Image:screenshot-oppi-freeze.jpg|center|thumb|200px|Operator freezes on startup]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
This symptom can occur due to a corruption of the framework&#039;s font cache data file. Try the workaround:&lt;br /&gt;
*&#039;&#039;&#039;Start/Run&#039;&#039;&#039; of &#039;&#039;&#039;services.msc&#039;&#039;&#039;&lt;br /&gt;
*Stop the service &#039;&#039;Windows Presentation Foundation Font Cache 3.0.0.0&#039;&#039;/&#039;&#039;Windows Presentation Foundation-Schriftartcache 3.0.0.0&#039;&#039;&lt;br /&gt;
*Now delete the system file &#039;&#039;FontCache3.0.0.0.dat&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The file likely resides under Windows XP in&lt;br /&gt;
--&lt;br /&gt;
%systemdrive%\Documents and Settings\LocalService\Local Settings\Application Data&lt;br /&gt;
&lt;br /&gt;
The file likely resides under Windows Vista/7 in&lt;br /&gt;
--&lt;br /&gt;
%windir%\ServiceProfiles\LocalService\AppData\Local&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Reboot the machine&lt;br /&gt;
&lt;br /&gt;
==Operator Displays Corrupted Fonts==&lt;br /&gt;
After 2 years of service the operator application was reported to suddenly display corrupted fonts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The application window looks as follows [[Image:Operator_font_corrupted.jpg|center|thumb|200px|Operator displays corrupted fonts]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
This symptom occurred due to a corruption of the framework&#039;s font cache data file. Try the workaround:&lt;br /&gt;
*&#039;&#039;&#039;Start/Run&#039;&#039;&#039; of &#039;&#039;&#039;services.msc&#039;&#039;&#039;&lt;br /&gt;
*Stop the service &#039;&#039;Windows Presentation Foundation Font Cache 3.0.0.0&#039;&#039;/&#039;&#039;Windows Presentation Foundation-Schriftartcache 3.0.0.0&#039;&#039;&lt;br /&gt;
*Now delete the system file &#039;&#039;FontCache3.0.0.0.dat&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The file likely resides under Windows XP in&lt;br /&gt;
--&lt;br /&gt;
%systemdrive%\Documents and Settings\LocalService\Local Settings\Application Data&lt;br /&gt;
&lt;br /&gt;
The file likely resides under Windows Vista/7 in&lt;br /&gt;
--&lt;br /&gt;
%windir%\ServiceProfiles\LocalService\AppData\Local&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Reboot the machine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
It is the same root cause as above in [[#Operator_Freezes_On_Startup|Operator Freezes On Startup]].&lt;br /&gt;
&lt;br /&gt;
==Pickup Of WQ Calls==&lt;br /&gt;
From on build 90112 the pickup of WQ calls is only possible for calls not in the CONNECT state. &lt;br /&gt;
*Activate the checkmark &#039;&#039;&#039;PBX/Objects/&amp;lt;WQ Object&amp;gt;/Queue/Operator connect for SOAP&#039;&#039;&#039;&lt;br /&gt;
**this setting guarantees that a WQ call is displayed as CONNECTed only in case of an operator actively talking to the caller party A.&lt;br /&gt;
&lt;br /&gt;
==Not Working: &#039;&#039;Focus on incoming call&#039;&#039;==&lt;br /&gt;
The configuration dialog offers an auto-focus checkmark &#039;&#039;&#039;File/Configuration/Misc/Focus on inc. call&#039;&#039;&#039;. Customers reported that the application manages getting into the foreground. However, without catching the keyboard focus. A final click into the application was necessary.&lt;br /&gt;
&lt;br /&gt;
Instead, the application icon within the taskbar starts flashing, indicating that further user interaction is required.&lt;br /&gt;
The application window looks as follows &lt;br /&gt;
[[Image:Set-foreground-waiting.PNG|center|thumb|200px|Operator waiting for a click]].&lt;br /&gt;
&lt;br /&gt;
This behaviour is by-design and cannot be circumvented in a common manner. An MS statement&amp;lt;ref&amp;gt;Set Foreground Window: http://msdn.microsoft.com/en-us/library/ms633539%28VS.85%29.aspx&amp;lt;/ref&amp;gt; clarifies this OS-behaviour:&lt;br /&gt;
*&#039;&#039;An application cannot force a window to the foreground while the user is working with another window. Instead, Windows flashes the taskbar button of the window to notify the user.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The only reliable way to have the auto-focus feature working is by minimizing the application to the tray area. See the following menu button. &lt;br /&gt;
[[Image:Op-minimize-to-tray.png|center|thumb|200px|Button: Minimize to tray area]]&lt;br /&gt;
Auto-focusing from that window-state/application-state is supposed to be more reliable in getting the application into the foreground and assigning it the keyboard focus.&lt;br /&gt;
&lt;br /&gt;
==Application Crash: Methode nicht gefunden/Method Not Found==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The application crashes - e.g. when searching - and prompts an exception labeled &#039;&#039;&#039;Methode nicht gefunden/Method Not Found&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;code text&amp;gt;&lt;br /&gt;
Exception, date=12.06.2013 16:35:52, info=unhandled exception&lt;br /&gt;
================================================================&lt;br /&gt;
Methode nicht gefunden: &amp;quot;System.Object[] innovaphone.idx.IFulltextIndex.Query(Char, System.String[])&amp;quot;.&lt;br /&gt;
   bei switchboard.Index.FtIndexQueryVlv(Char equalityTerminator, String[] terms, Int32 pageSize, VlvCursor&amp;amp; cursor)&lt;br /&gt;
   bei switchboard.SearchPbxControl.PbxSearchFullTextExecute(String[] terms)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
De-install and afterwards re-install the application(The configuration won&#039;t be deleted, i.e. will remain.).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The root-cause is a DLL versioning problem. The problem may occur after an update-install took place. That is, where a newer Operator was installed over an older, existing installation.&lt;br /&gt;
&lt;br /&gt;
==Inbound Calls Appear Doubled==&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The upper-left list of calls titled &#039;&#039;Incoming calls for..&#039;&#039; displays a single call as two or even more calls.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Configure a distinct &#039;&#039;&#039;Hardware ID&#039;&#039;&#039; of one of the operator&#039;s phones under &#039;&#039;&#039;File/Configuration/General/Hardware ID&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The operator is likely to have multiple registrations active, originating from multiple endpoint devices. Only one of those devices shall be selected as the operator&#039;s active phone.&lt;br /&gt;
&lt;br /&gt;
== Multiple Operator Instances and Nightswitch settings ==&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Time settings will be empty or are not saved if more than one operator instance is used.&lt;br /&gt;
&lt;br /&gt;
== Installation on Windows 10 ==&lt;br /&gt;
An installation was tested on Windows 10 (Microsoft Windows NT 6.2.9200.0). The installation stopped with a hint for a missing, but required .NET framework version 3.x. Just follow the offered download link for .NET 3.5 SP1 and retry the installation afterwards. This procedure provided a successful installation of the application.&lt;br /&gt;
[[Image:Screenshot-op9-install-win10.png|center|thumb|200px|Button: Download .Net 3.5 SP1]]&lt;br /&gt;
&lt;br /&gt;
Other reports from the field show that this error might be omitted by removing the PC from its domain before installation and put it back afterwards.&lt;br /&gt;
&lt;br /&gt;
==Application cannot Initialize at PBX==&lt;br /&gt;
The application may fail to initialize at a PBX.&lt;br /&gt;
&lt;br /&gt;
Symptom:&lt;br /&gt;
* The application repeatedly prompts a red-colored error message onto the status line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
info=&#039;PBX Setup Completed:&#039;, error=&#039;Initialize failed!&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cause:&lt;br /&gt;
* The Windows proxy settings interfere&lt;br /&gt;
Solution:&lt;br /&gt;
* Alter the proxy configuration within &#039;&#039;&#039;Internet Options/Connections(/LAN Settings)&#039;&#039;&#039;. Those are accessible either via the Windows System Settings or from within the IE. Ensure that either the proxy-configuration is correct or deactivate it completely. It has been reported that the checkmark-activation of &#039;&#039;Internet Options/Connections/LAN-Settings/Bypass proxy server for local addresses&#039;&#039; also helped to solve the proxy-related problem.&lt;br /&gt;
&lt;br /&gt;
==Installation Operator failed==&lt;br /&gt;
Exception, date=02.12.2015 13:20:44, info=unhandled exception&lt;br /&gt;
&lt;br /&gt;
Cause:&lt;br /&gt;
* http://code.logos.com/blog/2009/11/how_to_crash_every_wpf_application.html&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
* Open the control panel from Windows and take a look into the logs. There should be a hint.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Contacts search: missing contacts on Full Text search==&lt;br /&gt;
&lt;br /&gt;
Sometimes the operator cannot find existing contacts when performing a search, this only seems to happen when &amp;quot;Full Text&amp;quot; method is used.&lt;br /&gt;
&lt;br /&gt;
Cause:&lt;br /&gt;
*This occurs when the _TAPI_ group has more than 2048 (firmware limit) members.&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
*To workaround this issue we suggest to split the users over two groups and make the _TAPI_ user an active member of both groups.&lt;br /&gt;
&lt;br /&gt;
=Localization=&lt;br /&gt;
The article [[Howto:Assist_In_Localization_Of_Operator_Version_9|Howto:Assist In Localization Of Operator Version 9]] serves as a starting point, if you are interested in helping to localize the application.&lt;br /&gt;
&lt;br /&gt;
=Uninstall=&lt;br /&gt;
&lt;br /&gt;
When we uninstall the Operator application on Windows the user configuration it&#039;s not deleted from the Roaming folder, so if we wish to do an reinstallation of the application with a new config we must delete manually the configuration data (swconfig.xml) from the Roaming folder: C:\Users\&amp;lt;user&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator.&lt;br /&gt;
&lt;br /&gt;
=Notes=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference9:Concept_Operator&amp;diff=58540</id>
		<title>Reference9:Concept Operator</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference9:Concept_Operator&amp;diff=58540"/>
		<updated>2021-04-27T11:04:43Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Installation Operator failed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- keywords: operator, vermittlungsplatz, vermittlung, cbc, switchboard --&amp;gt;&lt;br /&gt;
[[Category:Concept9|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Concept|{{PAGENAME}}]]&lt;br /&gt;
=Applies To=&lt;br /&gt;
This information applies to&lt;br /&gt;
* innovaphone Operator V9&lt;br /&gt;
&lt;br /&gt;
The article&#039;s intent is to serve as the Operator 9 information center. The addressed audience is administrators, partners, resellers.&lt;br /&gt;
&lt;br /&gt;
=Requirements=&lt;br /&gt;
*at least Windows 7 (and higher) - Windows Vista &amp;amp; Windows XP &#039;&#039;&#039;may&#039;&#039;&#039; work&lt;br /&gt;
*Windows Terminal Server&lt;br /&gt;
*1.5 GHz CPU (32-bit, or 64-bit), Dual-Core is recommended&lt;br /&gt;
*2 GB of RAM&lt;br /&gt;
*DirectX 9 capable graphics adapter&lt;br /&gt;
&lt;br /&gt;
=More Information=&lt;br /&gt;
The innovaphone Operator 9 succeeds the innovaphone Operator 8. &lt;br /&gt;
*A busy lamp field(busy field, BLF) is the main addendum to the application. &lt;br /&gt;
**Condensed user information: Display Name, Number, PBX&lt;br /&gt;
**An entry&#039;s context menu allows to reveal detailed user informations for an entry&lt;br /&gt;
**Colored User status: available(registered &amp;amp; not engaged in a call), engaged in a call, not registered&lt;br /&gt;
**Symbolized presence status: presence activity, presence note(as tooltip)&lt;br /&gt;
**Display options for the BLF window &lt;br /&gt;
***within the main window &lt;br /&gt;
***within a separate window &lt;br /&gt;
***within a separate window on a 2nd monitor&lt;br /&gt;
**Two different entry layouts can be selected in three different sizes(small, medium, large)&lt;br /&gt;
**Freely placeable labels&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
*Simplified usage&lt;br /&gt;
**Drag&amp;amp;Drop or keyboard-only usage possible&lt;br /&gt;
**main functionalities (accept call, initiate call) just with ENTER&lt;br /&gt;
**direct dialing without search / just use number&lt;br /&gt;
**Blind transfer eased - just use &#039;+&#039;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
*Search&lt;br /&gt;
**Full text search&lt;br /&gt;
***Fast, now the application default&lt;br /&gt;
***Targets large-scale installations&lt;br /&gt;
***Indexing: Long Name, Name, Number, Groups, PBX/Location&lt;br /&gt;
**Ldap search&lt;br /&gt;
***Support for Active Directory&#039;s attributes &amp;quot;department&amp;quot;, &amp;quot;description&amp;quot;&lt;br /&gt;
***&amp;quot;department&amp;quot; offers button to search for alternative destinations within a department&lt;br /&gt;
**Pbx search&lt;br /&gt;
***&amp;quot;group&amp;quot; offers button to search for alternative destinations within a group&lt;br /&gt;
***Email integration, send notification on missed calls&lt;br /&gt;
**Individual PBX can be excluded/barred from the operator&#039;s search view&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
*Call Switching&lt;br /&gt;
**Symbol indicating external calls&lt;br /&gt;
**Park+Wait functionality for blind-transferred calls towards busy internal destinations.&lt;br /&gt;
**Allows for operator procedure: &#039;&#039;The extension is busy. Do you want to wait?..&#039;&#039;&lt;br /&gt;
**Blinking indicator for parked and muted calls&lt;br /&gt;
**Outgoing calls can be placed without paying attention to call diversions&lt;br /&gt;
**Call diversions can be manipulated from operator (if access right is granted)&lt;br /&gt;
**Call journal with simplified and detailed representation (successful, missed, transferred, etc.). Cyclic storage of max. 300 calls.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
*Miscellaneous&lt;br /&gt;
**Alternative layout&lt;br /&gt;
**Nightswitch supported in GUI&lt;br /&gt;
**Secured access (HTTPS/TLS)&lt;br /&gt;
**Call context for currently active incoming call.&lt;br /&gt;
&lt;br /&gt;
=Download=&lt;br /&gt;
* The software can be downloaded from the &#039;&#039;apps&#039;&#039; section: http://download.innovaphone.com/ice/9.00/#apps&lt;br /&gt;
&lt;br /&gt;
=Application History=&lt;br /&gt;
The hotfix history can be found [[Reference9:Release_Notes_Operator_V9|in the operator 9 release notes]]&lt;br /&gt;
&lt;br /&gt;
=Full Text Index=&lt;br /&gt;
One shortcoming of the predecessor application was the confinement to search for PBX users either &#039;&#039;by name&#039;&#039; or &#039;&#039;by long name&#039;&#039; only. The Operator 9 therefore offers the new search capability &#039;&#039;by full text index&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The full text index was implemented application-local. That is, that index is not going to be maintained by the PBX, but by the Operator application itself in-RAM. Thus, making full text queries lightning fast.&lt;br /&gt;
&lt;br /&gt;
The full text indexed is supposed to scale well within large installations. In contrast the busy lamp field is expected to be operable with up to ~300 pbx users.&lt;br /&gt;
&lt;br /&gt;
Administrators must keep control of what is going to be fed into the index. This task must be accomplished by configuration of regular group memberships within a PBX. As a quick exemplary rule of thumb: &lt;br /&gt;
*Make the operator&#039;s PBX object an active member of a group e.g. &amp;quot;soap&amp;quot;. Make all other user objects that shall be indexed (non-active) members of the same group &amp;quot;soap&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is indexed?&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
*Name&lt;br /&gt;
*Long Name&lt;br /&gt;
*Display Name&lt;br /&gt;
*Number&lt;br /&gt;
*Node number + number&lt;br /&gt;
*Groups&lt;br /&gt;
*PBX&lt;br /&gt;
&lt;br /&gt;
=Busy-Field=&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
A screenshot featuring some numbered screen elements, explains the BLF&#039;s makeup.&lt;br /&gt;
[[Image:op9-bf-overview.jpg|center|thumb|200px|Overview, Operator 9]]&lt;br /&gt;
*1)BLF entry&lt;br /&gt;
*2)BLF label&lt;br /&gt;
*3)Thumb for menu panel&lt;br /&gt;
*4)Menu panel(slid out)&lt;br /&gt;
*5)Selector for BLF display as separate window or within main window&lt;br /&gt;
*6)Selector for the layout of BLF entries&lt;br /&gt;
*7)Erase button for selected BLF entries/labels&lt;br /&gt;
*8)Button to initially show the BLF&lt;br /&gt;
*9)Example of a BLF entry with a presence symbol&lt;br /&gt;
&lt;br /&gt;
==Arranging Entries==&lt;br /&gt;
&lt;br /&gt;
*Create a free line&lt;br /&gt;
**Select 2x entries&lt;br /&gt;
**Drag the selected entries onto some other entries&lt;br /&gt;
**All entries within the target line and all lines below are going to be moved downwards.&lt;br /&gt;
[[Image:op9-bf-edit-freeline.jpg|center|thumb|200px|Create a free line]]&lt;br /&gt;
&lt;br /&gt;
*Adding a label&lt;br /&gt;
**Right-Click into a free location&lt;br /&gt;
**A context menu appears - select &#039;&#039;Add Label&#039;&#039;&lt;br /&gt;
**A label is going to be placed.&lt;br /&gt;
**Left-Click into the label, in order to edit the label&#039;s text.&lt;br /&gt;
[[Image:Op9-bf-add-label.jpg|center|thumb|200px|Adding a label]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Changing the position of a single entry&lt;br /&gt;
**Left-Click the entry and keep the left mouse button pressed.&lt;br /&gt;
**Drag the entry into its new position.&lt;br /&gt;
**Drop the entry by releasing the mouse button.&lt;br /&gt;
In case of an entry already occupying the new position, the two entries are going to exchange their positions.&lt;br /&gt;
[[Image:op9-bf-xchng-entries.jpg|center|thumb|200px|Changing the position of a single entry]]&lt;br /&gt;
&lt;br /&gt;
*Changing the position of multiple entries&lt;br /&gt;
**Left-Click into a free position and keep the left mouse button pressed.&lt;br /&gt;
**Open up a selection rectangle. Entries intersecting with the rectangle are going to be selected.&lt;br /&gt;
**Release the left mouse button.&lt;br /&gt;
**Left-Click onto one of the selected entries and keep the left mouse button pressed.&lt;br /&gt;
**Drag the entries into their new position.&lt;br /&gt;
**Drop the entries by releasing the mouse button.&lt;br /&gt;
In case of one or more entries already occupying the new position, the entire lines containing those entries and the lines below are going to be moved downwards.&lt;br /&gt;
[[Image:Op9-bf-xchng-bulk.jpg|center|thumb|200px|Changing the position of multiple entries]]&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
This section hilights a few key concepts of the Operator configuration. A few prerequisites must be considered.&lt;br /&gt;
*The operator&#039;s phone must be configured, such that &#039;&#039;call waiting&#039;&#039; is enabled. This is important, because of situations whith more than one call being active at the phone. Some such scenarios may be obvious: operator user is engaged in a call while an internal caller is trying to directly call through to the operator&#039;s desk. Some such scenarios aren&#039;t obvious. For instance the operation to unpark a call may often coincide with a call just being signalled by a waiting queue towards the operator&#039;s phone.&lt;br /&gt;
*Within the PBX the value &#039;&#039;&#039;PBX/Configuration/General/Recall Timeout&#039;&#039;&#039; should be set to a value greater than 0 seconds. Otherwise the call list &#039;&#039;Transferred Calls&#039;&#039; will remain empty and unaccepted blind transferred calls will never fallback to the operator.&lt;br /&gt;
==General==&lt;br /&gt;
The application is going to establish at least two Soap sessions. One for the operator user&#039;s identity. And one for the query user&#039;s identity.&lt;br /&gt;
&lt;br /&gt;
The first session is needed in order to receive call informations for the operator user&#039;s phone. This session will be established only at the PBX configured under &#039;&#039;&#039;IP Address&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The second session is needed to receive user informations for all PBX user objects that shall be full text indexed. It is also needed for all PBX user objects that shall appear within the busy field. The Operator is going to establish this session type at every known PBX.&lt;br /&gt;
*&#039;&#039;&#039;Query User&#039;&#039;&#039; As a rule of thumb&lt;br /&gt;
**Create a user object &#039;&#039;_TAPI_&#039;&#039; (or &#039;&#039;SOAP&#039;&#039;) on all PBXs within the network of PBXs (if Slaves are replicated from a Master, just create this user at Master without assigning it to a PBX).&lt;br /&gt;
***The user &#039;&#039;_TAPI_&#039;&#039; must be an active member of a group &#039;&#039;tapi&#039;&#039;(or &#039;&#039;soap&#039;&#039;).&lt;br /&gt;
**All other users (also the ones at Slave PBXes) that shall be full text indexed must become a non-active member in the group &#039;&#039;tapi&#039;&#039;.&lt;br /&gt;
**In case of slave scenarios, the slavePBX object at Master itself needs to be part of that group. &#039;&#039;&#039;Note&#039;&#039;&#039;: This will not work when having &amp;quot;sub-slaves&amp;quot; being registered to slaves itself.&lt;br /&gt;
**A dedicated PBX as search base can be selected via the drop down menu in the search area. Typing &amp;quot;.&amp;quot; in the search field opens a pop-up field containing all PBXes.&lt;br /&gt;
&lt;br /&gt;
==WQ (Waiting Queue)==&lt;br /&gt;
A WQ teams-up with an operator&#039;s phone by a group membership.&lt;br /&gt;
*A waiting queue &#039;&#039;wq-reception&#039;&#039; may exist.&lt;br /&gt;
*The WQ is an active member of a group &#039;&#039;reception&#039;&#039;.&lt;br /&gt;
*The operator user is a non-active member of the group &#039;&#039;reception&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Calls for the WQ are from now on also signalled towards the operator.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Nightswitch&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The nightswitch configuration is just a front-end for the PBX &#039;&#039;Boolean object&#039;&#039;. Its actual purpose is to provide a means for a diversion. A diversion that leads callers into an out-of-business-hour announcement. Here is the idea behind:&lt;br /&gt;
*A waiting queue &#039;&#039;wq-reception&#039;&#039; may exist and is configured under &#039;&#039;&#039;WQ&#039;&#039;&#039;.&lt;br /&gt;
*Enter the number (55 in this example) towards the out-of-business-hour announcement under &#039;&#039;&#039;Diversion&#039;&#039;&#039;. It may be the number of a dedicated voicemail object.&lt;br /&gt;
*Configure the time definitions for the regular business hours.&lt;br /&gt;
**1st: Start 9:00, End 17:00, Mon-Fri&lt;br /&gt;
**2nd: Start 0:00, End 0:00, Sat-Sun &lt;br /&gt;
**As Mode select Automatic &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: The automatic mode may be overridden by selecting &#039;&#039;Manual On&#039;&#039; or &#039;&#039;Manual Off&#039;&#039; as mode. &#039;&#039;Manual On&#039;&#039; causes the CFU (see below) to become active immediately and permanently.&lt;br /&gt;
&lt;br /&gt;
What happens behind the curtain is as follows:&lt;br /&gt;
*A new boolean object &#039;&#039;wq-reception-nightswitch&#039;&#039; will be created automatically by the Operator app&#039;.&lt;br /&gt;
*The boolean object is configured with the time definitions from above.&lt;br /&gt;
*A CFU is configured at the WQ &#039;&#039;wq-reception&#039;&#039;.&lt;br /&gt;
*The CFU will have the number 55 from above as destination.&lt;br /&gt;
*The CFU references the Boolean object &#039;&#039;wq-reception-nightswitch&#039;&#039; from above.&lt;br /&gt;
&lt;br /&gt;
The mode selector for the boolean object will be available for the user. Watch out for the WQ calls list.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
===Configuration of the Phone&#039;s Conference Facility (Recording-/Greeting Function)===&lt;br /&gt;
Every innovaphone telephone offers a tiny conference function. Besides its apparent use, the conference function may be utilized to realize audio recording.&lt;br /&gt;
The corresponding configuration page can be found within the phone&#039;s web UI under &#039;&#039;Configuration/RegistrationX/Recording&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Within the context of the innovaphone Operator it may also be used to provide the means for a personal audio greeting. A greeting that is about to played right after an incoming call was connected. For each incoming call over the course of a working-day.&lt;br /&gt;
&lt;br /&gt;
Both scenarios require a voicemail script.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Only one of the two possibilities can be configured. Either the audio recording or the greeting function. The two cannot be used concurrently.&lt;br /&gt;
&lt;br /&gt;
The following two sub-sections are going to explain the required configuration steps for both scenarios.&lt;br /&gt;
&lt;br /&gt;
===Greeting Function===&lt;br /&gt;
A few assumptions are taken into consideration.&lt;br /&gt;
*The PBX box offers a CF-card that is up and running. &lt;br /&gt;
*A voicemail object is going to listen on number 77.&lt;br /&gt;
&lt;br /&gt;
Deploy the following voicemail script (audio menu in english)&lt;br /&gt;
* download [[Media:Greeting.zip]]&lt;br /&gt;
* copy onto a CF-card underneath a directory &#039;&#039;greeting&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At the PBX create a new voicemail object&lt;br /&gt;
* Proceed to &#039;&#039;PBX/Objects/New Voicemail&#039;&#039; &lt;br /&gt;
* Enter &#039;&#039;Long Name, Name, Number&#039;&#039; as eg.: &#039;&#039;vm-greet, vm-greet, 77&#039;&#039;&lt;br /&gt;
* Enter the &#039;&#039;Script URL&#039;&#039; as http://127.0.0.1/drive/CF0/greeting/greet.xml&lt;br /&gt;
&lt;br /&gt;
Configure the recording function at the operator user&#039;s telephone&lt;br /&gt;
* Proceed to &#039;&#039;Configuration/RegistrationX/Recording&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;manual&#039;&#039; as &#039;&#039;Mode&#039;&#039;&lt;br /&gt;
* Enter &#039;&#039;77&#039;&#039; as &#039;&#039;Number&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Within the innovaphone Operator proceed to &#039;&#039;File/Configuration/Misc.&#039;&#039;&lt;br /&gt;
*&#039;&#039;Assignment of the Recording-function&#039;&#039;: Choose &#039;&#039;Greeting&#039;&#039;&lt;br /&gt;
*&#039;&#039;Destination Number&#039;&#039;: Enter the number (&#039;&#039;77&#039;&#039; in this example) that was configured in the phone&#039;s web UI underneath &#039;&#039;Configuration/RegistrationX/Recording&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The audio greeting will start automatically for incoming external calls. The decision which calls are treated as external calls is based on the configuration of &#039;&#039;File/Configuration/LDAP Location/External Line&#039;&#039; (Mostly &#039;&#039;0&#039;&#039;). A button will be displayed on-top of the list of incoming calls, if an audio greeting is played. The button allows to stop the greeting.&lt;br /&gt;
&lt;br /&gt;
The audio greeting won&#039;t be started for:&lt;br /&gt;
* a fallback call, i.e. a call that was blind-transferred, but never connected.&lt;br /&gt;
* a call that was unparked&lt;br /&gt;
* a call that was refetched from the list of blind-transferred calls&lt;br /&gt;
* internal calls&lt;br /&gt;
&lt;br /&gt;
In order to record a new audio greeting&lt;br /&gt;
*Just dial the number of the voicemail object (&#039;&#039;77&#039;&#039; in this example).&lt;br /&gt;
*The script will prompt for a key press on the telephone&lt;br /&gt;
*Record the new greeting and stop the recording with another key press on the telephone&lt;br /&gt;
*You will be prompted with the new greeting&lt;br /&gt;
*End the call (on-hook) - the new greeting will be active from now on.&lt;br /&gt;
&lt;br /&gt;
===Recording Function===&lt;br /&gt;
This functionality is actually a reuse of a solution being available since firmware version 6. Please read through the following article:&lt;br /&gt;
*[[Howto:A Simple Recording Solution On-Top of The innovaphone Voicemail|A Simple Recording Solution On-Top of The innovaphone Voicemail]]&lt;br /&gt;
&lt;br /&gt;
All that&#039;s needed to be configured within the innovaphone Operator can be found underneath &#039;&#039;File/Configuration/Misc.&#039;&#039;.&lt;br /&gt;
*&#039;&#039;Assignment of the Recording-function&#039;&#039;: Choose &#039;&#039;Recording&#039;&#039;&lt;br /&gt;
*&#039;&#039;Destination Number&#039;&#039;: Enter the number that was configured in the phone&#039;s web UI underneath &#039;&#039;Configuration/RegistrationX/Recording&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A recording button will then be offered on-top of the list of incoming calls. The button allows to start/stop recording and serves as an indicator lamp.&lt;br /&gt;
&lt;br /&gt;
== External LDAP-database access ==&lt;br /&gt;
&lt;br /&gt;
innovaphone Operator offers possibility to connect external databases for adress search via LDAP.&lt;br /&gt;
&lt;br /&gt;
Setup is done at File/Configuration tab &#039;LDAP&#039; by filling appropriate fields for connection data and ldap attributes.&lt;br /&gt;
&lt;br /&gt;
The questionmark-icon opens a help page with some predefined LDAP-profiles for&lt;br /&gt;
* innovaphone Contacts (available from operator version 90236)&lt;br /&gt;
* Estos MetaDir&lt;br /&gt;
&lt;br /&gt;
Use radio buttons to fill fields.&lt;br /&gt;
Connection specific data like server, user and password need to be filled manually.&lt;br /&gt;
&lt;br /&gt;
[[image:operator_ldap_profile.png]]&lt;br /&gt;
&lt;br /&gt;
=== Special settings for LDAP Profile: Estos MetaDirectory 3.5===&lt;br /&gt;
&lt;br /&gt;
This article section will explain how to configure the MetaDirectory to enable full-text search by means of a single LDAP attribue. &lt;br /&gt;
&lt;br /&gt;
In a standard configuration the search within the Operator application is performed according the edit field &#039;&#039;&#039;Configuration/LDAP/Name Attributes&#039;&#039;&#039;.  The list of name attributes defaulted previously to &#039;&#039;&#039;company,sn,givenName&#039;&#039;&#039; and could be set by means of a profile button within the LDAP inline-help.&lt;br /&gt;
&lt;br /&gt;
A second profile button &#039;&#039;&#039;Estos MetaDirectory 3.5&#039;&#039;&#039; was added into the inline-help. If that button was clicked, it sets the list of name attributes to a single attribute &#039;&#039;&#039;searchContact&#039;&#039;&#039;. The &#039;&#039;searchContact&#039;&#039; attribute is kind of a meta attribute, that doesn&#039;t physically exist within the LDAP database. It rather serves as a vehicle realizing a full-text query processing whereby multiple physical attributes will be considered by the MetaDirectory.&lt;br /&gt;
&lt;br /&gt;
Which physical attributes are getting queried is subject of an administrative task. As the following screenshot illustrates, the MetaDirectoy&#039;s &#039;&#039;&#039;Search Assistant&#039;&#039;&#039; is the place where an administrator controls the behaviour of the full-text search triggered by the &#039;&#039;searchContact&#039;&#039; attribute. The search assistant allows to check multiple database fields within the column &#039;&#039;&#039;Contact search&#039;&#039;&#039;. All database fields enabled are going to be considered for the &#039;&#039;searchContact&#039;&#039;-related full-text search.&lt;br /&gt;
[[Image:Howto fulltext search screen 01.png]]&lt;br /&gt;
&lt;br /&gt;
As can be seen right next to the column &#039;&#039;Contact search&#039;&#039; resides the column &#039;&#039;&#039;Number search&#039;&#039;&#039;. The same principle applies. However, it is not targeting the attribute &#039;&#039;searchContact&#039;&#039;, but the attribute &#039;&#039;&#039;searchNumber&#039;&#039;&#039;. This is why the edit field &#039;&#039;&#039;Configuration/LDAP/Number Attributes&#039;&#039;&#039; will be set to &#039;&#039;&#039;searchNumber&#039;&#039;&#039; when clicking the profile button mentioned above.&lt;br /&gt;
&lt;br /&gt;
*Benefits&lt;br /&gt;
**Short and concise LDAP filters are sent towards the MetaDirectory&lt;br /&gt;
**Indexed search increases overall query performance&lt;br /&gt;
&lt;br /&gt;
=Configuration, Specialties=&lt;br /&gt;
This section covers somewhat advanced configuration aspects.&lt;br /&gt;
==Suppress Call Display==&lt;br /&gt;
A privacy list may be administrated manually within the operator&#039;s configuration file. The purpose is to provide a means for privacy, such that call details won&#039;t be visible from within the application. &lt;br /&gt;
*Click on the button &#039;&#039;&#039;File/Configuration/Misc/AppData&#039;&#039;&#039;.&lt;br /&gt;
**A Windows Explorer is going to come up, showing the contents of &#039;&#039;C:\Users\&amp;lt;your user directory&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator\&#039;&#039;.&lt;br /&gt;
*Terminate the operator.&lt;br /&gt;
*Open &#039;&#039;&#039;swconfig.xml&#039;&#039;&#039; witin a text editor&lt;br /&gt;
*Enter the list as in the following excerpt (&#039;&#039;name=&amp;quot;..&amp;quot;&#039;&#039; corresponds to the user&#039;s short name)&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;privacy&amp;gt;&lt;br /&gt;
	   &amp;lt;hide name=&amp;quot;mst&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/privacy&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It&#039;s also possible to add all objects to a privacy list by adapting the config part as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;privacy&amp;gt;&lt;br /&gt;
	   &amp;lt;hide hide-all=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/privacy&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Restart the app&#039;.&lt;br /&gt;
&lt;br /&gt;
==Suppress Presence Display==&lt;br /&gt;
(From on hotifx16)A privacy list may be administrated manually within the operator&#039;s configuration file. The purpose is to provide a means for privacy, such that presence details won&#039;t be visible from within the application. &lt;br /&gt;
*Click on the button &#039;&#039;&#039;File/Configuration/Misc/AppData&#039;&#039;&#039;.&lt;br /&gt;
**A Windows Explorer is going to come up, showing the contents of &#039;&#039;C:\Users\&amp;lt;your user directory&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator\&#039;&#039;.&lt;br /&gt;
*Terminate the operator.&lt;br /&gt;
*Open &#039;&#039;&#039;swconfig.xml&#039;&#039;&#039; witin a text editor&lt;br /&gt;
*Enter the list as in the following excerpt (&#039;&#039;name=&amp;quot;..&amp;quot;&#039;&#039; corresponds to the user&#039;s short name)&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;privacy&amp;gt;&lt;br /&gt;
	   &amp;lt;hide-presence name=&amp;quot;mst&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/privacy&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It&#039;s also possible to add all objects to a privacy list by adapting the config part as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;privacy&amp;gt;&lt;br /&gt;
	   &amp;lt;hide-presence hide-all=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/privacy&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Restart the app&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Suppress PBX search==&lt;br /&gt;
A special configuration option within the configsw.xml file deactivates display of the PBX search. Valid for Operator version 9.0211 onwards.&lt;br /&gt;
&lt;br /&gt;
*Terminate the operator.&lt;br /&gt;
*Open &#039;&#039;&#039;swconfig.xml&#039;&#039;&#039; witin a text editor&lt;br /&gt;
*Add the new command line as in the following excerpt&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
  &amp;lt;config&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;hide-search&amp;gt;pbx&amp;lt;/hide-search&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*store swconfig.xml&lt;br /&gt;
*Restart the application.&lt;br /&gt;
&lt;br /&gt;
==Unattended Installation==&lt;br /&gt;
The following command line for the MS Installer program msiexec&amp;lt;ref&amp;gt;Windows Installer, Command Line Options: http://msdn.microsoft.com/en-us/library/aa367988%28v=vs.85%29.aspx&amp;lt;/ref&amp;gt; has been reported to be working with the &#039;&#039;All Users&#039;&#039; installation setting.&lt;br /&gt;
&amp;lt;code type=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
msiexec /i innovaphone.operator.setup.msi /passive /l* &amp;quot;Logdatei.txt&amp;quot; INSTALLDIR=&amp;quot;C:\Program Files\innovaphone AG\innovaphone® Operator\&amp;quot; ALLUSERS=1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Start With A Disctinct UI Culture==&lt;br /&gt;
The system culture controls the UI culture. The Operator appears in english on an english OS.&lt;br /&gt;
&lt;br /&gt;
To force a different culture&lt;br /&gt;
*&#039;&#039;&#039;Win Explorer&#039;&#039;&#039; Browse to &#039;&#039;C:\Program Files (x86)\innovaphone AG\innovaphone® Operator&#039;&#039;&lt;br /&gt;
*Right-Click on innovaphone.operator&lt;br /&gt;
*A context menu opens. Select &#039;&#039;&#039;Send To Desktop As Shortcut&#039;&#039;&#039;.&lt;br /&gt;
*Locate the newly created shortcut/link on the desktop and click on &#039;&#039;&#039;Properties&#039;&#039;&#039;.&lt;br /&gt;
*Modify the target from&lt;br /&gt;
&amp;lt;code type=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;C:\Program Files (x86)\innovaphone AG\innovaphone® Operator\innovaphone.operator.exe&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Into&lt;br /&gt;
&amp;lt;code type=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;C:\Program Files (x86)\innovaphone AG\innovaphone® Operator\innovaphone.operator.exe&amp;quot; /culture de-DE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Possible cultures are&lt;br /&gt;
*&#039;&#039;&#039;english&#039;&#039;&#039; en-GB&lt;br /&gt;
*&#039;&#039;&#039;czech&#039;&#039;&#039; cs-CZ&lt;br /&gt;
*&#039;&#039;&#039;german&#039;&#039;&#039; de-DE&lt;br /&gt;
*&#039;&#039;&#039;italian&#039;&#039;&#039; it-IT&lt;br /&gt;
*&#039;&#039;&#039;dutch&#039;&#039;&#039; nl-NL&lt;br /&gt;
*&#039;&#039;&#039;french&#039;&#039;&#039; fr-FR&lt;br /&gt;
*&#039;&#039;&#039;norwegian&#039;&#039;&#039; nb-NO&lt;br /&gt;
*&#039;&#039;&#039;polish&#039;&#039;&#039; pl-PL&lt;br /&gt;
*&#039;&#039;&#039;swedish&#039;&#039;&#039; se-SE&lt;br /&gt;
*&#039;&#039;&#039;spanish&#039;&#039;&#039; es-ES&lt;br /&gt;
*&#039;&#039;&#039;russian&#039;&#039;&#039; ru-RU&lt;br /&gt;
&lt;br /&gt;
An alternative to the shortcut object vehicle is configuration file &#039;&#039;swconfig.xml&#039;&#039;. The format is as follows&lt;br /&gt;
&amp;lt;code type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;switchboard&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
        &amp;lt;culture&amp;gt;de-DE&amp;lt;/culture&amp;gt;&lt;br /&gt;
	...		&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/switchboard&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==swconfig.xml into /AppData/Local/==&lt;br /&gt;
The default directory for configuration data(swconfig.xml) is &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To keep the configuration not roaming, but PC-local, the operator application can be forced to look into &#039;&#039;Local&#039;&#039; instead:&lt;br /&gt;
*Click the button &#039;&#039;&#039;File/Configuration/Misc/AppData&#039;&#039;&#039; (Datei/Konfiguration/Diverses/AppData)&lt;br /&gt;
*WinExplore starts and displays &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator&#039;&#039;.&lt;br /&gt;
*Terminate the operator application&lt;br /&gt;
*Within the WinExplorer move to &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Local\&#039;&#039;&lt;br /&gt;
*Under &#039;Local&#039; create the directory &#039;&#039;innovaphone AG&#039;&#039;&lt;br /&gt;
*Under &#039;innovaphone AG&#039; create the directory &#039;&#039;innovaphone Operator&#039;&#039;&lt;br /&gt;
*Copy swconfig.xml from &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator&#039;&#039; into the new location &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Local\innovaphone AG\innovaphone Operator&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When starting the operator it is now referencing swconfig.xml from the newly created directory &#039;&#039;C:\Users\&amp;lt;user&amp;gt;\AppData\Local\innovaphone AG\innovaphone Operator&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Hosted PBX (Slave with license only)==&lt;br /&gt;
If you connect to a slave with &#039;&#039;license only&#039;&#039; activated you also have to activate the configuration &#039;&#039;Configuration :: Various :: Do not search at the master&#039;&#039;.&lt;br /&gt;
Otherwise the Opeartor will search or try configuration on the license master which will not work.&lt;br /&gt;
&lt;br /&gt;
=Addressing Large Scale Installations=&lt;br /&gt;
One of the lengthy discussions throughout the product design phase concerned large installations. Say, installations with more than 300 pbx users, up to a few thousand of them.&lt;br /&gt;
&lt;br /&gt;
To make a long story short - eventually it turned out the main gimmick, the new busy lamp field, wasn&#039;t suitable. With a BLF the need for a search function would have emerged which was deemed contradictory to the intended purpose of a BLF.&lt;br /&gt;
&lt;br /&gt;
Hence, the existing PBX search function received a major overhaul by adding the new [[#Full_Text_Index | Full Text Index]]. The goal of the full text index was to provide a search function being perceived as fast and superior to the one of the predecessor application. The BLF was left as-is without an extra search capability.&lt;br /&gt;
&lt;br /&gt;
Finally, a checklist aiding planning of large scale installations&lt;br /&gt;
*Make the operator an active member of a group e.g. &amp;quot;soap&amp;quot;.&lt;br /&gt;
*Make all other pbx users, that shall be searchable non-active members of the same group &amp;quot;soap&amp;quot;.&lt;br /&gt;
**Per PBX not more than 2000&amp;lt;ref&amp;gt;The PBX has a hard-coded limit of 2000 group members&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;If more than 2000 users are required, those must be distributed on multiple PBXs with 2000 &amp;quot;soap&amp;quot; members each&amp;lt;/ref&amp;gt;&lt;br /&gt;
*Ensure the Operator 9&#039;s PBX search is configured for &#039;&#039;&#039;Full Text/Volltext&#039;&#039;&#039;&lt;br /&gt;
*On the PC running the Operator 9 watch out for resource consumption.&lt;br /&gt;
**A countermeasure against too much of memory consumption is to completely disable the BLF&amp;lt;ref&amp;gt;Calculate with 80KB per BLF entry&amp;lt;/ref&amp;gt;. See the checkmark &#039;&#039;&#039;Configuration/Misc/BLF Deactivate&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
==How to obtain logs with Operator Application==&lt;br /&gt;
&lt;br /&gt;
When an error occurs the Operator Application will give an alert on status bar and we can click on &amp;quot;save trace&amp;quot; button to retrieve the log. However we can force the trace on Operator Application that will generate always the trace file.&lt;br /&gt;
&lt;br /&gt;
To do so, we need to go File-&amp;gt;Configuration then Misc-tab and enable &amp;quot;trace&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
[[Image:Concept_Operator_Version_9_trace.png]]&lt;br /&gt;
&lt;br /&gt;
=Known Issues=&lt;br /&gt;
==Application Won&#039;t Start On Windows XP==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The application doesn&#039;t start properly on Windows XP. An error text file is going to be generated comprising the following content:&lt;br /&gt;
&amp;lt;code text&amp;gt;&lt;br /&gt;
31.07.2009 16:40:46,innovaphone Operator,8.0.38.0&lt;br /&gt;
&lt;br /&gt;
OS: Microsoft Windows NT 5.1.2600 Service Pack 2&lt;br /&gt;
CLR:    2.0.50727.1433&lt;br /&gt;
&lt;br /&gt;
An internal error occurred&lt;br /&gt;
&lt;br /&gt;
Alarms:&lt;br /&gt;
Exception, date=31.07.2009 16:40:45, info=unhandled exception&lt;br /&gt;
================================================================&lt;br /&gt;
&#039;System.Windows.Controls.ToolTip&#039; value cannot be assigned to property &#039;Value&#039; of object &#039;System.Windows.Setter&#039;.&lt;br /&gt;
&#039;System.Windows.Controls.ToolTip&#039; is not a valid value for &#039;Setter.Value&#039;; &lt;br /&gt;
values derived from Visual or ContentElement are not supported.  &lt;br /&gt;
Error at object &#039;System.Windows.Controls.ToolTip&#039; in markup file &#039;operator;component/activecallsincontrol.xaml&#039;.&lt;br /&gt;
at System.Windows.Markup.XamlParseException.ThrowException(String message, Exception innerException, Int32 lineNumber, Int32 linePosition, Uri baseUri, XamlObjectIds currentXamlObjectIds, XamlObjectIds contextXamlObjectIds, Type objectType)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Have a look into what Windows Update offers as optional components. If there&#039;s a cumulative update for .NET 2.0/3.0/3.5 you&#039;re asked to install said update (addendum: The update may also show up as &#039;&#039;.NET 3.5 SP1&#039;&#039;&amp;lt;ref&amp;gt;.Net 3.5 SP1: http://www.microsoft.com/en-us/download/details.aspx?id=22&amp;lt;/ref&amp;gt;). That update is going to upgrade the CLR onto the required version. Please note that Service Pack 3 is mandatory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The original .Net Common Language Runtime (CLR) is not suitable and too old.&lt;br /&gt;
&lt;br /&gt;
==Blind-Transferred Calls Don&#039;t Show Up in List of &amp;quot;Transferred Calls&amp;quot;==&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Calls that were blind-transferred by the Operator application may probably not appear in the respective call list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
*At the PBX browse to PBX/Config/General - Field &amp;quot;Recall Timeout&amp;quot;&lt;br /&gt;
*Enter something useful in seconds (30 or 60)&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
A blind-transferred call is going to fall-back after that amount of seconds if not accepted in-between.&lt;br /&gt;
&lt;br /&gt;
==Blind-Transferred Calls Don&#039;t Fall Back==&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Calls that were blind-transferred by the Operator application don&#039;t fall-back to the operator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
*The cause and solution are the same as in [[#Blind-Transferred Calls Don&#039;t Show Up in List of &amp;quot;Transferred Calls&amp;quot;|Blind-Transferred Calls Don&#039;t Show Up in List of &amp;quot;Transferred Calls&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==Operator Freezes On Startup==&lt;br /&gt;
The operator application was reported to get stuck on startup. The user interface turned white and did not respond to any input.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The application window looks as follows [[Image:screenshot-oppi-freeze.jpg|center|thumb|200px|Operator freezes on startup]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
This symptom can occur due to a corruption of the framework&#039;s font cache data file. Try the workaround:&lt;br /&gt;
*&#039;&#039;&#039;Start/Run&#039;&#039;&#039; of &#039;&#039;&#039;services.msc&#039;&#039;&#039;&lt;br /&gt;
*Stop the service &#039;&#039;Windows Presentation Foundation Font Cache 3.0.0.0&#039;&#039;/&#039;&#039;Windows Presentation Foundation-Schriftartcache 3.0.0.0&#039;&#039;&lt;br /&gt;
*Now delete the system file &#039;&#039;FontCache3.0.0.0.dat&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The file likely resides under Windows XP in&lt;br /&gt;
--&lt;br /&gt;
%systemdrive%\Documents and Settings\LocalService\Local Settings\Application Data&lt;br /&gt;
&lt;br /&gt;
The file likely resides under Windows Vista/7 in&lt;br /&gt;
--&lt;br /&gt;
%windir%\ServiceProfiles\LocalService\AppData\Local&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Reboot the machine&lt;br /&gt;
&lt;br /&gt;
==Operator Displays Corrupted Fonts==&lt;br /&gt;
After 2 years of service the operator application was reported to suddenly display corrupted fonts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The application window looks as follows [[Image:Operator_font_corrupted.jpg|center|thumb|200px|Operator displays corrupted fonts]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
This symptom occurred due to a corruption of the framework&#039;s font cache data file. Try the workaround:&lt;br /&gt;
*&#039;&#039;&#039;Start/Run&#039;&#039;&#039; of &#039;&#039;&#039;services.msc&#039;&#039;&#039;&lt;br /&gt;
*Stop the service &#039;&#039;Windows Presentation Foundation Font Cache 3.0.0.0&#039;&#039;/&#039;&#039;Windows Presentation Foundation-Schriftartcache 3.0.0.0&#039;&#039;&lt;br /&gt;
*Now delete the system file &#039;&#039;FontCache3.0.0.0.dat&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The file likely resides under Windows XP in&lt;br /&gt;
--&lt;br /&gt;
%systemdrive%\Documents and Settings\LocalService\Local Settings\Application Data&lt;br /&gt;
&lt;br /&gt;
The file likely resides under Windows Vista/7 in&lt;br /&gt;
--&lt;br /&gt;
%windir%\ServiceProfiles\LocalService\AppData\Local&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Reboot the machine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
It is the same root cause as above in [[#Operator_Freezes_On_Startup|Operator Freezes On Startup]].&lt;br /&gt;
&lt;br /&gt;
==Pickup Of WQ Calls==&lt;br /&gt;
From on build 90112 the pickup of WQ calls is only possible for calls not in the CONNECT state. &lt;br /&gt;
*Activate the checkmark &#039;&#039;&#039;PBX/Objects/&amp;lt;WQ Object&amp;gt;/Queue/Operator connect for SOAP&#039;&#039;&#039;&lt;br /&gt;
**this setting guarantees that a WQ call is displayed as CONNECTed only in case of an operator actively talking to the caller party A.&lt;br /&gt;
&lt;br /&gt;
==Not Working: &#039;&#039;Focus on incoming call&#039;&#039;==&lt;br /&gt;
The configuration dialog offers an auto-focus checkmark &#039;&#039;&#039;File/Configuration/Misc/Focus on inc. call&#039;&#039;&#039;. Customers reported that the application manages getting into the foreground. However, without catching the keyboard focus. A final click into the application was necessary.&lt;br /&gt;
&lt;br /&gt;
Instead, the application icon within the taskbar starts flashing, indicating that further user interaction is required.&lt;br /&gt;
The application window looks as follows &lt;br /&gt;
[[Image:Set-foreground-waiting.PNG|center|thumb|200px|Operator waiting for a click]].&lt;br /&gt;
&lt;br /&gt;
This behaviour is by-design and cannot be circumvented in a common manner. An MS statement&amp;lt;ref&amp;gt;Set Foreground Window: http://msdn.microsoft.com/en-us/library/ms633539%28VS.85%29.aspx&amp;lt;/ref&amp;gt; clarifies this OS-behaviour:&lt;br /&gt;
*&#039;&#039;An application cannot force a window to the foreground while the user is working with another window. Instead, Windows flashes the taskbar button of the window to notify the user.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The only reliable way to have the auto-focus feature working is by minimizing the application to the tray area. See the following menu button. &lt;br /&gt;
[[Image:Op-minimize-to-tray.png|center|thumb|200px|Button: Minimize to tray area]]&lt;br /&gt;
Auto-focusing from that window-state/application-state is supposed to be more reliable in getting the application into the foreground and assigning it the keyboard focus.&lt;br /&gt;
&lt;br /&gt;
==Application Crash: Methode nicht gefunden/Method Not Found==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The application crashes - e.g. when searching - and prompts an exception labeled &#039;&#039;&#039;Methode nicht gefunden/Method Not Found&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;code text&amp;gt;&lt;br /&gt;
Exception, date=12.06.2013 16:35:52, info=unhandled exception&lt;br /&gt;
================================================================&lt;br /&gt;
Methode nicht gefunden: &amp;quot;System.Object[] innovaphone.idx.IFulltextIndex.Query(Char, System.String[])&amp;quot;.&lt;br /&gt;
   bei switchboard.Index.FtIndexQueryVlv(Char equalityTerminator, String[] terms, Int32 pageSize, VlvCursor&amp;amp; cursor)&lt;br /&gt;
   bei switchboard.SearchPbxControl.PbxSearchFullTextExecute(String[] terms)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
De-install and afterwards re-install the application(The configuration won&#039;t be deleted, i.e. will remain.).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The root-cause is a DLL versioning problem. The problem may occur after an update-install took place. That is, where a newer Operator was installed over an older, existing installation.&lt;br /&gt;
&lt;br /&gt;
==Inbound Calls Appear Doubled==&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The upper-left list of calls titled &#039;&#039;Incoming calls for..&#039;&#039; displays a single call as two or even more calls.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Configure a distinct &#039;&#039;&#039;Hardware ID&#039;&#039;&#039; of one of the operator&#039;s phones under &#039;&#039;&#039;File/Configuration/General/Hardware ID&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The operator is likely to have multiple registrations active, originating from multiple endpoint devices. Only one of those devices shall be selected as the operator&#039;s active phone.&lt;br /&gt;
&lt;br /&gt;
== Multiple Operator Instances and Nightswitch settings ==&lt;br /&gt;
&#039;&#039;&#039;Symptom&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Time settings will be empty or are not saved if more than one operator instance is used.&lt;br /&gt;
&lt;br /&gt;
== Installation on Windows 10 ==&lt;br /&gt;
An installation was tested on Windows 10 (Microsoft Windows NT 6.2.9200.0). The installation stopped with a hint for a missing, but required .NET framework version 3.x. Just follow the offered download link for .NET 3.5 SP1 and retry the installation afterwards. This procedure provided a successful installation of the application.&lt;br /&gt;
[[Image:Screenshot-op9-install-win10.png|center|thumb|200px|Button: Download .Net 3.5 SP1]]&lt;br /&gt;
&lt;br /&gt;
Other reports from the field show that this error might be omitted by removing the PC from its domain before installation and put it back afterwards.&lt;br /&gt;
&lt;br /&gt;
==Application cannot Initialize at PBX==&lt;br /&gt;
The application may fail to initialize at a PBX.&lt;br /&gt;
&lt;br /&gt;
Symptom:&lt;br /&gt;
* The application repeatedly prompts a red-colored error message onto the status line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
info=&#039;PBX Setup Completed:&#039;, error=&#039;Initialize failed!&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cause:&lt;br /&gt;
* The Windows proxy settings interfere&lt;br /&gt;
Solution:&lt;br /&gt;
* Alter the proxy configuration within &#039;&#039;&#039;Internet Options/Connections(/LAN Settings)&#039;&#039;&#039;. Those are accessible either via the Windows System Settings or from within the IE. Ensure that either the proxy-configuration is correct or deactivate it completely. It has been reported that the checkmark-activation of &#039;&#039;Internet Options/Connections/LAN-Settings/Bypass proxy server for local addresses&#039;&#039; also helped to solve the proxy-related problem.&lt;br /&gt;
&lt;br /&gt;
==Installation Operator failed==&lt;br /&gt;
Exception, date=02.12.2015 13:20:44, info=unhandled exception&lt;br /&gt;
&lt;br /&gt;
Cause:&lt;br /&gt;
* http://code.logos.com/blog/2009/11/how_to_crash_every_wpf_application.html&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
* Open the control panel from Windows and take a look into the logs. There should be a hint.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Contacts search: missing contacts on Full Text search==&lt;br /&gt;
&lt;br /&gt;
Sometimes the operator cannot find existing contacts when performing a search, this only seems to happen when &amp;quot;Full Text&amp;quot; method is used.&lt;br /&gt;
&lt;br /&gt;
This occurs when the _TAPI_ group has more than 2048 (firmware limit) members.&lt;br /&gt;
&lt;br /&gt;
To workaround this issue we suggest to split the users over two groups and make the _TAPI_ user an active member of both groups.&lt;br /&gt;
&lt;br /&gt;
=Localization=&lt;br /&gt;
The article [[Howto:Assist_In_Localization_Of_Operator_Version_9|Howto:Assist In Localization Of Operator Version 9]] serves as a starting point, if you are interested in helping to localize the application.&lt;br /&gt;
&lt;br /&gt;
=Uninstall=&lt;br /&gt;
&lt;br /&gt;
When we uninstall the Operator application on Windows the user configuration it&#039;s not deleted from the Roaming folder, so if we wish to do an reinstallation of the application with a new config we must delete manually the configuration data (swconfig.xml) from the Roaming folder: C:\Users\&amp;lt;user&amp;gt;\AppData\Roaming\innovaphone AG\innovaphone Operator.&lt;br /&gt;
&lt;br /&gt;
=Notes=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r1:Apps/UsersAdmin&amp;diff=58259</id>
		<title>Reference13r1:Apps/UsersAdmin</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r1:Apps/UsersAdmin&amp;diff=58259"/>
		<updated>2021-03-23T11:15:35Z</updated>

		<summary type="html">&lt;p&gt;Aza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==General==&lt;br /&gt;
; PBX-Password&lt;br /&gt;
: The Security Password your PBX &lt;br /&gt;
; Password&lt;br /&gt;
: The current status of your connection&lt;br /&gt;
:: &#039;&#039;green/match&#039;&#039; Everything is okay&lt;br /&gt;
:: &#039;&#039;red/mismatch&#039;&#039; The password in the field is not equal to the [[Reference9:PBX/Config/Security|PBX password]]&lt;br /&gt;
:: &#039;&#039;orange/not verified&#039;&#039; The password in the ProfileApp is not equal to the AP-instance password&lt;br /&gt;
:: &#039;&#039;orange,green,red/not verified&#039;&#039; The password in the UsersAdminApp is not equal to the AP-instance password&lt;br /&gt;
; PBX-Name&lt;br /&gt;
: The Name of your PBX&lt;br /&gt;
; Replication state&lt;br /&gt;
: State of replication Session&lt;br /&gt;
:: &#039;&#039;Session down&#039;&#039; : no websocket connection between Profile-App-Object and Profile-App (diabling/enabling &amp;quot;Websocket&amp;quot; flag in Profile object might help in some cases)&lt;br /&gt;
:: &#039;&#039;Session initialized/up&#039;&#039;&lt;br /&gt;
==Password policy==&lt;br /&gt;
; Minimum length&lt;br /&gt;
: minimum accepted password length (max: 23)&lt;br /&gt;
; Minimum number of categories&lt;br /&gt;
: minimum number of different character types new passwords must consist of&lt;br /&gt;
==SMTP==&lt;br /&gt;
SMTP-server definition for two-factor authentication&lt;br /&gt;
; E-mail address&lt;br /&gt;
: valid recipent email address&lt;br /&gt;
; Sender name&lt;br /&gt;
: displayed sender name&lt;br /&gt;
; Client host name&lt;br /&gt;
: client host&lt;br /&gt;
; SMTP server&lt;br /&gt;
: accessible smtp server&lt;br /&gt;
; Username&lt;br /&gt;
: valid recipent username&lt;br /&gt;
; Password&lt;br /&gt;
: valid recipent password&lt;br /&gt;
==Default settings - new users==&lt;br /&gt;
; Node&lt;br /&gt;
: node new users by default belong to&lt;br /&gt;
; PBX name&lt;br /&gt;
: pbx new users by default belong to&lt;br /&gt;
; Default password (import)&lt;br /&gt;
: password new users get assigned&lt;br /&gt;
; Home screen apps&lt;br /&gt;
: apps new users get assigned on home screen&lt;br /&gt;
; Template&lt;br /&gt;
: ConfigTemplate new users are using&lt;br /&gt;
; Logo URL&lt;br /&gt;
: URL to image which is displayed on registration pages (registration, password, confirmation, expiration)&lt;br /&gt;
==Privacy==&lt;br /&gt;
; Display e-mail addresses&lt;br /&gt;
: show e-mail address of extension in UsersApp&lt;br /&gt;
; Display phone numbers&lt;br /&gt;
: show phone number of extension in UsersApp&lt;br /&gt;
==Registration emails==&lt;br /&gt;
Localized text for email address verification&lt;br /&gt;
==Password reset==&lt;br /&gt;
Localized text for password reset&lt;br /&gt;
==Permissions==&lt;br /&gt;
; Allow users to edit and provision phones&lt;br /&gt;
: un/set user rights to manage own phone devices&lt;br /&gt;
==Related articles==&lt;br /&gt;
[[Reference13r1:Concept_App_Service_Users]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r1:Apps/UsersAdmin&amp;diff=58258</id>
		<title>Reference13r1:Apps/UsersAdmin</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r1:Apps/UsersAdmin&amp;diff=58258"/>
		<updated>2021-03-23T11:14:02Z</updated>

		<summary type="html">&lt;p&gt;Aza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==General==&lt;br /&gt;
; PBX-Password&lt;br /&gt;
: The Security Password your PBX &lt;br /&gt;
; Password&lt;br /&gt;
: The current status of your connection&lt;br /&gt;
:: &#039;&#039;green/match&#039;&#039; Everything is okay&lt;br /&gt;
:: &#039;&#039;red/mismatch&#039;&#039; The password in the field is not equal to the [[Reference9:PBX/Config/Security|PBX password]]&lt;br /&gt;
:: &#039;&#039;orange/not verified&#039;&#039; The password in the ProfileApp is not equal to the AP-instance password&lt;br /&gt;
:: &#039;&#039;orange,green,red/not verified&#039;&#039; The password in the UsersAdminApp is not equal to the AP-instance password&lt;br /&gt;
; PBX-Name&lt;br /&gt;
: The Name of your PBX&lt;br /&gt;
; Replication state&lt;br /&gt;
: State of replication Session&lt;br /&gt;
:: &#039;&#039;Session down&#039;&#039; : no websocket connection between Profile-App-Object and Profile-App (diabling/enabling &amp;quot;Websocket&amp;quot; flag in Profile object might help)&lt;br /&gt;
:: &#039;&#039;Session initialized/up&#039;&#039;&lt;br /&gt;
==Password policy==&lt;br /&gt;
; Minimum length&lt;br /&gt;
: minimum accepted password length (max: 23)&lt;br /&gt;
; Minimum number of categories&lt;br /&gt;
: minimum number of different character types new passwords must consist of&lt;br /&gt;
==SMTP==&lt;br /&gt;
SMTP-server definition for two-factor authentication&lt;br /&gt;
; E-mail address&lt;br /&gt;
: valid recipent email address&lt;br /&gt;
; Sender name&lt;br /&gt;
: displayed sender name&lt;br /&gt;
; Client host name&lt;br /&gt;
: client host&lt;br /&gt;
; SMTP server&lt;br /&gt;
: accessible smtp server&lt;br /&gt;
; Username&lt;br /&gt;
: valid recipent username&lt;br /&gt;
; Password&lt;br /&gt;
: valid recipent password&lt;br /&gt;
==Default settings - new users==&lt;br /&gt;
; Node&lt;br /&gt;
: node new users by default belong to&lt;br /&gt;
; PBX name&lt;br /&gt;
: pbx new users by default belong to&lt;br /&gt;
; Default password (import)&lt;br /&gt;
: password new users get assigned&lt;br /&gt;
; Home screen apps&lt;br /&gt;
: apps new users get assigned on home screen&lt;br /&gt;
; Template&lt;br /&gt;
: ConfigTemplate new users are using&lt;br /&gt;
; Logo URL&lt;br /&gt;
: URL to image which is displayed on registration pages (registration, password, confirmation, expiration)&lt;br /&gt;
==Privacy==&lt;br /&gt;
; Display e-mail addresses&lt;br /&gt;
: show e-mail address of extension in UsersApp&lt;br /&gt;
; Display phone numbers&lt;br /&gt;
: show phone number of extension in UsersApp&lt;br /&gt;
==Registration emails==&lt;br /&gt;
Localized text for email address verification&lt;br /&gt;
==Password reset==&lt;br /&gt;
Localized text for password reset&lt;br /&gt;
==Permissions==&lt;br /&gt;
; Allow users to edit and provision phones&lt;br /&gt;
: un/set user rights to manage own phone devices&lt;br /&gt;
==Related articles==&lt;br /&gt;
[[Reference13r1:Concept_App_Service_Users]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Troubleshoot_v13r1_Push_with_myApps_for_Android_and_iOS&amp;diff=57287</id>
		<title>Howto:Troubleshoot v13r1 Push with myApps for Android and iOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Troubleshoot_v13r1_Push_with_myApps_for_Android_and_iOS&amp;diff=57287"/>
		<updated>2020-10-07T11:22:05Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* PBX */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When myApps is running on a mobile phone in background mode, it must be woken up in order to receive the call.  This is done using the &#039;&#039;push&#039;&#039; mechanism in both iOS and Android.  Here is how to debug it when incoming calls are not received.&lt;br /&gt;
==Applies To==&lt;br /&gt;
This information applies to&lt;br /&gt;
&lt;br /&gt;
* innovaphone PBX and myApps client with 13r1 firmware&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
=== PBX ===&lt;br /&gt;
* Firmware version 13r1sr15 [132455] or higher&lt;br /&gt;
* Internet access via HTTPS and able to resolve services.innovaphone.com&lt;br /&gt;
* Make sure that the local Firewall allows wss/ws (websocket) traffic to/from services.innovaphone.com&lt;br /&gt;
&lt;br /&gt;
=== myApps for iOS or Android ===&lt;br /&gt;
* v13r1sr15 for myApps&lt;br /&gt;
&lt;br /&gt;
=== Smartphone ===&lt;br /&gt;
* iOS Version 12.0.1 or higher&lt;br /&gt;
* Android Version 6.0 or higher&lt;br /&gt;
&lt;br /&gt;
==Push Object ==&lt;br /&gt;
=== Initial Configuration ===&lt;br /&gt;
The push object is configured using the PBX manager, as described in the ITConnect training [http://wiki.innovaphone.com/index.php?title=Course13:IT_Connect_-_10.1_Push_Object here]&lt;br /&gt;
&lt;br /&gt;
If opening the PBX-Manager for the &amp;quot;Services AP plugin&amp;quot;, the check-flag besides services.innovaphone.com is not shown - it means that your Push object is not connected. Always use the native myApps Windows - client for this check, to exclude the possibility of a visual bug when using the webbrowser-only version - with a &amp;quot;undefined&amp;quot; browser version.&lt;br /&gt;
&lt;br /&gt;
If the flag is there but Push not working, make sure you assigned the Push app to the user you use for test.&lt;br /&gt;
&lt;br /&gt;
=== Push looses connected state ===&lt;br /&gt;
* If the push object was already connected, and for some reason (after a firmware update or network connection problems), the object is not connected anymore, please check that PBX can reach and resolve &amp;quot;services.innovaphone.com&amp;quot; and the innovaphone AG certificate is still in the trust list.&lt;br /&gt;
* In order to redo the config, you need not only to delete the Push object in the PBX manager plugin but also to get the corresponding domain deleted on our push - service. Open a support ticket with the PBX configuration with the standard password and the Email address used to register the push object and ask for the deletion of your PBX-domain. &lt;br /&gt;
*once innovaphone support confirmed the domain/PBX push registration deletion, reconfigure the push object using the PBX manager.&lt;br /&gt;
&lt;br /&gt;
==myApps for Android push configuration checks ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Troubleshoot_v13_Push_with_myApps_for_Android and iOS_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
Open myApps, and check you have a softphone app configured. Then tap on the &amp;quot;burger&amp;quot; menu on the top right, and check your default app is the softphone app.&lt;br /&gt;
&lt;br /&gt;
Scroll down and tap on &amp;quot;More&amp;quot;&lt;br /&gt;
# Tap on &amp;quot;myApps events&amp;quot; and enable notification on the smartphone for myApps&lt;br /&gt;
# Tap on &amp;quot;Calling account&amp;quot; and enable myApps as call account&lt;br /&gt;
# Tap on &amp;quot;Data saver&amp;quot; and enable background data for myApps on the smartphone&lt;br /&gt;
# Tap on &amp;quot;Overlaying&amp;quot; and enable them on the smartphone&lt;br /&gt;
&lt;br /&gt;
==myApps for iOS push configuration checks ==&lt;br /&gt;
Go through the following steps, to check that in your iPhone, Push is configured correctly.&lt;br /&gt;
#Open your iOS Settings app on your iPhone&lt;br /&gt;
#Go to the &#039;&#039;Notifications&#039;&#039; (German: Mitteilungen) section&lt;br /&gt;
#Find the myApps app and make sure notifications are allowed and that LockScreen, Notification Center and Banners are selected as Alerts &amp;lt;!--internal: Banners seems to be the important one from my tests--&amp;gt;&lt;br /&gt;
For more information on howto enable Push notifications for an iOS-app, see also [https://support.apple.com/en-us/HT201925#If%20you%20don&#039;t%20see%20notifications%20for%20a%20specific%20app this Apple support page, section If you don&#039;t see notifications for a specific app]&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
[[Reference12r2:Concept_Push_Notifications_for_myPBX_iOS_and_Android]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference11r1:General/Info&amp;diff=57156</id>
		<title>Reference11r1:General/Info</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference11r1:General/Info&amp;diff=57156"/>
		<updated>2020-09-22T09:55:39Z</updated>

		<summary type="html">&lt;p&gt;Aza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;General information about the VoIP device is displayed here.&lt;br /&gt;
&lt;br /&gt;
== All Devices ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|The version string of the device. This string has the format &amp;lt;Version&amp;gt;&amp;lt;label&amp;gt;&amp;lt;Product&amp;gt;[&amp;lt;Firmware Build&amp;gt;], Bootcode[&amp;lt;Bootcode Build&amp;gt;], HW[&amp;lt;Hardware Build&amp;gt;], &amp;lt;Fash&amp;gt;/&amp;lt;Dram&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;SerialNo&#039;&#039;&#039;&lt;br /&gt;
|The serial number or Ethernet MAC address of the device. It consists of 6 pairs of hexadecimal digits separated by &#039;-&#039;. It is followed by a two digits checksum, which can entered on the license manager to detect possible typing errors when entering the serial no.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Coder&#039;&#039;&#039;&lt;br /&gt;
|Voice Coder channels available. Note that these figures show type and number of channels the device technically can handle.  It does not account for possible license requirements (that is: if a license for a coder is required but not available, the coder would show up here nevertheless)&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Conference&#039;&#039;&#039;&lt;br /&gt;
|Conference channels available in the device&#039;s CONF interface. Note that there may be more requirements, see [[Howto:Conferences, Resources and Licenses]]&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Fax&#039;&#039;&#039;&lt;br /&gt;
|Fax channels available in the device&#039;s FAX interface. For each T.30 fax sent or received concurrently, one &#039;&#039;Fax channel&#039;&#039; is required.  Note that for &#039;&#039;audio fax&#039;&#039;, 2 Coder channels (i.e. &#039;&#039;DSPs&#039;&#039;) per fax are required too&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;HDLC&#039;&#039;&#039;&lt;br /&gt;
|Number of HDLC channels available. &lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Sync&#039;&#039;&#039;&lt;br /&gt;
|Some devices can synchronize the internal PCM bus (the bus used to interconnect ISDN channels, DSP channels, etc) to an external interface. If no synchronization is achieved, this may result in slips on ISDN interfaces, which results in a removal or duplication of a sample every some seconds. In voice calls this is not recognized, but it may lead to abortion of Fax or Modem calls.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Power Source*&#039;&#039;&#039;&lt;br /&gt;
|Indicates which ETH Interface it&#039;s being used for PoE power source. Note*: Some Gateways don&#039;t provide this information.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Power Off Loop*&#039;&#039;&#039;&lt;br /&gt;
|Provides information if feature it&#039;s Enabled/Disabled. Note*: Only some devices have this feature and provide information.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Temperature&#039;&#039;&#039;&lt;br /&gt;
|Displays the temperature of the mainboard inside the Gateway. Up to 60ºC it&#039;s an acceptable value, higher values than that we recommend to move the Gateway to a cooler location to prevent damages on the hardware. IP111 IP112 and IPxx11 devices show the CPU die temperature, it can rise to 85°C.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;SNTP Server&#039;&#039;&#039;&lt;br /&gt;
|The SNTP Server used to synchronized time/date of the device&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Time&#039;&#039;&#039;&lt;br /&gt;
|Current Date/time as synchronized with an external SNTP Server&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Uptime&#039;&#039;&#039;&lt;br /&gt;
|Uptime of the device&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Test License&#039;&#039;&#039;&lt;br /&gt;
|Link, which is displayed if a test license is installed on the device. This link can be used to restart the test period.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DECT Devices ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Firmware&#039;&#039;&#039;&lt;br /&gt;
|The Firmware Version of the DECT subsystem.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;System ARI&#039;&#039;&#039;&lt;br /&gt;
|The ARI of the DECT system. On single cell systems this is a burned in identification of the system (similar to a MAC address). For multicell systems the ARI is defined by the multicell license, which has to be installed on the ip-master of the system.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Frequency&#039;&#039;&#039;&lt;br /&gt;
|The frequency used on the system. This is DECT for systems conforming to the DECT standard. For north america a different frequency is used.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Softwarephone_and_terminal_server_enviroment_or_thin_clients&amp;diff=56768</id>
		<title>Howto:Softwarephone and terminal server enviroment or thin clients</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Softwarephone_and_terminal_server_enviroment_or_thin_clients&amp;diff=56768"/>
		<updated>2020-08-20T08:18:34Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Problem Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Having innovaphone softwarephone running on thin clients &lt;br /&gt;
==Applies To==&lt;br /&gt;
This information applies to&lt;br /&gt;
&lt;br /&gt;
* innovaphone softwarephone or myApps softphone App&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Keywords: &lt;br /&gt;
&lt;br /&gt;
bria&lt;br /&gt;
rdp&lt;br /&gt;
remote desktop&lt;br /&gt;
soft phone terminal server&lt;br /&gt;
citrix&lt;br /&gt;
audio&lt;br /&gt;
&lt;br /&gt;
 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
informations about thin clients and Client/Server [http://de.wikipedia.org/wiki/Thin_Client thin clients]&lt;br /&gt;
&lt;br /&gt;
===Problem Details===&lt;br /&gt;
The softwarephone or myApps softphone App needs a local sound card, which means it makes little sense connecting an USB Headset on the server (in the server room) and pass the USB cable till the local workplace. You want to connect the USB audio cable on the local PC you are working on - the thin client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As the whole user interface (e.g Windows and Applications) is running on the server, you will need an USB sound proxy (Client Audio Mapping in Citrix Speak), and will look like this:&lt;br /&gt;
&lt;br /&gt;
 Headset &amp;lt;--USB--&amp;gt; Thin Client (PC) &amp;lt;---- TCP/IP -------&amp;gt; Server (Citrix Metaframe)&lt;br /&gt;
&lt;br /&gt;
The thin client sends the USB sound data as uncompressed audio to the Server, because there is the softwarephone/myApps softphone running. There the data will be processed, compressed and sent via IP. This is not a nice solution - wasting bandwidth and creating delay (having also an extra delay for sending data between the thin client and the server).&lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
A thin client with Windows operating system is the recommendation for such a setup. Here you install the softwarephone locally and control it from the Citrix/Terminal-Server using myPBX or phone-App. &lt;br /&gt;
The myApps-Softphone App cannot be controlled by the RCC-App or phone-App, therefore you cannot use it as a replacement for the locally installed softwarephone.&lt;br /&gt;
&lt;br /&gt;
As an alternative, you can of course use ip-hardphones instead of the locally installed softwarephone.&lt;br /&gt;
&lt;br /&gt;
=== Additional hints ===&lt;br /&gt;
When starting the myApps-Windows-Client in the Terminal-Server, we [[Reference13r1:Concept_myApps#MSI_parameters | recommend to disable the Headset-SDKs using DISABLEHEADSETS]] - since the headset control will be done also locally at the softwarephone. &lt;br /&gt;
&lt;br /&gt;
Also check the [[Reference13r1:Concept_myApps#Known_issues|known issues]] for TerminalServer or Citrix entries. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Related Articles == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=How_to_post_a_successful_Mantis_Request&amp;diff=53633</id>
		<title>How to post a successful Mantis Request</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=How_to_post_a_successful_Mantis_Request&amp;diff=53633"/>
		<updated>2019-10-02T09:02:24Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Problem Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is written to make your request to innovaphone support or innovaphone presales more successful. &lt;br /&gt;
&lt;br /&gt;
Furthermore you help us to improve our workflow for you&lt;br /&gt;
&lt;br /&gt;
==Applies to==&lt;br /&gt;
Support Requests&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
==Problem Details==&lt;br /&gt;
Here are some hints for a successful request:&lt;br /&gt;
&lt;br /&gt;
Before opening a support case, please make sure that you have the newest available build on all your innovaphone device your request is for. &lt;br /&gt;
&lt;br /&gt;
The newest build is provided: http://download.innovaphone.com/ (you enter this area with the well known ice access)&lt;br /&gt;
&lt;br /&gt;
Please add in every case the Config with standard user und password. &lt;br /&gt;
&lt;br /&gt;
If it is in exceptional cases not possible to set it to standard, provide us user and password. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please only one request per case.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Here are some formal hints for successful request:&lt;br /&gt;
&lt;br /&gt;
* reporters phone number with extension (@phone 12345678-910)&lt;br /&gt;
* significant mail header&lt;br /&gt;
* just text in the mail body.  We do not support &amp;quot;embedded&amp;quot; pictures.  If you need to send screenshots etc. send  them as attachment&lt;br /&gt;
* no attachments with names &#039;&#039;&amp;lt;number&amp;gt;&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;{&amp;lt;code&amp;gt;bmp&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;png&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;jpg&amp;lt;/code&amp;gt;}&#039;&#039; or &#039;&#039;&amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt;&amp;lt;number&#039;&#039;&amp;gt;&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;{&amp;lt;code&amp;gt;bmp&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;png&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;jpg&amp;lt;/code&amp;gt;}&#039;&#039;&lt;br /&gt;
* only the text of the current mail&lt;br /&gt;
* free from disclaimers&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Here are some hints to attach successful traces/logs/configs:&lt;br /&gt;
&lt;br /&gt;
* save logs always in a .txt file and attach it to the request mail. Please, never paste it in to the mail body directly&lt;br /&gt;
* save traces in a .pcap file and attach it to the request mail. Do not use the text format (as obtained in &#039;&#039;Maintenance/Tracing/&#039;&#039;{&#039;&#039;trace(buffer)&#039;&#039; or &#039;&#039;trace(continuous)&#039;&#039;}&lt;br /&gt;
* attachment must not be bigger than 5 MB, if you have a bigger one please pack it into a zip-file or a rar-file&lt;br /&gt;
* if you are not sure about which trace, please ask the innovaphone team which trace is useful for this request, make sure that all other not used trace are switched off&lt;br /&gt;
* if possible clear the trace before tracing the issue &lt;br /&gt;
* send us no traces/logs/configs without a decent description (who calls whom, what happens, what should happen)&lt;br /&gt;
* make sure that fault can be seen inside the log/trace &lt;br /&gt;
* do not attach any office documents including macros (file-extension &amp;quot;x&amp;quot;). instead use pdf formatted files&lt;br /&gt;
&lt;br /&gt;
Here are the causes why we necessarily need the information in every new posted case:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
@source source of supply            (from which dealer, distributor did you purchase this product)&lt;br /&gt;
&lt;br /&gt;
This information is important to determine who is the right partner to support you.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
@customer end customer              (where is this device in productive use?)&lt;br /&gt;
&lt;br /&gt;
This information is exclusively used to group separate cases which belong to the same installation and thus shall considered as a whole. &lt;br /&gt;
&lt;br /&gt;
If you have with this issue problems with data protection, you can give your customer an alias, but make sure that you have always the same alias for one customer.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Valid TAGS===&lt;br /&gt;
See below a summary over all valid tags:&lt;br /&gt;
&lt;br /&gt;
 Tag                Required*    Description &lt;br /&gt;
 ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 @customer          mo           end customer (project)&lt;br /&gt;
 @source            no           source of supply&lt;br /&gt;
 @phone             no           Reporters phone number&lt;br /&gt;
 @cc                no           Additional CCs&lt;br /&gt;
 @email             no           Email to communicate with (if you write from a strange mail account,&lt;br /&gt;
                                 you can set your company email address) &lt;br /&gt;
 @name              no           Name of person to communicate with (if you write from a strange mail account)&lt;br /&gt;
 @status            no           New State for Issue (for internal use)&lt;br /&gt;
 @assign            no           Mantis user ID of Handler (for internal use)&lt;br /&gt;
 @project           no           Project to assign case to (for internal use)&lt;br /&gt;
 @summary           no           Description (for a extra short summery)&lt;br /&gt;
 @language          no           Set language (en, de)&lt;br /&gt;
 @setlanguage       no           Set and store language for your email address&lt;br /&gt;
 @sendalways        no           Acknowledge the receipt of each message - not only new cases&lt;br /&gt;
 @sendnever         no           Never send ack messages - not even for new cases&lt;br /&gt;
 @precedence        no           User defined priority (A, B, C)&lt;br /&gt;
 * for submittal of new cases&lt;br /&gt;
&lt;br /&gt;
Please note that email, status, assign are available for innovaphone employees only.&lt;br /&gt;
&lt;br /&gt;
===Case Number===&lt;br /&gt;
&lt;br /&gt;
Please make sure that all communication to a case contains the case number. &lt;br /&gt;
&lt;br /&gt;
In the following you see the format for the example ticket number: 1234&lt;br /&gt;
&lt;br /&gt;
Provide this number, ###1234###, with exactly this syntax in the subject line of your email to ensure that all information gets posted to the correct case. &lt;br /&gt;
&lt;br /&gt;
The email address for all replies is always support@innovaphone.com or presales@innovaphone.com, never the personal account of innovaphone presale or support staff. &lt;br /&gt;
&lt;br /&gt;
The best thing is always to use the reply function in your mailer.&lt;br /&gt;
&lt;br /&gt;
=== Replying to a Case ===&lt;br /&gt;
To cut down on text size in our issue tracking database, original emails sent to the customer are removed from the customer replies.  This is done by searching for a line like &lt;br /&gt;
&lt;br /&gt;
 ~~+~~ Do NOT answer/change/comment below this line ~~+~~ Bitte nicht unterhalb dieser Zeile antworten ~~+~~&lt;br /&gt;
&lt;br /&gt;
Everything below this line is removed.  This means you must not put any comments or answers below this line, as it will not be received by us.  If you need to quote the text you have received by us, then please copy and paste it to the top so it will be before the above mentioned line.&lt;br /&gt;
&lt;br /&gt;
=== Real time support Requests ===&lt;br /&gt;
&lt;br /&gt;
If know you will have a difficult installation ahead, you may want to let us know 5 workdays before. If so, we might be able to schedule a support person that is dedicated to your installation and may be called right away in case of problems (call the switchboard at +49 7031 73009 0 and ask for the support person assigned to your case).&lt;br /&gt;
&lt;br /&gt;
== Access to Case History ==&lt;br /&gt;
Access to the full case history for our customers is available in the email you will be getting each Friday with a link to your case summary status page.  This will show the status of all of your cases at  glance.&lt;br /&gt;
&lt;br /&gt;
Please note that this page is always generated in real-time.  So even though you will be receiving the reminder email Fridays only, you may have a look at it at any time.  It will always show the then-current status!  If you lost the link and need to look at the status page, go to [http://mantis.innovaphone.com/view_customer_bug_page.php this page] and follow the instructions.&lt;br /&gt;
&lt;br /&gt;
The same page is also available from my.innovaphone.com (see the &#039;&#039;Support&#039;&#039; tab).&lt;br /&gt;
&lt;br /&gt;
==Known Problems==&lt;br /&gt;
=== Embedded Pictures ===&lt;br /&gt;
&#039;&#039;&#039;You must not send emails with &#039;&#039;embedded pictures&#039;&#039; (pictures just pasted into the email body) as mantis will remove those&#039;&#039;&#039;.  Instead, attach them as separate files.&lt;br /&gt;
&lt;br /&gt;
=== Removal of Decoration ===&lt;br /&gt;
Our ticketing system will remove all pictures attached to the email which are considered &#039;&#039;decoration&#039;&#039; (such as logo companies etc.).  The heuristic to detect such images is quite straight forward: all image (.png, .bmp, .jpg, .gif) files whose name start with a &#039;&#039;hexadecimal&#039;&#039; number (e.g &amp;lt;code&amp;gt;0001.png&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;b1.png&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;B1.png&amp;lt;/code&amp;gt; but not &amp;lt;code&amp;gt;g1.png&amp;lt;/code&amp;gt;) or with the word &#039;&#039;image&#039;&#039; followed by a hexadecimal number (e.g. &amp;lt;code&amp;gt;image01.gif&amp;lt;/code&amp;gt;) are considered &#039;&#039;decoration&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Embedded comments ===&lt;br /&gt;
Our ticketing system will do an effort to remove all text we sent to you in any response you send to us.  The strategy is quite simple.  When sending out an email to you, it will add a line like &amp;lt;code&amp;gt;~~+~~ Do NOT answer/change/comment below this line ~~+~~ Bitte nicht unterhalb dieser Zeile antworten ~~+~~&amp;lt;/code&amp;gt; at the top of the text.  When receiving email from you, it will remove any text after such line.  In effect, all text we sent to you and returned to us in your response will be removed before storing your response in our database.   So if you want to response with comments interspersed with our original text, you must first remove this line. Otherwise you simply put your response before this line. &lt;br /&gt;
&lt;br /&gt;
[[Category:News|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=How_to_post_a_successful_Mantis_Request&amp;diff=53632</id>
		<title>How to post a successful Mantis Request</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=How_to_post_a_successful_Mantis_Request&amp;diff=53632"/>
		<updated>2019-10-02T09:01:59Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Problem Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is written to make your request to innovaphone support or innovaphone presales more successful. &lt;br /&gt;
&lt;br /&gt;
Furthermore you help us to improve our workflow for you&lt;br /&gt;
&lt;br /&gt;
==Applies to==&lt;br /&gt;
Support Requests&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
==Problem Details==&lt;br /&gt;
Here are some hints for a successful request:&lt;br /&gt;
&lt;br /&gt;
Before opening a support case, please make sure that you have the newest available build on all your innovaphone device your request is for. &lt;br /&gt;
&lt;br /&gt;
The newest build is provided: http://download.innovaphone.com/ (you enter this area with the well known ice access)&lt;br /&gt;
&lt;br /&gt;
Please add in every case the Config with standard user und password. &lt;br /&gt;
&lt;br /&gt;
If it is in exceptional cases not possible to set it to standard, provide us user and password. &lt;br /&gt;
&lt;br /&gt;
Please only one request per case.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Here are some formal hints for successful request:&lt;br /&gt;
&lt;br /&gt;
* reporters phone number with extension (@phone 12345678-910)&lt;br /&gt;
* significant mail header&lt;br /&gt;
* just text in the mail body.  We do not support &amp;quot;embedded&amp;quot; pictures.  If you need to send screenshots etc. send  them as attachment&lt;br /&gt;
* no attachments with names &#039;&#039;&amp;lt;number&amp;gt;&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;{&amp;lt;code&amp;gt;bmp&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;png&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;jpg&amp;lt;/code&amp;gt;}&#039;&#039; or &#039;&#039;&amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt;&amp;lt;number&#039;&#039;&amp;gt;&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;{&amp;lt;code&amp;gt;bmp&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;png&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;jpg&amp;lt;/code&amp;gt;}&#039;&#039;&lt;br /&gt;
* only the text of the current mail&lt;br /&gt;
* free from disclaimers&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Here are some hints to attach successful traces/logs/configs:&lt;br /&gt;
&lt;br /&gt;
* save logs always in a .txt file and attach it to the request mail. Please, never paste it in to the mail body directly&lt;br /&gt;
* save traces in a .pcap file and attach it to the request mail. Do not use the text format (as obtained in &#039;&#039;Maintenance/Tracing/&#039;&#039;{&#039;&#039;trace(buffer)&#039;&#039; or &#039;&#039;trace(continuous)&#039;&#039;}&lt;br /&gt;
* attachment must not be bigger than 5 MB, if you have a bigger one please pack it into a zip-file or a rar-file&lt;br /&gt;
* if you are not sure about which trace, please ask the innovaphone team which trace is useful for this request, make sure that all other not used trace are switched off&lt;br /&gt;
* if possible clear the trace before tracing the issue &lt;br /&gt;
* send us no traces/logs/configs without a decent description (who calls whom, what happens, what should happen)&lt;br /&gt;
* make sure that fault can be seen inside the log/trace &lt;br /&gt;
* do not attach any office documents including macros (file-extension &amp;quot;x&amp;quot;). instead use pdf formatted files&lt;br /&gt;
&lt;br /&gt;
Here are the causes why we necessarily need the information in every new posted case:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
@source source of supply            (from which dealer, distributor did you purchase this product)&lt;br /&gt;
&lt;br /&gt;
This information is important to determine who is the right partner to support you.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
@customer end customer              (where is this device in productive use?)&lt;br /&gt;
&lt;br /&gt;
This information is exclusively used to group separate cases which belong to the same installation and thus shall considered as a whole. &lt;br /&gt;
&lt;br /&gt;
If you have with this issue problems with data protection, you can give your customer an alias, but make sure that you have always the same alias for one customer.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Valid TAGS===&lt;br /&gt;
See below a summary over all valid tags:&lt;br /&gt;
&lt;br /&gt;
 Tag                Required*    Description &lt;br /&gt;
 ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 @customer          mo           end customer (project)&lt;br /&gt;
 @source            no           source of supply&lt;br /&gt;
 @phone             no           Reporters phone number&lt;br /&gt;
 @cc                no           Additional CCs&lt;br /&gt;
 @email             no           Email to communicate with (if you write from a strange mail account,&lt;br /&gt;
                                 you can set your company email address) &lt;br /&gt;
 @name              no           Name of person to communicate with (if you write from a strange mail account)&lt;br /&gt;
 @status            no           New State for Issue (for internal use)&lt;br /&gt;
 @assign            no           Mantis user ID of Handler (for internal use)&lt;br /&gt;
 @project           no           Project to assign case to (for internal use)&lt;br /&gt;
 @summary           no           Description (for a extra short summery)&lt;br /&gt;
 @language          no           Set language (en, de)&lt;br /&gt;
 @setlanguage       no           Set and store language for your email address&lt;br /&gt;
 @sendalways        no           Acknowledge the receipt of each message - not only new cases&lt;br /&gt;
 @sendnever         no           Never send ack messages - not even for new cases&lt;br /&gt;
 @precedence        no           User defined priority (A, B, C)&lt;br /&gt;
 * for submittal of new cases&lt;br /&gt;
&lt;br /&gt;
Please note that email, status, assign are available for innovaphone employees only.&lt;br /&gt;
&lt;br /&gt;
===Case Number===&lt;br /&gt;
&lt;br /&gt;
Please make sure that all communication to a case contains the case number. &lt;br /&gt;
&lt;br /&gt;
In the following you see the format for the example ticket number: 1234&lt;br /&gt;
&lt;br /&gt;
Provide this number, ###1234###, with exactly this syntax in the subject line of your email to ensure that all information gets posted to the correct case. &lt;br /&gt;
&lt;br /&gt;
The email address for all replies is always support@innovaphone.com or presales@innovaphone.com, never the personal account of innovaphone presale or support staff. &lt;br /&gt;
&lt;br /&gt;
The best thing is always to use the reply function in your mailer.&lt;br /&gt;
&lt;br /&gt;
=== Replying to a Case ===&lt;br /&gt;
To cut down on text size in our issue tracking database, original emails sent to the customer are removed from the customer replies.  This is done by searching for a line like &lt;br /&gt;
&lt;br /&gt;
 ~~+~~ Do NOT answer/change/comment below this line ~~+~~ Bitte nicht unterhalb dieser Zeile antworten ~~+~~&lt;br /&gt;
&lt;br /&gt;
Everything below this line is removed.  This means you must not put any comments or answers below this line, as it will not be received by us.  If you need to quote the text you have received by us, then please copy and paste it to the top so it will be before the above mentioned line.&lt;br /&gt;
&lt;br /&gt;
=== Real time support Requests ===&lt;br /&gt;
&lt;br /&gt;
If know you will have a difficult installation ahead, you may want to let us know 5 workdays before. If so, we might be able to schedule a support person that is dedicated to your installation and may be called right away in case of problems (call the switchboard at +49 7031 73009 0 and ask for the support person assigned to your case).&lt;br /&gt;
&lt;br /&gt;
== Access to Case History ==&lt;br /&gt;
Access to the full case history for our customers is available in the email you will be getting each Friday with a link to your case summary status page.  This will show the status of all of your cases at  glance.&lt;br /&gt;
&lt;br /&gt;
Please note that this page is always generated in real-time.  So even though you will be receiving the reminder email Fridays only, you may have a look at it at any time.  It will always show the then-current status!  If you lost the link and need to look at the status page, go to [http://mantis.innovaphone.com/view_customer_bug_page.php this page] and follow the instructions.&lt;br /&gt;
&lt;br /&gt;
The same page is also available from my.innovaphone.com (see the &#039;&#039;Support&#039;&#039; tab).&lt;br /&gt;
&lt;br /&gt;
==Known Problems==&lt;br /&gt;
=== Embedded Pictures ===&lt;br /&gt;
&#039;&#039;&#039;You must not send emails with &#039;&#039;embedded pictures&#039;&#039; (pictures just pasted into the email body) as mantis will remove those&#039;&#039;&#039;.  Instead, attach them as separate files.&lt;br /&gt;
&lt;br /&gt;
=== Removal of Decoration ===&lt;br /&gt;
Our ticketing system will remove all pictures attached to the email which are considered &#039;&#039;decoration&#039;&#039; (such as logo companies etc.).  The heuristic to detect such images is quite straight forward: all image (.png, .bmp, .jpg, .gif) files whose name start with a &#039;&#039;hexadecimal&#039;&#039; number (e.g &amp;lt;code&amp;gt;0001.png&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;b1.png&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;B1.png&amp;lt;/code&amp;gt; but not &amp;lt;code&amp;gt;g1.png&amp;lt;/code&amp;gt;) or with the word &#039;&#039;image&#039;&#039; followed by a hexadecimal number (e.g. &amp;lt;code&amp;gt;image01.gif&amp;lt;/code&amp;gt;) are considered &#039;&#039;decoration&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Embedded comments ===&lt;br /&gt;
Our ticketing system will do an effort to remove all text we sent to you in any response you send to us.  The strategy is quite simple.  When sending out an email to you, it will add a line like &amp;lt;code&amp;gt;~~+~~ Do NOT answer/change/comment below this line ~~+~~ Bitte nicht unterhalb dieser Zeile antworten ~~+~~&amp;lt;/code&amp;gt; at the top of the text.  When receiving email from you, it will remove any text after such line.  In effect, all text we sent to you and returned to us in your response will be removed before storing your response in our database.   So if you want to response with comments interspersed with our original text, you must first remove this line. Otherwise you simply put your response before this line. &lt;br /&gt;
&lt;br /&gt;
[[Category:News|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:White_List_Service_XML_Script_For_Outgoing_Calls&amp;diff=50486</id>
		<title>Howto:White List Service XML Script For Outgoing Calls</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:White_List_Service_XML_Script_For_Outgoing_Calls&amp;diff=50486"/>
		<updated>2018-08-31T12:06:19Z</updated>

		<summary type="html">&lt;p&gt;Aza: New page: &amp;lt;!-- Keywords: xml,script,whitelist,white-list,white,list --&amp;gt;  This script allows to create and to maintain a simple whitelist for outgoing calls. Calls to numbers unknown to the Whitelist...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: xml,script,whitelist,white-list,white,list --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script allows to create and to maintain a simple whitelist for outgoing calls. Calls to numbers unknown to the Whitelist are immediately rejected by the PBX. The service can also maintain a list of internal user that have unrestricted access to the PSTN.&lt;br /&gt;
&lt;br /&gt;
Numbers and user extensions can be easily added or removed by calling the Whitelist Service object and following the instructions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Download the application packet from [http://download.innovaphone.com/ice/wiki-src/#whitelst HERE].&lt;br /&gt;
&lt;br /&gt;
Extract the archive on your local drive and open the &amp;quot;WhiteLst&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
=== Package content ===&lt;br /&gt;
&lt;br /&gt;
Inside the folder you will find:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FOLDERS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Audio&#039;&#039;: contains localized (EN-DE-IT-FR) audio files&lt;br /&gt;
* &#039;&#039;WL_Numbers&#039;&#039;: contains whitelisted numbers files&lt;br /&gt;
* &#039;&#039;WL_CGPN&#039;&#039;: contains internal unrestricted extensions number files&lt;br /&gt;
* &#039;&#039;Attachments&#039;&#039;: used for temporary attachment files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILES&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;WhiteLst.xml&#039;&#039;: the application script&lt;br /&gt;
* &#039;&#039;WhiteLst_email.xml&#039;&#039;: the script handling email notification of whitelisted numbers&lt;br /&gt;
* &#039;&#039;Default_WL.txt&#039;&#039;: file containing the number of the Trunk Line object connected to PSTN.&lt;br /&gt;
* &#039;&#039;Email.txt&#039;&#039;: file containing a generic email address where whitelisted numbers will be sent to.&lt;br /&gt;
* &#039;&#039;Email_Code.txt&#039;&#039;: file containing the code to enter in the app menu to have the whitelisted numbers sent via email.&lt;br /&gt;
* &#039;&#039;AdminPIN.txt&#039;&#039;: code to acces the whitelist admin menu&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: file containing the language to be used by the application:&lt;br /&gt;
** &#039;&#039;DE&#039;&#039;: German&lt;br /&gt;
** &#039;&#039;EN&#039;&#039;: English&lt;br /&gt;
** &#039;&#039;IT&#039;&#039;: Italian&lt;br /&gt;
** &#039;&#039;FR&#039;&#039;: French&lt;br /&gt;
&lt;br /&gt;
=== Configuration of application files ===&lt;br /&gt;
&lt;br /&gt;
Before copying the folder to your preferred web server you should customize the following files:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Email.txt&#039;&#039;: configure a valid email address&lt;br /&gt;
* &#039;&#039;Email_Code.txt&#039;&#039;: configure the code to enter in the app menu to have the whitelisted numbers sent via email: i.e. &amp;quot;**99&amp;quot;. Without a code the email service is disabled.&lt;br /&gt;
* &#039;&#039;Default_WL.txt&#039;&#039;: configure the number of the Trunk Line object connected to PSTN.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: configure the language to be used by the application: DE,EN,IT or FR.&lt;br /&gt;
&lt;br /&gt;
You may now copy the folder to your web server.&lt;br /&gt;
&lt;br /&gt;
=== PBX configuration ===&lt;br /&gt;
&lt;br /&gt;
Create a new Voicemail obj with a name and number and configure the script URL pointing to &amp;quot;WhiteLst.xml&amp;quot; file in the application folder on the web server.&lt;br /&gt;
&lt;br /&gt;
For example if you copied the folder to your Compact Flash/SSD drive:&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1/DRIVE/CF0/WhiteLst/WhiteLst.xml?$_pbxfwd=true&lt;br /&gt;
 &lt;br /&gt;
Enable &amp;quot;Reject ext. Calls&amp;quot; on the Voicemail obj if you want to allow access to the service only from internal extensions.&lt;br /&gt;
&lt;br /&gt;
On the Trunk Line object configure a CFU to the Whitelist voicemail object number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email notification service ===&lt;br /&gt;
&lt;br /&gt;
By entering a custom code in the &amp;quot;Email_Code.txt&amp;quot; file the email notification service is enabled.&lt;br /&gt;
If a valid email address is configured in the &amp;quot;Email.txt&amp;quot; file or the internal calling user has a valid email address configured in its PBX object, the email code can be entered during app menu announcement to have a list of the whitelisted numbers sent via email as attachment.&lt;br /&gt;
Due to a Voicemail engine limitation it is possible to send max 20 numbers in one email, for this reason if your white list has more than 20 entries the whole list will be split over multiple emails.&lt;br /&gt;
&lt;br /&gt;
Please follow this article to adapt the script to your local SMTP requirements:&lt;br /&gt;
&lt;br /&gt;
[[Howto:Send_Email_MWI_Notification_From_The_innovaphone_Voicemail|Send_Email_MWI_Notification_From_The_innovaphone_Voicemail]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
&lt;br /&gt;
Each outgoing call is now checked by the script. &lt;br /&gt;
&lt;br /&gt;
You can add/remove PSTN numbers or internal extensions by calling the Voicemail obj. number+AdminPIN and following the menu options.&lt;br /&gt;
&lt;br /&gt;
For example if the Voicemail obj. extension is &#039;&#039;80&#039;&#039; and AdminPIN is &#039;&#039;**80&#039;&#039;, you should dial &#039;&#039;80**80&#039;&#039; to access the White List admin menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Enter PSTN Numbers without Trunk Line prefix&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If the dialed number or the CGPN is in the White List the call is sent out to PSTN.&lt;br /&gt;
&lt;br /&gt;
If no match is found the call is released with ISDN cause code 52: outgoing calls barred.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
The XML script uses HTTP PUT method to store files in the app&#039;s folder. On 3rd party webservers (e.g. IIS, Apache) you might need to enable the PUT method for the app&#039;s folder.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=50459</id>
		<title>Howto:Black List Service XML Script For Incoming Calls</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=50459"/>
		<updated>2018-08-27T10:15:17Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Email notification service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: xml,script,blacklist,black-list,black,list --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script allows to create and to maintain a simple blacklist for incoming calls. Blacklisted calls to the PBX are immediately rejected or transferred to a default destination.&lt;br /&gt;
&lt;br /&gt;
Numbers can be easily added or removed by calling the Blacklist Service object and by following the instructions.&lt;br /&gt;
&lt;br /&gt;
Additionally a number can be put in the blacklist by simply transferring the undesired ringing/active call to a specific object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Download the application packet from [http://download.innovaphone.com/ice/wiki-src/#blacklst HERE].&lt;br /&gt;
&lt;br /&gt;
Extract the archive on your local drive and open the &amp;quot;BlackLst&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
=== Package content ===&lt;br /&gt;
&lt;br /&gt;
Inside the folder you will find:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FOLDERS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Audio&#039;&#039; folder: contains localized (EN-DE-IT-FR) audio files&lt;br /&gt;
* &#039;&#039;BL_Numbers&#039;&#039; folder: contains blacklisted numbers files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILES&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;BlackLst.xml&#039;&#039;: the application script&lt;br /&gt;
* &#039;&#039;BlackLst_email.xml&#039;&#039;: the script handling email notification of blacklisted numbers&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: file containing the default destination for incoming blacklisted calls, if left blank the call is automatically disconnected.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: file containing the default destination for incoming legit calls if your trunk does not allow DDI.&lt;br /&gt;
* &#039;&#039;Email.txt&#039;&#039;: file containing a generic email address where blacklisted numbers will be sent to.&lt;br /&gt;
* &#039;&#039;Email_Code.txt&#039;&#039;: file containing the code to enter in the app menu to have the blacklisted numbers sent via email.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: file containing the language to be used by the application:&lt;br /&gt;
** &#039;&#039;DE&#039;&#039;: German&lt;br /&gt;
** &#039;&#039;EN&#039;&#039;: English&lt;br /&gt;
** &#039;&#039;IT&#039;&#039;: Italian&lt;br /&gt;
** &#039;&#039;FR&#039;&#039;: French&lt;br /&gt;
* &#039;&#039;MinIntExtLen.txt&#039;&#039;: file containing a number corresponding to the shortest internal extension length of your PBX, i.e. &amp;quot;2&amp;quot; if your shortest extension consist of 2 digits.&lt;br /&gt;
* &#039;&#039;MaxIntExtLen.txt&#039;&#039;: file containing a number corresponding to the longest internal extension length of your PBX, i.e. &amp;quot;4&amp;quot; if your longest extension consist of 4 digits. &lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; use identical values in both files if your internal numbering plan has a fixed extension lenght.&lt;br /&gt;
* &#039;&#039;PrefixIN.txt&#039;&#039;: currently not used&lt;br /&gt;
&lt;br /&gt;
=== Configuration of application files ===&lt;br /&gt;
&lt;br /&gt;
Before copying the folder to your preferred web server you should customize the following files:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Email.txt&#039;&#039;: configure a valid email address&lt;br /&gt;
* &#039;&#039;Email_Code.txt&#039;&#039;: configure the code to enter in the app menu to have the blacklisted numbers sent via email: i.e. &amp;quot;**99&amp;quot;. Without a code the email service is disabled.&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: configure the number of an existing PBX object as default destination for blacklisted incoming calls. If left blank the blacklisted incoming call is disconnected immediately.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: configure the number of an existing PBX object as default destination if your trunk does not support DDI or in case the CDPN doesn&#039;t match to any existing PBX object.&lt;br /&gt;
* &#039;&#039;MinIntExtLen.txt&#039;&#039;: configure a number corresponding to the shortest internal extension length of your PBX, i.e. &amp;quot;2&amp;quot; if your shortest extension consist of 2 digits.&lt;br /&gt;
* &#039;&#039;MaxIntExtLen.txt&#039;&#039;: configure a number corresponding to the longest internal extension length of your PBX, i.e. &amp;quot;4&amp;quot; if your longest extension consist of 4 digits. &lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; use identical values in both files if your internal numbering plan has a fixed extension lenght.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: configure the language to be used by the application: DE,EN,IT or FR.&lt;br /&gt;
&lt;br /&gt;
You may now copy the folder to your web server.&lt;br /&gt;
&lt;br /&gt;
=== PBX configuration ===&lt;br /&gt;
&lt;br /&gt;
Create a new Voicemail obj with a name and number and configure the script URL pointing to &amp;quot;BlackLst.xml&amp;quot; file in the application folder on the web server.&lt;br /&gt;
&lt;br /&gt;
For example if you copied the folder to your Compact Flash:&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1/DRIVE/CF0/BlackLst/BlackLst.xml?$_pbxfwd=true&lt;br /&gt;
&lt;br /&gt;
Create a new user object, call it &amp;quot;ADD_TO_BLACKLIST&amp;quot; and assign a number to it.&lt;br /&gt;
&lt;br /&gt;
On this object configure a CFU to the Blacklist voicemail object number.&lt;br /&gt;
&lt;br /&gt;
=== Routing configuration ===&lt;br /&gt;
&lt;br /&gt;
All incoming calls must be checked by the Blacklist application. For this reason all incoming calls must be routed to the Blacklist voicemail object.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:Routing_config_for_incoming_calls.png]]&lt;br /&gt;
&lt;br /&gt;
=== Email notification service ===&lt;br /&gt;
&lt;br /&gt;
By entering a custom code in the &amp;quot;Email_Code.txt&amp;quot; file the email notification service is enabled.&lt;br /&gt;
If a valid email address is configured in the &amp;quot;Email.txt&amp;quot; file or the internal calling user has a valid email address configured in its PBX object, the email code can be entered during app menu announcement to have a list of the blacklisted numbers sent via email as attachment.&lt;br /&gt;
Due to a Voicemail engine limitation it is possible to send max 20 numbers in one email, for this reason if your black list has more than 20 entries the whole list will be split over multiple emails.&lt;br /&gt;
&lt;br /&gt;
Please follow this article to adapt the script to your local SMTP requirements:&lt;br /&gt;
&lt;br /&gt;
[[Howto:Send_Email_MWI_Notification_From_The_innovaphone_Voicemail|Send_Email_MWI_Notification_From_The_innovaphone_Voicemail]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
&lt;br /&gt;
Each incoming call is now checked by the script. &lt;br /&gt;
&lt;br /&gt;
First the script verifies if the call arrives from the ADD_TO_BLACKLIST object in which case the the CGPN is added directly to the Blacklist.&lt;br /&gt;
&lt;br /&gt;
If that&#039;s not the case the script verifies the CGPN to check if the call is internal or external.&lt;br /&gt;
&lt;br /&gt;
If the call is internal the script plays the menu options:&lt;br /&gt;
&lt;br /&gt;
# Press 1 to add a number to the Blacklist&lt;br /&gt;
# Press 2 to remove a number from the Blacklist&lt;br /&gt;
&lt;br /&gt;
When calling the script from an internal extension the caller is able to manually add or remove a number from the blacklist by simply following the audio instrunctions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;When manually adding/removing a number from the black list remember to include the trunk prefix if present.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If the call is external the script checks the content of the &amp;quot;BL_Numbers&amp;quot; folder and if the CGPN matches with an existing file. &lt;br /&gt;
&lt;br /&gt;
If the number is blacklisted the script checks if a default transfer destination for such numbers is configured in &amp;quot;Default_BL.txt&amp;quot; and forwards the call, otherwise the call is disconnected immediately.&lt;br /&gt;
&lt;br /&gt;
If no match is found the script verifies if the calling party dialed a DDI number and transfers the call to that extension otherwise it will transfer the call to the default destination configured in &amp;quot;Default_OK.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A number that is not yet blacklisted can be added to the list while the call is ringing or connected by simply redirecting/transferring the call to the ADD_TO_BLACKLIST object.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
The XML script uses HTTP PUT method to store files in the app&#039;s folder. On 3rd party webservers (e.g. IIS, Apache) you might need to enable the PUT method for the app&#039;s folder.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=50458</id>
		<title>Howto:Black List Service XML Script For Incoming Calls</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=50458"/>
		<updated>2018-08-27T10:13:12Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Email notification service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: xml,script,blacklist,black-list,black,list --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script allows to create and to maintain a simple blacklist for incoming calls. Blacklisted calls to the PBX are immediately rejected or transferred to a default destination.&lt;br /&gt;
&lt;br /&gt;
Numbers can be easily added or removed by calling the Blacklist Service object and by following the instructions.&lt;br /&gt;
&lt;br /&gt;
Additionally a number can be put in the blacklist by simply transferring the undesired ringing/active call to a specific object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Download the application packet from [http://download.innovaphone.com/ice/wiki-src/#blacklst HERE].&lt;br /&gt;
&lt;br /&gt;
Extract the archive on your local drive and open the &amp;quot;BlackLst&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
=== Package content ===&lt;br /&gt;
&lt;br /&gt;
Inside the folder you will find:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FOLDERS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Audio&#039;&#039; folder: contains localized (EN-DE-IT-FR) audio files&lt;br /&gt;
* &#039;&#039;BL_Numbers&#039;&#039; folder: contains blacklisted numbers files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILES&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;BlackLst.xml&#039;&#039;: the application script&lt;br /&gt;
* &#039;&#039;BlackLst_email.xml&#039;&#039;: the script handling email notification of blacklisted numbers&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: file containing the default destination for incoming blacklisted calls, if left blank the call is automatically disconnected.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: file containing the default destination for incoming legit calls if your trunk does not allow DDI.&lt;br /&gt;
* &#039;&#039;Email.txt&#039;&#039;: file containing a generic email address where blacklisted numbers will be sent to.&lt;br /&gt;
* &#039;&#039;Email_Code.txt&#039;&#039;: file containing the code to enter in the app menu to have the blacklisted numbers sent via email.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: file containing the language to be used by the application:&lt;br /&gt;
** &#039;&#039;DE&#039;&#039;: German&lt;br /&gt;
** &#039;&#039;EN&#039;&#039;: English&lt;br /&gt;
** &#039;&#039;IT&#039;&#039;: Italian&lt;br /&gt;
** &#039;&#039;FR&#039;&#039;: French&lt;br /&gt;
* &#039;&#039;MinIntExtLen.txt&#039;&#039;: file containing a number corresponding to the shortest internal extension length of your PBX, i.e. &amp;quot;2&amp;quot; if your shortest extension consist of 2 digits.&lt;br /&gt;
* &#039;&#039;MaxIntExtLen.txt&#039;&#039;: file containing a number corresponding to the longest internal extension length of your PBX, i.e. &amp;quot;4&amp;quot; if your longest extension consist of 4 digits. &lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; use identical values in both files if your internal numbering plan has a fixed extension lenght.&lt;br /&gt;
* &#039;&#039;PrefixIN.txt&#039;&#039;: currently not used&lt;br /&gt;
&lt;br /&gt;
=== Configuration of application files ===&lt;br /&gt;
&lt;br /&gt;
Before copying the folder to your preferred web server you should customize the following files:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Email.txt&#039;&#039;: configure a valid email address&lt;br /&gt;
* &#039;&#039;Email_Code.txt&#039;&#039;: configure the code to enter in the app menu to have the blacklisted numbers sent via email: i.e. &amp;quot;**99&amp;quot;. Without a code the email service is disabled.&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: configure the number of an existing PBX object as default destination for blacklisted incoming calls. If left blank the blacklisted incoming call is disconnected immediately.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: configure the number of an existing PBX object as default destination if your trunk does not support DDI or in case the CDPN doesn&#039;t match to any existing PBX object.&lt;br /&gt;
* &#039;&#039;MinIntExtLen.txt&#039;&#039;: configure a number corresponding to the shortest internal extension length of your PBX, i.e. &amp;quot;2&amp;quot; if your shortest extension consist of 2 digits.&lt;br /&gt;
* &#039;&#039;MaxIntExtLen.txt&#039;&#039;: configure a number corresponding to the longest internal extension length of your PBX, i.e. &amp;quot;4&amp;quot; if your longest extension consist of 4 digits. &lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; use identical values in both files if your internal numbering plan has a fixed extension lenght.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: configure the language to be used by the application: DE,EN,IT or FR.&lt;br /&gt;
&lt;br /&gt;
You may now copy the folder to your web server.&lt;br /&gt;
&lt;br /&gt;
=== PBX configuration ===&lt;br /&gt;
&lt;br /&gt;
Create a new Voicemail obj with a name and number and configure the script URL pointing to &amp;quot;BlackLst.xml&amp;quot; file in the application folder on the web server.&lt;br /&gt;
&lt;br /&gt;
For example if you copied the folder to your Compact Flash:&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1/DRIVE/CF0/BlackLst/BlackLst.xml?$_pbxfwd=true&lt;br /&gt;
&lt;br /&gt;
Create a new user object, call it &amp;quot;ADD_TO_BLACKLIST&amp;quot; and assign a number to it.&lt;br /&gt;
&lt;br /&gt;
On this object configure a CFU to the Blacklist voicemail object number.&lt;br /&gt;
&lt;br /&gt;
=== Routing configuration ===&lt;br /&gt;
&lt;br /&gt;
All incoming calls must be checked by the Blacklist application. For this reason all incoming calls must be routed to the Blacklist voicemail object.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:Routing_config_for_incoming_calls.png]]&lt;br /&gt;
&lt;br /&gt;
=== Email notification service ===&lt;br /&gt;
&lt;br /&gt;
By entering a custom code in the &amp;quot;Email_Code.txt&amp;quot; file the email notification service is enabled.&lt;br /&gt;
If a valid email address is configured in the &amp;quot;Email.txt&amp;quot; file or the internal calling user has a valid email address configured in its PBX object, the email code can be entered during app menu announcement to have a list of the blacklisted numbers sent via email as attachment.&lt;br /&gt;
Due to a Voicemail engine limitation it is possible to send max 20 numbers in one email, for this reason if your black list has more than 20 numbers these will be split over multiple emails.&lt;br /&gt;
&lt;br /&gt;
Please follow this article to adapt the script to your local SMTP requirements:&lt;br /&gt;
&lt;br /&gt;
[[Howto:Send_Email_MWI_Notification_From_The_innovaphone_Voicemail|Send_Email_MWI_Notification_From_The_innovaphone_Voicemail]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
&lt;br /&gt;
Each incoming call is now checked by the script. &lt;br /&gt;
&lt;br /&gt;
First the script verifies if the call arrives from the ADD_TO_BLACKLIST object in which case the the CGPN is added directly to the Blacklist.&lt;br /&gt;
&lt;br /&gt;
If that&#039;s not the case the script verifies the CGPN to check if the call is internal or external.&lt;br /&gt;
&lt;br /&gt;
If the call is internal the script plays the menu options:&lt;br /&gt;
&lt;br /&gt;
# Press 1 to add a number to the Blacklist&lt;br /&gt;
# Press 2 to remove a number from the Blacklist&lt;br /&gt;
&lt;br /&gt;
When calling the script from an internal extension the caller is able to manually add or remove a number from the blacklist by simply following the audio instrunctions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;When manually adding/removing a number from the black list remember to include the trunk prefix if present.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If the call is external the script checks the content of the &amp;quot;BL_Numbers&amp;quot; folder and if the CGPN matches with an existing file. &lt;br /&gt;
&lt;br /&gt;
If the number is blacklisted the script checks if a default transfer destination for such numbers is configured in &amp;quot;Default_BL.txt&amp;quot; and forwards the call, otherwise the call is disconnected immediately.&lt;br /&gt;
&lt;br /&gt;
If no match is found the script verifies if the calling party dialed a DDI number and transfers the call to that extension otherwise it will transfer the call to the default destination configured in &amp;quot;Default_OK.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A number that is not yet blacklisted can be added to the list while the call is ringing or connected by simply redirecting/transferring the call to the ADD_TO_BLACKLIST object.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
The XML script uses HTTP PUT method to store files in the app&#039;s folder. On 3rd party webservers (e.g. IIS, Apache) you might need to enable the PUT method for the app&#039;s folder.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Voice_Notification&amp;diff=49480</id>
		<title>Howto:Voice Notification</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Voice_Notification&amp;diff=49480"/>
		<updated>2018-03-20T13:01:12Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* PBX setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If a user want to know if a new voicemail message is stored usually a MWI Led on the phone set switched on. Alternatively, an email notification or a SMS note is possible. See relative chapter Related Articles for doing that.&lt;br /&gt;
&lt;br /&gt;
However, it is also possible a voice notification: a, typically external, Number is called (for example a mobile phone number) and if answered a message like “you have new messages” is played.&lt;br /&gt;
&lt;br /&gt;
Here is how.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
After a new voice mail is stored, the PBX calls a number. As caller ID number and name of the Voicemail is shown, therefore an immediately recall to the Voicemail box is possible. The user can switch on and off the feature as well change the number to call. &lt;br /&gt;
&lt;br /&gt;
To switch on the feature the user must activate an unconditionally call diversion (CFU) to the voicemail and a call forward no response (CFNR). The number indicated in the CFNR is the notification number called. If CFU or CFNR is off, the feature is off. The destination number of the CFNR can modified directly on the phone set, the PBX interface or the myPBX client.&lt;br /&gt;
&lt;br /&gt;
==Applies To==&lt;br /&gt;
&lt;br /&gt;
PBX Version 11&lt;br /&gt;
&lt;br /&gt;
This feature is on top of the normal VM feature and requires no extra license (but the user has to have a valid voicemail license).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Keywords: VM, Voice mail, voicemail, notification  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
To switch on the feature the user has to active a CFU to the voicemail and a CFNR to the number to call. &lt;br /&gt;
&lt;br /&gt;
Example: User 34, the VM has the number 810 and the number to call in case of a message is 012345. The user 34 must active a CFU to the 34 (in this way a call to the extension 34 end on the Voicemail) while a CFNR to 012345 has also to be switched on.&lt;br /&gt;
 &lt;br /&gt;
[[Image:VN001.png]]&lt;br /&gt;
&lt;br /&gt;
If a new message is in, the PBX calls the external number up to 3 times, waiting between each call one minute. You can change the time interval of one minute can changed in the setup as well as the number of call try. If the called user answers, a message “you have new messages” plays. The calling number is the number of the voicemail and the user. Therefore, if the user recalls he is connects automatically to his voicemail. The display shows the name (if available) “Voicemail”; even that indication can be modified. &lt;br /&gt;
&lt;br /&gt;
To switch of the call cycle the user can cancel the CFU or CFNR on the phone or access to his voicemail. It is necessary at least enter a valid password to cancel further notification calls. &lt;br /&gt;
&lt;br /&gt;
The system records the number of messages and if a new message is in a new notification cycle starts.&lt;br /&gt;
&lt;br /&gt;
Example: One message is in, the notification start the first call. The user ignore the call, after one minute he will called again. Now the user call the VM and enter the valid password, he listen to the message but he do not delete ore store the message. Therefore still one message is in the Voicemail, but there is no further notification. Now a second message is in, the notification cycle starts again. The user access to his voicemail and delete one message, so just on is in. &lt;br /&gt;
No further notification. If now a new message is stored, the cycle starts again.&lt;br /&gt;
&lt;br /&gt;
Please note that the system does not care about the call status: If the called number is busy, a call start after one minute as well as the call was answer or not response until the number of cycles expired. Typically, a mobile device will track the calls arrived during absence or busy and the user can so see that the VM has called him. It is also possible do a setup that just one single time a call is done. &lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
The installation and setup is not difficult but tricky and therefore observe this description systematically.&lt;br /&gt;
&lt;br /&gt;
=== File copy ===&lt;br /&gt;
Copy the file VMvn.xml in the directory where the VM is in, typically in “..DRIVE/CF0/VM”.&lt;br /&gt;
&lt;br /&gt;
Copy the file VMvoceNote.xml in the personal directory of each user that should use this feature. &lt;br /&gt;
&lt;br /&gt;
Example: the user “Michele DArpino” should use the feature:&lt;br /&gt;
 &lt;br /&gt;
[[Image:VN002.png]]&lt;br /&gt;
&lt;br /&gt;
Note that just the XML has to be copy; the other files the system create automatically.&lt;br /&gt;
&lt;br /&gt;
The XML play a file to inform the called user that a message is in his mailbox. The file played is named “Track01.xxx” where xxx = codec (g711 etc.). The file can be recorded using the universal track recorder or in any other mode. A simple solution without recording anything is using the available message of the Voicemail. There is a file playing a message “You have a new message” or similar, the file name depends on the language, in English that filename is “en_you_have_new_messages.xxx”, in German “de_you_have_new_messages.xxx”, in Italian “it_avete_un_messaggio.xxx” etc. Copy all those files on your PC, rename them to “Track01.xxx”, and copy the result back. &lt;br /&gt;
&lt;br /&gt;
=== XML editing ===&lt;br /&gt;
&lt;br /&gt;
Copy the VM.xml to a directory of your PC and open the xml with an editor.&lt;br /&gt;
&lt;br /&gt;
Search this position (in the first 3rt of the file) and insert the line &lt;br /&gt;
&lt;br /&gt;
&amp;lt;store-del root=&amp;quot;$sub&amp;quot; name=&amp;quot;personal/Cycles.txt&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example (Italian VM script, but the other languages are similar): &lt;br /&gt;
 &lt;br /&gt;
[[Image:VN003.png]]&lt;br /&gt;
&lt;br /&gt;
Save the file and copy the file again on the CF (overwrite the old one).&lt;br /&gt;
&lt;br /&gt;
Check that the VM still work.&lt;br /&gt;
&lt;br /&gt;
The default setup call up to 3 time, this value can be changed to more (for example 10 attempt) to just 1 call. To do that copy form the CF the file VMvn.xml to your PC and open it with an editor. &lt;br /&gt;
&lt;br /&gt;
Change the value name=”personal/Cycels.text”:&lt;br /&gt;
 &lt;br /&gt;
[[Image:VN004.png]]&lt;br /&gt;
&lt;br /&gt;
In the example, the value is “2”, this is the default value for 3 calls. “0” = 1 call, “1” = 2 calls, “9” = 10 calls.&lt;br /&gt;
&lt;br /&gt;
If you want calls not each minute but longer (for example 5 minutes) you have to edit the file VMvn.xml, change the value &amp;quot;1&amp;quot; in line &lt;br /&gt;
&amp;lt;assigne out=&amp;quot;$minutes&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt; to &amp;quot;5&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== PBX setup ===&lt;br /&gt;
&lt;br /&gt;
The rest of the setup is in the PBX: You have to create one general VM object and one for each extension that should use the feature. The number and name of these objects could be as you like, if you use a similar number for the individual XML a better overview is given.&lt;br /&gt;
&lt;br /&gt;
In the example the general VM Object has the number **99 while the user individual VM Object of the use 34 hat the number **34 (a VM object for the user 370 would have the number **370 etc.)&lt;br /&gt;
 &lt;br /&gt;
[[Image:VN005.png]]&lt;br /&gt;
&lt;br /&gt;
Note that the VM object VMvn (number **99) point on the xml VMvn.xml in the VM directory while the VM object **34 point on the XML stored in the personal directory of the user 34 (Michele DArpino) VMvoceNote.xml.&lt;br /&gt;
&lt;br /&gt;
Last step, open the wakeup for the individual xml, see in the example above that this menu item is on the left site of the Presence column.&lt;br /&gt;
&lt;br /&gt;
Once opened set the second to “1”, check “Multiple” an put in in the number of the general xml (**99 in out example”) extended by the number of the individual extension (34 in our example). &lt;br /&gt;
&lt;br /&gt;
[[Image:VN006.png]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
A special problem could be the access to the voicemail from external without DID or with limited DID capability. As known the access to the VM must be or sequential or in block dial: it is not possible call the VM object in block dial and then proceed with overlap DTMF. For this situation, the feature “autocallback” could be helpfully.&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
&lt;br /&gt;
If the flag “Multiple” is checked the wakeup mechanism in the PBX will trigger each minute (the shortest time available) or each time entered in the “Hour/Min/Sec” Fields. &lt;br /&gt;
&lt;br /&gt;
Now the trick is that the wake is done on the individual XML, so the wake calls not an extension but a XML. Normally in the “SourceName/Number” field, the name or number of a Waiting queue is in, but we put in again in an XML, the general one, extended by the User number. &lt;br /&gt;
&lt;br /&gt;
Therefore, at the end the PBX calls two XML, the main task to do has the general one: the xml VMvn (like also the individual xml VMvoceNote.xml) activate a 30-second security timeout. This is also the maximum duration of one notification call and play cycle. The XML now ask the PBX for the call information, unfortunately a XML never receives the “own” number information and therefore the “cgpn” contains just the additional number: in our example “**99” was the number of the XML itself while “34” the number of the user. The PBX wake up calls “**9934” but the XML get “34” as information. Then the XML query the PBX and ask the name of the user “34”. The answer in our example is “Michele%20DArpino” and so the XML check if in the PBX this name has a CFU. If so the xml check if there is also a CFNR active, if yes check if the CFU target is a voicemail object (otherwise an eventual “normal” CFU could trigger the call).  If the target is a VM object the XML check if there are messages for this user in this directory. If all that is o.k. the XML goes on, otherwise stop. &lt;br /&gt;
&lt;br /&gt;
The XML read in the personal directory of the user the file “NumMess.text”: this file contains the number of messages stored before. If for example there are no messages stored it will be “0”. If the number of messages in the message directory of the user is greater than the number in that file a “new” message is in: the XML stores this new value in the file “NumMess.text” to assure that the entire cycle is started just one time. One minute later the number of files and the value of the “NumMess.text” will be the same and another part of the XML execute. If this way if the number of files increase because e new message is in also the cycle starts again. If the number of files decrease (for example because the user is deleting messages) the content of the file “NumMess.text” will be adapt to the lower value. If the number of messages is equal to the number in the file “NumMess.text” a cycle counter will be decreased. The cycle counter is stored when the number of messages is greater than the “NumMess.text” value, so just one time. The XML stops if the counter is zero: if the user access to his voicemail the cycle file is deleted (see the change in the VM itself at the beginning) and so a cycle stopped. This XML stores also the number to call (in the PBX query of the CFNR the PBX told also the number) and stored in the personal Path and the destination of the CFU (the number of the Voicemail) combined with the “cgpn”; this is the voicemail + extension to call back. If number of messages is greater or equal but cycle not zero the message is played. &lt;br /&gt;
&lt;br /&gt;
The second personal XML “VMvoceNote.xml”in the Personal directory is much simpler: he wait just 2 seconds to avoid file collisions and then read out the destination number and the number of the Vocemail. Voicemail number and Extension number was stored in the file “VMnumber.text” by the other XML. Now the Calling Number and the calling name is manipulated: if you want change the display name just feel free to edit, the lien is “&amp;lt;pbx-prepcallinfo cgpn=&amp;quot;$DestCF&amp;quot; string=&amp;quot;Voicemail&amp;quot; /&amp;gt;” where of cause “Voicmail” is the string to modify.&lt;br /&gt;
&lt;br /&gt;
Than the XML transfer the call to the (external) number. &lt;br /&gt;
&lt;br /&gt;
==Known Problems==&lt;br /&gt;
&lt;br /&gt;
This feature was designed for few users, not for a huge installation where all extensions require this feature. No test using the wakeup feature for hundreds of extension was done. &lt;br /&gt;
&lt;br /&gt;
If the CFU is switched off and the CFNR not a not response cause a call to the number. &lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
*[http://download.innovaphone.com/ice/wiki-src#vmvoicen http://download.innovaphone.com/ice/wiki-src#callid] - download the complete file package of scripts and files described in this article.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
[[Howto:How_To_Send_Additional_Voicemail_MWIs_within_a_PBX]]&lt;br /&gt;
&lt;br /&gt;
[[Howto:Send_Email_MWI_Notification_From_The_innovaphone_Voicemail]]&lt;br /&gt;
&lt;br /&gt;
[[Howto-localized:Notifica_voice-mail_tramite_SMS_%28I%29]]&lt;br /&gt;
&lt;br /&gt;
[[Howto:Universal_Track_Recording_Tool]]&lt;br /&gt;
&lt;br /&gt;
[[Howto:Auto_Call_Back]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Voice_Notification&amp;diff=49479</id>
		<title>Howto:Voice Notification</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Voice_Notification&amp;diff=49479"/>
		<updated>2018-03-20T12:58:58Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* PBX setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If a user want to know if a new voicemail message is stored usually a MWI Led on the phone set switched on. Alternatively, an email notification or a SMS note is possible. See relative chapter Related Articles for doing that.&lt;br /&gt;
&lt;br /&gt;
However, it is also possible a voice notification: a, typically external, Number is called (for example a mobile phone number) and if answered a message like “you have new messages” is played.&lt;br /&gt;
&lt;br /&gt;
Here is how.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
After a new voice mail is stored, the PBX calls a number. As caller ID number and name of the Voicemail is shown, therefore an immediately recall to the Voicemail box is possible. The user can switch on and off the feature as well change the number to call. &lt;br /&gt;
&lt;br /&gt;
To switch on the feature the user must activate an unconditionally call diversion (CFU) to the voicemail and a call forward no response (CFNR). The number indicated in the CFNR is the notification number called. If CFU or CFNR is off, the feature is off. The destination number of the CFNR can modified directly on the phone set, the PBX interface or the myPBX client.&lt;br /&gt;
&lt;br /&gt;
==Applies To==&lt;br /&gt;
&lt;br /&gt;
PBX Version 11&lt;br /&gt;
&lt;br /&gt;
This feature is on top of the normal VM feature and requires no extra license (but the user has to have a valid voicemail license).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Keywords: VM, Voice mail, voicemail, notification  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
To switch on the feature the user has to active a CFU to the voicemail and a CFNR to the number to call. &lt;br /&gt;
&lt;br /&gt;
Example: User 34, the VM has the number 810 and the number to call in case of a message is 012345. The user 34 must active a CFU to the 34 (in this way a call to the extension 34 end on the Voicemail) while a CFNR to 012345 has also to be switched on.&lt;br /&gt;
 &lt;br /&gt;
[[Image:VN001.png]]&lt;br /&gt;
&lt;br /&gt;
If a new message is in, the PBX calls the external number up to 3 times, waiting between each call one minute. You can change the time interval of one minute can changed in the setup as well as the number of call try. If the called user answers, a message “you have new messages” plays. The calling number is the number of the voicemail and the user. Therefore, if the user recalls he is connects automatically to his voicemail. The display shows the name (if available) “Voicemail”; even that indication can be modified. &lt;br /&gt;
&lt;br /&gt;
To switch of the call cycle the user can cancel the CFU or CFNR on the phone or access to his voicemail. It is necessary at least enter a valid password to cancel further notification calls. &lt;br /&gt;
&lt;br /&gt;
The system records the number of messages and if a new message is in a new notification cycle starts.&lt;br /&gt;
&lt;br /&gt;
Example: One message is in, the notification start the first call. The user ignore the call, after one minute he will called again. Now the user call the VM and enter the valid password, he listen to the message but he do not delete ore store the message. Therefore still one message is in the Voicemail, but there is no further notification. Now a second message is in, the notification cycle starts again. The user access to his voicemail and delete one message, so just on is in. &lt;br /&gt;
No further notification. If now a new message is stored, the cycle starts again.&lt;br /&gt;
&lt;br /&gt;
Please note that the system does not care about the call status: If the called number is busy, a call start after one minute as well as the call was answer or not response until the number of cycles expired. Typically, a mobile device will track the calls arrived during absence or busy and the user can so see that the VM has called him. It is also possible do a setup that just one single time a call is done. &lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
The installation and setup is not difficult but tricky and therefore observe this description systematically.&lt;br /&gt;
&lt;br /&gt;
=== File copy ===&lt;br /&gt;
Copy the file VMvn.xml in the directory where the VM is in, typically in “..DRIVE/CF0/VM”.&lt;br /&gt;
&lt;br /&gt;
Copy the file VMvoceNote.xml in the personal directory of each user that should use this feature. &lt;br /&gt;
&lt;br /&gt;
Example: the user “Michele DArpino” should use the feature:&lt;br /&gt;
 &lt;br /&gt;
[[Image:VN002.png]]&lt;br /&gt;
&lt;br /&gt;
Note that just the XML has to be copy; the other files the system create automatically.&lt;br /&gt;
&lt;br /&gt;
The XML play a file to inform the called user that a message is in his mailbox. The file played is named “Track01.xxx” where xxx = codec (g711 etc.). The file can be recorded using the universal track recorder or in any other mode. A simple solution without recording anything is using the available message of the Voicemail. There is a file playing a message “You have a new message” or similar, the file name depends on the language, in English that filename is “en_you_have_new_messages.xxx”, in German “de_you_have_new_messages.xxx”, in Italian “it_avete_un_messaggio.xxx” etc. Copy all those files on your PC, rename them to “Track01.xxx”, and copy the result back. &lt;br /&gt;
&lt;br /&gt;
=== XML editing ===&lt;br /&gt;
&lt;br /&gt;
Copy the VM.xml to a directory of your PC and open the xml with an editor.&lt;br /&gt;
&lt;br /&gt;
Search this position (in the first 3rt of the file) and insert the line &lt;br /&gt;
&lt;br /&gt;
&amp;lt;store-del root=&amp;quot;$sub&amp;quot; name=&amp;quot;personal/Cycles.txt&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example (Italian VM script, but the other languages are similar): &lt;br /&gt;
 &lt;br /&gt;
[[Image:VN003.png]]&lt;br /&gt;
&lt;br /&gt;
Save the file and copy the file again on the CF (overwrite the old one).&lt;br /&gt;
&lt;br /&gt;
Check that the VM still work.&lt;br /&gt;
&lt;br /&gt;
The default setup call up to 3 time, this value can be changed to more (for example 10 attempt) to just 1 call. To do that copy form the CF the file VMvn.xml to your PC and open it with an editor. &lt;br /&gt;
&lt;br /&gt;
Change the value name=”personal/Cycels.text”:&lt;br /&gt;
 &lt;br /&gt;
[[Image:VN004.png]]&lt;br /&gt;
&lt;br /&gt;
In the example, the value is “2”, this is the default value for 3 calls. “0” = 1 call, “1” = 2 calls, “9” = 10 calls.&lt;br /&gt;
&lt;br /&gt;
If you want calls not each minute but longer (for example 5 minutes) you have to edit the file VMvn.xml, change the value &amp;quot;1&amp;quot; in line &lt;br /&gt;
&amp;lt;assigne out=&amp;quot;$minutes&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt; to &amp;quot;5&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== PBX setup ===&lt;br /&gt;
&lt;br /&gt;
The rest of the setup is in the PBX: You have to create one general VM object and one for each extension that should use the feature. The number and name of these objects could be as you like, if you use a similar number for the individual XML a better overview is given.&lt;br /&gt;
&lt;br /&gt;
In the example the general VM Object has the number **99 while the user individual VM Object of the use 34 hat the number **34 (a VM object for the user 370 would have the number **370 etc.)&lt;br /&gt;
 &lt;br /&gt;
[[Image:VN005.png]]&lt;br /&gt;
&lt;br /&gt;
Note that the VM object VMvn (number **99) point on the xml VMvn.xml in the VM directory while the VM object **34 point on the XML stored in the personal directory of the user 34 (Michele DArpino) VMvoceNote.xml.&lt;br /&gt;
&lt;br /&gt;
Last step, open the wakeup for the individual xml, see in the example above that this menu item is on the left site of the Presence column.&lt;br /&gt;
&lt;br /&gt;
Once opened set the second to “1”, check “Multiple” an put in in the number the number of the general xml (**99 in out example”) extended by the number of the individual extension (34 in our example). &lt;br /&gt;
&lt;br /&gt;
[[Image:VN006.png]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
A special problem could be the access to the voicemail from external without DID or with limited DID capability. As known the access to the VM must be or sequential or in block dial: it is not possible call the VM object in block dial and then proceed with overlap DTMF. For this situation, the feature “autocallback” could be helpfully.&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
&lt;br /&gt;
If the flag “Multiple” is checked the wakeup mechanism in the PBX will trigger each minute (the shortest time available) or each time entered in the “Hour/Min/Sec” Fields. &lt;br /&gt;
&lt;br /&gt;
Now the trick is that the wake is done on the individual XML, so the wake calls not an extension but a XML. Normally in the “SourceName/Number” field, the name or number of a Waiting queue is in, but we put in again in an XML, the general one, extended by the User number. &lt;br /&gt;
&lt;br /&gt;
Therefore, at the end the PBX calls two XML, the main task to do has the general one: the xml VMvn (like also the individual xml VMvoceNote.xml) activate a 30-second security timeout. This is also the maximum duration of one notification call and play cycle. The XML now ask the PBX for the call information, unfortunately a XML never receives the “own” number information and therefore the “cgpn” contains just the additional number: in our example “**99” was the number of the XML itself while “34” the number of the user. The PBX wake up calls “**9934” but the XML get “34” as information. Then the XML query the PBX and ask the name of the user “34”. The answer in our example is “Michele%20DArpino” and so the XML check if in the PBX this name has a CFU. If so the xml check if there is also a CFNR active, if yes check if the CFU target is a voicemail object (otherwise an eventual “normal” CFU could trigger the call).  If the target is a VM object the XML check if there are messages for this user in this directory. If all that is o.k. the XML goes on, otherwise stop. &lt;br /&gt;
&lt;br /&gt;
The XML read in the personal directory of the user the file “NumMess.text”: this file contains the number of messages stored before. If for example there are no messages stored it will be “0”. If the number of messages in the message directory of the user is greater than the number in that file a “new” message is in: the XML stores this new value in the file “NumMess.text” to assure that the entire cycle is started just one time. One minute later the number of files and the value of the “NumMess.text” will be the same and another part of the XML execute. If this way if the number of files increase because e new message is in also the cycle starts again. If the number of files decrease (for example because the user is deleting messages) the content of the file “NumMess.text” will be adapt to the lower value. If the number of messages is equal to the number in the file “NumMess.text” a cycle counter will be decreased. The cycle counter is stored when the number of messages is greater than the “NumMess.text” value, so just one time. The XML stops if the counter is zero: if the user access to his voicemail the cycle file is deleted (see the change in the VM itself at the beginning) and so a cycle stopped. This XML stores also the number to call (in the PBX query of the CFNR the PBX told also the number) and stored in the personal Path and the destination of the CFU (the number of the Voicemail) combined with the “cgpn”; this is the voicemail + extension to call back. If number of messages is greater or equal but cycle not zero the message is played. &lt;br /&gt;
&lt;br /&gt;
The second personal XML “VMvoceNote.xml”in the Personal directory is much simpler: he wait just 2 seconds to avoid file collisions and then read out the destination number and the number of the Vocemail. Voicemail number and Extension number was stored in the file “VMnumber.text” by the other XML. Now the Calling Number and the calling name is manipulated: if you want change the display name just feel free to edit, the lien is “&amp;lt;pbx-prepcallinfo cgpn=&amp;quot;$DestCF&amp;quot; string=&amp;quot;Voicemail&amp;quot; /&amp;gt;” where of cause “Voicmail” is the string to modify.&lt;br /&gt;
&lt;br /&gt;
Than the XML transfer the call to the (external) number. &lt;br /&gt;
&lt;br /&gt;
==Known Problems==&lt;br /&gt;
&lt;br /&gt;
This feature was designed for few users, not for a huge installation where all extensions require this feature. No test using the wakeup feature for hundreds of extension was done. &lt;br /&gt;
&lt;br /&gt;
If the CFU is switched off and the CFNR not a not response cause a call to the number. &lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
*[http://download.innovaphone.com/ice/wiki-src#vmvoicen http://download.innovaphone.com/ice/wiki-src#callid] - download the complete file package of scripts and files described in this article.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
[[Howto:How_To_Send_Additional_Voicemail_MWIs_within_a_PBX]]&lt;br /&gt;
&lt;br /&gt;
[[Howto:Send_Email_MWI_Notification_From_The_innovaphone_Voicemail]]&lt;br /&gt;
&lt;br /&gt;
[[Howto-localized:Notifica_voice-mail_tramite_SMS_%28I%29]]&lt;br /&gt;
&lt;br /&gt;
[[Howto:Universal_Track_Recording_Tool]]&lt;br /&gt;
&lt;br /&gt;
[[Howto:Auto_Call_Back]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference9:PBX/Objects/Edit_Forks&amp;diff=49327</id>
		<title>Reference9:PBX/Objects/Edit Forks</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference9:PBX/Objects/Edit_Forks&amp;diff=49327"/>
		<updated>2018-03-02T11:07:42Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Properties of Mobility */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;With this page call forking can be configured for a user. This means a call for this user is not only sent to endpoints registered to the user object, but also to the forking destination (No/Name). If a mobility object is configured for the forking, the phone identified by the forking destination can use the mobility functions. A delay can be configured for the call to the mobile endpoint. This delay is not supported for normal call forking without mobility functions.&lt;br /&gt;
&lt;br /&gt;
Operator calls from a waiting queue are not sent to forking destinations. &lt;br /&gt;
&lt;br /&gt;
== Properties of Mobility==&lt;br /&gt;
For the function of the Mobility features a Mobility license must be installed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Object: The Mobility Object (Long Name) must be set, if the mobile endpoint (GSM Phone) needs to use the [[Reference8:Administration/PBX/Objects/Mobility | mobility features]].&lt;br /&gt;
&lt;br /&gt;
;Device: Optional, the Device name of the User can be configured here. This name is used by SOAP (TAPI) to address this device for example when initiating a call.&lt;br /&gt;
&lt;br /&gt;
;Delay: A Delay in seconds can be configured to call the mobile endpoint.&lt;br /&gt;
&lt;br /&gt;
;Disable: Disabling the Mobility features for the mobile device, this can also be en/disabled via [[Reference8:Administration/PBX/Objects/DTMF_Features#Enable.2Fdisable_mobility |DTMF featurecodes]]&lt;br /&gt;
&lt;br /&gt;
;Call-Waiting: Enable or disable call-waiting for the mobile endpoint, if a mobile endpoint is in a call a call waiting tone will be played from the PBX to the mobile endpoint via the RTP stream. See [[Reference9:PBX/Objects/Mobility | R-Key Functions]] for waiting calls handling options.&lt;br /&gt;
&lt;br /&gt;
;GSM-License: When using the innovaphone GSM client a GSM license is needed and need to be activated.  NB: obsolete&lt;br /&gt;
&lt;br /&gt;
;Min-Alert: The minimum time in seconds a call must ring on the mobile phone until it can be accepted. If the call is accepted before this time, the call is rejected by the PBX. This way it can be achieved that the announcement from a mobile provider for phones not available does not accept a call and calls can be accepted on a fixed phone on the same number in case the mobile phone is switched off.  The alert time is measured from the alert to the connect signalling. If there is no alert message (e.g. because there is a connect right away), the alert time is counted as null.  &lt;br /&gt;
&lt;br /&gt;
;Max-Alert: Maximum time the mobile phone rings. After this time the PBX terminates the call to the mobile phone. This way it can be avoided that the mobile voicemail accepts the mobility call.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference10:PBX/Objects/Edit_Forks&amp;diff=49326</id>
		<title>Reference10:PBX/Objects/Edit Forks</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference10:PBX/Objects/Edit_Forks&amp;diff=49326"/>
		<updated>2018-03-02T11:06:48Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Properties of Mobility */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;With this page call forking can be configured for a user. This means a call for this user is not only sent to endpoints registered to the user object, but also to the forking destination (No/Name). If a mobility object is configured for the forking, the phone identified by the forking destination can use the mobility functions. A delay can be configured for the call to the mobile endpoint. This delay is not supported for normal call forking without mobility functions.&lt;br /&gt;
&lt;br /&gt;
;Bool/Not: The forking can be turned on and off by a Boolean object. With the &#039;&#039;&#039;Not&#039;&#039;&#039; checkmark the state is inverted.&lt;br /&gt;
&lt;br /&gt;
== Properties of Mobility==&lt;br /&gt;
&lt;br /&gt;
For the function of the Mobility features a Mobility license must be installed.&lt;br /&gt;
&lt;br /&gt;
;Object: The Mobility Object (Long Name) must be set, if the mobile endpoint (GSM Phone) needs to use the [[Reference8:Administration/PBX/Objects/Mobility | mobility features]].&lt;br /&gt;
&lt;br /&gt;
;Device: The Device name of the User should be configured here (e.g. &amp;quot;Smartphone&amp;quot;). This name is used by SOAP (TAPI) to address this device for example when initiating a call, by myPBX to enable/disable Mobility for the User (on the Call Forward settings Screen of myPBX) and for Mobility Client OptiCaller for HTTP CallBack/CallThrough.&lt;br /&gt;
&lt;br /&gt;
;Delay: A Delay in seconds can be configured to call the mobile endpoint.&lt;br /&gt;
&lt;br /&gt;
;Disable: Disabling the Mobility features for the mobile device, this can also be en/disabled via [[Reference8:Administration/PBX/Objects/DTMF_Features#Enable.2Fdisable_mobility |DTMF featurecodes]]&lt;br /&gt;
&lt;br /&gt;
;Call-Waiting: Enable or disable call-waiting for the mobile endpoint, if a mobile endpoint is in a call a call waiting tone will be played from the PBX to the mobile endpoint via the RTP stream. See [[Reference9:PBX/Objects/Mobility | R-Key Functions]] for waiting calls handling options&lt;br /&gt;
&lt;br /&gt;
;GSM-License: When using the innovaphone GSM client a GSM license is needed and need to be activated.  NB: obsolete&lt;br /&gt;
&lt;br /&gt;
;Min-Alert: The minimum time in seconds a call must ring on the mobile phone until it can be accepted. If the call is accepted before this time, the call is rejected by the PBX. This way it can be achieved that the announcement from a mobile provider for phones not available does not accept a call and calls can be accepted on a fixed phone on the same number in case the mobile phone is switched off.  The alert time is measured from the alert to the connect signalling. If there is no alert message (e.g. because there is a connect right away), the alert time is counted as null. &#039;&#039;&#039;Note: If the carrier doesn&#039;t send any Alert/180 Ringing, you may need to enable [[{{NAMESPACE}}:PBX/Objects/Mobility | Carrier w/o Alerting]] .&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;Max-Alert: Maximum time the mobile phone rings. After this time the PBX terminates the call to the mobile phone. This way it can be avoided that the mobile voicemail accepts the mobility call.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference12r1:PBX/Objects/Waiting_Queue&amp;diff=49001</id>
		<title>Reference12r1:PBX/Objects/Waiting Queue</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference12r1:PBX/Objects/Waiting_Queue&amp;diff=49001"/>
		<updated>2018-01-15T11:02:25Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Execute Operator CFB/CFNR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Waiting Queue PBX object is used to put calls sent to this object into a queue. While the call is in the queue, it may either remain in alerting state or it be connected with an announcement played. Two announcements can be configured played one after the other, the second is repeated. Calls which are in the queue can be sent to groups of operators configured for the queue. Calls are strictly sent in a first in first out manner to operators. The next call is sent only after the previous call is connected. Destinations can be configured, which can be dialed using DTMF while a call is in the queue and connected.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The Waiting Queue PBX object does not support DTMF tone detection. Only &#039;telephone-event&#039; (RFC-2833) or DTMF signalling (H.245 User Input Indication / SIP INFO(dtmf-relay)) are supported.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Addressing ===&lt;br /&gt;
&lt;br /&gt;
The Long Name, Name Number and Node configuration parameters have the same meaning as for any other object.&lt;br /&gt;
&lt;br /&gt;
=== Registration ===&lt;br /&gt;
&lt;br /&gt;
Hardware ID, PBX, Send Number, Password, Filter, Diversion Filter and Group Indications are used only for endpoints registered directly to the Waiting Queue object. This maybe useful to set diversions for the Waiting Queue object and such endpoints can be used to make calls and are treated as operators of the Waiting Queue.&lt;br /&gt;
&lt;br /&gt;
=== CFNR Timeout ===&lt;br /&gt;
&lt;br /&gt;
The timeout used for call forward no response. See Diversions. Please note that the timeout is limited to 900 seconds.&lt;br /&gt;
&lt;br /&gt;
=== Max Calls ===&lt;br /&gt;
&lt;br /&gt;
This configuration parameter can be used to limit the calls in the queue. Calls connceted to a operator do not count in this respect anymore.&lt;br /&gt;
&lt;br /&gt;
The Waiting Queue PBX object is used to put calls sent to this object into a queue. While the call is in the queue, it may either remain in alerting state or it be connected with an announcement played. Two announcements can be configured played one after the other, the second is repeated. Calls which are in the queue can be sent to groups of operators configured for the queue. Calls are strictly sent in a first in first out manner to operators. The next call is sent only after the previous call is connected. Destinations can be configured, which can be dialed using DTMF while a call is in the queue and connected.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The Waiting Queue PBX object does not support DTMF tone detection. Only &#039;telephone-event&#039; (RFC-2833) or DTMF signalling (H.245 User Input Indication / SIP INFO(dtmf-relay)) are supported.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Addressing ===&lt;br /&gt;
&lt;br /&gt;
The Long Name, Name Number and Node configuration parameters have the same meaning as for any other object.&lt;br /&gt;
&lt;br /&gt;
=== Registration ===&lt;br /&gt;
&lt;br /&gt;
Hardware ID, PBX, Send Number, Password, Filter, Diversion Filter and Group Indications are used only for endpoints registered directly to the Waiting Queue object. This maybe useful to set diversions for the Waiting Queue object and such endpoints can be used to make calls and are treated as operators of the Waiting Queue.&lt;br /&gt;
&lt;br /&gt;
=== CFNR Timeout ===&lt;br /&gt;
&lt;br /&gt;
The timeout used for call forward no response. See Diversions. Please note that the timeout is limited to 900 seconds.&lt;br /&gt;
&lt;br /&gt;
=== Max Calls ===&lt;br /&gt;
&lt;br /&gt;
This configuration parameter can be used to limit the calls in the queue. Calls connceted to a operator do not count in this respect anymore.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
&lt;br /&gt;
For announcements the URL and/or Extern Name/no have to be configured. If no Extern Name/no is configured the local HTTP interface is used to retrieve the announcements. The URL has the following format:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;addr&amp;gt;/&amp;lt;filename.$coder&amp;gt;?coder=&amp;lt;coder-list&amp;gt;[&amp;amp;repeat=true|repeat=n|disc=true|random=true|record=true]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;addr&#039;&#039;&#039;&lt;br /&gt;
|The IP address of the web server. A DNS name cannot be used here.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;filename.$coder&#039;&#039;&#039;&lt;br /&gt;
|The filename of the announcement files including any path. $coder will be replaced by the actual coder used.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;coder-list&#039;&#039;&#039;&lt;br /&gt;
|A comma seperated list of all available coder. For each coder in the list the respective announcement file must be available on the server. The available coders are g711a,g711u,g722,g723,g729,opus-nb,opus-wb.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;repeat=true&#039;&#039;&#039;&lt;br /&gt;
|If this is present the announcement will be repeated. If this is used for the 1st Announcement the 2nd Announcement will never be played.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;repeat=&amp;lt;n&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|If this is present the announcement will be repeated another n times.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;disc=true&#039;&#039;&#039;&lt;br /&gt;
|If this is present, the call will be disconnected as soon as the announcement URL is played (that is, when the source file &lt;br /&gt;
-- scheint nicht zu tun auch nicht, wenn man es in die zweite URL reintut&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;fallback=true&#039;&#039;&#039;&lt;br /&gt;
|If this is present and the specified announcement file is not available, the built-in MOH pattern will be played.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;random=true&#039;&#039;&#039;&lt;br /&gt;
|If this is present, the announcement will be started at a random offset, so each caller will hear it from a different point in time.  This works with non-local URLs only though.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://145.253.157.2/announce/welcome.$coder?coder=g711a,g711u,g722,g723,g729,opus-nb,opus-wb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If no URL is configured the local HTTP interface plays the built-in music on hold by default.&lt;br /&gt;
&lt;br /&gt;
If an Extern Name/No is configured then no local HTTP interface is used, but a call is sent to the configured Name/No. The URL is sent with this call as user-user-info, so that a remote HTTP interface can use it the same way as the local HTTP interface. As destination of the call any voip endpoint can be used.&lt;br /&gt;
&lt;br /&gt;
1st announcement is played once when the call is connected. When 1st announcement is complete, the 2nd announcement is played repeatedly.  If there is no 2nd announcement, the caller will be disconnected when the 1st announcement has completed.&lt;br /&gt;
&lt;br /&gt;
There are 2 pseudo URLs available, TONE and MOH.  Such URLs will be interpreted locally and connect to the systems tone and music-on-hold interface, respectively.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;TONE&#039;&#039;&#039;&lt;br /&gt;
|as URL will produce a constant tone (often recogonized as a dial-tone).  You can add a &#039;&#039;&#039;?tone=ringback&#039;&#039;&#039; which will give you a tone sequence with 1 second tone and 4 seconds silence (this is often recognized as a ring-back tone).&lt;br /&gt;
&lt;br /&gt;
You can also add a &#039;&#039;&#039;?tone=busy&#039;&#039;&#039; which will give you a busy tone sequence. Notice that the queue is only playing the busy tone, it will not disconnect the call. (To disconnect the call after a while, use the CFNR to a not existing user or to a Disconnect user object, routed to the DISC interface.)&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;MOH&#039;&#039;&#039;&lt;br /&gt;
|will produce the built-in music-on-hold.  Please note that both TONE and MOH never end, so &#039;&#039;&#039;repeat=true&#039;&#039;&#039; is not required and &#039;&#039;&#039;disc=true&#039;&#039;&#039; will have no effect.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;V7 hotifx9&#039;&#039;&#039;: At any location inside the URL placeholders can be used, which are replaced by a string defined for the placeholder. The following placeholders are available:&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;#p&#039;&#039;&#039;&lt;br /&gt;
|Position of this call within the queue. &#039;&#039;&#039;0&#039;&#039;&#039; means the next available operator will answer this call.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;##&#039;&#039;&#039;&lt;br /&gt;
|Is replaced by &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://145.253.157.2/announce/queue_place#p.$coder?coder=g711a,g711u,g722,g723,g729,opus-nb,opus-wb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will be resolved to the files &#039;&#039;queue_place1.g711a&#039;&#039;,&#039;&#039;queue_place2.g711a&#039;&#039;, &#039;&#039;queue_place3.g711a&#039;&#039;...., depended on place in queue. So you have to create one set of prompt files for each queue place.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recomended solution:&#039;&#039;&#039; Create a &#039;&#039;welcome&#039;&#039; prompt in 1st Announcement and a &#039;&#039;queue_place&#039;&#039; prompt (witch will be repeated) in 2nd Announcement. This way the every time the 2nd Announcement it&#039;s repeated it will provide the queue position to the caller.&lt;br /&gt;
&lt;br /&gt;
=== Max Call/Operator(%) ===&lt;br /&gt;
&lt;br /&gt;
This configuration parameter allows to limit the number of current calls depending on the number of operator registrations in the primary group. Only the configured percentage of operator registrations are accepted as calls. Calls currently connected to operators do count in this context. For example if 2 operators are registered and the value is set to 150%, the 4th call received will get a busy. Note that only operators in the primary group count for this, this means if there is no primary group configured all calls are rejected with busy if any value is entered here.&lt;br /&gt;
&lt;br /&gt;
=== Alert Timeout ===&lt;br /&gt;
&lt;br /&gt;
The timeout (in seconds) after which the Waiting Queue connects incoming calls. If no timeout is configured the Waiting Queue will never connect. If a timeout of 0 is configured the Waiting Queue connects right away.&lt;br /&gt;
&lt;br /&gt;
=== Round Robin Timeout ===&lt;br /&gt;
&lt;br /&gt;
If a round robin timeout is configured the call is not sent to all members of the primary group at the same time, but it starts with one only. After the round robin timeout has expired, the call is sent to all members of the primary group. The operator used for the first call changes in a round robin manner. If the checkmark &#039;&#039;&#039;Speedup if more calls waiting&#039;&#039;&#039; is set, the round robin timeout will be reduced as soon as a second call arrives. If the &#039;&#039;&#039;Call longest idle&#039;&#039;&#039; checkmark is set, the next operator to be called is based on which one has the longest idle time.&lt;br /&gt;
&lt;br /&gt;
=== Primary Group/Timeout ===&lt;br /&gt;
&lt;br /&gt;
The call is sent to this group first, either to all members at the same time, or in a round robin manner. After the configured Primary Group Timeout expires the call is sent to all operators. If Primary group operators are busy the call is immediately sent to Secondary Groups members. Operators are all members of groups in which the Waiting Queue object itself is active member. The operators do not need to be active members of these groups. If Primary Group Timout is empty, the call is sent to primary and secondary group immediately.&lt;br /&gt;
&lt;br /&gt;
=== CFNR on no Operators ===&lt;br /&gt;
&lt;br /&gt;
If this option is configured, calls are rejected with No User Responding if there is no operator. If a CFNR is configured at the Waiting Queue, it is executed in this case.&lt;br /&gt;
&lt;br /&gt;
=== Support for RTP-DTMF ===&lt;br /&gt;
&lt;br /&gt;
If the announcement interface for a Waiting queue is not the PBX internal one and the calling endpoint can only do RTP-DTMF, the announcement interface receives the RTP-DTMF and not the waiting queue. When this checkmark is set, the &#039;&#039;&#039;uui-dtmf=on&#039;&#039;&#039; argument to the URL is added, which tells the announcement interface to send back the received DTMF as USER-INFO.&lt;br /&gt;
&lt;br /&gt;
This feature is needed for a Hosting Scenario where the PBX is located in a private network and the Media interface on a different system in the public network.&lt;br /&gt;
&lt;br /&gt;
=== Operator connect for SOAP ===&lt;br /&gt;
&lt;br /&gt;
On the SOAP/TAPI interface a call to a waiting queue is normally indicated as connected as soon it is connected signalingwise, this means it is indicated as connected if an announcement is played. This behaviour can be changed so that it is indicated connected only after an operator has accepted the call by setting this checkmark. This also will affect the PBX CDRs state accordingly.&lt;br /&gt;
&lt;br /&gt;
=== Call busy Operators ===&lt;br /&gt;
&lt;br /&gt;
Normally an operator who is already engaged in a Waiting Object call is not called again. If this checkmark is set, calls are delivered to these (busy) operators as well.&lt;br /&gt;
&lt;br /&gt;
=== CFU disables Operator ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set a operator which has a CFU set is not called.&lt;br /&gt;
&lt;br /&gt;
=== Execute Operator CFB/CFNR ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, CFB or CFNR is executed for calls sent thru the Waiting Queue to operator phones otherwise these CFB/CFNR are ignored for such calls.&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Only CFB/CFNR configured by the operator will be executed. &#039;&#039;Administrative CFx&#039;&#039; will be ignored (e.g. call forwardings using Bool or Only/Only Not parameters).&lt;br /&gt;
&lt;br /&gt;
=== No Mobility for Operators ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, mobility for operators is not executed.&lt;br /&gt;
&lt;br /&gt;
=== Announcement w/o Connect ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, no connect is sent on incoming calls to play the announcements. This feature allows to provide free-of-charge waiting queues. For this to work, the carrier has to support early media (and not all do, for example German Telekom is known to not support this feature as of December 2012 on ISDN lines). On TE ISDN interfaces the Annex-N option has to be enabled for this.&lt;br /&gt;
&lt;br /&gt;
=== Presence Disables Operator ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, no calls are sent to an operator with presence information set.&lt;br /&gt;
&lt;br /&gt;
=== Set Operator Presence ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set the presence of an operator is set to busy whenever the operator accepts a call. A timeout can be set after which this presence information is cleared again after the call release.&lt;br /&gt;
&lt;br /&gt;
=== DTMF destinations ===&lt;br /&gt;
&lt;br /&gt;
A list of DTMF destinations can be configured. Any DTMF digits dialed after the call is connected to an announcement is matched to this list. If a match is found the call is sent to Dest. No/Dest. Name. If no Dest. No/Dest. Name is configured more DTMF digits may be dialed for the final destination. If the destination of the call is not an endpoint, but a gateway (Trunk object, Gateway object), the call is sent only after a timeout of 4s after the last digit is dialed.&lt;br /&gt;
&lt;br /&gt;
A &#039;.&#039; entered as DTMF map will catch all DTMF digits dialled after this map and append them at the end of &#039;&#039;Dest. No&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
 DTMF	  Dest. No      Description&lt;br /&gt;
 55.       11            if the DTMF sequence &amp;quot;55222&amp;quot; is dialled, the destination number is &amp;quot;11222&amp;quot;&lt;br /&gt;
 .        &amp;lt;empty&amp;gt;        the dialled DTMF sequence is passed completely to the destination&lt;br /&gt;
&lt;br /&gt;
A &#039;~&#039; character before the DTMF destination indicates that no ct_complete shall be generated. This means the dialed DTMF destination does not show up in the redial list of the phone.&lt;br /&gt;
&lt;br /&gt;
== Call Forwarding ==&lt;br /&gt;
&lt;br /&gt;
Call Forwarding can be used with the Waiting Queue object and can be set/reset by endpoints registered to the Waiting Queue object itself.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;CFU&#039;&#039;&#039;&lt;br /&gt;
|Executed as usual&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;CFB&#039;&#039;&#039;&lt;br /&gt;
|Executed if the Busy on ... calls condition or the Max Call/Operator(%) condition applies.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;CFNR&#039;&#039;&#039;&lt;br /&gt;
|Executed if the CFNR timeout expires and no operator has accepted the call, even if the call is connected to an announcement or if the first announcement ends and no second announcement is configured.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Max Call/Operator(%) ===&lt;br /&gt;
&lt;br /&gt;
This configuration parameter allows to limit the number of current calls depending on the number of operator registrations in the primary group. Only the configured percentage of operator registrations are accepted as calls. Calls currently connected to operators do count in this context. For example if 2 operators are registered and the value is set to 150%, the 4th call received will get a busy. Note that only operators in the primary group count for this, this means if there is no primary group configured all calls are rejected with busy if any value is entered here.&lt;br /&gt;
&lt;br /&gt;
=== Alert Timeout ===&lt;br /&gt;
&lt;br /&gt;
The timeout (in seconds) after which the Waiting Queue connects incoming calls. If no timeout is configured the Waiting Queue will never connect. If a timeout of 0 is configured the Waiting Queue connects right away.&lt;br /&gt;
&lt;br /&gt;
=== Round Robin Timeout ===&lt;br /&gt;
&lt;br /&gt;
If a round robin timeout is configured the call is not sent to all members of the primary group at the same time, but it starts with one only. After the round robin timeout has expired, the call is sent to all members of the primary group. The operator used for the first call changes in a round robin manner. If the checkmark &#039;&#039;&#039;Speedup if more calls waiting&#039;&#039;&#039; is set, the round robin timeout will be reduced as soon as a second call arrives. If the &#039;&#039;&#039;Call longest idle&#039;&#039;&#039; checkmark is set, the next operator to be called is based on which one has the longest idle time.&lt;br /&gt;
&lt;br /&gt;
=== Primary Group/Timeout ===&lt;br /&gt;
&lt;br /&gt;
The call is sent to this group first, either to all members at the same time, or in a round robin manner. After the configured Primary Group Timeout expires the call is sent to all operators. If Primary group operators are busy the call is immediately sent to Secondary Groups members. Operators are all members of groups in which the Waiting Queue object itself is active member. The operators do not need to be active members of these groups. If Primary Group Timout is empty, the call is sent to primary and secondary group immediately.&lt;br /&gt;
&lt;br /&gt;
=== CFNR on no Operators ===&lt;br /&gt;
&lt;br /&gt;
If this option is configured, calls are rejected with No User Responding if there is no operator. If a CFNR is configured at the Waiting Queue, it is executed in this case.&lt;br /&gt;
&lt;br /&gt;
=== Support for RTP-DTMF ===&lt;br /&gt;
&lt;br /&gt;
If the announcement interface for a Waiting queue is not the PBX internal one and the calling endpoint can only do RTP-DTMF, the announcement interface receives the RTP-DTMF and not the waiting queue. When this checkmark is set, the &#039;&#039;&#039;uui-dtmf=on&#039;&#039;&#039; argument to the URL is added, which tells the announcement interface to send back the received DTMF as USER-INFO.&lt;br /&gt;
&lt;br /&gt;
This feature is needed for a Hosting Scenario where the PBX is located in a private network and the Media interface on a different system in the public network.&lt;br /&gt;
&lt;br /&gt;
=== Operator connect for SOAP ===&lt;br /&gt;
&lt;br /&gt;
On the SOAP/TAPI interface a call to a waiting queue is normally indicated as connected as soon it is connected signalingwise, this means it is indicated as connected if an announcement is played. This behaviour can be changed so that it is indicated connected only after an operator has accepted the call by setting this checkmark. This also will affect the PBX CDRs state accordingly.&lt;br /&gt;
&lt;br /&gt;
=== Call busy Operators ===&lt;br /&gt;
&lt;br /&gt;
Normally an operator who is already engaged in a Waiting Object call is not called again. If this checkmark is set, calls are delivered to these (busy) operators as well.&lt;br /&gt;
&lt;br /&gt;
=== CFU disables Operator ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set a operator which has a CFU set is not called.&lt;br /&gt;
&lt;br /&gt;
=== Execute Operator CFB/CFNR ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, CFB or CFNR is executed for calls sent thru the Waiting Queue to operator phones otherwise these CFB/CFNR are ignored for such calls.&lt;br /&gt;
&lt;br /&gt;
=== No Mobility for Operators ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, mobility for operators is not executed.&lt;br /&gt;
&lt;br /&gt;
=== Announcement w/o Connect ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, no connect is sent on incoming calls to play the announcements. This feature allows to provide free-of-charge waiting queues. For this to work, the carrier has to support early media (and not all do, for example German Telekom is known to not support this feature as of December 2012 on ISDN lines). On TE ISDN interfaces the Annex-N option has to be enabled for this.&lt;br /&gt;
&lt;br /&gt;
=== Presence Disables Operator ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, no calls are sent to an operator with presence information set.&lt;br /&gt;
&lt;br /&gt;
=== Set Operator Presence ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set the presence of an operator is set to busy whenever the operator accepts a call. A timeout can be set after which this presence information is cleared again after the call release.&lt;br /&gt;
&lt;br /&gt;
=== DTMF destinations ===&lt;br /&gt;
&lt;br /&gt;
A list of DTMF destinations can be configured. Any DTMF digits dialed after the call is connected to an announcement is matched to this list. If a match is found the call is sent to Dest. No/Dest. Name. If no Dest. No/Dest. Name is configured more DTMF digits may be dialed for the final destination. If the destination of the call is not an endpoint, but a gateway (Trunk object, Gateway object), the call is sent only after a timeout of 4s after the last digit is dialed.&lt;br /&gt;
&lt;br /&gt;
A &#039;.&#039; entered as DTMF map will catch all DTMF digits dialled after this map and append them at the end of &#039;&#039;Dest. No&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
 DTMF	  Dest. No      Description&lt;br /&gt;
 55.       11            if the DTMF sequence &amp;quot;55222&amp;quot; is dialled, the destination number is &amp;quot;11222&amp;quot;&lt;br /&gt;
 .        &amp;lt;empty&amp;gt;        the dialled DTMF sequence is passed completely to the destination&lt;br /&gt;
&lt;br /&gt;
A &#039;~&#039; character before the DTMF destination indicates that no ct_complete shall be generated. This means the dialed DTMF destination does not show up in the redial list of the phone.&lt;br /&gt;
&lt;br /&gt;
== Call Forwarding ==&lt;br /&gt;
&lt;br /&gt;
Call Forwarding can be used with the Waiting Queue object and can be set/reset by endpoints registered to the Waiting Queue object itself.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;CFU&#039;&#039;&#039;&lt;br /&gt;
|Executed as usual&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;CFB&#039;&#039;&#039;&lt;br /&gt;
|Executed if the Busy on ... calls condition or the Max Call/Operator(%) condition applies.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;CFNR&#039;&#039;&#039;&lt;br /&gt;
|Executed if the CFNR timeout expires and no operator has accepted the call, even if the call is connected to an announcement or if the first announcement ends and no second announcement is configured.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference12r1:PBX/Objects/Waiting_Queue&amp;diff=49000</id>
		<title>Reference12r1:PBX/Objects/Waiting Queue</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference12r1:PBX/Objects/Waiting_Queue&amp;diff=49000"/>
		<updated>2018-01-15T11:00:49Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Execute Operator CFB/CFNR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Waiting Queue PBX object is used to put calls sent to this object into a queue. While the call is in the queue, it may either remain in alerting state or it be connected with an announcement played. Two announcements can be configured played one after the other, the second is repeated. Calls which are in the queue can be sent to groups of operators configured for the queue. Calls are strictly sent in a first in first out manner to operators. The next call is sent only after the previous call is connected. Destinations can be configured, which can be dialed using DTMF while a call is in the queue and connected.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The Waiting Queue PBX object does not support DTMF tone detection. Only &#039;telephone-event&#039; (RFC-2833) or DTMF signalling (H.245 User Input Indication / SIP INFO(dtmf-relay)) are supported.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Addressing ===&lt;br /&gt;
&lt;br /&gt;
The Long Name, Name Number and Node configuration parameters have the same meaning as for any other object.&lt;br /&gt;
&lt;br /&gt;
=== Registration ===&lt;br /&gt;
&lt;br /&gt;
Hardware ID, PBX, Send Number, Password, Filter, Diversion Filter and Group Indications are used only for endpoints registered directly to the Waiting Queue object. This maybe useful to set diversions for the Waiting Queue object and such endpoints can be used to make calls and are treated as operators of the Waiting Queue.&lt;br /&gt;
&lt;br /&gt;
=== CFNR Timeout ===&lt;br /&gt;
&lt;br /&gt;
The timeout used for call forward no response. See Diversions. Please note that the timeout is limited to 900 seconds.&lt;br /&gt;
&lt;br /&gt;
=== Max Calls ===&lt;br /&gt;
&lt;br /&gt;
This configuration parameter can be used to limit the calls in the queue. Calls connceted to a operator do not count in this respect anymore.&lt;br /&gt;
&lt;br /&gt;
The Waiting Queue PBX object is used to put calls sent to this object into a queue. While the call is in the queue, it may either remain in alerting state or it be connected with an announcement played. Two announcements can be configured played one after the other, the second is repeated. Calls which are in the queue can be sent to groups of operators configured for the queue. Calls are strictly sent in a first in first out manner to operators. The next call is sent only after the previous call is connected. Destinations can be configured, which can be dialed using DTMF while a call is in the queue and connected.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The Waiting Queue PBX object does not support DTMF tone detection. Only &#039;telephone-event&#039; (RFC-2833) or DTMF signalling (H.245 User Input Indication / SIP INFO(dtmf-relay)) are supported.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Addressing ===&lt;br /&gt;
&lt;br /&gt;
The Long Name, Name Number and Node configuration parameters have the same meaning as for any other object.&lt;br /&gt;
&lt;br /&gt;
=== Registration ===&lt;br /&gt;
&lt;br /&gt;
Hardware ID, PBX, Send Number, Password, Filter, Diversion Filter and Group Indications are used only for endpoints registered directly to the Waiting Queue object. This maybe useful to set diversions for the Waiting Queue object and such endpoints can be used to make calls and are treated as operators of the Waiting Queue.&lt;br /&gt;
&lt;br /&gt;
=== CFNR Timeout ===&lt;br /&gt;
&lt;br /&gt;
The timeout used for call forward no response. See Diversions. Please note that the timeout is limited to 900 seconds.&lt;br /&gt;
&lt;br /&gt;
=== Max Calls ===&lt;br /&gt;
&lt;br /&gt;
This configuration parameter can be used to limit the calls in the queue. Calls connceted to a operator do not count in this respect anymore.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
&lt;br /&gt;
For announcements the URL and/or Extern Name/no have to be configured. If no Extern Name/no is configured the local HTTP interface is used to retrieve the announcements. The URL has the following format:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;addr&amp;gt;/&amp;lt;filename.$coder&amp;gt;?coder=&amp;lt;coder-list&amp;gt;[&amp;amp;repeat=true|repeat=n|disc=true|random=true|record=true]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;addr&#039;&#039;&#039;&lt;br /&gt;
|The IP address of the web server. A DNS name cannot be used here.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;filename.$coder&#039;&#039;&#039;&lt;br /&gt;
|The filename of the announcement files including any path. $coder will be replaced by the actual coder used.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;coder-list&#039;&#039;&#039;&lt;br /&gt;
|A comma seperated list of all available coder. For each coder in the list the respective announcement file must be available on the server. The available coders are g711a,g711u,g722,g723,g729,opus-nb,opus-wb.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;repeat=true&#039;&#039;&#039;&lt;br /&gt;
|If this is present the announcement will be repeated. If this is used for the 1st Announcement the 2nd Announcement will never be played.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;repeat=&amp;lt;n&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|If this is present the announcement will be repeated another n times.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;disc=true&#039;&#039;&#039;&lt;br /&gt;
|If this is present, the call will be disconnected as soon as the announcement URL is played (that is, when the source file &lt;br /&gt;
-- scheint nicht zu tun auch nicht, wenn man es in die zweite URL reintut&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;fallback=true&#039;&#039;&#039;&lt;br /&gt;
|If this is present and the specified announcement file is not available, the built-in MOH pattern will be played.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;random=true&#039;&#039;&#039;&lt;br /&gt;
|If this is present, the announcement will be started at a random offset, so each caller will hear it from a different point in time.  This works with non-local URLs only though.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://145.253.157.2/announce/welcome.$coder?coder=g711a,g711u,g722,g723,g729,opus-nb,opus-wb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If no URL is configured the local HTTP interface plays the built-in music on hold by default.&lt;br /&gt;
&lt;br /&gt;
If an Extern Name/No is configured then no local HTTP interface is used, but a call is sent to the configured Name/No. The URL is sent with this call as user-user-info, so that a remote HTTP interface can use it the same way as the local HTTP interface. As destination of the call any voip endpoint can be used.&lt;br /&gt;
&lt;br /&gt;
1st announcement is played once when the call is connected. When 1st announcement is complete, the 2nd announcement is played repeatedly.  If there is no 2nd announcement, the caller will be disconnected when the 1st announcement has completed.&lt;br /&gt;
&lt;br /&gt;
There are 2 pseudo URLs available, TONE and MOH.  Such URLs will be interpreted locally and connect to the systems tone and music-on-hold interface, respectively.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;TONE&#039;&#039;&#039;&lt;br /&gt;
|as URL will produce a constant tone (often recogonized as a dial-tone).  You can add a &#039;&#039;&#039;?tone=ringback&#039;&#039;&#039; which will give you a tone sequence with 1 second tone and 4 seconds silence (this is often recognized as a ring-back tone).&lt;br /&gt;
&lt;br /&gt;
You can also add a &#039;&#039;&#039;?tone=busy&#039;&#039;&#039; which will give you a busy tone sequence. Notice that the queue is only playing the busy tone, it will not disconnect the call. (To disconnect the call after a while, use the CFNR to a not existing user or to a Disconnect user object, routed to the DISC interface.)&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;MOH&#039;&#039;&#039;&lt;br /&gt;
|will produce the built-in music-on-hold.  Please note that both TONE and MOH never end, so &#039;&#039;&#039;repeat=true&#039;&#039;&#039; is not required and &#039;&#039;&#039;disc=true&#039;&#039;&#039; will have no effect.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;V7 hotifx9&#039;&#039;&#039;: At any location inside the URL placeholders can be used, which are replaced by a string defined for the placeholder. The following placeholders are available:&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;#p&#039;&#039;&#039;&lt;br /&gt;
|Position of this call within the queue. &#039;&#039;&#039;0&#039;&#039;&#039; means the next available operator will answer this call.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;##&#039;&#039;&#039;&lt;br /&gt;
|Is replaced by &#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://145.253.157.2/announce/queue_place#p.$coder?coder=g711a,g711u,g722,g723,g729,opus-nb,opus-wb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will be resolved to the files &#039;&#039;queue_place1.g711a&#039;&#039;,&#039;&#039;queue_place2.g711a&#039;&#039;, &#039;&#039;queue_place3.g711a&#039;&#039;...., depended on place in queue. So you have to create one set of prompt files for each queue place.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recomended solution:&#039;&#039;&#039; Create a &#039;&#039;welcome&#039;&#039; prompt in 1st Announcement and a &#039;&#039;queue_place&#039;&#039; prompt (witch will be repeated) in 2nd Announcement. This way the every time the 2nd Announcement it&#039;s repeated it will provide the queue position to the caller.&lt;br /&gt;
&lt;br /&gt;
=== Max Call/Operator(%) ===&lt;br /&gt;
&lt;br /&gt;
This configuration parameter allows to limit the number of current calls depending on the number of operator registrations in the primary group. Only the configured percentage of operator registrations are accepted as calls. Calls currently connected to operators do count in this context. For example if 2 operators are registered and the value is set to 150%, the 4th call received will get a busy. Note that only operators in the primary group count for this, this means if there is no primary group configured all calls are rejected with busy if any value is entered here.&lt;br /&gt;
&lt;br /&gt;
=== Alert Timeout ===&lt;br /&gt;
&lt;br /&gt;
The timeout (in seconds) after which the Waiting Queue connects incoming calls. If no timeout is configured the Waiting Queue will never connect. If a timeout of 0 is configured the Waiting Queue connects right away.&lt;br /&gt;
&lt;br /&gt;
=== Round Robin Timeout ===&lt;br /&gt;
&lt;br /&gt;
If a round robin timeout is configured the call is not sent to all members of the primary group at the same time, but it starts with one only. After the round robin timeout has expired, the call is sent to all members of the primary group. The operator used for the first call changes in a round robin manner. If the checkmark &#039;&#039;&#039;Speedup if more calls waiting&#039;&#039;&#039; is set, the round robin timeout will be reduced as soon as a second call arrives. If the &#039;&#039;&#039;Call longest idle&#039;&#039;&#039; checkmark is set, the next operator to be called is based on which one has the longest idle time.&lt;br /&gt;
&lt;br /&gt;
=== Primary Group/Timeout ===&lt;br /&gt;
&lt;br /&gt;
The call is sent to this group first, either to all members at the same time, or in a round robin manner. After the configured Primary Group Timeout expires the call is sent to all operators. If Primary group operators are busy the call is immediately sent to Secondary Groups members. Operators are all members of groups in which the Waiting Queue object itself is active member. The operators do not need to be active members of these groups. If Primary Group Timout is empty, the call is sent to primary and secondary group immediately.&lt;br /&gt;
&lt;br /&gt;
=== CFNR on no Operators ===&lt;br /&gt;
&lt;br /&gt;
If this option is configured, calls are rejected with No User Responding if there is no operator. If a CFNR is configured at the Waiting Queue, it is executed in this case.&lt;br /&gt;
&lt;br /&gt;
=== Support for RTP-DTMF ===&lt;br /&gt;
&lt;br /&gt;
If the announcement interface for a Waiting queue is not the PBX internal one and the calling endpoint can only do RTP-DTMF, the announcement interface receives the RTP-DTMF and not the waiting queue. When this checkmark is set, the &#039;&#039;&#039;uui-dtmf=on&#039;&#039;&#039; argument to the URL is added, which tells the announcement interface to send back the received DTMF as USER-INFO.&lt;br /&gt;
&lt;br /&gt;
This feature is needed for a Hosting Scenario where the PBX is located in a private network and the Media interface on a different system in the public network.&lt;br /&gt;
&lt;br /&gt;
=== Operator connect for SOAP ===&lt;br /&gt;
&lt;br /&gt;
On the SOAP/TAPI interface a call to a waiting queue is normally indicated as connected as soon it is connected signalingwise, this means it is indicated as connected if an announcement is played. This behaviour can be changed so that it is indicated connected only after an operator has accepted the call by setting this checkmark. This also will affect the PBX CDRs state accordingly.&lt;br /&gt;
&lt;br /&gt;
=== Call busy Operators ===&lt;br /&gt;
&lt;br /&gt;
Normally an operator who is already engaged in a Waiting Object call is not called again. If this checkmark is set, calls are delivered to these (busy) operators as well.&lt;br /&gt;
&lt;br /&gt;
=== CFU disables Operator ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set a operator which has a CFU set is not called.&lt;br /&gt;
&lt;br /&gt;
=== Execute Operator CFB/CFNR ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, CFB or CFNR is executed for calls sent thru the Waiting Queue to operator phones otherwise these CFB/CFNR are ignored for such calls.&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Only CFB/CFNR configured by the operator will be executed. &#039;&#039;Administrative CFx&#039;&#039; will not be considered (e.g. call forwardings using Bool or Only/Only Not parameters).&lt;br /&gt;
&lt;br /&gt;
=== No Mobility for Operators ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, mobility for operators is not executed.&lt;br /&gt;
&lt;br /&gt;
=== Announcement w/o Connect ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, no connect is sent on incoming calls to play the announcements. This feature allows to provide free-of-charge waiting queues. For this to work, the carrier has to support early media (and not all do, for example German Telekom is known to not support this feature as of December 2012 on ISDN lines). On TE ISDN interfaces the Annex-N option has to be enabled for this.&lt;br /&gt;
&lt;br /&gt;
=== Presence Disables Operator ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, no calls are sent to an operator with presence information set.&lt;br /&gt;
&lt;br /&gt;
=== Set Operator Presence ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set the presence of an operator is set to busy whenever the operator accepts a call. A timeout can be set after which this presence information is cleared again after the call release.&lt;br /&gt;
&lt;br /&gt;
=== DTMF destinations ===&lt;br /&gt;
&lt;br /&gt;
A list of DTMF destinations can be configured. Any DTMF digits dialed after the call is connected to an announcement is matched to this list. If a match is found the call is sent to Dest. No/Dest. Name. If no Dest. No/Dest. Name is configured more DTMF digits may be dialed for the final destination. If the destination of the call is not an endpoint, but a gateway (Trunk object, Gateway object), the call is sent only after a timeout of 4s after the last digit is dialed.&lt;br /&gt;
&lt;br /&gt;
A &#039;.&#039; entered as DTMF map will catch all DTMF digits dialled after this map and append them at the end of &#039;&#039;Dest. No&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
 DTMF	  Dest. No      Description&lt;br /&gt;
 55.       11            if the DTMF sequence &amp;quot;55222&amp;quot; is dialled, the destination number is &amp;quot;11222&amp;quot;&lt;br /&gt;
 .        &amp;lt;empty&amp;gt;        the dialled DTMF sequence is passed completely to the destination&lt;br /&gt;
&lt;br /&gt;
A &#039;~&#039; character before the DTMF destination indicates that no ct_complete shall be generated. This means the dialed DTMF destination does not show up in the redial list of the phone.&lt;br /&gt;
&lt;br /&gt;
== Call Forwarding ==&lt;br /&gt;
&lt;br /&gt;
Call Forwarding can be used with the Waiting Queue object and can be set/reset by endpoints registered to the Waiting Queue object itself.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;CFU&#039;&#039;&#039;&lt;br /&gt;
|Executed as usual&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;CFB&#039;&#039;&#039;&lt;br /&gt;
|Executed if the Busy on ... calls condition or the Max Call/Operator(%) condition applies.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;CFNR&#039;&#039;&#039;&lt;br /&gt;
|Executed if the CFNR timeout expires and no operator has accepted the call, even if the call is connected to an announcement or if the first announcement ends and no second announcement is configured.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Max Call/Operator(%) ===&lt;br /&gt;
&lt;br /&gt;
This configuration parameter allows to limit the number of current calls depending on the number of operator registrations in the primary group. Only the configured percentage of operator registrations are accepted as calls. Calls currently connected to operators do count in this context. For example if 2 operators are registered and the value is set to 150%, the 4th call received will get a busy. Note that only operators in the primary group count for this, this means if there is no primary group configured all calls are rejected with busy if any value is entered here.&lt;br /&gt;
&lt;br /&gt;
=== Alert Timeout ===&lt;br /&gt;
&lt;br /&gt;
The timeout (in seconds) after which the Waiting Queue connects incoming calls. If no timeout is configured the Waiting Queue will never connect. If a timeout of 0 is configured the Waiting Queue connects right away.&lt;br /&gt;
&lt;br /&gt;
=== Round Robin Timeout ===&lt;br /&gt;
&lt;br /&gt;
If a round robin timeout is configured the call is not sent to all members of the primary group at the same time, but it starts with one only. After the round robin timeout has expired, the call is sent to all members of the primary group. The operator used for the first call changes in a round robin manner. If the checkmark &#039;&#039;&#039;Speedup if more calls waiting&#039;&#039;&#039; is set, the round robin timeout will be reduced as soon as a second call arrives. If the &#039;&#039;&#039;Call longest idle&#039;&#039;&#039; checkmark is set, the next operator to be called is based on which one has the longest idle time.&lt;br /&gt;
&lt;br /&gt;
=== Primary Group/Timeout ===&lt;br /&gt;
&lt;br /&gt;
The call is sent to this group first, either to all members at the same time, or in a round robin manner. After the configured Primary Group Timeout expires the call is sent to all operators. If Primary group operators are busy the call is immediately sent to Secondary Groups members. Operators are all members of groups in which the Waiting Queue object itself is active member. The operators do not need to be active members of these groups. If Primary Group Timout is empty, the call is sent to primary and secondary group immediately.&lt;br /&gt;
&lt;br /&gt;
=== CFNR on no Operators ===&lt;br /&gt;
&lt;br /&gt;
If this option is configured, calls are rejected with No User Responding if there is no operator. If a CFNR is configured at the Waiting Queue, it is executed in this case.&lt;br /&gt;
&lt;br /&gt;
=== Support for RTP-DTMF ===&lt;br /&gt;
&lt;br /&gt;
If the announcement interface for a Waiting queue is not the PBX internal one and the calling endpoint can only do RTP-DTMF, the announcement interface receives the RTP-DTMF and not the waiting queue. When this checkmark is set, the &#039;&#039;&#039;uui-dtmf=on&#039;&#039;&#039; argument to the URL is added, which tells the announcement interface to send back the received DTMF as USER-INFO.&lt;br /&gt;
&lt;br /&gt;
This feature is needed for a Hosting Scenario where the PBX is located in a private network and the Media interface on a different system in the public network.&lt;br /&gt;
&lt;br /&gt;
=== Operator connect for SOAP ===&lt;br /&gt;
&lt;br /&gt;
On the SOAP/TAPI interface a call to a waiting queue is normally indicated as connected as soon it is connected signalingwise, this means it is indicated as connected if an announcement is played. This behaviour can be changed so that it is indicated connected only after an operator has accepted the call by setting this checkmark. This also will affect the PBX CDRs state accordingly.&lt;br /&gt;
&lt;br /&gt;
=== Call busy Operators ===&lt;br /&gt;
&lt;br /&gt;
Normally an operator who is already engaged in a Waiting Object call is not called again. If this checkmark is set, calls are delivered to these (busy) operators as well.&lt;br /&gt;
&lt;br /&gt;
=== CFU disables Operator ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set a operator which has a CFU set is not called.&lt;br /&gt;
&lt;br /&gt;
=== Execute Operator CFB/CFNR ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, CFB or CFNR is executed for calls sent thru the Waiting Queue to operator phones otherwise these CFB/CFNR are ignored for such calls.&lt;br /&gt;
&lt;br /&gt;
=== No Mobility for Operators ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, mobility for operators is not executed.&lt;br /&gt;
&lt;br /&gt;
=== Announcement w/o Connect ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, no connect is sent on incoming calls to play the announcements. This feature allows to provide free-of-charge waiting queues. For this to work, the carrier has to support early media (and not all do, for example German Telekom is known to not support this feature as of December 2012 on ISDN lines). On TE ISDN interfaces the Annex-N option has to be enabled for this.&lt;br /&gt;
&lt;br /&gt;
=== Presence Disables Operator ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set, no calls are sent to an operator with presence information set.&lt;br /&gt;
&lt;br /&gt;
=== Set Operator Presence ===&lt;br /&gt;
&lt;br /&gt;
If this checkmark is set the presence of an operator is set to busy whenever the operator accepts a call. A timeout can be set after which this presence information is cleared again after the call release.&lt;br /&gt;
&lt;br /&gt;
=== DTMF destinations ===&lt;br /&gt;
&lt;br /&gt;
A list of DTMF destinations can be configured. Any DTMF digits dialed after the call is connected to an announcement is matched to this list. If a match is found the call is sent to Dest. No/Dest. Name. If no Dest. No/Dest. Name is configured more DTMF digits may be dialed for the final destination. If the destination of the call is not an endpoint, but a gateway (Trunk object, Gateway object), the call is sent only after a timeout of 4s after the last digit is dialed.&lt;br /&gt;
&lt;br /&gt;
A &#039;.&#039; entered as DTMF map will catch all DTMF digits dialled after this map and append them at the end of &#039;&#039;Dest. No&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
 DTMF	  Dest. No      Description&lt;br /&gt;
 55.       11            if the DTMF sequence &amp;quot;55222&amp;quot; is dialled, the destination number is &amp;quot;11222&amp;quot;&lt;br /&gt;
 .        &amp;lt;empty&amp;gt;        the dialled DTMF sequence is passed completely to the destination&lt;br /&gt;
&lt;br /&gt;
A &#039;~&#039; character before the DTMF destination indicates that no ct_complete shall be generated. This means the dialed DTMF destination does not show up in the redial list of the phone.&lt;br /&gt;
&lt;br /&gt;
== Call Forwarding ==&lt;br /&gt;
&lt;br /&gt;
Call Forwarding can be used with the Waiting Queue object and can be set/reset by endpoints registered to the Waiting Queue object itself.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;CFU&#039;&#039;&#039;&lt;br /&gt;
|Executed as usual&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;CFB&#039;&#039;&#039;&lt;br /&gt;
|Executed if the Busy on ... calls condition or the Max Call/Operator(%) condition applies.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;CFNR&#039;&#039;&#039;&lt;br /&gt;
|Executed if the CFNR timeout expires and no operator has accepted the call, even if the call is connected to an announcement or if the first announcement ends and no second announcement is configured.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto12r2:Central_SIP_trunk_with_multiple_subscriber_numbers&amp;diff=48460</id>
		<title>Howto12r2:Central SIP trunk with multiple subscriber numbers</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto12r2:Central_SIP_trunk_with_multiple_subscriber_numbers&amp;diff=48460"/>
		<updated>2017-11-21T08:12:50Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Configuration of the Funnel PBX */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Applies To==&lt;br /&gt;
This information applies to&lt;br /&gt;
&lt;br /&gt;
V12r2 sr6&lt;br /&gt;
Build 12.5236 and later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Keywords: Central-trunk, SIP-trunk, E164, Funnel-PBX, Trichter-PBX, --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
&lt;br /&gt;
In this scenario every customer site is an innovaphone Gateway/PBX providing PBX functionality or Gateway functionality with ISDN PRI BRI or SIP Trunk to a legacy PBX on a location.&lt;br /&gt;
In stead of having a ISDN or SIP Trunk to the PSTN network on every location, there will be a Central big sip trunk on one location that provides the PSTN access for all other locations.&lt;br /&gt;
The call routing is made by innovaphone PBX containing e164 node tree with appropriate placed Gateways for each customer location.&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
The following diagram shows a simple scenario of a Funnel PBX with N locations providing a central big sip trunk for all sub-locations.&lt;br /&gt;
The sub-locations provding PBX functionality as wel the gateway-functionality to a legacy PBX for migrations.&lt;br /&gt;
&lt;br /&gt;
[[Image:Simple e164-scenario Funnel PBX.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Configuration of the Funnel PBX===&lt;br /&gt;
&lt;br /&gt;
Start with configurating your Funnel PBX with the following Objects:&lt;br /&gt;
&lt;br /&gt;
* Node Objects with the Country Code, in this example the Node Objects for NL (Netherlands) with country code 31.&lt;br /&gt;
&lt;br /&gt;
* Node Objects with the location and prefix of the location, in this example the Node Objects for the locations Roermond (RM) and Maastricht (MT).&lt;br /&gt;
&lt;br /&gt;
* Gateway Objects with the prefix for the PBX-locations, so that the PBX/Gateway on that location can register against this opbject via SIP.&lt;br /&gt;
&lt;br /&gt;
* Number Map Objects for the locations, in case you don&#039;t have a closed DID range but one or more MSN numbers, you can create these as a Number Map Object and route the call to the desired number or object within a location.&lt;br /&gt;
&lt;br /&gt;
* Trunk Line Object in the Funnel-PBX, the central trunk line object that register at the big sip trunk and an internal registration to the Funnel-PBX.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Although that in some examples the password field is left blank, you should consider security and cofigure safe passwords for all objects !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funnel-PBX Objects&#039;&#039;&#039;&lt;br /&gt;
Create the Funnel PBX Objects like in this example NL with country code 31&lt;br /&gt;
&lt;br /&gt;
[[Image:Funnel-PBX Objects.png]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Node Object General&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Create the Node Object with the country code&lt;br /&gt;
&lt;br /&gt;
[[Image:Node Object General.png]] &#039;&#039;&#039; and Node Object Node&#039;&#039;&#039; [[Image:Node Object Node.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Node Object General&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Create the Node Object for the locations like in this example MT with area code 43&lt;br /&gt;
&lt;br /&gt;
[[Image:Node Object General MT.png]] &#039;&#039;&#039; and Node Object Node&#039;&#039;&#039; [[Image:Node Object Node MT.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gateway Object General&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Create the Gateway Object for the PBX/Gateway in the location. In this example with PBX prefix 7630.&lt;br /&gt;
&lt;br /&gt;
[[Image:Gateway Object General.png]]  &#039;&#039;&#039;Gateway Object Gateway&#039;&#039;&#039; [[Image:Gateway Object Gateway.png]]&lt;br /&gt;
&lt;br /&gt;
Repeat these steps for all the locations in your scenario.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trunk Line Object&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Create a Trunk Line Object Central-Trunk. The number field in the Trunk Line Object is left blank by purpose. The reason is to avoid this number to be displayed in your telephone set after the connection has been established (Connected Number).&lt;br /&gt;
&lt;br /&gt;
[[Image:Trunk Line Object General.png]]&lt;br /&gt;
&lt;br /&gt;
Choose some reasonable destinations for Loopback, Incomplete, Invalid, Busy, Rejected and No Answer. For example the Operators destination number in the HeadOffice.&lt;br /&gt;
&lt;br /&gt;
[[Image:Trunk Line Object Trunk.png]]&lt;br /&gt;
&lt;br /&gt;
===Configuration of a location PBX-Gateway===&lt;br /&gt;
&lt;br /&gt;
The PBX in the locations can be a Single Master PBX, a slave PBX or slave PBX that is part of an e164 Large PBX configuration.&lt;br /&gt;
The type of PBX doesn&#039;t matter for the registration to the Funnel-PBX. &lt;br /&gt;
The registration to the Funnel PBX is done via a SIP trunk registration to the Gateway Object in the Funnel-PBX.&lt;br /&gt;
&lt;br /&gt;
The Configuration of the SIP trunk is shown in the picture.&lt;br /&gt;
&lt;br /&gt;
[[Image:MT-Location SIP Trunk Configuration.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If Configured OK the registration is visable on both sides, the Location PBX and the Funnel-PBX.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:MT-Location Gateway SIP Trunk registration.PNG]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Funnel PBX Registrations.PNG]]&lt;br /&gt;
&lt;br /&gt;
To route the incomming calls correctly to the Called Party Number CDPN and present the correct Calling Party Number CGPN with outgoing calls, we have to create some changes in the Routes of the Local PBX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MT-Location Routes Configuration.PNG]]&lt;br /&gt;
&lt;br /&gt;
In the Maastricht location we use as single MSN number 31 43 7777 579. Because this number is not part of the DID range 7630 xxx, we have to create a single number map to the desired destination, preferable a number in the original DID range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rest is still under construction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this example the PBX in the location Maastricht is also part of an e164 Large PBX configuration. So don&#039;t get confused by the Objects in this PBX that has no relation with the Funnel-PBX.&lt;br /&gt;
&lt;br /&gt;
===System Requirements===&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
===Problem Details===&lt;br /&gt;
===Known Problems===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Related Articles == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47841</id>
		<title>Howto:Black List Service XML Script For Incoming Calls</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47841"/>
		<updated>2017-09-06T15:20:04Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Email notification service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: xml,script,blacklist,black-list,black,list --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script allows to create and to maintain a simple blacklist for incoming calls. Blacklisted calls to the PBX are immediately rejected or transferred to a default destination.&lt;br /&gt;
&lt;br /&gt;
Numbers can be easily added or removed by calling the Blacklist Service object and by following the instructions.&lt;br /&gt;
&lt;br /&gt;
Additionally a number can be put in the blacklist by simply transferring the undesired ringing/active call to a specific object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Download the application packet from [http://download.innovaphone.com/ice/wiki-src/#blacklst HERE].&lt;br /&gt;
&lt;br /&gt;
Extract the archive on your local drive and open the &amp;quot;BlackLst&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
=== Package content ===&lt;br /&gt;
&lt;br /&gt;
Inside the folder you will find:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FOLDERS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Audio&#039;&#039; folder: contains localized (EN-DE-IT-FR) audio files&lt;br /&gt;
* &#039;&#039;BL_Numbers&#039;&#039; folder: contains blacklisted numbers files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILES&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;BlackLst.xml&#039;&#039;: the application script&lt;br /&gt;
* &#039;&#039;BlackLst_email.xml&#039;&#039;: the script handling email notification of blacklisted numbers&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: file containing the default destination for incoming blacklisted calls, if left blank the call is automatically disconnected.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: file containing the default destination for incoming legit calls if your trunk does not allow DDI.&lt;br /&gt;
* &#039;&#039;Email.txt&#039;&#039;: file containing a generic email address where blacklisted numbers will be sent to.&lt;br /&gt;
* &#039;&#039;Email_Code.txt&#039;&#039;: file containing the code to enter in the app menu to have the blacklisted numbers sent via email.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: file containing the language to be used by the application:&lt;br /&gt;
** &#039;&#039;DE&#039;&#039;: German&lt;br /&gt;
** &#039;&#039;EN&#039;&#039;: English&lt;br /&gt;
** &#039;&#039;IT&#039;&#039;: Italian&lt;br /&gt;
** &#039;&#039;FR&#039;&#039;: French&lt;br /&gt;
* &#039;&#039;MinIntExtLen.txt&#039;&#039;: file containing a number corresponding to the shortest internal extension length of your PBX, i.e. &amp;quot;2&amp;quot; if your shortest extension consist of 2 digits.&lt;br /&gt;
* &#039;&#039;MaxIntExtLen.txt&#039;&#039;: file containing a number corresponding to the longest internal extension length of your PBX, i.e. &amp;quot;4&amp;quot; if your longest extension consist of 4 digits. &lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; use identical values in both files if your internal numbering plan has a fixed extension lenght.&lt;br /&gt;
* &#039;&#039;PrefixIN.txt&#039;&#039;: currently not used&lt;br /&gt;
&lt;br /&gt;
=== Configuration of application files ===&lt;br /&gt;
&lt;br /&gt;
Before copying the folder to your preferred web server you should customize the following files:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Email.txt&#039;&#039;: configure a valid email address&lt;br /&gt;
* &#039;&#039;Email_Code.txt&#039;&#039;: configure the code to enter in the app menu to have the blacklisted numbers sent via email: i.e. &amp;quot;**99&amp;quot;. Without a code the email service is disabled.&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: configure the number of an existing PBX object as default destination for blacklisted incoming calls. If left blank the blacklisted incoming call is disconnected immediately.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: configure the number of an existing PBX object as default destination if your trunk does not support DDI or in case the CDPN doesn&#039;t match to any existing PBX object.&lt;br /&gt;
* &#039;&#039;MinIntExtLen.txt&#039;&#039;: configure a number corresponding to the shortest internal extension length of your PBX, i.e. &amp;quot;2&amp;quot; if your shortest extension consist of 2 digits.&lt;br /&gt;
* &#039;&#039;MaxIntExtLen.txt&#039;&#039;: configure a number corresponding to the longest internal extension length of your PBX, i.e. &amp;quot;4&amp;quot; if your longest extension consist of 4 digits. &lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; use identical values in both files if your internal numbering plan has a fixed extension lenght.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: configure the language to be used by the application: DE,EN,IT or FR.&lt;br /&gt;
&lt;br /&gt;
You may now copy the folder to your web server.&lt;br /&gt;
&lt;br /&gt;
=== PBX configuration ===&lt;br /&gt;
&lt;br /&gt;
Create a new Voicemail obj with a name and number and configure the script URL pointing to &amp;quot;BlackLst.xml&amp;quot; file in the application folder on the web server.&lt;br /&gt;
&lt;br /&gt;
For example if you copied the folder to your Compact Flash:&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1/DRIVE/CF0/BlackLst/BlackLst.xml?$_pbxfwd=true&lt;br /&gt;
&lt;br /&gt;
Create a new user object, call it &amp;quot;ADD_TO_BLACKLIST&amp;quot; and assign a number to it.&lt;br /&gt;
&lt;br /&gt;
On this object configure a CFU to the Blacklist voicemail object number.&lt;br /&gt;
&lt;br /&gt;
=== Routing configuration ===&lt;br /&gt;
&lt;br /&gt;
All incoming calls must be checked by the Blacklist application. For this reason all incoming calls must be routed to the Blacklist voicemail object.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:Routing_config_for_incoming_calls.png]]&lt;br /&gt;
&lt;br /&gt;
=== Email notification service ===&lt;br /&gt;
&lt;br /&gt;
By entering a custom code in the &amp;quot;Email_Code.txt&amp;quot; file the email notification service is enabled.&lt;br /&gt;
If a valid email address is configured in the &amp;quot;Email.txt&amp;quot; file or the internal calling user has a valid email address configured in its PBX object, the email code can be entered during app menu announcement to have a list of the blacklisted numbers sent via email.&lt;br /&gt;
&lt;br /&gt;
Please follow this article to adapt the script to your local SMTP requirements:&lt;br /&gt;
&lt;br /&gt;
[[Howto:Send_Email_MWI_Notification_From_The_innovaphone_Voicemail|Send_Email_MWI_Notification_From_The_innovaphone_Voicemail]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
&lt;br /&gt;
Each incoming call is now checked by the script. &lt;br /&gt;
&lt;br /&gt;
First the script verifies if the call arrives from the ADD_TO_BLACKLIST object in which case the the CGPN is added directly to the Blacklist.&lt;br /&gt;
&lt;br /&gt;
If that&#039;s not the case the script verifies the CGPN to check if the call is internal or external.&lt;br /&gt;
&lt;br /&gt;
If the call is internal the script plays the menu options:&lt;br /&gt;
&lt;br /&gt;
# Press 1 to add a number to the Blacklist&lt;br /&gt;
# Press 2 to remove a number from the Blacklist&lt;br /&gt;
&lt;br /&gt;
When calling the script from an internal extension the caller is able to manually add or remove a number from the blacklist by simply following the audio instrunctions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;When manually adding/removing a number from the black list remember to include the trunk prefix if present.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If the call is external the script checks the content of the &amp;quot;BL_Numbers&amp;quot; folder and if the CGPN matches with an existing file. &lt;br /&gt;
&lt;br /&gt;
If the number is blacklisted the script checks if a default transfer destination for such numbers is configured in &amp;quot;Default_BL.txt&amp;quot; and forwards the call, otherwise the call is disconnected immediately.&lt;br /&gt;
&lt;br /&gt;
If no match is found the script verifies if the calling party dialed a DDI number and transfers the call to that extension otherwise it will transfer the call to the default destination configured in &amp;quot;Default_OK.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A number that is not yet blacklisted can be added to the list while the call is ringing or connected by simply redirecting/transferring the call to the ADD_TO_BLACKLIST object.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
The XML script uses HTTP PUT method to store files in the app&#039;s folder. On 3rd party webservers (e.g. IIS, Apache) you might need to enable the PUT method for the app&#039;s folder.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47840</id>
		<title>Howto:Black List Service XML Script For Incoming Calls</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47840"/>
		<updated>2017-09-06T15:17:00Z</updated>

		<summary type="html">&lt;p&gt;Aza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: xml,script,blacklist,black-list,black,list --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script allows to create and to maintain a simple blacklist for incoming calls. Blacklisted calls to the PBX are immediately rejected or transferred to a default destination.&lt;br /&gt;
&lt;br /&gt;
Numbers can be easily added or removed by calling the Blacklist Service object and by following the instructions.&lt;br /&gt;
&lt;br /&gt;
Additionally a number can be put in the blacklist by simply transferring the undesired ringing/active call to a specific object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Download the application packet from [http://download.innovaphone.com/ice/wiki-src/#blacklst HERE].&lt;br /&gt;
&lt;br /&gt;
Extract the archive on your local drive and open the &amp;quot;BlackLst&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
=== Package content ===&lt;br /&gt;
&lt;br /&gt;
Inside the folder you will find:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FOLDERS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Audio&#039;&#039; folder: contains localized (EN-DE-IT-FR) audio files&lt;br /&gt;
* &#039;&#039;BL_Numbers&#039;&#039; folder: contains blacklisted numbers files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILES&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;BlackLst.xml&#039;&#039;: the application script&lt;br /&gt;
* &#039;&#039;BlackLst_email.xml&#039;&#039;: the script handling email notification of blacklisted numbers&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: file containing the default destination for incoming blacklisted calls, if left blank the call is automatically disconnected.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: file containing the default destination for incoming legit calls if your trunk does not allow DDI.&lt;br /&gt;
* &#039;&#039;Email.txt&#039;&#039;: file containing a generic email address where blacklisted numbers will be sent to.&lt;br /&gt;
* &#039;&#039;Email_Code.txt&#039;&#039;: file containing the code to enter in the app menu to have the blacklisted numbers sent via email.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: file containing the language to be used by the application:&lt;br /&gt;
** &#039;&#039;DE&#039;&#039;: German&lt;br /&gt;
** &#039;&#039;EN&#039;&#039;: English&lt;br /&gt;
** &#039;&#039;IT&#039;&#039;: Italian&lt;br /&gt;
** &#039;&#039;FR&#039;&#039;: French&lt;br /&gt;
* &#039;&#039;MinIntExtLen.txt&#039;&#039;: file containing a number corresponding to the shortest internal extension length of your PBX, i.e. &amp;quot;2&amp;quot; if your shortest extension consist of 2 digits.&lt;br /&gt;
* &#039;&#039;MaxIntExtLen.txt&#039;&#039;: file containing a number corresponding to the longest internal extension length of your PBX, i.e. &amp;quot;4&amp;quot; if your longest extension consist of 4 digits. &lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; use identical values in both files if your internal numbering plan has a fixed extension lenght.&lt;br /&gt;
* &#039;&#039;PrefixIN.txt&#039;&#039;: currently not used&lt;br /&gt;
&lt;br /&gt;
=== Configuration of application files ===&lt;br /&gt;
&lt;br /&gt;
Before copying the folder to your preferred web server you should customize the following files:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Email.txt&#039;&#039;: configure a valid email address&lt;br /&gt;
* &#039;&#039;Email_Code.txt&#039;&#039;: configure the code to enter in the app menu to have the blacklisted numbers sent via email: i.e. &amp;quot;**99&amp;quot;. Without a code the email service is disabled.&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: configure the number of an existing PBX object as default destination for blacklisted incoming calls. If left blank the blacklisted incoming call is disconnected immediately.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: configure the number of an existing PBX object as default destination if your trunk does not support DDI or in case the CDPN doesn&#039;t match to any existing PBX object.&lt;br /&gt;
* &#039;&#039;MinIntExtLen.txt&#039;&#039;: configure a number corresponding to the shortest internal extension length of your PBX, i.e. &amp;quot;2&amp;quot; if your shortest extension consist of 2 digits.&lt;br /&gt;
* &#039;&#039;MaxIntExtLen.txt&#039;&#039;: configure a number corresponding to the longest internal extension length of your PBX, i.e. &amp;quot;4&amp;quot; if your longest extension consist of 4 digits. &lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; use identical values in both files if your internal numbering plan has a fixed extension lenght.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: configure the language to be used by the application: DE,EN,IT or FR.&lt;br /&gt;
&lt;br /&gt;
You may now copy the folder to your web server.&lt;br /&gt;
&lt;br /&gt;
=== PBX configuration ===&lt;br /&gt;
&lt;br /&gt;
Create a new Voicemail obj with a name and number and configure the script URL pointing to &amp;quot;BlackLst.xml&amp;quot; file in the application folder on the web server.&lt;br /&gt;
&lt;br /&gt;
For example if you copied the folder to your Compact Flash:&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1/DRIVE/CF0/BlackLst/BlackLst.xml?$_pbxfwd=true&lt;br /&gt;
&lt;br /&gt;
Create a new user object, call it &amp;quot;ADD_TO_BLACKLIST&amp;quot; and assign a number to it.&lt;br /&gt;
&lt;br /&gt;
On this object configure a CFU to the Blacklist voicemail object number.&lt;br /&gt;
&lt;br /&gt;
=== Routing configuration ===&lt;br /&gt;
&lt;br /&gt;
All incoming calls must be checked by the Blacklist application. For this reason all incoming calls must be routed to the Blacklist voicemail object.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:Routing_config_for_incoming_calls.png]]&lt;br /&gt;
&lt;br /&gt;
=== Email notification service ===&lt;br /&gt;
&lt;br /&gt;
By entering a custom code in the &amp;quot;Email_Code.txt&amp;quot; file the email notification service is enabled.&lt;br /&gt;
If a valid email address is configured in the &amp;quot;Email.txt&amp;quot; file or the calling user has a valid email address configured in its PBX object, the email code can be entered during app menu announcement to have a list of the blacklisted numbers sent via email.&lt;br /&gt;
&lt;br /&gt;
Please follow this article to adapt the script to your local SMTP requirements:&lt;br /&gt;
&lt;br /&gt;
[[Howto:Send_Email_MWI_Notification_From_The_innovaphone_Voicemail|Send_Email_MWI_Notification_From_The_innovaphone_Voicemail]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
&lt;br /&gt;
Each incoming call is now checked by the script. &lt;br /&gt;
&lt;br /&gt;
First the script verifies if the call arrives from the ADD_TO_BLACKLIST object in which case the the CGPN is added directly to the Blacklist.&lt;br /&gt;
&lt;br /&gt;
If that&#039;s not the case the script verifies the CGPN to check if the call is internal or external.&lt;br /&gt;
&lt;br /&gt;
If the call is internal the script plays the menu options:&lt;br /&gt;
&lt;br /&gt;
# Press 1 to add a number to the Blacklist&lt;br /&gt;
# Press 2 to remove a number from the Blacklist&lt;br /&gt;
&lt;br /&gt;
When calling the script from an internal extension the caller is able to manually add or remove a number from the blacklist by simply following the audio instrunctions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;When manually adding/removing a number from the black list remember to include the trunk prefix if present.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If the call is external the script checks the content of the &amp;quot;BL_Numbers&amp;quot; folder and if the CGPN matches with an existing file. &lt;br /&gt;
&lt;br /&gt;
If the number is blacklisted the script checks if a default transfer destination for such numbers is configured in &amp;quot;Default_BL.txt&amp;quot; and forwards the call, otherwise the call is disconnected immediately.&lt;br /&gt;
&lt;br /&gt;
If no match is found the script verifies if the calling party dialed a DDI number and transfers the call to that extension otherwise it will transfer the call to the default destination configured in &amp;quot;Default_OK.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A number that is not yet blacklisted can be added to the list while the call is ringing or connected by simply redirecting/transferring the call to the ADD_TO_BLACKLIST object.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
The XML script uses HTTP PUT method to store files in the app&#039;s folder. On 3rd party webservers (e.g. IIS, Apache) you might need to enable the PUT method for the app&#039;s folder.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47719</id>
		<title>Howto:Black List Service XML Script For Incoming Calls</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47719"/>
		<updated>2017-08-28T15:47:42Z</updated>

		<summary type="html">&lt;p&gt;Aza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: xml,script,blacklist,black-list,black,list --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script allows to create and to maintain a simple blacklist for incoming calls. Blacklisted calls to the PBX are immediately rejected or transferred to a default destination.&lt;br /&gt;
&lt;br /&gt;
Numbers can be easily added or removed by calling the Blacklist Service object and by following the instructions.&lt;br /&gt;
&lt;br /&gt;
Additionally a number can be put in the blacklist by simply transferring the undesired ringing/active call to a specific object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Download the application packet from [http://download.innovaphone.com/ice/wiki-src/#blacklst HERE].&lt;br /&gt;
&lt;br /&gt;
Extract the archive on your local drive and open the &amp;quot;BlackLst&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
=== Package content ===&lt;br /&gt;
&lt;br /&gt;
Inside the folder you will find:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FOLDERS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Audio&#039;&#039; folder: contains localized (EN-DE-IT-FR) audio files&lt;br /&gt;
* &#039;&#039;BL_Numbers&#039;&#039; folder: contains blacklisted numbers files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILES&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;BlackLst.xml&#039;&#039;: the application script&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: file containing the default destination for incoming blacklisted calls, if left blank the call is automatically disconnected.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: file containing the default destination for incoming legit calls if your trunk does not allow DDI.&lt;br /&gt;
* &#039;&#039;MinIntExtLen.txt&#039;&#039;: file containing a number corresponding to the shortest internal extension length of your PBX, i.e. &amp;quot;2&amp;quot; if your shortest extension consist of 2 digits.&lt;br /&gt;
* &#039;&#039;MaxIntExtLen.txt&#039;&#039;: file containing a number corresponding to the longest internal extension length of your PBX, i.e. &amp;quot;4&amp;quot; if your longest extension consist of 4 digits. &lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; use identical values in both files if your internal numbering plan has a fixed extension lenght.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: file containing the language to be used by the application:&lt;br /&gt;
** &#039;&#039;DE&#039;&#039;: German&lt;br /&gt;
** &#039;&#039;EN&#039;&#039;: English&lt;br /&gt;
** &#039;&#039;IT&#039;&#039;: Italian&lt;br /&gt;
** &#039;&#039;FR&#039;&#039;: French&lt;br /&gt;
* &#039;&#039;PrefixIN.txt&#039;&#039;: currently not used&lt;br /&gt;
&lt;br /&gt;
=== Configuration of application files ===&lt;br /&gt;
&lt;br /&gt;
Before copying the folder to your preferred web server you should customize the following files:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: configure the number of an existing PBX object as default destination for blacklisted incoming calls. If left blank the blacklisted incoming call is disconnected immediately.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: configure the number of an existing PBX object as default destination if your trunk does not support DDI or in case the CDPN doesn&#039;t match to any existing PBX object.&lt;br /&gt;
* &#039;&#039;MinIntExtLen.txt&#039;&#039;: configure a number corresponding to the shortest internal extension length of your PBX, i.e. &amp;quot;2&amp;quot; if your shortest extension consist of 2 digits.&lt;br /&gt;
* &#039;&#039;MaxIntExtLen.txt&#039;&#039;: configure a number corresponding to the longest internal extension length of your PBX, i.e. &amp;quot;4&amp;quot; if your longest extension consist of 4 digits. &lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; use identical values in both files if your internal numbering plan has a fixed extension lenght.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: configure the language to be used by the application: DE,EN,IT or FR.&lt;br /&gt;
&lt;br /&gt;
You may now copy the folder to your web server.&lt;br /&gt;
&lt;br /&gt;
=== PBX configuration ===&lt;br /&gt;
&lt;br /&gt;
Create a new Voicemail obj with a name and number and configure the script URL pointing to &amp;quot;BlackLst.xml&amp;quot; file in the application folder on the web server.&lt;br /&gt;
&lt;br /&gt;
For example if you copied the folder to your Compact Flash:&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1/DRIVE/CF0/BlackLst/BlackLst.xml?$_pbxfwd=true&lt;br /&gt;
&lt;br /&gt;
Create a new user object, call it &amp;quot;ADD_TO_BLACKLIST&amp;quot; and assign a number to it.&lt;br /&gt;
&lt;br /&gt;
On this object configure a CFU to the Blacklist voicemail object number.&lt;br /&gt;
&lt;br /&gt;
=== Routing configuration ===&lt;br /&gt;
&lt;br /&gt;
All incoming calls must be checked by the Blacklist application. For this reason all incoming calls must be routed to the Blacklist voicemail object.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:Routing_config_for_incoming_calls.png]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
&lt;br /&gt;
Each incoming call is now checked by the script. &lt;br /&gt;
&lt;br /&gt;
First the script verifies if the call arrives from the ADD_TO_BLACKLIST object in which case the the CGPN is added directly to the Blacklist.&lt;br /&gt;
&lt;br /&gt;
If that&#039;s not the case the script verifies the CGPN to check if the call is internal or external.&lt;br /&gt;
&lt;br /&gt;
If the call is internal the script plays the menu options:&lt;br /&gt;
&lt;br /&gt;
# Press 1 to add a number to the Blacklist&lt;br /&gt;
# Press 2 to remove a number from the Blacklist&lt;br /&gt;
&lt;br /&gt;
When calling the script from an internal extension the caller is able to manually add or remove a number from the blacklist by simply following the audio instrunctions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;When manually adding/removing a number from the black list remember to include the trunk prefix if present.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If the call is external the script checks the content of the &amp;quot;BL_Numbers&amp;quot; folder and if the CGPN matches with an existing file. &lt;br /&gt;
&lt;br /&gt;
If the number is blacklisted the script checks if a default transfer destination for such numbers is configured in &amp;quot;Default_BL.txt&amp;quot; and forwards the call, otherwise the call is disconnected immediately.&lt;br /&gt;
&lt;br /&gt;
If no match is found the script verifies if the calling party dialed a DDI number and transfers the call to that extension otherwise it will transfer the call to the default destination configured in &amp;quot;Default_OK.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A number that is not yet blacklisted can be added to the list while the call is ringing or connected by simply redirecting/transferring the call to the ADD_TO_BLACKLIST object.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
The XML script uses HTTP PUT method to store files in the app&#039;s folder. On 3rd party webservers (e.g. IIS, Apache) you might need to enable the PUT method for the app&#039;s folder.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47718</id>
		<title>Howto:Black List Service XML Script For Incoming Calls</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47718"/>
		<updated>2017-08-28T15:40:20Z</updated>

		<summary type="html">&lt;p&gt;Aza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: xml,script,blacklist,black-list,black,list --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script allows to create and to maintain a simple blacklist for incoming calls. Blacklisted calls to the PBX are immediately rejected or transferred to a default destination.&lt;br /&gt;
&lt;br /&gt;
Numbers can be easily added or removed by calling the Blacklist Service object and by following the instructions.&lt;br /&gt;
&lt;br /&gt;
Additionally a number can be put in the blacklist by simply transferring the undesired ringing/active call to a specific object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Download the application packet from [http://download.innovaphone.com/ice/wiki-src/#blacklst HERE].&lt;br /&gt;
&lt;br /&gt;
Extract the archive on your local drive and open the &amp;quot;BlackLst&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
=== Package content ===&lt;br /&gt;
&lt;br /&gt;
Inside the folder you will find:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FOLDERS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Audio&#039;&#039; folder: contains localized (EN-DE-IT-FR) audio files&lt;br /&gt;
* &#039;&#039;BL_Numbers&#039;&#039; folder: contains blacklisted numbers files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILES&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;BlackLst.xml&#039;&#039;: the application script&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: file containing the default destination for incoming blacklisted calls, if left blank the call is automatically disconnected.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: file containing the default destination for incoming legit calls if your trunk does not allow DDI.&lt;br /&gt;
* &#039;&#039;MinIntExtLen.txt&#039;&#039;: file containing a number corresponding to the shortest internal extension length of your PBX, i.e. &amp;quot;2&amp;quot; if your shortest extension consist of 2 digits.&lt;br /&gt;
* &#039;&#039;MaxIntExtLen.txt&#039;&#039;: file containing a number corresponding to the longest internal extension length of your PBX, i.e. &amp;quot;4&amp;quot; if your longest extension consist of 4 digits. &lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; use identical values in both files if your internal numbering plan has a fixed extension lenght.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: file containing the language to be used by the application:&lt;br /&gt;
** &#039;&#039;DE&#039;&#039;: German&lt;br /&gt;
** &#039;&#039;EN&#039;&#039;: English&lt;br /&gt;
** &#039;&#039;IT&#039;&#039;: Italian&lt;br /&gt;
** &#039;&#039;FR&#039;&#039;: French&lt;br /&gt;
* &#039;&#039;PrefixIN.txt&#039;&#039;: currently not used&lt;br /&gt;
&lt;br /&gt;
=== Configuration of application files ===&lt;br /&gt;
&lt;br /&gt;
Before copying the folder to your preferred web server you should customize the following files:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: configure the number of an existing PBX object as default destination for blacklisted incoming calls. If left blank the blacklisted incoming call is disconnected immediately.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: configure the number of an existing PBX object as default destination if your trunk does not support DDI or in case the CDPN doesn&#039;t match to any existing PBX object.&lt;br /&gt;
* &#039;&#039;IntExtLen.txt&#039;&#039;: configure a number corresponding to your numbering plan extension length: i.e. &amp;quot;3&amp;quot; if your extensions consist of three digits.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: configure the language to be used by the application: DE,EN,IT or FR.&lt;br /&gt;
&lt;br /&gt;
You may now copy the folder to your web server.&lt;br /&gt;
&lt;br /&gt;
=== PBX configuration ===&lt;br /&gt;
&lt;br /&gt;
Create a new Voicemail obj with a name and number and configure the script URL pointing to &amp;quot;BlackLst.xml&amp;quot; file in the application folder on the web server.&lt;br /&gt;
&lt;br /&gt;
For example if you copied the folder to your Compact Flash:&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1/DRIVE/CF0/BlackLst/BlackLst.xml?$_pbxfwd=true&lt;br /&gt;
&lt;br /&gt;
Create a new user object, call it &amp;quot;ADD_TO_BLACKLIST&amp;quot; and assign a number to it.&lt;br /&gt;
&lt;br /&gt;
On this object configure a CFU to the Blacklist voicemail object number.&lt;br /&gt;
&lt;br /&gt;
=== Routing configuration ===&lt;br /&gt;
&lt;br /&gt;
All incoming calls must be checked by the Blacklist application. For this reason all incoming calls must be routed to the Blacklist voicemail object.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:Routing_config_for_incoming_calls.png]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
&lt;br /&gt;
Each incoming call is now checked by the script. &lt;br /&gt;
&lt;br /&gt;
First the script verifies if the call arrives from the ADD_TO_BLACKLIST object in which case the the CGPN is added directly to the Blacklist.&lt;br /&gt;
&lt;br /&gt;
If that&#039;s not the case the script verifies the CGPN to check if the call is internal or external.&lt;br /&gt;
&lt;br /&gt;
If the call is internal the script plays the menu options:&lt;br /&gt;
&lt;br /&gt;
# Press 1 to add a number to the Blacklist&lt;br /&gt;
# Press 2 to remove a number from the Blacklist&lt;br /&gt;
&lt;br /&gt;
When calling the script from an internal extension the caller is able to manually add or remove a number from the blacklist by simply following the audio instrunctions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;When manually adding/removing a number from the black list remember to include the trunk prefix if present.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If the call is external the script checks the content of the &amp;quot;BL_Numbers&amp;quot; folder and if the CGPN matches with an existing file. &lt;br /&gt;
&lt;br /&gt;
If the number is blacklisted the script checks if a default transfer destination for such numbers is configured in &amp;quot;Default_BL.txt&amp;quot; and forwards the call, otherwise the call is disconnected immediately.&lt;br /&gt;
&lt;br /&gt;
If no match is found the script verifies if the calling party dialed a DDI number and transfers the call to that extension otherwise it will transfer the call to the default destination configured in &amp;quot;Default_OK.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A number that is not yet blacklisted can be added to the list while the call is ringing or connected by simply redirecting/transferring the call to the ADD_TO_BLACKLIST object.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
The XML script uses HTTP PUT method to store files in the app&#039;s folder. On 3rd party webservers (e.g. IIS, Apache) you might need to enable the PUT method for the app&#039;s folder.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47717</id>
		<title>Howto:Black List Service XML Script For Incoming Calls</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47717"/>
		<updated>2017-08-28T15:38:39Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Package content */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: xml,script,blacklist,black-list,black,list --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script allows to create and to maintain a simple blacklist for incoming calls. Blacklisted calls to the PBX are immediately rejected or transferred to a default destination.&lt;br /&gt;
&lt;br /&gt;
Numbers can be easily added or removed by calling the Blacklist Service object and by following the instructions.&lt;br /&gt;
&lt;br /&gt;
Additionally a number can be put in the blacklist by simply transferring the undesired ringing/active call to a specific object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Download the application packet from [http://download.innovaphone.com/ice/wiki-src/#blacklst HERE].&lt;br /&gt;
&lt;br /&gt;
Extract the archive on your local drive and open the &amp;quot;BlackLst&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
=== Package content ===&lt;br /&gt;
&lt;br /&gt;
Inside the folder you will find:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FOLDERS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Audio&#039;&#039; folder: contains localized (EN-DE-IT-FR) audio files&lt;br /&gt;
* &#039;&#039;BL_Numbers&#039;&#039; folder: contains blacklisted numbers files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILES&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;BlackLst.xml&#039;&#039;: the application script&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: file containing the default destination for incoming blacklisted calls, if left blank the call is automatically disconnected.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: file containing the default destination for incoming legit calls if your trunk does not allow DDI.&lt;br /&gt;
* &#039;&#039;MinIntExtLen.txt&#039;&#039;: file containing a number corresponding to the shortest internal extension length of your PBX, i.e. &amp;quot;2&amp;quot; if your shortest extension consist of 2 digits.&lt;br /&gt;
* &#039;&#039;MaxIntExtLen.txt&#039;&#039;: file containing a number corresponding to the longest internal extension length of your PBX, i.e. &amp;quot;4&amp;quot; if your longest extension consist of 4 digits. (use identical values in both files if your internal numbering plan has a fixed extension lenght)&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: file containing the language to be used by the application:&lt;br /&gt;
** &#039;&#039;DE&#039;&#039;: German&lt;br /&gt;
** &#039;&#039;EN&#039;&#039;: English&lt;br /&gt;
** &#039;&#039;IT&#039;&#039;: Italian&lt;br /&gt;
** &#039;&#039;FR&#039;&#039;: French&lt;br /&gt;
* &#039;&#039;PrefixIN.txt&#039;&#039;: currently not used&lt;br /&gt;
&lt;br /&gt;
=== Configuration of application files ===&lt;br /&gt;
&lt;br /&gt;
Before copying the folder to your preferred web server you should customize the following files:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: configure the number of an existing PBX object as default destination for blacklisted incoming calls. If left blank the blacklisted incoming call is disconnected immediately.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: configure the number of an existing PBX object as default destination if your trunk does not support DDI or in case the CDPN doesn&#039;t match to any existing PBX object.&lt;br /&gt;
* &#039;&#039;IntExtLen.txt&#039;&#039;: configure a number corresponding to your numbering plan extension length: i.e. &amp;quot;3&amp;quot; if your extensions consist of three digits.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: configure the language to be used by the application: DE,EN,IT or FR.&lt;br /&gt;
&lt;br /&gt;
You may now copy the folder to your web server.&lt;br /&gt;
&lt;br /&gt;
=== PBX configuration ===&lt;br /&gt;
&lt;br /&gt;
Create a new Voicemail obj with a name and number and configure the script URL pointing to &amp;quot;BlackLst.xml&amp;quot; file in the application folder on the web server.&lt;br /&gt;
&lt;br /&gt;
For example if you copied the folder to your Compact Flash:&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1/DRIVE/CF0/BlackLst/BlackLst.xml?$_pbxfwd=true&lt;br /&gt;
&lt;br /&gt;
Create a new user object, call it &amp;quot;ADD_TO_BLACKLIST&amp;quot; and assign a number to it.&lt;br /&gt;
&lt;br /&gt;
On this object configure a CFU to the Blacklist voicemail object number.&lt;br /&gt;
&lt;br /&gt;
=== Routing configuration ===&lt;br /&gt;
&lt;br /&gt;
All incoming calls must be checked by the Blacklist application. For this reason all incoming calls must be routed to the Blacklist voicemail object.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:Routing_config_for_incoming_calls.png]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
&lt;br /&gt;
Each incoming call is now checked by the script. &lt;br /&gt;
&lt;br /&gt;
First the script verifies if the call arrives from the ADD_TO_BLACKLIST object in which case the the CGPN is added directly to the Blacklist.&lt;br /&gt;
&lt;br /&gt;
If that&#039;s not the case the script verifies the CGPN to check if the call is internal or external.&lt;br /&gt;
&lt;br /&gt;
If the call is internal the script plays the menu options:&lt;br /&gt;
&lt;br /&gt;
# Press 1 to add a number to the Blacklist&lt;br /&gt;
# Press 2 to remove a number from the Blacklist&lt;br /&gt;
&lt;br /&gt;
When calling the script from an internal extension the caller is able to manually add or remove a number from the blacklist by simply following the audio instrunctions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;When manually adding/removing a number from the black list remember to include the trunk prefix if present.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If the call is external the script checks the content of the &amp;quot;BL_Numbers&amp;quot; folder and if the CGPN matches with an existing file. &lt;br /&gt;
&lt;br /&gt;
If the number is blacklisted the script checks if a default transfer destination for such numbers is configured in &amp;quot;Default_BL.txt&amp;quot; and forwards the call, otherwise the call is disconnected immediately.&lt;br /&gt;
&lt;br /&gt;
If no match is found the script verifies if the calling party dialed a DDI number and transfers the call to that extension otherwise it will transfer the call to the default destination configured in &amp;quot;Default_OK.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A number that is not yet blacklisted can be added to the list while the call is ringing or connected by simply redirecting/transferring the call to the ADD_TO_BLACKLIST object.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
The XML script uses HTTP PUT method to store files in the app&#039;s folder. On 3rd party webservers (e.g. IIS, Apache) you might need to enable the PUT method for the app&#039;s folder.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Advice_On_Busy&amp;diff=47689</id>
		<title>Howto:Advice On Busy</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Advice_On_Busy&amp;diff=47689"/>
		<updated>2017-08-28T07:58:22Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
The BusyAdvice service gives the caller multiple choices when the person he is calling not is available.&lt;br /&gt;
&lt;br /&gt;
Version 2 also gives possibility to personal messages (promts) and personal DTMF choices for the users. Users without any special personal settings use the standard settings.&lt;br /&gt;
&lt;br /&gt;
== Applies To ==&lt;br /&gt;
This information applies to &lt;br /&gt;
* innovaphone PBX, Tested on V9, but should also work at V7 and V8 &lt;br /&gt;
&lt;br /&gt;
== More Information ==&lt;br /&gt;
The BusyAdvice service also works when a call is transferred from an IVR or a waiting queue.&lt;br /&gt;
&lt;br /&gt;
[[Image:BusyAdvice_demo_ENG.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The call can be forwarded to the BusyAdvice XML script and gives the caller the following choices:&lt;br /&gt;
* Press 1 to be called back (SIP message and/or E-mail notification to the not available user.)&lt;br /&gt;
* Press 2 to leave a message (transferred to voicemail)&lt;br /&gt;
* Press 3, star or hash to be transferred to different destinations (operator, other person, cell phone etc.)&lt;br /&gt;
&lt;br /&gt;
The call can be transferred to the BusyAdvice XML script and a SIP message is sent to a specific agent and/or an E-mail is sent to an E-mail address. Ex group mail or personal mailbox.&lt;br /&gt;
&lt;br /&gt;
The XML script handle two languages:&lt;br /&gt;
* Default is domestic language. &lt;br /&gt;
* If the call is from abroad (prefix 000), English voice prompts are used.&lt;br /&gt;
&lt;br /&gt;
There&#039;s both an English [[Image:Youtube_Icon.png]]‎ [http://www.youtube.com/watch?v=FfcAOxDRpEQ YouTube video (ENG)] and a Norwegian [[Image:Youtube_Icon.png]][http://www.youtube.com/watch?v=Jsl2WADz7LY YouTube video (NO)] demonstrating the service.&lt;br /&gt;
&lt;br /&gt;
=== System Requirements ===&lt;br /&gt;
* Running innovaphone PBX. Tested on version 9 &lt;br /&gt;
* Installed compact flash card or external WebServer with webdav functionality &lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
There&#039;s also a [[Image:Youtube_Icon.png]][http://www.youtube.com/watch?v=739eR-dfM3E YouTube installation video] showing the installation and configuration procedure. (The video is in Norwegian language.)&lt;br /&gt;
* Download the XML script to PC and extract the file. It content both English version and Norwegian version. For other language, only record new promt files and translate the messages in the txt files.&lt;br /&gt;
&lt;br /&gt;
* Open and edit the following TXT-files:&lt;br /&gt;
** &#039;&#039;&#039;agent_ext.txt&#039;&#039;&#039; - Extension number for phone message when call transferred from waiting queue.&lt;br /&gt;
** &#039;&#039;&#039;agent_mail.txt&#039;&#039;&#039; - Mail address for message when call transferred from waiting queue. Example: sale@demo.com&lt;br /&gt;
** &#039;&#039;&#039;message_WQ.txt&#039;&#039;&#039; - Message sent when call transferred from waiting queue. Example: &amp;quot;No idle agents in your waiting queue, please call me back &amp;quot;. Remember, only one sentence, no line feeds, one space after last letter..&lt;br /&gt;
** &#039;&#039;&#039;message_User.txt&#039;&#039;&#039; - Message sent when call forwarded from an user. Example: &amp;quot;You were busy, please call me back &amp;quot;. Remember, only one sentence, no line feeds, one space after last letter.&lt;br /&gt;
** &#039;&#039;&#039;message_Subject.txt&#039;&#039;&#039; - Subject in message sent by E-mail. Example: &amp;quot;Call back to &amp;quot;.  Remember, only one sentence, no line feeds, one space after last letter.&lt;br /&gt;
** &#039;&#039;&#039;server.txt&#039;&#039;&#039; - outgoing mail server, ip address or domain. Example: &amp;quot;192.168.0.250&amp;quot; for an internal Exchange server, or &amp;quot;smtp.demo.com&amp;quot; for an external server. If use of domain, remember setting of DNS server on the PBX.&lt;br /&gt;
** &#039;&#039;&#039;VM.txt&#039;&#039;&#039; - Extension number for voicemail object in the PBX. (optional)&lt;br /&gt;
** &#039;&#039;&#039;user3.txt&#039;&#039;&#039; - Extension number for transferred destination if the caller press 3, Ex operator. (optional)&lt;br /&gt;
** &#039;&#039;&#039;userStar.txt&#039;&#039;&#039; - Extension number for transferred destination if the caller press *. (optional)&lt;br /&gt;
**&#039;&#039;&#039;userHash.txt&#039;&#039;&#039; - Extension number for transferred destination if the caller press #. (optional)&lt;br /&gt;
&lt;br /&gt;
* If the E-mail server require log on name and password, you have to edit inside the XML script. Use Notepad for editing these settings.&lt;br /&gt;
&lt;br /&gt;
* You can also edit the E-mail sender name inside the XML. Default name is &amp;quot;innovaphone PBX&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* The promt files &amp;quot;DTMF_choice_ENG.gxx&amp;quot; and &amp;quot;voice_response_ENG.gxx&amp;quot; are in English language. For localized language, you can record new promts for the following files:&lt;br /&gt;
** &#039;&#039;&#039;DTMF_choice.gxx&#039;&#039;&#039; - &amp;quot;The person you are calling is not available. Press 1 to be called back, press 2 to leave a message, press 3 to be transferred to the operator, press star to be transferred....press hash.....&amp;quot;&lt;br /&gt;
** &#039;&#039;&#039;voice_response.gxx&#039;&#039;&#039; - &amp;quot;Thank you. We will call you back.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Copy the XML script, the txt-files and the promt files to the CF-card. For example in the folder: http://127.0.0.1/DRIVE/CF0/BusyAdvice/&lt;br /&gt;
&lt;br /&gt;
* Create a VM object in the PBX which points to the BusyAdvice_PRO xml script. For example: &amp;quot;BusyAdvice&amp;quot; pointing to &amp;quot;http://127.0.0.1/DRIVE/CF0/BusyAdvice/BusyAdvice_PRO.xml &amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Image:PBX-object-VM_BusyAdvice.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Create an User object in the PBX with name &amp;quot;VM_rederect&amp;quot;, no number, enable &amp;quot;hide from LDAP&amp;quot;. The xml script uses this object to redirect calls to the voicemail. For each transferred call, the xml script will edit the Call Forward setting for this user object. If this object already is created for use in other xml scripts, it is OK.&lt;br /&gt;
&lt;br /&gt;
[[Image:PBX-object-VM_redirect.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Set Call Forward CFB to BusyAdvice VM object you have created. Of course, you can also set other types of call forwarding depended on the messages you have recorded in the promts.&lt;br /&gt;
* If you want a call back message sent by E-mail, also set the users E-mail address in the URL field.&lt;br /&gt;
&lt;br /&gt;
[[Image:PBX-object_BusyAdvice_CFB.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* To use the BusyAdvice script in a waiting queue, set a IVR choice pointing to the script name.&lt;br /&gt;
&lt;br /&gt;
[[Image:PBX-object_BusyAdvice_WQ.png]]&lt;br /&gt;
&lt;br /&gt;
=== Personal settings in version 2 ===&lt;br /&gt;
In version 2 of this XML, the XML cheks for personal voice promts and personal DTMF choices for choise &amp;lt;3&amp;gt;, &amp;lt;star&amp;gt; and &amp;lt;hash&amp;gt;. If it exist a personal folder with personal promts or DTMF choices, these are used. If it doesn&#039;t exist, standard promts and DTMF choices are used.&lt;br /&gt;
&lt;br /&gt;
Create a folder under the AdviceOnBusy root folder. The folder name is the extetion number for the user. Ex: \123&lt;br /&gt;
&lt;br /&gt;
The following files can be used in the folder:&lt;br /&gt;
* DTMF_choice.g711a  (this codec has to be created, the other codecs are option)&lt;br /&gt;
* DTMF_choice.g711u g729 ....&lt;br /&gt;
* DTMF_choice_ENG.g711a  (this codec has to be created, the other codecs are option)&lt;br /&gt;
* DTMF_choice_ENG.g711u g729 ....&lt;br /&gt;
* user3.txt&lt;br /&gt;
* userStar.txt&lt;br /&gt;
* userHash.txt&lt;br /&gt;
&lt;br /&gt;
=== Known Problems ===&lt;br /&gt;
* none&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
* [http://wiki.innovaphone.com/index.php?title=Howto:Busy_Advice Howto:Busy_Advice]&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
*[http://download.innovaphone.com/ice/wiki-src#advonbusy http://download.innovaphone.com/ice/wiki-src#advonbusy] - download the complete file package of scripts and files described in this article.&lt;br /&gt;
&lt;br /&gt;
[[Category:Sample|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47604</id>
		<title>Howto:Black List Service XML Script For Incoming Calls</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47604"/>
		<updated>2017-08-16T12:30:59Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Functionalities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: xml,script,blacklist,black-list,black,list --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script allows to create and to maintain a simple blacklist for incoming calls. Blacklisted calls to the PBX are immediately rejected or transferred to a default destination.&lt;br /&gt;
&lt;br /&gt;
Numbers can be easily added or removed by calling the Blacklist Service object and by following the instructions.&lt;br /&gt;
&lt;br /&gt;
Additionally a number can be put in the blacklist by simply transferring the undesired ringing/active call to a specific object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Download the application packet from [http://download.innovaphone.com/ice/wiki-src/#blacklst HERE].&lt;br /&gt;
&lt;br /&gt;
Extract the archive on your local drive and open the &amp;quot;BlackLst&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
=== Package content ===&lt;br /&gt;
&lt;br /&gt;
Inside the folder you will find:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FOLDERS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Audio&#039;&#039; folder: contains localized (EN-DE-IT-FR) audio files&lt;br /&gt;
* &#039;&#039;BL_Numbers&#039;&#039; folder: contains blacklisted numbers files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILES&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;BlackLst.xml&#039;&#039;: the application script&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: file containing the default destination for incoming blacklisted calls, if left blank the call is automatically disconnected.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: file containing the default destination for incoming legit calls if your trunk does not allow DDI.&lt;br /&gt;
* &#039;&#039;IntExtLen.txt&#039;&#039;: file containing a number corresponding to the internal extension length of your PBX, i.e. &amp;quot;3&amp;quot; if your extensions consist of three digits.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: file containing the language to be used by the application:&lt;br /&gt;
** &#039;&#039;DE&#039;&#039;: German&lt;br /&gt;
** &#039;&#039;EN&#039;&#039;: English&lt;br /&gt;
** &#039;&#039;IT&#039;&#039;: Italian&lt;br /&gt;
** &#039;&#039;FR&#039;&#039;: French&lt;br /&gt;
* &#039;&#039;PrefixIN.txt&#039;&#039;: currently not used&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration of application files ===&lt;br /&gt;
&lt;br /&gt;
Before copying the folder to your preferred web server you should customize the following files:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: configure the number of an existing PBX object as default destination for blacklisted incoming calls. If left blank the blacklisted incoming call is disconnected immediately.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: configure the number of an existing PBX object as default destination if your trunk does not support DDI or in case the CDPN doesn&#039;t match to any existing PBX object.&lt;br /&gt;
* &#039;&#039;IntExtLen.txt&#039;&#039;: configure a number corresponding to your numbering plan extension length: i.e. &amp;quot;3&amp;quot; if your extensions consist of three digits.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: configure the language to be used by the application: DE,EN,IT or FR.&lt;br /&gt;
&lt;br /&gt;
You may now copy the folder to your web server.&lt;br /&gt;
&lt;br /&gt;
=== PBX configuration ===&lt;br /&gt;
&lt;br /&gt;
Create a new Voicemail obj with a name and number and configure the script URL pointing to &amp;quot;BlackLst.xml&amp;quot; file in the application folder on the web server.&lt;br /&gt;
&lt;br /&gt;
For example if you copied the folder to your Compact Flash:&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1/DRIVE/CF0/BlackLst/BlackLst.xml?$_pbxfwd=true&lt;br /&gt;
&lt;br /&gt;
Create a new user object, call it &amp;quot;ADD_TO_BLACKLIST&amp;quot; and assign a number to it.&lt;br /&gt;
&lt;br /&gt;
On this object configure a CFU to the Blacklist voicemail object number.&lt;br /&gt;
&lt;br /&gt;
=== Routing configuration ===&lt;br /&gt;
&lt;br /&gt;
All incoming calls must be checked by the Blacklist application. For this reason all incoming calls must be routed to the Blacklist voicemail object.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:Routing_config_for_incoming_calls.png]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
&lt;br /&gt;
Each incoming call is now checked by the script. &lt;br /&gt;
&lt;br /&gt;
First the script verifies if the call arrives from the ADD_TO_BLACKLIST object in which case the the CGPN is added directly to the Blacklist.&lt;br /&gt;
&lt;br /&gt;
If that&#039;s not the case the script verifies the CGPN to check if the call is internal or external.&lt;br /&gt;
&lt;br /&gt;
If the call is internal the script plays the menu options:&lt;br /&gt;
&lt;br /&gt;
# Press 1 to add a number to the Blacklist&lt;br /&gt;
# Press 2 to remove a number from the Blacklist&lt;br /&gt;
&lt;br /&gt;
When calling the script from an internal extension the caller is able to manually add or remove a number from the blacklist by simply following the audio instrunctions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;When manually adding/removing a number from the black list remember to include the trunk prefix if present.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If the call is external the script checks the content of the &amp;quot;BL_Numbers&amp;quot; folder and if the CGPN matches with an existing file. &lt;br /&gt;
&lt;br /&gt;
If the number is blacklisted the script checks if a default transfer destination for such numbers is configured in &amp;quot;Default_BL.txt&amp;quot; and forwards the call, otherwise the call is disconnected immediately.&lt;br /&gt;
&lt;br /&gt;
If no match is found the script verifies if the calling party dialed a DDI number and transfers the call to that extension otherwise it will transfer the call to the default destination configured in &amp;quot;Default_OK.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A number that is not yet blacklisted can be added to the list while the call is ringing or connected by simply redirecting/transferring the call to the ADD_TO_BLACKLIST object.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
The XML script uses HTTP PUT method to store files in the app&#039;s folder. On 3rd party webservers (e.g. IIS, Apache) you might need to enable the PUT method for the app&#039;s folder.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47603</id>
		<title>Howto:Black List Service XML Script For Incoming Calls</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=47603"/>
		<updated>2017-08-16T12:29:39Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* PBX configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: xml,script,blacklist,black-list,black,list --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script allows to create and to maintain a simple blacklist for incoming calls. Blacklisted calls to the PBX are immediately rejected or transferred to a default destination.&lt;br /&gt;
&lt;br /&gt;
Numbers can be easily added or removed by calling the Blacklist Service object and by following the instructions.&lt;br /&gt;
&lt;br /&gt;
Additionally a number can be put in the blacklist by simply transferring the undesired ringing/active call to a specific object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Download the application packet from [http://download.innovaphone.com/ice/wiki-src/#blacklst HERE].&lt;br /&gt;
&lt;br /&gt;
Extract the archive on your local drive and open the &amp;quot;BlackLst&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
=== Package content ===&lt;br /&gt;
&lt;br /&gt;
Inside the folder you will find:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FOLDERS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Audio&#039;&#039; folder: contains localized (EN-DE-IT-FR) audio files&lt;br /&gt;
* &#039;&#039;BL_Numbers&#039;&#039; folder: contains blacklisted numbers files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILES&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;BlackLst.xml&#039;&#039;: the application script&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: file containing the default destination for incoming blacklisted calls, if left blank the call is automatically disconnected.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: file containing the default destination for incoming legit calls if your trunk does not allow DDI.&lt;br /&gt;
* &#039;&#039;IntExtLen.txt&#039;&#039;: file containing a number corresponding to the internal extension length of your PBX, i.e. &amp;quot;3&amp;quot; if your extensions consist of three digits.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: file containing the language to be used by the application:&lt;br /&gt;
** &#039;&#039;DE&#039;&#039;: German&lt;br /&gt;
** &#039;&#039;EN&#039;&#039;: English&lt;br /&gt;
** &#039;&#039;IT&#039;&#039;: Italian&lt;br /&gt;
** &#039;&#039;FR&#039;&#039;: French&lt;br /&gt;
* &#039;&#039;PrefixIN.txt&#039;&#039;: currently not used&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration of application files ===&lt;br /&gt;
&lt;br /&gt;
Before copying the folder to your preferred web server you should customize the following files:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: configure the number of an existing PBX object as default destination for blacklisted incoming calls. If left blank the blacklisted incoming call is disconnected immediately.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: configure the number of an existing PBX object as default destination if your trunk does not support DDI or in case the CDPN doesn&#039;t match to any existing PBX object.&lt;br /&gt;
* &#039;&#039;IntExtLen.txt&#039;&#039;: configure a number corresponding to your numbering plan extension length: i.e. &amp;quot;3&amp;quot; if your extensions consist of three digits.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: configure the language to be used by the application: DE,EN,IT or FR.&lt;br /&gt;
&lt;br /&gt;
You may now copy the folder to your web server.&lt;br /&gt;
&lt;br /&gt;
=== PBX configuration ===&lt;br /&gt;
&lt;br /&gt;
Create a new Voicemail obj with a name and number and configure the script URL pointing to &amp;quot;BlackLst.xml&amp;quot; file in the application folder on the web server.&lt;br /&gt;
&lt;br /&gt;
For example if you copied the folder to your Compact Flash:&lt;br /&gt;
&lt;br /&gt;
 http://127.0.0.1/DRIVE/CF0/BlackLst/BlackLst.xml?$_pbxfwd=true&lt;br /&gt;
&lt;br /&gt;
Create a new user object, call it &amp;quot;ADD_TO_BLACKLIST&amp;quot; and assign a number to it.&lt;br /&gt;
&lt;br /&gt;
On this object configure a CFU to the Blacklist voicemail object number.&lt;br /&gt;
&lt;br /&gt;
=== Routing configuration ===&lt;br /&gt;
&lt;br /&gt;
All incoming calls must be checked by the Blacklist application. For this reason all incoming calls must be routed to the Blacklist voicemail object.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:Routing_config_for_incoming_calls.png]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
&lt;br /&gt;
Each incoming call is now checked by the script. &lt;br /&gt;
&lt;br /&gt;
First the script verifies if the call arrives from the ADD_TO_BLACKLIST object in which case the the CGPN is added directly to the Blacklist.&lt;br /&gt;
&lt;br /&gt;
If that&#039;s not the case the script verifies the CGPN to check if the call is internal or external.&lt;br /&gt;
&lt;br /&gt;
If the call is internal the script plays the menu options:&lt;br /&gt;
&lt;br /&gt;
# Press 1 to add a number to the Blacklist&lt;br /&gt;
# Press 2 to remove a number from the Blacklist&lt;br /&gt;
&lt;br /&gt;
When calling the script from an internal extension the caller is able to manually add or remove a number from the blacklist by simply following the audio instrunctions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 When manually adding/removing a number from the black list remember to include the trunk prefix if present.&lt;br /&gt;
&lt;br /&gt;
If the call is external the script checks the content of the &amp;quot;BL_Numbers&amp;quot; folder and if the CGPN matches with an existing file. &lt;br /&gt;
&lt;br /&gt;
If the number is blacklisted the script checks if a default transfer destination for such numbers is configured in &amp;quot;Default_BL.txt&amp;quot; and forwards the call, otherwise the call is disconnected immediately.&lt;br /&gt;
&lt;br /&gt;
If no match is found the script verifies if the calling party dialed a DDI number and transfers the call to that extension otherwise it will transfer the call to the default destination configured in &amp;quot;Default_OK.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A number that is not yet blacklisted can be added to the list while the call is ringing or connected by simply redirecting/transferring the call to the ADD_TO_BLACKLIST object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
The XML script uses HTTP PUT method to store files in the app&#039;s folder. On 3rd party webservers (e.g. IIS, Apache) you might need to enable the PUT method for the app&#039;s folder.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference11r1:PBX/Objects/Conference&amp;diff=47324</id>
		<title>Reference11r1:PBX/Objects/Conference</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference11r1:PBX/Objects/Conference&amp;diff=47324"/>
		<updated>2017-07-20T14:58:11Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Operator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The PBX conference object manages conference rooms with announcements and PIN protection.&lt;br /&gt;
&lt;br /&gt;
The conference calls themselves are connected by one or more &#039;&#039;conference servers (MCU)&#039;&#039; registered to this object as devices. If more than one conference server is used, the different media types of the calls can be split to the different servers. A innovaphone CONF interface can be registered to this object to provide audio conferences with application sharing.&lt;br /&gt;
&lt;br /&gt;
== General Configuration ==&lt;br /&gt;
&lt;br /&gt;
The information about general configuration options shared by all objects can be found at [[{{NAMESPACE}}:PBX/Objects]].&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
; Hardware Id&lt;br /&gt;
: The hardware Id must match with a hardware Id of a device on the General page of the object (not the Gateway). The device is registered to this object and provides the conference service.&lt;br /&gt;
; innovaphone device&lt;br /&gt;
: This should be ticked if the MCU is an innovaphone device.&lt;br /&gt;
; Media Types&lt;br /&gt;
: If a media type is ticked, calls to the registration includes this media type.&lt;br /&gt;
; Number of channels&lt;br /&gt;
: The number of the available channels of the MCU device or maximum number of channels to be used. Leaving it empty means 0 (no channels)&lt;br /&gt;
; MCU Room Numbers&lt;br /&gt;
: If the device isn&#039;t an innovaphone device and has severals rooms, the room numbers which are dialed can be configured here.&lt;br /&gt;
; Registration&lt;br /&gt;
: If a registration to this hardware Id exists, the IP address of the registrar is shown here.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
; Announcement URL&lt;br /&gt;
: The URL where the announcements were saved. A &#039;$type&#039; within the URL is substituted for the announcement type string, e.g. &#039;&#039;&amp;lt;nowiki&amp;gt;http://127.0.0.1/webdav/conference/$type.$coder?coder=g722,g711u,g711a,g723,g729&amp;lt;/nowiki&amp;gt;&#039;&#039;. The announcement types are listed [[{{NAMESPACE}}:PBX/Objects/Conference/Announcement_types | here]].&lt;br /&gt;
; Extern Announcement Name/No: The conference object uses the internal HTTP interface, but announcements can also be provided by an external destination which name or number is to be configured here.&lt;br /&gt;
; Room number length&lt;br /&gt;
: If the room number length is zero, there is only one room available. If it isn&#039;t zero, static rooms can be configured and temporary rooms can be created with the operator.&lt;br /&gt;
; PIN&lt;br /&gt;
: If the room number length is zero, the PIN of the single conference room can be configured here. It can be empty or consists of four digits.&lt;br /&gt;
; Operator enabled&lt;br /&gt;
: If ticked, the operator is active. It can be reached if no room number is dialed.&lt;br /&gt;
; Trace&lt;br /&gt;
: If ticked, the trace of this PBX object is enabled.&lt;br /&gt;
&lt;br /&gt;
== Rooms ==&lt;br /&gt;
Up to &#039;&#039;ten&#039;&#039; static rooms can be configured. If the room is called by the first member, the configured number of channels and all media types must be available otherwise the room isn&#039;t available. If the last member of a room leaves it, the reserved channels are released again.&lt;br /&gt;
A room is defined by:&lt;br /&gt;
; Room number&lt;br /&gt;
: The room number must be unique; it length depends on the room number length option.&lt;br /&gt;
; Number of channels&lt;br /&gt;
: The number of channels which must be available to open a room at dial-in. If this count of member is reached, the room is full and no further caller can take part.&lt;br /&gt;
; Media types&lt;br /&gt;
: If a media type is ticked, it is used for the call. If not all ticked media types are available at dial-in, the room can&#039;t be opened.&lt;br /&gt;
; PIN&lt;br /&gt;
: The room PIN can be empty or consists of four digits. The PIN can&#039;t be a part of the dialing number.&lt;br /&gt;
&lt;br /&gt;
== Operator ==&lt;br /&gt;
If the operator is enabled, users can dial in and create ad-hoc rooms. The requested number of channels for new rooms must be available and are reserved till the last member leaves the room.&lt;br /&gt;
; Operator Number&lt;br /&gt;
: The number which must be dialed instead of a room number to start the operator. Room numbers mustn&#039;t match with this number; numbers of new ad-hoc rooms are checked against it.&lt;br /&gt;
: &#039;&#039;&#039;Calls to the conference will be routed by default to the operator if no operator number is defined.&#039;&#039;&#039; &lt;br /&gt;
; PIN&lt;br /&gt;
: The operator PIN can be empty or consists of four digits. The PIN can&#039;t be a part of the dialing number.&lt;br /&gt;
; Media Types for ad-hoc rooms&lt;br /&gt;
: The media types which are used for the ad-hoc rooms. The room is also created if not all media types are available, but at least the audio channels.&lt;br /&gt;
; IVR Menu&lt;br /&gt;
: - PIN for access to operator&lt;br /&gt;
: - 3-digit room number&lt;br /&gt;
: - Maximum participants followed by #&lt;br /&gt;
: - 4 digit PIN followed by # (or only # fór room without pin)&lt;br /&gt;
&lt;br /&gt;
Note: Overlap dialing to the Operator number it&#039;s not supported, it&#039;s necessary to dial the Conference Object Number plus the Operator Number &amp;quot;En-Block&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
For the supported announcements, please refer to [[{{NAMESPACE}}:PBX/Objects/Conference/Announcement types]].&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Auto_Greeting&amp;diff=47318</id>
		<title>Howto:Auto Greeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Auto_Greeting&amp;diff=47318"/>
		<updated>2017-07-19T10:39:31Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some people do a lot of phone calls or they receive a lot of them during a day. Often in some company it is a rule to use a standard answer to all calls, i.e.: “Hello, welcome to mycompany, my name is xyz, how can I help you”.&lt;br /&gt;
&lt;br /&gt;
The innovaphone PBX can do this job for you! Here is how:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Applies To==&lt;br /&gt;
This information applies to all innovaphone IP-Phone sets&lt;br /&gt;
&amp;lt;!-- Keywords: auto greeting autogreeting auto-greeting play--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
You can record your personal greeting announcement which is played automatically when you pick up the receiver. Just listen what the far party says, forget about “Hello, my….”, this will be automatically played. You can also stop the play of the auto-greeting pressing the redial key.&lt;br /&gt;
&lt;br /&gt;
To record the greeting just call the auto-greeting number, the actual greeting is played followed by the instruction. If you press any key you will hear a “beep” and will be able to record a new greeting (to stop the recording press just any key again).&lt;br /&gt;
If you want switch of the feature just call the auto-greeting number and press after the “beep” any key twice.&lt;br /&gt;
&lt;br /&gt;
The XML will start to play the greeting each time the phone detect a connect status.&lt;br /&gt;
&lt;br /&gt;
The second version of this XML called greet2.xml will play the automatic answer just on incoming calls. &lt;br /&gt;
&lt;br /&gt;
==Problem discussion greet just on incomming calls==&lt;br /&gt;
&lt;br /&gt;
A XML will not receive any information about the call direction; therefore, we have to detect this in another way. The user has to activate a CFU to a “detection XML”. This detection XML will write a flag on the CF(Compact Flash) and transfer the call back to the extension. If the user answers, the greet2.xml will check if the flag is set and just play the greeting if there is such a flag and clear it. Therefore, if a user picks up the receiver doing an outgoing call no flag is there and no greeting play. The problem is if the user do not answer the transferred call: the detection XML has already written the incoming flag and so a next outgoing outgoing (if there is no incoming answered in the meantime) will play the greeting. To minimize this effect the greeting xml will check the timestamp in minutes and will not consider flags older than 1 minute. Remember that the “optional” recording mode is a nice idea: this way the user will always be able to cancel the greeting manually when it start to play (just press the redial key on the phone). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===System Requirements===&lt;br /&gt;
This feature works only with innovaphone IP Phone sets. It uses the conference and recording feature, so no voice recording is possible if you active this feature. Conferences can be done but not during the reproduction of the greeting (so no real limitation).&lt;br /&gt;
&lt;br /&gt;
The Feature uses the compact flash (required). No voice mail license necessary.&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Just copy the content of the package provided in the download in a directory of your CF. Then create a VM object in the PBX and insert in the Path-Field the path to the greet.xml. &lt;br /&gt;
&lt;br /&gt;
Now set in the configuration of the IP-Phone (Phone-&amp;gt;User-x-&amp;gt;Recording) the recording feature in mode “optional” and set in the number the one of the VM-object. From firmware V9 Hotfix 21 upwards, you also need to tick the &#039;&#039;Two Way Media&#039;&#039; check-mark.&lt;br /&gt;
&lt;br /&gt;
In case of greet2 the xml file itself is named greet2.xml. You have also create an additional XML object and point on the xml greetCFU. Now do a CFU from the user to that XML. A nice side effect is that clearing the CFU no greeting is played, so using a feature key you can also provide a kind of greeting on/off key.&lt;br /&gt;
&lt;br /&gt;
Done, no additional setup is required!&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
*[http://download.innovaphone.com/ice/wiki-src#autogreet http://download.innovaphone.com/ice/wiki-src#autogreet] - download the complete file package of scripts and files described in this article.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Related Articles == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Sample|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Auto_Greeting&amp;diff=47316</id>
		<title>Howto:Auto Greeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Auto_Greeting&amp;diff=47316"/>
		<updated>2017-07-19T10:18:43Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Problem discussion greet just on incomming calls */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some people do a lot of phone calls or they receive a lot of them during a day. Often in some company it is a rule to use a standard answer to all calls, i.e.: “Hello, welcome to mycompany, my name is xyz, how can I help you”.&lt;br /&gt;
&lt;br /&gt;
The innovaphone PBX can do this job for you! Here is how:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Applies To==&lt;br /&gt;
This information applies to all innovaphone IP-Phone sets&lt;br /&gt;
&amp;lt;!-- Keywords: auto greeting autogreeting auto-greeting play--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
You can record your personal greeting announcement which is played automatically when you pick up the receiver. Just listen what the far party says, forget about “Hello, my….”, this will be automatically played. You can also stop the play of the auto-greeting pressing the redial key.&lt;br /&gt;
&lt;br /&gt;
To record the greeting just call the auto-greeting number, the actual greeting is played followed by the instruction. If you press any key you will hear a “beep” and will be able to record a new greeting (to stop the recording press just any key again).&lt;br /&gt;
If you want switch of the feature just call the auto-greeting number and press after the “beep” any key twice.&lt;br /&gt;
&lt;br /&gt;
The XML will start to play the greeting each time the phone detect a connect status.&lt;br /&gt;
&lt;br /&gt;
The second version of this XML called greet2.xml will play the automatic answer just on incoming calls. &lt;br /&gt;
&lt;br /&gt;
==Problem discussion greet just on incomming calls==&lt;br /&gt;
&lt;br /&gt;
A XML will not receive any information about the call direction; therefore, we have to detect this in another way. The user has to activate a CFU to a “detection XML”. This detection XML will write a flag on the CF(Compact Flash) and transfer the call back to the extension. If the user answers, the greet2.xml will check if the flag is set and just play the greeting if there is such a flag and clear it. Therefore, if a user picks up the receiver doing an outgoing call no flag is there and no greeting play. The problem is if the user do not answer the transferred call: the detection XML has already written the incoming flag and so a next outgoing outgoing (if there is no incoming answered in the meantime) will play the greeting. To minimize this effect the greeting xml will check the timestamp in minutes and will not consider flags older than 1 minute. Remember that the “optional” recording mode is a nice idea: this way the user will always be able to cancel the greeting manually when it start to play (just press the redial key on the phone). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===System Requirements===&lt;br /&gt;
This feature works only with innovaphone IP Phone sets. It uses the conference and recording feature, so no voice recording is possible if you active this feature. Conferences can be done but not during the reproduction of the greeting (so no real limitation).&lt;br /&gt;
&lt;br /&gt;
The Feature uses the compact flash (required). No voice mail license necessary.&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Just copy the content of the package provided in the download in a directory of your CF. Then create a VM object in the PBX and insert in the Path-Field the path to the greet.xml. &lt;br /&gt;
&lt;br /&gt;
Now set in the configuration of the IP-Phone the recording feature in mode “optional” and set in the number the one of the VM-object. From firmware V9 Hotfix 21 upwards, you also need to tick the &#039;&#039;Two Way Media&#039;&#039; check-mark.&lt;br /&gt;
&lt;br /&gt;
In case of greet2 the xml file itself is named greet2.xml. You have also create an additional XML object and point on the xml greetCFU. Now do a CFU from the user to that XML. A nice side effect is that clearing the CFU no greeting is played, so using a feature key you can also provide a kind of greeting on/off key.&lt;br /&gt;
&lt;br /&gt;
Done, no additional setup is required!&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
*[http://download.innovaphone.com/ice/wiki-src#autogreet http://download.innovaphone.com/ice/wiki-src#autogreet] - download the complete file package of scripts and files described in this article.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Related Articles == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Sample|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Auto_Greeting&amp;diff=47315</id>
		<title>Howto:Auto Greeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Auto_Greeting&amp;diff=47315"/>
		<updated>2017-07-19T10:11:19Z</updated>

		<summary type="html">&lt;p&gt;Aza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some people do a lot of phone calls or they receive a lot of them during a day. Often in some company it is a rule to use a standard answer to all calls, i.e.: “Hello, welcome to mycompany, my name is xyz, how can I help you”.&lt;br /&gt;
&lt;br /&gt;
The innovaphone PBX can do this job for you! Here is how:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Applies To==&lt;br /&gt;
This information applies to all innovaphone IP-Phone sets&lt;br /&gt;
&amp;lt;!-- Keywords: auto greeting autogreeting auto-greeting play--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
You can record your personal greeting announcement which is played automatically when you pick up the receiver. Just listen what the far party says, forget about “Hello, my….”, this will be automatically played. You can also stop the play of the auto-greeting pressing the redial key.&lt;br /&gt;
&lt;br /&gt;
To record the greeting just call the auto-greeting number, the actual greeting is played followed by the instruction. If you press any key you will hear a “beep” and will be able to record a new greeting (to stop the recording press just any key again).&lt;br /&gt;
If you want switch of the feature just call the auto-greeting number and press after the “beep” any key twice.&lt;br /&gt;
&lt;br /&gt;
The XML will start to play the greeting each time the phone detect a connect status.&lt;br /&gt;
&lt;br /&gt;
The second version of this XML called greet2.xml will play the automatic answer just on incoming calls. &lt;br /&gt;
&lt;br /&gt;
==Problem discussion greet just on incomming calls==&lt;br /&gt;
&lt;br /&gt;
A XML will not receive any information about the call direction; therefore, we have to detect this in another way. The user has to activate a CFU to a “detection XML”. This detection XML will write a flag on the CF and transfer then the call back to the extension. If the user answer, the greet2.xml will check if a flag is set and just play the greeting if there is such a flag and clear it. Therefore, if a user picks up the receiver doing an outgoing call no flag is there and no greeting play. The problem is if the user do not answer the transferred call: the detection XML has jet written the incoming flag and so a next outgoing outgoing (if there is no incoming answered in the meantime) will play the greeting. To minimize this effect the greeting xml will check the timestamp in minutes and not consider flags older than 1 minute. Remember that the “optional” recording mode is a nice idea, because a user can cancel the greeting manually when it start to play (just press the redial key on the phone). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===System Requirements===&lt;br /&gt;
This feature works only with innovaphone IP Phone sets. It uses the conference and recording feature, so no voice recording is possible if you active this feature. Conferences can be done but not during the reproduction of the greeting (so no real limitation).&lt;br /&gt;
&lt;br /&gt;
The Feature uses the compact flash (required). No voice mail license necessary.&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Just copy the content of the package provided in the download in a directory of your CF. Then create a VM object in the PBX and insert in the Path-Field the path to the greet.xml. &lt;br /&gt;
&lt;br /&gt;
Now set in the configuration of the IP-Phone the recording feature in mode “optional” and set in the number the one of the VM-object. From firmware V9 Hotfix 21 upwards, you also need to tick the &#039;&#039;Two Way Media&#039;&#039; check-mark.&lt;br /&gt;
&lt;br /&gt;
In case of greet2 the xml file itself is named greet2.xml. You have also create an additional XML object and point on the xml greetCFU. Now do a CFU from the user to that XML. A nice side effect is that clearing the CFU no greeting is played, so using a feature key you can also provide a kind of greeting on/off key.&lt;br /&gt;
&lt;br /&gt;
Done, no additional setup is required!&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
*[http://download.innovaphone.com/ice/wiki-src#autogreet http://download.innovaphone.com/ice/wiki-src#autogreet] - download the complete file package of scripts and files described in this article.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Related Articles == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Sample|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=46067</id>
		<title>Howto:Black List Service XML Script For Incoming Calls</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=46067"/>
		<updated>2017-03-07T15:08:03Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Functionalities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: xml,script,blacklist,black-list,black,list --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script allows to create and to maintain a simple blacklist for incoming calls. Blacklisted calls to the PBX are immediately rejected or transferred to a default destination.&lt;br /&gt;
&lt;br /&gt;
Numbers can be easily added or removed by calling the Blacklist Service object and by following the instructions.&lt;br /&gt;
&lt;br /&gt;
Additionally a number can be put in the blacklist by simply transferring the undesired ringing/active call to a specific object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Download the application packet from [http://download.innovaphone.com/ice/wiki-src/#blacklst HERE].&lt;br /&gt;
&lt;br /&gt;
Extract the archive on your local drive and open the &amp;quot;BlackLst&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
=== Package content ===&lt;br /&gt;
&lt;br /&gt;
Inside the folder you will find:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FOLDERS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Audio&#039;&#039; folder: contains localized (EN-DE-IT-FR) audio files&lt;br /&gt;
* &#039;&#039;BL_Numbers&#039;&#039; folder: contains blacklisted numbers files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILES&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;BlackLst.xml&#039;&#039;: the application script&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: file containing the default destination for incoming blacklisted calls, if left blank the call is automatically disconnected.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: file containing the default destination for incoming legit calls if your trunk does not allow DDI.&lt;br /&gt;
* &#039;&#039;IntExtLen.txt&#039;&#039;: file containing a number corresponding to the internal extension length of your PBX, i.e. &amp;quot;3&amp;quot; if your extensions consist of three digits.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: file containing the language to be used by the application:&lt;br /&gt;
** &#039;&#039;DE&#039;&#039;: German&lt;br /&gt;
** &#039;&#039;EN&#039;&#039;: English&lt;br /&gt;
** &#039;&#039;IT&#039;&#039;: Italian&lt;br /&gt;
** &#039;&#039;FR&#039;&#039;: French&lt;br /&gt;
* &#039;&#039;PrefixIN.txt&#039;&#039;: currently not used&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration of application files ===&lt;br /&gt;
&lt;br /&gt;
Before copying the folder to your preferred web server you should customize the following files:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: configure the number of an existing PBX object as default destination for blacklisted incoming calls. If left blank the blacklisted incoming call is disconnected immediately.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: configure the number of an existing PBX object as default destination if your trunk does not support DDI or in case the CDPN doesn&#039;t match to any existing PBX object.&lt;br /&gt;
* &#039;&#039;IntExtLen.txt&#039;&#039;: configure a number corresponding to your numbering plan extension length: i.e. &amp;quot;3&amp;quot; if your extensions consist of three digits.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: configure the language to be used by the application: DE,EN,IT or FR.&lt;br /&gt;
&lt;br /&gt;
You may now copy the folder to your web server.&lt;br /&gt;
&lt;br /&gt;
=== PBX configuration ===&lt;br /&gt;
&lt;br /&gt;
Create a new Voicemail obj with a name and number and configure the script URL pointing to &amp;quot;BlackLst.xml&amp;quot; file in the application folder on the web server.&lt;br /&gt;
&lt;br /&gt;
For example if you copied the folder to your Compact Flash:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;http://127.0.0.1/DRIVE/CF0/BlackLst/BlackLst.xml?$_pbxfwd=true&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Create a new user object, call it &amp;quot;ADD_TO_BLACKLIST&amp;quot; and assign a number to it.&lt;br /&gt;
&lt;br /&gt;
On this object configure a CFU to the Blacklist voicemail object number.&lt;br /&gt;
&lt;br /&gt;
=== Routing configuration ===&lt;br /&gt;
&lt;br /&gt;
All incoming calls must be checked by the Blacklist application. For this reason all incoming calls must be routed to the Blacklist voicemail object.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:Routing_config_for_incoming_calls.png]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
&lt;br /&gt;
Each incoming call is now checked by the script. &lt;br /&gt;
&lt;br /&gt;
First the script verifies if the call arrives from the ADD_TO_BLACKLIST object in which case the the CGPN is added directly to the Blacklist.&lt;br /&gt;
&lt;br /&gt;
If that&#039;s not the case the script verifies the CGPN to check if the call is internal or external.&lt;br /&gt;
&lt;br /&gt;
If the call is internal the script plays the menu options:&lt;br /&gt;
&lt;br /&gt;
# Press 1 to add a number to the Blacklist&lt;br /&gt;
# Press 2 to remove a number from the Blacklist&lt;br /&gt;
&lt;br /&gt;
When calling the script from an internal extension the caller is able to manually add or remove a number from the blacklist by simply following the audio instrunctions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 When manually adding/removing a number from the black list remember to include the trunk prefix if present.&lt;br /&gt;
&lt;br /&gt;
If the call is external the script checks the content of the &amp;quot;BL_Numbers&amp;quot; folder and if the CGPN matches with an existing file. &lt;br /&gt;
&lt;br /&gt;
If the number is blacklisted the script checks if a default transfer destination for such numbers is configured in &amp;quot;Default_BL.txt&amp;quot; and forwards the call, otherwise the call is disconnected immediately.&lt;br /&gt;
&lt;br /&gt;
If no match is found the script verifies if the calling party dialed a DDI number and transfers the call to that extension otherwise it will transfer the call to the default destination configured in &amp;quot;Default_OK.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A number that is not yet blacklisted can be added to the list while the call is ringing or connected by simply redirecting/transferring the call to the ADD_TO_BLACKLIST object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
The XML script uses HTTP PUT method to store files in the app&#039;s folder. On 3rd party webservers (e.g. IIS, Apache) you might need to enable the PUT method for the app&#039;s folder.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=46066</id>
		<title>Howto:Black List Service XML Script For Incoming Calls</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Black_List_Service_XML_Script_For_Incoming_Calls&amp;diff=46066"/>
		<updated>2017-03-07T13:57:34Z</updated>

		<summary type="html">&lt;p&gt;Aza: /* Functionalities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: xml,script,blacklist,black-list,black,list --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script allows to create and to maintain a simple blacklist for incoming calls. Blacklisted calls to the PBX are immediately rejected or transferred to a default destination.&lt;br /&gt;
&lt;br /&gt;
Numbers can be easily added or removed by calling the Blacklist Service object and by following the instructions.&lt;br /&gt;
&lt;br /&gt;
Additionally a number can be put in the blacklist by simply transferring the undesired ringing/active call to a specific object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Download the application packet from [http://download.innovaphone.com/ice/wiki-src/#blacklst HERE].&lt;br /&gt;
&lt;br /&gt;
Extract the archive on your local drive and open the &amp;quot;BlackLst&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
=== Package content ===&lt;br /&gt;
&lt;br /&gt;
Inside the folder you will find:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FOLDERS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Audio&#039;&#039; folder: contains localized (EN-DE-IT-FR) audio files&lt;br /&gt;
* &#039;&#039;BL_Numbers&#039;&#039; folder: contains blacklisted numbers files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILES&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;BlackLst.xml&#039;&#039;: the application script&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: file containing the default destination for incoming blacklisted calls, if left blank the call is automatically disconnected.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: file containing the default destination for incoming legit calls if your trunk does not allow DDI.&lt;br /&gt;
* &#039;&#039;IntExtLen.txt&#039;&#039;: file containing a number corresponding to the internal extension length of your PBX, i.e. &amp;quot;3&amp;quot; if your extensions consist of three digits.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: file containing the language to be used by the application:&lt;br /&gt;
** &#039;&#039;DE&#039;&#039;: German&lt;br /&gt;
** &#039;&#039;EN&#039;&#039;: English&lt;br /&gt;
** &#039;&#039;IT&#039;&#039;: Italian&lt;br /&gt;
** &#039;&#039;FR&#039;&#039;: French&lt;br /&gt;
* &#039;&#039;PrefixIN.txt&#039;&#039;: currently not used&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration of application files ===&lt;br /&gt;
&lt;br /&gt;
Before copying the folder to your preferred web server you should customize the following files:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Default_BL.txt&#039;&#039;: configure the number of an existing PBX object as default destination for blacklisted incoming calls. If left blank the blacklisted incoming call is disconnected immediately.&lt;br /&gt;
* &#039;&#039;Default_OK.txt&#039;&#039;: configure the number of an existing PBX object as default destination if your trunk does not support DDI or in case the CDPN doesn&#039;t match to any existing PBX object.&lt;br /&gt;
* &#039;&#039;IntExtLen.txt&#039;&#039;: configure a number corresponding to your numbering plan extension length: i.e. &amp;quot;3&amp;quot; if your extensions consist of three digits.&lt;br /&gt;
* &#039;&#039;Language.txt&#039;&#039;: configure the language to be used by the application: DE,EN,IT or FR.&lt;br /&gt;
&lt;br /&gt;
You may now copy the folder to your web server.&lt;br /&gt;
&lt;br /&gt;
=== PBX configuration ===&lt;br /&gt;
&lt;br /&gt;
Create a new Voicemail obj with a name and number and configure the script URL pointing to &amp;quot;BlackLst.xml&amp;quot; file in the application folder on the web server.&lt;br /&gt;
&lt;br /&gt;
For example if you copied the folder to your Compact Flash:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;http://127.0.0.1/DRIVE/CF0/BlackLst/BlackLst.xml?$_pbxfwd=true&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Create a new user object, call it &amp;quot;ADD_TO_BLACKLIST&amp;quot; and assign a number to it.&lt;br /&gt;
&lt;br /&gt;
On this object configure a CFU to the Blacklist voicemail object number.&lt;br /&gt;
&lt;br /&gt;
=== Routing configuration ===&lt;br /&gt;
&lt;br /&gt;
All incoming calls must be checked by the Blacklist application. For this reason all incoming calls must be routed to the Blacklist voicemail object.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
[[Image:Routing_config_for_incoming_calls.png]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
&lt;br /&gt;
Each incoming call is now checked by the script. &lt;br /&gt;
&lt;br /&gt;
First the script verifies if the call arrives from the ADD_TO_BLACKLIST object in which case the the CGPN is added directly to the Blacklist.&lt;br /&gt;
&lt;br /&gt;
If that&#039;s not the case the script verifies the CGPN to check if the call is internal or external.&lt;br /&gt;
&lt;br /&gt;
If the call is internal the script plays the menu options:&lt;br /&gt;
&lt;br /&gt;
# Press 1 to add a number to the Blacklist&lt;br /&gt;
# Press 2 to remove a number from the Blacklist&lt;br /&gt;
&lt;br /&gt;
When calling the script from an internal extension the caller is able to manually add or remove a number from the blacklist by simply following the audio instrunctions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 When manually adding/removing a number from the black list remember to include the trunk prefix if present.&lt;br /&gt;
&lt;br /&gt;
If the call is external the script checks the content of the &amp;quot;BL_Numbers&amp;quot; folder and if the CGPN matches with an existing file. &lt;br /&gt;
&lt;br /&gt;
If the number is blacklisted the script checks if a default transfer destination for such numbers is configured in &amp;quot;Default_BL.txt&amp;quot; and forwards the call, otherwise the call is disconnected immediately.&lt;br /&gt;
&lt;br /&gt;
If no match is found the script verifies if the calling party dialed a DDI number and transfers the call to that extension otherwise it will transfer the call to the default destination configured in &amp;quot;Default_OK.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A number that is not yet blacklisted can be added to the list while the call is ringing or connected by simply redirecting/transferring the call to the ADD_TO_BLACKLIST object.&lt;/div&gt;</summary>
		<author><name>Aza</name></author>
	</entry>
</feed>